Ollamaのパラメータ完全解説【temperature/top_p/num_predict】

設定

「Ollamaで生成した文章が毎回同じで面白くない」「逆にランダムすぎて使えない」——そんなときは生成パラメータを調整すれば、出力の品質と速度をコントロールできます。temperatureを下げれば一貫性が増し、num_predictを絞れば応答時間を短縮できます。本記事では実際に稼働中のOllama 0.30.8へAPIリクエストを送り、各パラメータが生成結果にどう影響するかをqwen2.5:0.5bで実測した生データをもとに解説します。

パラメータは大きく「生成の多様性を制御するもの(temperature・top_p・top_k)」「出力の長さを決めるもの(num_predict)」「繰り返しを抑えるもの(repeat_penalty)」に分類できます。今回の実測では、temperatureを上げすぎると小型モデルが日本語から中国語へ崩れるという興味深い挙動も観測できました。ぜひ手元の環境でも試してみてください。

この記事のポイント

  • temperatureは低いほど一貫性が高く、高いほど多様。実測ではtemperature=1.0でqwen2.5:0.5bの出力が日本語から中国語に崩れた
  • num_predictで生成トークン数を制限すると応答が速くなる(実測でnum_predict=10は0.193秒、無制限-1は1.098秒で約5.7倍差)
  • パラメータはAPIの options フィールドか、Modelfileの PARAMETER 構文で永続設定できる(どちらも実際に動作確認済み)
  • Open WebUI の「Advanced Params」パネルからGUIでもリアルタイムに変更可能
  • 本記事はOllama 0.30.8 / qwen2.5:0.5b(Q4_K_M)で実測確認(2026-06-15)

目次

  1. 前提環境と確認方法
  2. 主要パラメータ一覧
  3. temperature — 生成の多様性を制御する
  4. top_p / top_k — トークン選択の絞り込み
  5. num_predict — 応答の長さを制限する
  6. repeat_penalty — 繰り返しを抑制する
  7. APIリクエストでパラメータを指定する
  8. Modelfileで永続設定する
  9. Open WebUI のGUIで設定する
  10. よくある疑問と対処
  11. まとめ

前提環境と確認方法

本記事のすべての実測は以下の環境で行っています。小型モデルを選んだのは、パラメータ変更の影響が分かりやすく、CPUでも一瞬で結果が返るためです。

項目 内容
Ollama バージョン 0.30.8
テストモデル qwen2.5:0.5b(Q4_K_M量子化、494.03M パラメータ)
コンテキスト長 32,768 トークン
API エンドポイント http://localhost:11434
計測日 2026-06-15

Ollamaのバージョンとモデル情報は次のコマンドで確認できます。以下は実際の出力です。




ubuntu@linuxlab: ~
$ ollama –version
ollama version is 0.30.8
$ ollama show qwen2.5:0.5b
Model
architecture qwen2
parameters 494.03M
context length 32768
embedding length 896
quantization Q4_K_M
$ ollama ps
NAME ID SIZE PROCESSOR CONTEXT UNTIL
qwen2.5:0.5b a8b0c5157701 479 MB 100% GPU 4096 4 minutes from now

主要パラメータ一覧

Ollamaで利用できる主要パラメータをまとめました。ollama show --parameters <モデル名>でモデルに設定済みの値を確認できます(設定がなければOllama標準のデフォルトが使われます)。

Ollama主要パラメータ一覧
Ollama主要パラメータ一覧

注意

パラメータのデフォルト値はOllamaのバージョンやモデルによって異なる場合があります。上表のパラメータ名はOpen WebUIの「Advanced Params」パネルで実際に表示されることを確認済みですが、最終的にはお使いのモデルの設定を ollama show --parameters で確認してください。

temperature — 生成の多様性を制御する

temperatureはLLMのパラメータの中でもっとも効果がわかりやすい設定値です。0〜2の範囲で指定し、値が低いほど毎回同じような内容になり、高いほど多様で創造的な文章になります。

①実測:同じプロンプトをtemperature違いで実行

「Linuxのlsコマンドについて一言で説明してください。」というプロンプトを、temperatureだけ 0.0 / 0.5 / 1.0 / 1.5 と変えて実行しました(seedは固定)。モデルはqwen2.5:0.5b、Ollama 0.30.8での実測です。

temperature設定値別の生成結果比較(実測)
temperature設定値別の生成結果比較(実測)

実測でもっとも驚いたのは、temperature=1.0でモデルが日本語から中国語に切り替わってしまった点です。小型モデル(0.5B)はパラメータ数が少ないため、temperatureを上げると言語の一貫性まで崩れやすくなります。1.5まで上げると、今度は質問の主旨から外れた回答(「ls -R /home を使って…」)になりました。

逆にtemperature=0.0では、seedを指定しなくても3回連続で完全に同一の文章が返ってきました。「temperature=0でも揺れる」と説明される記事もありますが、少なくとも今回のOllama 0.30.8 + qwen2.5:0.5bの組み合わせでは決定論的に動作しました(環境やモデルによって挙動が異なる可能性はあります)。

②temperatureの選び方ガイド

temperature値 特徴 向いている用途
0.0〜0.2 ほぼ決定論的。毎回同じ答えを返す コード生成、技術的な質問の回答
0.5〜0.8(推奨) 安定しつつ自然な表現揺れあり 技術解説文、チャットボット
1.0〜1.2 多様性が高いが、小型モデルでは言語が崩れることも ブレインストーミング、創作
1.5以上 ランダム性が高く文章が崩れやすい 実験的な用途のみ
著者アイコン
著者アイコン

正直、小型モデルでtemperatureを1.0以上にするのはおすすめしません。今回のように言語が崩れたり、文章の途中で破綻したりします。実用では0.2〜0.8の範囲で十分です。

top_p / top_k — トークン選択の絞り込み

top_pとtop_kは、次に生成するトークンを候補から選ぶ際の絞り込み方法を制御します。temperatureと組み合わせて使うことで、より細かく品質をチューニングできます。

③top_p(Nucleus Sampling)

top_pは「累積確率がその値を超えるまでのトークンを候補とする」設定です。top_p=0.9なら、確率の高いトークンを上位から積み上げて合計が90%になるまでのものだけを候補にします。

「Pythonのリスト内包表記を使った例を1つ書いてください」というプロンプトで top_p=0.1 / 0.5 / 0.9 / 1.0 を比較しました(temperature=0.7・seed固定、qwen2.5:0.5b)。実際の生成文の冒頭は次のとおりです。

top_p値 候補の広さ 実測の生成文(冒頭)
0.1 確率上位のみ 「Pythonのリスト内包表記は、リスト内の要素が直接…型に変換さ…」
0.5 やや絞り込み 「Pythonは、一般的にリストや元のデータセット…を使用し…」
0.9(推奨) 幅広い候補 「Pythonは、多くのプログラミング言語で使われるように…」
1.0 全候補を使用 「Pythonは、ユーティリティ(Utility)として便利で…」

top_pを絞るほど書き出しが安定し、広げるほど切り口がばらつくのが分かります。なお0.5以上ではモデルがリスト内包表記そのものを正しく書けていませんでした。これは0.5Bという小型モデルの限界で、パラメータではなくモデルサイズの問題です。

④top_k

top_kは「上位k個のトークンだけを候補にする」設定です。top_k=1にすると最も確率の高いトークンだけを選ぶ「Greedy Decoding」になります。

「今日の天気を一言で予測してください」(temperature=0.8・seed固定)で top_k=1 / 10 / 40 を実測したところ、いずれも「申し訳ありませんが、私はリアルタイムの天気情報を提供する能力はありません」という同じ趣旨の回答になりました。答えがほぼ一通りに決まる質問では、top_kを変えても結果は変わりません。top_kの効果はtemperatureやtop_pとの組み合わせで現れます。

top_p と top_k の使い分け

  • どちらか一方だけ設定するなら top_p を使う(モデルの確率分布に適応するため)
  • 両方設定すると、先に top_k で候補を絞ってから top_p で再絞り込みが行われる
  • Ollamaの標準値は top_p=0.9、top_k=40

num_predict — 応答の長さを制限する

num_predictは生成するトークンの最大数を指定するパラメータです。-1に設定すると無制限(モデルが自然に止まるまで)になります。APIのレスポンスに含まれる eval_count が実際に生成されたトークン数、total_duration が処理時間です。

⑤実測:num_predict別の応答時間

「Ubuntuとは何ですか?詳しく教えてください。」をqwen2.5:0.5bで実行し、num_predictを4段階で変えて応答時間(total_duration)を計測しました。

num_predict設定別の応答時間(実測)
num_predict設定別の応答時間(実測)

実測結果をまとめると次のとおりです。生成速度自体はどの条件でも約234〜260トークン/秒でほぼ一定でした。つまり応答時間の差は、生成するトークン数の差そのものです。




ubuntu@linuxlab: ~ (実測ログ)
num_predict=10 → 生成10tok / 応答時間 0.193秒
num_predict=30 → 生成30tok / 応答時間 0.271秒
num_predict=80 → 生成80tok / 応答時間 0.486秒
num_predict=-1 → 生成224tok / 応答時間 1.098秒(無制限・自然終了)

無制限(-1)と10トークン制限では応答時間に約5.7倍の差がありました。チャットボットやリアルタイム応答が重要なアプリケーションでは、num_predictを適切に設定することで体感速度を大きく改善できます。

⑥num_predictの設定目安

用途 推奨値 理由
短い質問への回答 50〜100 1〜2文で完結する場合
技術解説・コード生成 200〜500 適度な長さで詳細も得られる
長文生成・要約 1000〜4096 文書全体を生成したい場合
モデルにまかせる -1 生成量が予測できない場合(デフォルト)

repeat_penalty — 繰り返しを抑制する

repeat_penaltyは、同じトークンが繰り返し生成されることへのペナルティです。日本語のLLM出力で「です。です。です。」のような繰り返しが起きた場合、この値を上げると改善することがあります。

「Ubuntuのパッケージ管理について教えてください」(temperature=0.5・seed固定・100トークン)で実測したところ、次のような差が見られました。

repeat_penalty 実測の生成文(冒頭)と傾向
1.0(ペナルティなし) 「Ubuntu は、オープンソースのソフトウェアの構成を組み込むための…」目立った繰り返しはなし
1.1(標準) 「Ubuntu は、オープンソースのソフトウェア開発ベースで、ユーザーが…」自然な語り出し
1.3(強め) 「すみません、私は人工知能アシスタントで…」語り出しが大きく変化。語彙が分散

実測で分かるとおり、repeat_penaltyを上げすぎると生成される内容そのものが変わってしまうことがあります。まず標準の1.1のまま使い、繰り返しが気になるときだけ1.2〜1.3に調整するのがおすすめです。

APIリクエストでパラメータを指定する

OllamaはREST APIを提供しており、http://localhost:11434/api/generateにPOSTリクエストを送ることでモデルを呼び出せます。パラメータはoptionsオブジェクト内に指定します。

APIリクエストにoptionsでパラメータを渡す例(実測)
APIリクエストにoptionsでパラメータを渡す例(実測)

以下は実際に動作確認したcurlコマンドです。今回はUbuntu 24.04のDockerコンテナから host.docker.internal 経由で叩いても同じ結果が返ることも確認しています。




ubuntu@linuxlab: ~
$ curl -s -X POST http://localhost:11434/api/generate \
-H ‘Content-Type: application/json’ \
-d ‘{
“model”: “qwen2.5:0.5b”,
“prompt”: “lsコマンドとは”,
“stream”: false,
“options”: {
“temperature”: 0.2,
“num_predict”: 30
}
}’ | jq -r .response
`ls` コマンドは、Linuxや macOS などの Unix や macOS
ファイルシステムを管理するための命令です。

⑦チャット形式(/api/chat)でもoptions指定可能

会話履歴を保ちながらやりとりする/api/chatエンドポイントでも、同様にoptionsを指定できます。




ubuntu@linuxlab: ~
$ curl -s -X POST http://localhost:11434/api/chat \
-H ‘Content-Type: application/json’ \
-d ‘{
“model”: “qwen2.5:0.5b”,
“messages”: [
{“role”: “user”, “content”: “lsコマンドとは?”}
],
“stream”: false,
“options”: {“temperature”: 0.3, “num_predict”: 100}
}’ | jq -r .message.content

OllamaのAPIの使い方をもっと詳しく知りたい方は、 もあわせてご覧ください。

Modelfileで永続設定する

毎回APIリクエストにパラメータを書くのは手間がかかります。ModelfileにPARAMETERを記述しておくと、そのモデルを使うたびに自動的にパラメータが適用されます。

⑧Modelfileの作成と適用手順(実測)

Modelfileでパラメータを永続設定する手順(実測)
Modelfileでパラメータを永続設定する手順(実測)

実際にOllama 0.30.8でlinuxlab-699-testというカスタムモデルを作成し、ollama show --parametersでパラメータが反映されていることを確認しました。以下は実際の操作ログです。




ubuntu@linuxlab: ~
$ cat Modelfile
FROM qwen2.5:0.5b

PARAMETER temperature 0.2
PARAMETER top_p 0.85
PARAMETER top_k 30
PARAMETER num_predict 200
PARAMETER repeat_penalty 1.1

SYSTEM “Linuxの技術解説専門アシスタントです。”
$ ollama create linuxlab-699-test -f Modelfile
writing manifest
success
$ ollama show –parameters linuxlab-699-test
top_p 0.85
num_predict 200
repeat_penalty 1.1
temperature 0.2
top_k 30

作成したカスタムモデルはollama run linuxlab-699-testで呼び出せます。パラメータが反映された状態で起動するので、APIリクエスト時にoptionsを省略しても同じ設定で動作します。

既存モデルのModelfileを確認するコマンド

  • ollama show --modelfile qwen2.5:0.5b — ベースのModelfile全体を表示
  • ollama show --parameters qwen2.5:0.5b — PARAMETERセクションのみ表示
  • パラメータが設定されていない場合は空欄になります(Ollama標準のデフォルトが使用される)

Open WebUI のGUIで設定する

コマンドラインが苦手な場合は、Open WebUIを使うとGUIからパラメータを変更できます。OllamaにOpen WebUIを接続すると、ブラウザのチャット画面からパラメータを操作できます。以下は実際に起動した画面です。

Open WebUIのメインチャット画面
Open WebUIのメインチャット画面

⑨Advanced Paramsパネルの開き方

Open WebUIのチャット画面右上にあるスライダーアイコン(Controls)をクリックすると、右側に「Controls」パネルが開きます。その中の「Advanced Params」を展開すると、Temperature・Seed・top_k・top_p・repeat_penalty・num_ctx などをGUIで個別に変更できます。下のスクリーンショットは実際にパネルを展開したところです。

Open WebUIのAdvanced Paramsパネル(Temperature・top_k・top_p等が並ぶ)
Open WebUIのAdvanced Paramsパネル(Temperature・top_k・top_p等が並ぶ)

各項目は初期状態では「Default」になっており、クリックして値を入力するとそのセッションに適用されます。GUIで変更したパラメータはセッション中のみ有効です。恒久的に適用したい場合は前述のModelfileに書いておきましょう。

よくある疑問と対処

①temperatureを上げたら日本語が崩れた

本記事の実測でも、temperature=1.0でqwen2.5:0.5bの出力が中国語に切り替わりました。これは小型モデルでよく起きる現象です。日本語の一貫性を保ちたいなら、temperatureは0.2〜0.8程度に抑えるのが安全です。どうしても多様性が欲しい場合は、より大きなモデル(7B以上)を使うほうが安定します。

②temperature=0にしても本当に毎回同じ?

今回のOllama 0.30.8 + qwen2.5:0.5bでは、temperature=0.0でseed未指定でも3回連続で完全に同一の出力でした。ただし環境やモデルによっては浮動小数点演算の誤差でわずかに揺れることがあります。確実に再現したい場合はseedも固定しましょう。




ubuntu@linuxlab: ~
$ curl -s -X POST http://localhost:11434/api/generate \
-H ‘Content-Type: application/json’ \
-d ‘{“model”:”qwen2.5:0.5b”,”prompt”:”lsコマンドとは”,
“stream”:false,
“options”:{“temperature”:0.0,”seed”:42}}’

③パラメータを設定したのに効果がない

Modelfileでパラメータを設定した場合、ollama createでモデルを再作成しないと反映されません。また、APIのoptionsはリクエストごとにModelfileのデフォルトを上書きします。優先順位は次のとおりです。

APIリクエストのoptions > ModelfileのPARAMETER > Ollama標準のデフォルト

④num_predict=-1にするとメモリ不足になった

無制限設定だと、モデルがコンテキスト長いっぱいまで生成しようとすることがあります。特にVRAMが少ない環境ではnum_ctxを小さくするか、num_predictで明示的に上限を設定してください。

まとめ

OllamaのパラメータはAPIのoptionsフィールドかModelfileで設定でき、生成品質と速度のバランスをコントロールできます。今回の実測で分かったことをまとめます。

  • コード生成やQAには temperature=0.1〜0.3 が向いている。小型モデルでは1.0以上にすると言語が崩れることがある
  • 応答速度を重視するなら num_predict を制限する(実測で-1と10では応答時間が約5.7倍異なった)
  • top_p / top_k は temperature と組み合わせて使う。一方だけなら top_p を使う
  • 繰り返しが気になるときは repeat_penalty を1.2〜1.3 に引き上げる(上げすぎると内容が変わる)
  • よく使う設定はModelfileに書いて ollama create しておくと毎回指定が不要になる
  • GUIで試したい場合はOpen WebUIのAdvanced Paramsパネルが便利

Ollamaをさらに活用するなら、VPS上にサーバーを立てて外部からAPIアクセスするのがおすすめです。自宅PCよりも安定した環境でLLMを動かせますし、24時間稼働させても電気代を気にせずに済みます。

コメント

タイトルとURLをコピーしました