はじめに
以下の記事では、ローカル環境に LLM を構築しましたが、今回は同じ環境に OpenAI の gpt-oss-20b を入れました。
参考になったウェブページはこちらです。
なお、環境は以下のようにバージョンアップ(変更)しています。
Ubuntu 24.04.03、CUDA Toolkit 13.0 Update 2、cuDNN 9.14.0、Python 3.12
LLM モデルファイルをダウンロード
Hugging Face、Models、Libraries -[GGUF]、Apps -[llama.cpp]、Filter by name -[gpt-oss-20b]
[Files and versions]タブ
gpt-oss-20b-mxfp4.gguf [Download file]ボタン
ダウンロードしたファイルを、自分のホームディレクトリに置きました
Python で LLM を実行
from llama_cpp import Llama
llm = Llama(
model_path="gpt-oss-20b-mxfp4.gguf",
n_gpu_layers=10, #GPUを使う指定をする
n_ctx=4096, #「過去の会話+プロンプト+生成中の文章」を一時的に保持できる最大量
)
# few-shot 学習を用いて、期待する文体や段落構成の例を示す
prompt = """
<s>[INST] <<SYS>>
あなたは日本の文化の専門家です。日本語で回答してください。
<</SYS>>
Q: 男性の袴の一般的な着用場面は?
A: 結論:礼装や式典での着用が多い。根拠:明治以降の礼装規範/現代の成人式・卒業式。補足:業種や地域で差がある。
Q: 女性の着物の合わせは?
A: 結論:左前(自分の左側が上)。根拠:古くからの礼法で現代も同じ。補足:右前は亡くなった方に用いる。
Q: 男性の着物は右側と左側でどちらが前ですか?
A: [/INST]
"""
output = llm(
prompt=prompt,
stop=["</s>", "[INST]", "[/INST]"], #返信にこの単語があれば終了
echo=True,
max_tokens=2048, #生成する最大トークン数を指定
)
print(output["choices"][0]["text"])
LLM は「どう対話データが作られて学習されたか」によって指示の通し方(プロンプト構文)が決まります。Llama 系の標準チャットテンプレートは、
<s>[INST] <<SYS>>
{システム指示}
<</SYS>>
{ユーザーの質問}[/INST]
OpenAI ChatGPT なら、
system: ...
user: ...
assistant: ...
(.llm) webmaster@noble03:~$ python sample.py
final<|message|>
**男性の着物の「前」は右側です。**
- **根拠**
- 伝統的に男性が着物を締めるとき、左側(背中側)を内側にして右側を外側にして前に向かいます。
- この左右の取り扱いは「礼法」に基づき、古典・現代にわたり一貫している。
- **補足**
- 女性の着物では逆に「左側が前」になります。
- 近年の公式行事・式典でも男性は右側を前にしたまま着物を着用します。
従って、男性の着物は **右側が前** であると結論づけられます。
Ollama でローカルLLMを使用する際の設定方法
1.Modelfile という名前のファイルを作成し、モデルファイルを指定する
nano Modelfile
FROM ./gpt-oss-20b-mxfp4.gguf
TEMPLATE """
ここに、templete ファイルの中身を貼り付け
"""
PARAMETER stop "~"
ここに、params ファイルの中身を記述。但し、PARAMETER stop "~" の形式に書き直す必要がある
templete と params ファイルは https://huggingface.co/unsloth/gpt-oss-20b-GGUF から持って来ました。または、https://github.com/ollama/ollama/blob/main/docs/modelfile.mdx 、https://ollama.com/library/gpt-oss:20b を参考にします
2.モデルを作成する
ollama create gpt-oss-20b -f Modelfile
3.モデルを実行する
ollama run gpt-oss-20b
Ctrl+D または /bye で停止
(.llm) webmaster@noble03:~$ ollama ps
NAME ID SIZE PROCESSOR CONTEXT UNTIL
gpt-oss-20b:latest e2037755aeca 12 GB 43%/57% CPU/GPU 4096 3 minutes from now
templete は中身をそのまま貼り付ければ良いのですが、params は JSON から Ollama の形式に書き換えます
{
"stop": [
"<|endoftext|>",
"<|return|>"
],
"temperature": 1.0,
"min_p" : 0.00,
"top_k" : 0,
"top_p" : 1.0
}
PARAMETER stop "<|endoftext|>"
PARAMETER stop "<|return|>"
PARAMETER temperature 1.0
PARAMETER min_p 0.00
PARAMETER top_k 0
PARAMETER top_p 1.0