0
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Ollama使ってみた

Posted at

Ollamaとは

ローカル環境でLLMを簡単に実行できるオープンソースツール。
外部にデータが送信されないので安心して組み込める。
NVIDIAのGPUがある場合は自動的に使用される。

モデル一覧

使用できるモデルは以下のページから参照できる

$ ollama pull <model>  // モデルを実行せずにダウンロードだけする
$ ollama rm <model>    // モデルを削除する

ワンショット実行

対話モードに入らず、1度だけ回答を生成できる

$ ollama run <model> <prompt>

対話モード

ollamaの指定のモデルを起動して対話モードに入る
(初回は自動的にモデルがダウンロードされる)

$ ollama run <model>

REST API

ollama はREST APIを提供しており、プログラムから利用できる

APIサーバの起動
$ ollama serve  // デフォルトでは`http://localhost:11434`で起動される

デフォルトではhttp://localhost:11434で起動される

curlでの使用例

curl
curl http://localhost:11434/api/generate -d '{
  "model": "llama2",
  "prompt": "Why is the sky blue?"
}'

Pythonでの使用

python
import requests
import json

def chat_with_ollama(prompt):
    url = "http://localhost:11434/api/generate"
    data = {
        "model": "llama2",
        "prompt": prompt,
        "stream": False
    }
    
    response = requests.post(url, json=data)
    return response.json()["response"]

result = chat_with_ollama("こんにちは")
print(result)

モデルファイルのカスタマイズ

Modelfileを使用することで、既存のモデルをベースに独自の設定やプロンプトを持つカスタムモデルを作成できる。

Modelfileの基本構造

Modelfileは、Dockerfileに似た構文を使用します。

Modefile
# Modelfile
FROM llama2

# パラメータの設定
PARAMETER temperature 0.8
PARAMETER top_p 0.9
PARAMETER top_k 40

# システムプロンプトの設定
SYSTEM """
あなたは親切で丁寧な日本語アシスタントです。
"""

# テンプレートの設定
TEMPLATE """{{ .System }}

User: {{ .Prompt }}
Assistant: """

Modelfileのコマンド一覧

FROM - ベースモデルの指定

# 既存のモデルから作成
FROM llama2

# 特定のバージョンを指定
FROM llama2:13b

# ローカルのGGUFファイルから作成
FROM ./models/my-model.gguf

# 別のカスタムモデルをベースに
FROM my-base-model

PARAMETER - モデルパラメータの設定

主要なパラメータ:

# 温度(0.0-2.0): 出力のランダム性を制御
PARAMETER temperature 0.7

# Top P(0.0-1.0): 核サンプリングの閾値
PARAMETER top_p 0.9

# Top K: 考慮するトークン数
PARAMETER top_k 40

# Repeat Penalty: 繰り返しを抑制
PARAMETER repeat_penalty 1.1

# コンテキスト長
PARAMETER num_ctx 4096

# 予測するトークン数の最大値
PARAMETER num_predict 128

# 停止シーケンス
PARAMETER stop "<|im_end|>"
PARAMETER stop "User:"

SYSTEM - システムプロンプト

モデルの役割や振る舞いを定義します。

SYSTEM """
あなたは経験豊富なPythonプログラマーです。
コードの説明は日本語で、コメントも日本語で記述してください。
ベストプラクティスに従い、読みやすいコードを書いてください。
"""

TEMPLATE - プロンプトテンプレート

ユーザー入力とシステムプロンプトの組み合わせ方を定義します。

# ChatML形式
TEMPLATE """<|im_start|>system
{{ .System }}<|im_end|>
<|im_start|>user
{{ .Prompt }}<|im_end|>
<|im_start|>assistant
"""

# Alpaca形式
TEMPLATE """### Instruction:
{{ .System }}

### Input:
{{ .Prompt }}

### Response:
"""

MESSAGE - 会話履歴の事前設定

Few-shot learningのための例を追加できます。

MESSAGE user "2+2は?"
MESSAGE assistant "2+2は4です。"
MESSAGE user "3+3は?"
MESSAGE assistant "3+3は6です。"

ADAPTER - LoRAアダプターの追加

ファインチューニングされたLoRAアダプターを適用できます。

FROM llama2
ADAPTER ./lora-adapter.bin

LICENSE - ライセンス情報

LICENSE """
MIT License
Copyright (c) 2024
"""

カスタムモデルの作成例

例1: 日本語特化の会話モデル

# Modelfile.japanese-chat
FROM llama2:7b

PARAMETER temperature 0.8
PARAMETER top_p 0.9
PARAMETER repeat_penalty 1.1
PARAMETER num_ctx 4096

SYSTEM """
あなたは日本語で会話するフレンドリーなAIアシスタントです。
丁寧な言葉遣いを心がけ、分かりやすく説明してください。
必要に応じて例を挙げて説明してください。
"""

TEMPLATE """{{ .System }}

ユーザー: {{ .Prompt }}
アシスタント: """

作成と実行:

ollama create japanese-chat -f Modelfile.japanese-chat
ollama run japanese-chat

例2: コーディングアシスタント

# Modelfile.code-assistant
FROM codellama:7b

PARAMETER temperature 0.2
PARAMETER top_p 0.95
PARAMETER num_ctx 8192

SYSTEM """
あなたは経験豊富なソフトウェアエンジニアです。
以下のガイドラインに従ってください:

1. コードは可読性を重視してください
2. 適切なコメントを日本語で記述してください
3. エラー処理を含めてください
4. ベストプラクティスに従ってください
5. セキュリティを考慮してください
"""

TEMPLATE """<|im_start|>system
{{ .System }}<|im_end|>
<|im_start|>user
{{ .Prompt }}<|im_end|>
<|im_start|>assistant
"""

例3: 技術文書レビューアー

# Modelfile.doc-reviewer
FROM mistral:7b

PARAMETER temperature 0.3
PARAMETER top_p 0.9
PARAMETER num_ctx 8192

SYSTEM """
あなたは技術文書のレビュー専門家です。
以下の観点でレビューしてください:

- 技術的な正確性
- 文章の明瞭性
- 構成の論理性
- 用語の一貫性
- 改善提案

フィードバックは建設的で具体的にしてください。
"""

MESSAGE user "この文書をレビューしてください:「APIのエンドポイントは/api/v1/usersです」"
MESSAGE assistant "良い点:エンドポイントが明確に示されています。\n改善提案:HTTPメソッド(GET, POSTなど)、必要なパラメータ、レスポンス形式についても記載すると、より分かりやすくなります。"

カスタムモデルの管理

# モデルの作成
ollama create my-model -f ./Modelfile

# モデルの詳細表示
ollama show my-model

# Modelfileの内容を表示
ollama show my-model --modelfile

# モデルのコピー
ollama cp my-model my-model-backup

# モデルの削除
ollama rm my-model

GGUFファイルからのモデル作成

独自にファインチューニングしたモデルや、Hugging FaceからダウンロードしたGGUF形式のモデルも使用できます。

# Modelfile.custom
FROM ./models/my-fine-tuned-model.gguf

PARAMETER temperature 0.7
PARAMETER num_ctx 4096

SYSTEM """カスタムシステムプロンプト"""
ollama create custom-model -f Modelfile.custom

実践的なヒント

1. パラメータのチューニング

  • 創造的なタスク: temperature 0.8-1.2
  • 事実に基づく回答: temperature 0.1-0.3
  • コード生成: temperature 0.2-0.4
  • 会話: temperature 0.7-0.9

2. システムプロンプトのベストプラクティス

  • 具体的な役割を定義する
  • 出力形式を明示する
  • 制約条件を明確にする
  • Few-shot例を含める(MESSAGE使用)

3. テンプレートの選択

モデルによって最適なテンプレート形式が異なります。元のモデルのドキュメントを確認してください。

4. バージョン管理

# タグをつけて管理
ollama create my-model:v1 -f Modelfile.v1
ollama create my-model:v2 -f Modelfile.v2

# 特定バージョンの実行
ollama run my-model:v1
0
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?