ローカルLLMを動かす(Ollama/Qwen 3 14B Q4)
次の前提で、ローカルLLMを動かしてみました。
- Ollamaをインストールしています。
- MacBookAir M2を使っています。メモリは24GB
- 今回の対象モデルは
qwen3:14bです。
背景
ローカルLLMを動かしていきたいと思いました。特に、自分がローカルで記録しているテキストから情報を抽出する用途で使います。つまり、テキストファイルを入れて、指定したjsonが返ってくるような用途です。
ローカルLLMは進化が激しいので、現時点で有力なモデルをClaude Opus 4.7に調査させました。すると、Qwen 3 14B(Q4)がお勧めされたのでそれを動かしてみました。今回はその記録です。
なお、1年以上前からOllamaはインストールしていたので、それをそのまま使っています。
さて、その状態で qwen3:14b をダウンロードしておき、
以下のようにAPIで実行してみます。
> curl -s http://localhost:11434/api/chat -d '{
"model": "qwen3:14b",
"messages": [
{"role": "user", "content": "田中太郎は35歳でエンジニアです。情報を抽出してください。/no_think"}
],
"stream": false,
"format": {
"type": "object",
"properties": {
"name": {"type": "string"},
"age": {"type": "integer"},
"occupation": {"type": "string"}
},
"required": ["name", "age", "occupation"]
}
}' | jq
すると次のような結果が得られました。thinkingはやけに長いので削りました。
{
"model": "qwen3:14b",
"created_at": "2026-05-09T10:25:39.572555Z",
"message": {
"role": "assistant",
"content": "{\n \"name\": \"田中太郎\",\n \"age\": 35,\n \"occupation\": \"エンジニア\"\n}",
"thinking": "Okay, let's see. The user provided a sentence in Japanese: \"田中太郎は35歳でエンジニアです。情報を抽出してください。\" They want me to extract t...."
},
"done": true,
"done_reason": "stop",
"total_duration": 109722671417,
"load_duration": 87428375,
"prompt_eval_count": 928,
"prompt_eval_duration": 10293626000,
"eval_count": 30,
"eval_duration": 3125652287
}
いい感じに情報が抽出できることがわかりました。
Pythonでもやってみます。
ollama pydantic をインストールしている前提です。
from ollama import chat
from pydantic import BaseModel
class Person(BaseModel):
name: str
age: int
occupation: str
def __str__(self):
return f"{self.name}({self.age}:{self.occupation})"
response = chat(
model='qwen3:14b',
messages=[{
'role': 'user',
'content': '田中太郎は35歳でエンジニアです。情報を抽出してください。'
}],
format=Person.model_json_schema(),
)
print(response['message']['content'])
person = Person.model_validate_json(response['message']['content'])
print(person)
これで動きます。私の環境は uv を使っているので以下のようになります。
> uv run python main.py
{"name": "田中太郎", "age": 35, "occupation": "エンジニア"}
田中太郎(35:エンジニア)
time で実行時間を計測したところ以下のようになりました。
> uv run time python main.py
...(略)
23.92 real 0.17 user 0.02 sys
大体、24秒くらいかかりました。