OllamaにGGUFモデルをインポートする方法
Hugging Faceやローカルの.ggufファイルをOllamaで実行する手順を解説します。インポート後に回答が文字化けする原因となるチャットテンプレートの不一致を修正し、正しく動作させるためのModelfile作成方法も紹介します。
GGUF モデルを Ollama にインポートする 2 つの方法
GGUF モデルを Ollama にインポートする方法は 2 つあり、どちらが適切かはファイルの現在の保存場所によって決まります。モデルが Hugging Face リポジトリにある場合、ollama run コマンドを 1 回実行するだけで、Modelfile を介さずに取得と実行が可能です。.gguf ファイルがすでにサーバーのディスク上にある場合は、2 行の Modelfile を作成し、ollama create を実行します。
どちらの手順も、最終的には同じ結果になります。つまり、ollama run や Ollama API で提供可能な、名前付きモデルがローカルの Ollama ライブラリに作成されます。他者が公開したファイルを使用する場合は前者、自分でモデルを量子化した場合や、scp または rsync 経由でファイルを入手した場合、あるいはマシンから Hugging Face に接続できない場合は後者を使用してください。
GGUF ファイルは、重み、トークナイザー、モデルメタデータを 1 つにまとめたバイナリファイルです。これは llama.cpp が読み込む形式であり、Ollama は llama.cpp を基盤としているため、ほぼすべてのオープンモデルでコミュニティによる GGUF 変換版が提供されています。Ollama は .safetensors 重みのフォルダーを直接読み込めないため、この変換ステップが必要となります。
以下の手順は、Ollama がインストール済みであり、サービスが実行中であることを前提としています。未インストールの場合は、まず VPS への Ollama のインストール を行い、戻ってきてください。最初に ollama list を実行してください。接続エラーではなくテーブルが表示されれば(空であっても)、サーバーは稼働しており、このガイドの残りの手順を実行できます。
ルート 1: Modelfile を使わずに Hugging Face から GGUF を実行する
Ollama は Hugging Face リポジトリから直接 GGUF を取得できます。コマンドにはリポジトリパスを指定し、hf.co/ プレフィックスを付けます。
ollama run hf.co/{username}/{repository}hf.co と huggingface.co のどちらもドメイン名として機能します。Hugging Face のドキュメントにある実際の例は以下の通りです。
ollama run hf.co/bartowski/Llama-3.2-3B-Instruct-GGUF初回実行時はファイルのダウンロードが行われるため、ダウンロードが完了するまでチャットプロンプトは表示されません。完了後はモデルがローカルライブラリに保存され、次回から高速に起動します。別のシェルを開き、ollama list を実行すると保存された名前を確認できます。その名前はタグを含む hf.co/... 文字列全体であり、毎回入力するには長すぎます。短いエイリアスを付けましょう。
ollama cp hf.co/bartowski/Llama-3.2-3B-Instruct-GGUF my-llama
ollama run my-llamaこのルートは、実際に GGUF ファイルが含まれているリポジトリでのみ機能します。.safetensors 重みのみを公開しているリポジトリには Ollama が取得できるファイルがないため、後述する変換手順が必要です。
Ollama はどの量子化を選択するか?
2026 年 8 月 25 日に確認した Hugging Face の Ollama ドキュメントには、デフォルトについて次のように明記されています。「デフォルトでは、モデルリポジトリ内に存在する場合、Q4_K_M 量子化スキームが使用されます。存在しない場合は、リポジトリ内に存在する妥当な量子化タイプが自動的に選択されます」。したがって、10 種類の量子化版を公開しているリポジトリであれば Q4_K_M が選択され、Q4_K_M がないリポジトリでは Ollama が判断した別の量子化版が選択されます。デフォルトは変更される可能性があるため、利用する前に必ず該当ページを再確認してください。
特定の量子化版を指定するには、タグとして追加します。
ollama run hf.co/{username}/{repository}:{quantization}ollama run hf.co/bartowski/Llama-3.2-3B-Instruct-GGUF:Q8_0
ollama run hf.co/bartowski/Llama-3.2-3B-Instruct-GGUF:iq3_m
ollama run hf.co/bartowski/Llama-3.2-3B-Instruct-GGUF:Llama-3.2-3B-Instruct-IQ3_M.gguf量子化名は大小文字を区別しないため、:iq3_m と :IQ3_M は同じ意味になります。リポジトリ内の短い名前が曖昧な場合は、タグとして正確なファイル名を指定するのが確実です。タグにはリポジトリ内に存在するファイル名を指定する必要があるため、入力前に「Files and versions」タブを開いて実際のファイル名を確認してください。どの量子化を選択するかはメモリ容量と精度のトレードオフであり、Q4、Q8、FP16 の違いでその詳細を適切に解説しています。
ルート 2: ローカルディスクから .gguf ファイルをインポートする
ファイルが既にサーバー上にある場合は、Modelfile が必要です。これは 1 行で記述できます。ディレクトリを作成し、その中に Modelfile を配置して、FROM でそのファイルを指定します。
mkdir -p ~/models/my-model
cd ~/models/my-modelFROM /home/you/models/my-model-Q4_K_M.ggufこれを Modelfile として保存し、モデルをビルドします。
ollama create my-modelollama create は、デフォルトでカレントディレクトリにある Modelfile という名前のファイルを読み込みます。ファイル名が異なる場合や別の場所にある場合は、ollama create my-model -f /home/you/models/my-model/Modelfile のように -f を使用してください。ollama create --help を実行すると、フラグとそのデフォルト値を確認できます。FROM 内のパスは絶対パスでも、Modelfile からの相対パスでも構いません。そのため、両者が同じディレクトリにある場合は FROM ./my-model-Q4_K_M.gguf で動作します。絶対パスを使用すれば、パスに関する問題は完全に解消されます。
信頼する前に結果を確認してください。
ollama list
ollama show my-model
ollama run my-model "Reply with one short sentence."ollama list に my-model が含まれているはずです。ollama show my-model は、Ollama がファイルのメタデータから読み取ったアーキテクチャ、パラメータ数、コンテキスト長、量子化方式を表示します。ファイル名は手入力された文字列である可能性があるため、ファイル名を信頼するのではなく、これらの値を読み取ってください。モデルがテストプロンプトに対して自然言語で回答し、その後停止すれば、インポートは成功です。そうでない場合は、以下のテンプレートのセクションを確認してください。原因のほとんどはそこにあります。
ディスク容量について知っておくべきことが 1 点あります。ollama create は、GGUF ファイルを元の場所に参照させるのではなく、Ollama 自身のモデルストアにコピーします。元のファイルを削除するまで、重みデータはディスク上に 2 重に存在することになります。ollama run my-model が動作することを確認したらソースファイルを削除するか、2 重に課金されない場所に保存してください。Ollama がモデルをディスク上のどこに保持するか に、そのレイアウトと移動方法が記載されています。
--quantize が適用される場合とされない場合
ollama create には --quantize フラグがありますが、これはソースモデルが FP16 または FP32(フル精度の重み)である場合という 1 つのケースのために存在します。Ollama のインポートドキュメントには、ターゲットとして q8_0 に加え、k-means バリアントの q4_K_S および q4_K_M が記載されています。
ollama create --quantize q4_K_M my-model既に量子化済みのファイルに対してこのフラグを渡さないでください。名前に Q4_K_M や Q5_K_S を含む .gguf は、既にこのステップを通過しています。そのため、このフラグは何も行いません。量子化は高精度から低精度への一方通行の変換であるため、Q4 から Q8 へ戻すルートはありません。ソースが .safetensors ファイルの Hugging Face リポジトリである場合は、まず Ollama のドキュメントが推奨する llama.cpp リポジトリの convert_hf_to_gguf.py を使用して変換し、そのスクリプトが出力した GGUF をインポートしてください。Ollama と llama.cpp の関係 で、なぜ変換スクリプトが別のプロジェクトに属しているのかを説明しています。
インポートした GGUF の応答が文字化けしたり、停止しなかったりするのはなぜですか?
これは多くのインポートチュートリアルで省略されていますが、必ず直面する問題です。症状としてはモデルが壊れているように見えます。<|im_start|>assistant や <|end|> といった文字列が制御トークンとしてそのまま出力されます。モデルは回答した後に新しいユーザーの質問を勝手に生成し、それにも回答し続けます。生成は Ctrl+C を押すまで止まりません。
モデル自体は正常です。チャットテンプレートが間違っています。チャットテンプレートとは、ユーザーのメッセージをモデルが学習した通りの正確なトークンシーケンスに変換するためのラッパーであり、システムプロンプトの終了やユーザーのターンの開始を示すマーカーを含みます。Ollama は自動的にテンプレートを選択します。ドキュメントによれば、GGUF ファイル内に格納された tokenizer.chat_template メタデータに基づき、「一般的に使用されるテンプレートのリストから自動的に選択される」仕組みです。このメタデータが欠落しているか、リストに一致するものがない場合、汎用的なラッパーが適用されます。その結果、モデルは学習時とは異なる形式のプロンプトを受け取るため、学習済みの終了マーカーを認識できず、停止できなくなります。
Ollama が実際に選択したテンプレートを表示します。
ollama show --template my-model
ollama show --modelfile my-modelテンプレートが空、あるいは明らかに汎用的なものであれば、それが原因です。Modelfile 内でテンプレートを自分で記述してください。
FROM /home/you/models/my-model-Q4_K_M.gguf
TEMPLATE """{{ if .System }}<|system|>
{{ .System }}<|end|>
{{ end }}{{ if .Prompt }}<|user|>
{{ .Prompt }}<|end|>
{{ end }}<|assistant|>
{{ .Response }}<|end|>"""
PARAMETER stop "<|end|>"ollama create my-model で再構築し、同じテストプロンプトを再度送信します。stop パラメータは安全策として機能します。これは指定した文字列が出現した時点で生成を強制終了させるもので、テンプレートの調整中であっても無限生成を防ぐことができます。指定したマーカーが出現せず応答が止まらない場合は、a num_predict ceiling を設定することで、テンプレートの出力に関わらずトークン数で強制的に打ち切ることができます。
テンプレートは Jinja テンプレートではなく、Go テンプレートである必要があります。 Hugging Face のドキュメントにも明記されていますが、これは重要です。元のモデルリポジトリにある tokenizer.chat_template フィールドには Jinja が記述されているため、そのままコピー&ペーストしても動作しません。Ollama の構文には {{ .System }}(システムプロンプト)、{{ .Prompt }}(ユーザーメッセージ)、{{ .Response }}(モデルの回答)という 3 つの変数があります。モデルカードや tokenizer_config.json で実際のターンマーカーを確認し、それを手作業で Go 構文に書き換えてください。
作業を簡略化する近道があります。多くのモデルは共通のプロンプト形式を採用しているため、ライブラリ内の別のモデルが同じ形式を使用している場合は、ollama show --template を実行して出力内容をコピーしてください。
Hugging Faceリポジトリ内のテンプレート、システム、およびパラメータファイル
Hugging Faceのルートでは、Modelfile内の指示ではなく、リポジトリ内のファイルとして同様の制御を提供します。リポジトリの所有者である場合、あるいは独自の量子化モデルを公開する場合は、それらのファイルを追加することで、すべての ollama run hf.co/... がそれらを読み取ります。
templateという名前のファイルにはGoテンプレートを記述します。ルールは同じで、JinjaではなくGoを使用してください。systemという名前のファイルにはシステムプロンプトを記述します。paramsという名前のファイルにはサンプリングパラメータを記述します。これはJSON形式である必要があります。
最小限の params ファイルの例:
{
"stop": ["<|end|>"],
"temperature": 0.7
}リポジトリの所有者ではない場合、これらのファイルを追加することはできません。一度モデルをプルし、ollama show --modelfile hf.co/... を実行して提供された内容をダンプし、その出力をModelfileとして保存してください。その中の FROM 行はOllamaが既にダウンロード済みのblobを指しているため、TEMPLATE 行と PARAMETER 行を編集し、ollama create を実行することで、再ダウンロードすることなく固定されたローカルコピーをビルドできます。これが、他者が作成した不完全な量子化モデルに対する標準的な修正方法です。
プライベートな GGUF リポジトリをインポートする方法
プライベートリポジトリにアクセスするには、Hugging Face アカウントに Ollama の SSH 公開鍵を登録する必要があります。この手順では API トークンではなく SSH 鍵を使用するため、既存のトークンではアクセスできません。
公開鍵を表示します。公式スクリプトで Ollama をインストールした Linux サーバーでは、サービスは ollama ユーザーとして実行されるため、鍵はそのユーザーのホームディレクトリに存在します。
sudo cat /usr/share/ollama/.ollama/id_ed25519.pubもし ollama serve を自分自身のユーザー権限で直接実行している場合、パスは ~/.ollama/id_ed25519.pub になります。表示された行全体をコピーし、Hugging Face のアカウント設定ページ https://huggingface.co/settings/keys を開き、新しい SSH 鍵として追加してください。これで、通常のコマンドでプライベートリポジトリから取得できるようになります。
ollama run hf.co/{username}/{repository}鍵を追加しても pull が失敗する場合は、誤ったファイルを読み取っている可能性があります。ダウンロードを実行するのはサーバーであり、サーバーは自身の鍵を使用します。systemd で起動されたサーバーはユーザーの ~/.ollama を読み込まないため、ホームディレクトリにある鍵は Hugging Face 側からは認識されません。
モデルはVPSに収まりますか?
これを決定する数値は、ディスク上のファイルサイズと、コンテキストウィンドウが必要とするメモリ量の合計です。重みはファイルサイズに近い容量でメモリにロードされ、その上にトークン数に応じて増加するコンテキスト割り当てが加わります。ollama listを実行してOllamaが記録したモデルサイズを確認し、サーバー上のfree -hと比較してください。その際、OSや他のプロセス用に余裕を持たせる必要があります。実際のモデルで計算例を確認したい場合は、VPSでのNemotron 3.5 Lightningの実行を参照してください。取得すべき正確なタグ、必要なRAM容量、CPUのみの環境で動作可能かどうかが記載されています。
コンテキストは忘れられがちな要素です。デフォルトのウィンドウサイズでロードされるモデルでも、num_ctxを増やすと失敗することがあります。これは、割り当て量が指定したウィンドウサイズに応じて拡大するためです。num_ctxの設定とメモリ消費量にサイジングの詳細があります。合計が大きすぎる場合の解決策は、通常、同じモデルのより小さい量子化版を使用することです。これについてはQ4とQ8の比較で解説しています。
失敗は明確に発生します。CPUのみのVPSでは、カーネルのout of memory killerがプロセスを停止させ、journalctl -u ollama -n 50とdmesgでその終了を確認できます。GPU搭載のサーバーでは、ollama psを実行するとPROCESSOR列が表示され、ロードされたモデルがGPUメモリ、システムメモリ、あるいはその両方に分割されて配置されたかが分かります。システムメモリに溢れたモデルでも応答はしますが、動作は低速になります。1秒あたりのトークン数の測定では、「低速」を量子化版間で比較可能な数値に変換する方法を説明しています。
インポート内容の確認
インポート後は、以下の順序でこれら4つのコマンドを実行してください。
ollama list
ollama show my-model
ollama show --modelfile my-model
ollama run my-model "Reply with one short sentence."ollama list はモデルが存在することと、Ollama が記録したサイズを表示します。ollama show は、Ollama が GGUF から必要なメタデータを読み取ったことを証明します。ollama show --modelfile は、実際に使用されるテンプレートとパラメータを確認します。これは、ユーザーが遭遇する前に不適切な出力が発生する不具合を未然に防ぐためのチェックです。テストプロンプトは一連の処理全体を検証します。テンプレートが壊れているモデルは、極めて短いリクエストでも失敗するためです。プロンプトが正常に返されたら、そのモデル名は、自身のサーバーを指定したコーディングエージェントを含む、Ollama API と通信するあらゆるツールで使用する名前となります。インポートに失敗した場合は ollama rm my-model で削除し、再度ビルドしてください。このコマンドは Ollama 側のコピーのみを削除し、ソースである .gguf には影響を与えません。
FAQ
Modelfile を作成せずに GGUF を Ollama にインポートできますか?
はい、Hugging Face リポジトリにファイルが存在する場合に可能です。ollama run hf.co/{username}/{repository} で直接プルして実行でき、ollama run hf.co/{username}/{repository}:{quantization} で特定の量子化を指定できます。Modelfile が必要なのは、ローカルディスク上の .gguf を扱う場合のみです。その際は、FROM /path/to/file.gguf に続けて ollama create my-model と記述する 1 行だけで済みます。
指定しなかった場合、Ollama はどの量子化をダウンロードしますか?
2026 年 8 月 25 日時点の Hugging Face のドキュメントによると、その量子化がリポジトリ内に存在する場合は Q4_K_M が使用され、それ以外の場合はリポジトリ内に存在する妥当な量子化タイプが 1 つ選択されます。制御するには :Q8_0 のようなタグを追加してください。実際に何が取得されたかを確認するには ollama show <model> を使用します。これはファイル名ではなく、ファイル内のメタデータから量子化情報を出力します。
インポートしたモデルが同じ内容を繰り返したり、生成が止まらないのはなぜですか?
チャットテンプレートがモデルと一致していないためです。Ollama は GGUF 内の tokenizer.chat_template メタデータからテンプレートを自動選択しますが、そのメタデータが欠落しているか認識できない場合、汎用的なラッパーが適用されます。そのため、モデルが学習時に使用したターン終了マーカーを認識できません。現在のテンプレートを確認するには ollama show --template <model> を実行し、Modelfile に TEMPLATE ブロックと PARAMETER stop 行を追加して、再度 ollama create を実行してください。Go テンプレート形式で記述する必要があります。元のリポジトリの Jinja テンプレートはそのままでは動作しません。
ダウンロードした GGUF に対して --quantize を使用すべきですか?
いいえ。--quantize は ollama create 時に FP16 または FP32 のソースを変換するものです。Q4_K_M のようにファイル名に量子化が含まれているものは、すでに変換済みです。再量子化しても精度は回復せず、元の精度に戻す手段もありません。このフラグは、safetensors を自分でフル精度の GGUF に変換し、その後に軽量化したい場合のみ使用してください。
非公開の GGUF リポジトリをプルするにはどうすればよいですか?
Ollama の SSH 公開鍵を Hugging Face アカウントに追加してください。標準的な Linux インストール環境では sudo cat /usr/share/ollama/.ollama/id_ed25519.pub で、ユーザー権限でサーバーを実行している場合は ~/.ollama/id_ed25519.pub から鍵を表示し、アカウントの SSH 鍵設定ページに追加します。設定後、ollama run hf.co/{username}/{repository} で自身の非公開リポジトリや所属する組織のリポジトリをプルできるようになります。