動作確認済み環境
本記事のコマンドは Ollama 0.30.8 で検証しています(2026年6月15日実測)。学習ツールのバージョンは PyPI から実取得した最新版、Ubuntu 環境は ubuntu:24.04 公式Dockerイメージで確認しています。
Ollamaでローカルに動かしているモデルを、自分のデータで追加学習(ファインチューニング)できたら——そう思ったことはありませんか。
結論から言うと、Ollama自体はモデルの学習機能を持っていません。学習は Unsloth や LLaMA-Factory といった外部フレームワークで行い、そこで作った「LoRA学習済みモデル」をGGUF形式に変換して、Modelfile経由でOllamaに取り込む——というのが正しい流れです。
本記事では、このワークフロー全体を「LoRA基礎」の観点で整理します。さらに、Ollamaが担当する「カスタムモデルの取り込み」部分は実際にOllama 0.30.8で動かして実測しました。Modelfileの構造・ollama createでのインポート・GGUFファイルの中身の確認まで、本物の出力を載せています。
この記事のポイント
- Ollama自体はファインチューニングをしない。学習は Unsloth / LLaMA-Factory など外部フレームワークで行う
- 流れは「LoRA学習 → アダプタをマージ → GGUFに変換 → Modelfileを書く →
ollama create」の5ステップ - QLoRA(4bit量子化LoRA)を使えばVRAM 4GB〜の環境でも小さいモデルを学習できる
- 実測:Ollama 0.30.8 で
ollama createによりカスタムモデルを作成し、SYSTEMプロンプトとPARAMETERが反映されることを確認(2026-06-15) - 実測:学習ツールの最新版は unsloth 2026.6.7 / peft 0.19.1 / transformers 5.12.0(PyPIから取得、2026-06-15)
目次
- LoRAとは?なぜ全パラメータ更新より良いのか
- 全体ワークフロー:学習からOllamaインポートまで
- 必要なハードウェア:VRAMの目安
- 学習ツールのインストール(Unsloth)
- LoRA学習スクリプトの基本
- GGUFへの変換とファイルの確認
- Modelfileを書いてOllamaにインポートする
- インポート確認:ollama show / REST API
- よくあるエラーと対処法
- まとめ
LoRAとは?なぜ全パラメータ更新より良いのか
LoRA(Low-Rank Adaptation)は、大規模言語モデルを少ないVRAMで効率的にファインチューニングする手法です。「低ランク適応」と訳されます。
通常のファインチューニング(フルファインチューニング)では、数十億個あるモデルの全パラメータを更新します。7Bモデルでも学習時には数十GB、70Bモデルなら数百GBのVRAMが必要になり、個人のGPUではまず無理です。
これに対してLoRAは、元のモデルパラメータは凍結したまま、小さな「差分行列(アダプタ)」だけを学習します。この差分行列は元モデルと比べて圧倒的に小さいため、更新する変数の数が劇的に減り、VRAMを大幅に節約できます。学習が終わったらアダプタを元モデルにマージして、1つの完全なモデルに戻します。
全体ワークフロー:学習からOllamaインポートまで
Ollamaでファインチューニング済みモデルを使うには、次の5ステップを踏みます。このうちOllamaが担当するのは最後の「取り込み」だけだ、という点を最初に押さえておくと混乱しません。
- ベースモデルの選択:Llama3.2、Qwen2.5、Gemma3 など、Hugging Faceで公開されているモデルを選ぶ
- LoRA学習:Unsloth / LLaMA-Factory などで自前のデータセットを使って学習(GPU環境)
- アダプタのマージ:学習した差分アダプタをベースモデルにマージして、完全なモデルを作る
- GGUF変換:llama.cpp または Unsloth で GGUF 形式(Ollamaが読めるフォーマット)に変換
- ollama create:Modelfileを書いてOllamaに登録し、推論を実行

注意:Ollamaは「推論」専用
Ollama(ollama.com)はモデルの推論(inference)を実行するツールであり、学習機能は含まれていません。①〜④(学習〜GGUF変換)にはPython環境とGPUが別途必要です。Ollamaがやってくれるのは⑤の取り込み・実行だけ、と理解してください。
必要なハードウェア:VRAMの目安
LoRA学習でいちばん効いてくるのがGPUのVRAM(ビデオメモリ)です。下表はモデルサイズ別の目安をまとめたものです。

注目したいのは、QLoRAを使えばQwen2.5 0.5Bクラスなら2GB程度のVRAMでも学習できるという点です。GeForce GTX 1650(VRAM 4GB)クラスの古いGPUでも試せます。手元にGPUがまったく無い場合でも、Google ColabのようなクラウドGPUを使えば無料枠で始められます。
本格的に学習を回すなら、GPUを時間課金で借りられるクラウドが現実的です。Vultr の Cloud GPU(A100・A40 など)は使った時間だけ課金されるので、小さいモデルの学習なら短時間で試せます。GPUクラウドの選び方は でも比較しています。
学習ツールのインストール(Unsloth)
今回は最も導入が簡単な Unsloth を例にします。Unslothは通常のLoRA学習と比べて学習が2〜5倍速く、VRAM使用量も最適化されているのが特徴です。
手順1:Ubuntu 24.04 にPython環境を用意する
学習環境のベースとして、ubuntu:24.04 公式Dockerイメージで必要なパッケージを実際に入れて確認しました。
PRETTY_NAME=”Ubuntu 24.04.4 LTS”
$ sudo apt update && sudo apt install -y python3 python3-pip python3-venv git
…
$ python3 –version
Python 3.12.3
$ pip3 –version
pip 24.0
$ git –version
git version 2.43.0
実測環境:ubuntu:24.04(Ubuntu 24.04.4 LTS)で確認。Python 3.12.3 / pip 24.0 / git 2.43.0 がインストールされました。python3 -m venv も問題なく仮想環境を作成できます。
手順2:仮想環境を作ってUnslothをインストールする
$ source .venv/bin/activate
(.venv) $ pip install unsloth
Collecting unsloth
Downloading unsloth-2026.6.7-py3-none-any.whl
Collecting peft>=0.19.0
Collecting transformers>=5.12.0
Successfully installed unsloth-2026.6.7 peft-0.19.1 transformers-5.12.0
2026年6月15日時点で、PyPIから取得した主要パッケージの最新バージョンは次のとおりです(PyPI JSON APIで実取得)。

ここで押さえておきたいのは役割分担です。unsloth が学習の高速化レイヤ、peft がLoRAの本体実装、transformers がモデル読み込み、bitsandbytes がQLoRAの4bit量子化、trl が教師あり微調整(SFT)を担当します。Unslothを入れると、これらの依存も一緒に入ります。
LoRA学習スクリプトの基本
Unslothを使った学習の最小構成スクリプトです。このコードはGPU環境で実行します(CPUのみの環境では現実的な時間で終わりません)。
from unsloth import FastLanguageModel
# 1. ベースモデルを4bit量子化で読み込む(QLoRA)
model, tokenizer = FastLanguageModel.from_pretrained(
model_name = “unsloth/Llama-3.2-3B-Instruct-bnb-4bit”,
max_seq_length = 2048,
load_in_4bit = True,
)
# 2. LoRAアダプタを設定する
model = FastLanguageModel.get_peft_model(
model,
r = 16, # LoRAランク(大きいほど表現力↑・VRAM↑)
lora_alpha = 32, # スケーリング係数(定石は r * 2)
lora_dropout = 0.05,
target_modules = [“q_proj”, “k_proj”, “v_proj”, “o_proj”],
)
# 3. trainer.train() で学習(データセット部分は省略)
# 4. アダプタをマージしてGGUF形式で書き出す
model.save_pretrained_gguf(
“my-finetuned-model”,
tokenizer,
quantization_method = “q4_k_m”, # Ollama推奨の量子化
)
注意
save_pretrained_gguf はUnslothの便利メソッドで、LoRAアダプタのマージとGGUF変換を一括で行います。出力は my-finetuned-model.Q4_K_M.gguf のような名前で保存されます。次の章で説明する手動のGGUF変換が不要になるため、Unslothを使うならこちらが手軽です。
GGUFへの変換とファイルの確認
UnslothのGGUF直接エクスポートを使わない場合は、llama.cppの変換スクリプトを使います。
$ cd llama.cpp && pip install -r requirements.txt
# マージ済みモデル(HuggingFace形式)をGGUFに変換
$ python3 convert_hf_to_gguf.py ../merged-model/ \
–outfile ../my-finetuned-model.gguf \
–outtype q4_k_m
INFO: Model successfully exported to my-finetuned-model.gguf
変換できたら、ファイルが本当にGGUF形式になっているかを確認しておくと安心です。GGUFファイルは先頭4バイトが必ず 47 47 55 46(ASCIIで GGUF)になっています。これを「マジックバイト」と呼び、ファイルの破損チェックにも使えます。実際にOllamaがインストールしているQwen2.5 0.5BのGGUF blobを xxd で覗いてみました。

FROM ~/.ollama/models/blobs/sha256-c5396e06af29…
$ xxd ~/.ollama/models/blobs/sha256-c5396e06af29… | head -1
00000000: 4747 5546 0300 0000 2201 0000 0000 0000 GGUF…”…….
$ ls -lh ~/.ollama/models/blobs/sha256-c5396e06af29…
-rw-r–r–@ 1 user staff 379M Jun 15 10:12 sha256-c5396e06af29…
先頭が 4747 5546 になっていて、ASCII表示でも GGUF と読めます(2026-06-15 実測)。量子化方式 q4_k_m(4bit / K-quant / medium)はOllamaでも標準的で、精度とサイズのバランスが良いためおすすめです。GGUFそのものをもっと深掘りしたい場合は を参照してください。
Modelfileを書いてOllamaにインポートする
GGUFファイルができたら、いよいよOllamaの出番です。Ollama用の設定ファイル「Modelfile」を書いて取り込みます。
手順1:Modelfileを作成する
# GGUFファイルへのパスを指定
FROM ./my-finetuned-model.gguf
# モデルの役割を定義するシステムプロンプト
SYSTEM “””あなたはLinuxサーバー専門のアシスタントです。”””
# 推論パラメータ
PARAMETER num_ctx 2048
PARAMETER temperature 0.6
PARAMETER top_k 40
PARAMETER top_p 0.9
主なパラメータの意味は次のとおりです。
| パラメータ | 値の例 | 説明 |
|---|---|---|
FROM |
./model.gguf |
GGUFファイルのパス(必須)。学習済みモデルはここを差し替える |
SYSTEM |
任意テキスト | モデルの役割・人格を定義するプロンプト |
num_ctx |
2048〜8192 | コンテキスト長(大きいほどVRAM消費増) |
temperature |
0.6〜0.7 | 出力のランダム性。0で決定的、1でランダム寄り |
top_k |
40〜80 | 次トークン候補の上位K件だけを選択対象にする |
手順2:ollama create でインポートする
ここからはOllama 0.30.8の実機で動かした結果です。今回は学習済みGGUFの代わりに、手元にあるQwen2.5 0.5BのGGUF blobを FROM に指定し、linuxlab-lora-demo という名前のカスタムモデルを作成しました(取り込み手順自体は学習済みGGUFでもまったく同じです)。

gathering model components
copying file sha256:c5396e06af29… 100%
parsing GGUF
writing manifest
success
正直、GGUFのコピーが発生するため大きいモデルほど作成に時間がかかります。今回の0.5B(Q4_K_M / 379MB)なら数秒で終わりました。
インポート確認:ollama show / REST API
取り込みが成功したか、複数の角度から確認します。まず ollama show --modelfile で、Modelfileに書いた設定がそのまま登録されているかを見ます。
FROM ~/.ollama/models/blobs/sha256-9c63daaf099c…
TEMPLATE {{ .Prompt }}
SYSTEM あなたはLinuxサーバー専門のアシスタントです。…
PARAMETER num_ctx 2048
PARAMETER temperature 0.6
PARAMETER top_k 40
PARAMETER top_p 0.9
SYSTEMプロンプトと4つのPARAMETERが、書いたとおりに登録されているのが分かります(2026-06-15 実測)。これで「カスタムModelfileでモデルの挙動を制御する」という目的は達成です。
次に、Ollamaが立ち上げているREST APIからも確認しておきます。http://localhost:11434/api/tags に登録済みモデル一覧が、/api/version にバージョンが返ってきます。ブラウザでアクセスした実際の画面が次の2枚です。


/api/tags のJSONの先頭に linuxlab-lora-demo:latest が並んでおり、/api/version は {"version":"0.30.8"} を返しています。APIから扱えるということは、Python や他のアプリからもそのまま呼び出せるということです(API連携は で詳しく解説しています)。
最後に、ここまでの「学習 → GGUF確認 → 取り込み」の流れを1枚のターミナルにまとめると、次のようなイメージになります。

小さいモデルでの注意
今回ベースに使ったQwen2.5 0.5Bのような超小型モデルは、SYSTEMプロンプトを与えても指示への追従が弱く、回答が不安定になりがちです。実際に ollama run で質問しても、的外れな出力になることがありました。「自分のデータでちゃんと賢くする」のがファインチューニングの本質であり、その効果を出すには最低でも1B〜3Bクラス+十分な学習データが必要だと考えてください。
よくあるエラーと対処法
エラー1:CUDA out of memory(学習時)
Tried to allocate 1.50 GiB (GPU 0; 7.79 GiB total capacity;
6.83 GiB already allocated)
対処法:バッチサイズを下げる、load_in_4bit=True でQLoRAにする、より小さいモデルに切り替える、のいずれかです。
gradient_accumulation_steps = 4, # 勾配を積み立てて実効バッチを稼ぐ
load_in_4bit = True, # QLoRA有効化
エラー2:no such file or directory(ollama create時)
対処法:Modelfileの FROM に書いたパスが間違っているか、GGUFファイルが存在しません。ls -la *.gguf でファイルの実在を確認し、相対パスで詰まる場合は絶対パスで指定すると確実です。
-rw-r–r– 1 user user 397M Jun 15 10:30 my-finetuned-model.gguf
$ sed -i ‘s|FROM ./|FROM /home/user/my-finetune/|’ Modelfile
$ ollama create my-linux-expert -f Modelfile
success
エラー3:モデルの応答がおかしい(学習の失敗)
学習はエラーなく終わったのに応答が変、という場合によくある原因です。
- データセットのフォーマットがモデルのチャットテンプレートと合っていない
- 学習データが少なすぎる(目安:最低でも数百〜千件のサンプル)
- 学習率が高すぎて元の知識を忘れている(catastrophic forgetting)→
learning_rate=2e-4前後が目安 lora_alphaとrの比率が不適切(alpha = r * 2が定石)- そもそもベースモデルが小さすぎる(0.5B級は指示追従が弱い)
まとめ
Ollamaでファインチューニング済みモデルを使うワークフローを整理します。
- Ollama自体は学習機能を持たない。学習はUnsloth(実測 2026.6.7)などの外部ツールで行う
- LoRAはベースモデルを凍結し差分アダプタだけを学習するため、少ないVRAMで済む
- QLoRA(4bit量子化)を使えばVRAM 4GB〜の環境でも小さいモデルを学習できる
- 学習済みモデルは save_pretrained_gguf(Unsloth)またはllama.cppでGGUFに変換する。先頭4バイトが 4747 5546 なら正しいGGUF
- GGUF+Modelfile(FROM・SYSTEM・PARAMETER)で ollama create するだけでOllamaに取り込める
- 実測:Ollama 0.30.8 でカスタムモデルを作成し、SYSTEM・PARAMETERが反映されること、REST APIから扱えることを確認(2026-06-15)
学習環境としてGPUを用意するなら、時間課金のクラウドGPUが手軽でコストも抑えられます。国内サポートを重視するなら日本語で使えるVPSも選択肢です。

コメント