「.NET 開発基盤部会 Wiki」は、「Open棟梁Project」,「OSSコンソーシアム .NET開発基盤部会」によって運営されています。
LLMのファイン・チューニング(FT)は既存LLMを特定の用途や業界向けに最適化するための手法
FTは、以下のような場面で活用される。
場面 | 使途 |
カスタマーサポート | 自社独自のFAQや業界特有の表現に適応させる。 |
医療や法律分野 | 専門用語や規制対応の正確な知識を学習させる。 |
文書生成や翻訳 | 高精度な自然言語処理を必要とする場面。 |
主に以下の手法がある。
分類 | 種類 | 解説 |
フル・ファインチューニング | 全体調整型 | LLM全体を再学習させる方法。高いカスタマイズ性があるが、学習に大量のデータと計算リソースが必要。 |
軽量ファイン・チューニング | 表現調整型・パラメタ効率型 | 一部のパラメタや特定の層に限定して調整を加える方法。計算コストを抑えつつ高いカスタマイズ性を維持。 |
分類 | 手法 |
全体調整型 | Full Fine-Tuning |
部分調整型 | ReFT (Representation Fine-Tuning), Reward Fine-Tuning |
パラメタ効率型(PEFT: Parameter-Efficient Fine-Tuning) | LoRA, QLoRA, Adapter, Prefix Tuning, BitFit |
指示・強化学習型 | Instruction Tuning, RLHF(Reinforcement Learning from Human Feedback) |
モデルの全パラメタを特定のタスクやドメインに合わせて調整するプロセス
PEFT:Parameter-Efficient Fine-Tuning
モデルの内部(≒埋め込み層、隠れ層、アテンション機構)を報酬を使って微調整する。
LoRA:Low-Rank Adaptation(低ランク適応)
JSON: {"input": "ユーザーの質問", "output": "AIの回答"}
QLoRA:Quantized Low-Rank Adaptation
※ 余談だが、
LoRA:Low-Rank Adaptationの「スキップ接続された線形結合層」(Adapter)を追加(Adaptation)するような方法、全般。
BitFit?:Bias-only fine-tuning
指示に基づいてモデルを調整する教師あり学習(Supervised Fine-Tuning, SFT)
RLHF:Reinforcement Learning from Human Feedback
Get-AzComputeResourceSku | Where-Object { $_.Name -eq "Standard_NV36ads_A10_v5" } | Select-Object Locations
vmSize=Standard_NV36ads_A10_v5 vmOS=Canonical:0001-com-ubuntu-pro-focal:pro-20_04-lts-gen2:latest vmName=GPU-VM2 vmUser=XXXX vmPassword=XXXX※ Ubuntu2004なのは「NVIDIA GPU Driver Extension」の前提条件のため。
az vm image terms accept \ --publisher canonical \ --offer 0001-com-ubuntu-pro-focal \ --plan pro-20_04-lts-gen2※ 作成後はセキュア ブートと vTPM を無効化する必要がある。
$ nvidia-smi Thu Jul 3 03:14:40 2025 +-----------------------------------------------------------------------------------------+ | NVIDIA-SMI 550.144.06 Driver Version: 550.144.06 CUDA Version: 12.4 | |-----------------------------------------+------------------------+----------------------+ | GPU Name Persistence-M | Bus-Id Disp.A | Volatile Uncorr. ECC | | Fan Temp Perf Pwr:Usage/Cap | Memory-Usage | GPU-Util Compute M. | | | | MIG M. | |=========================================+========================+======================| | 0 NVIDIA A10-24Q On | 00000002:00:00.0 Off | 0 | | N/A N/A P8 N/A / N/A | 1MiB / 24512MiB | 0% Default | | | | N/A | +-----------------------------------------+------------------------+----------------------+ +-----------------------------------------------------------------------------------------+ | Processes: | | GPU GI CI PID Type Process name GPU Memory | | ID ID Usage | |=========================================================================================| | No running processes found | +-----------------------------------------------------------------------------------------+
sudo apt-key adv --fetch-keys https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2004/x86_64/7fa2af80.pub sudo apt-key adv --fetch-keys https://developer.download.nvidia.com/compute/cuda/repos/ubuntu1804/x86_64/3bf863cc.pub・nvcc -Vで実際に入ったバージョンを確認すると、
$ nvcc -V nvcc: NVIDIA (R) Cuda compiler driver Copyright (c) 2005-2025 NVIDIA Corporation Built on Tue_May_27_02:21:03_PDT_2025 Cuda compilation tools, release 12.9, V12.9.86 Build cuda_12.9.r12.9/compiler.36037853_0・一説によると、バージョン指定しない場合、最新のCUDAが入るらしい。
sudo apt-get -y install cuda・その後の手順でドライバ死亡が確認される。
$ nvidia-smi NVIDIA-SMI has failed because it couldn't communicate with the NVIDIA driver.
$ nvcc -V nvcc: NVIDIA (R) Cuda compiler driver Copyright (c) 2005-2024 NVIDIA Corporation Built on Thu_Mar_28_02:18:24_PDT_2024 Cuda compilation tools, release 12.4, V12.4.131 Build cuda_12.4.r12.4/compiler.34097967_0・こちらの手順で、CUDA Toolkit 11.3をインストール(ドライバ死亡)
sudo apt-get -y install cuda-11-3・nvcc -Vでインストールは確認できるが、
$ nvcc -V ...・その後の手順でドライバ死亡が確認される。
$ nvidia-smi NVIDIA-SMI has failed because it couldn't communicate with the NVIDIA driver.
nvidia-smi ...・ココまで成功したのは、CUDA Toolkit 12.4の手順でのみ。
sudo apt update sudo apt install -y build-essential zlib1g-dev libncurses5-dev libgdbm-dev libnss3-dev libssl-dev libreadline-dev libffi-dev libsqlite3-dev libbz2-dev liblzma-dev・Python 3.12.3 のソースコードをダウンロード
cd /usr/src sudo wget https://www.python.org/ftp/python/3.12.3/Python-3.12.3.tgz sudo tar xzf Python-3.12.3.tgz cd Python-3.12.3・コンパイルしてインストール
sudo ./configure --enable-optimizations sudo make -j$(nproc) sudo make altinstall※ --enable-optimizations は高速化オプション
cd ~ # 再ログインでも良い・実行とバージョン確認(フルパス)
/usr/local/bin/python3.12 --version /usr/local/bin/python3.12 >>>・実行とバージョン確認(PATHにある)
python3.12 --version python3.12 >>>・pipの扱いはどうなるのか?
installed pip-24.0 WARNING: Running pip as the 'root' user can result in broken permissions and conflicting behaviour with the system package manager. It is recommended to use a virtual environment instead: https://pip.pypa.io/warnings/venv・実行結果(Python3に対応)
$ pip Command 'pip' not found, but can be installed with: sudo apt install python3-pip $ pip3 # pip3って訳でもないらしい Command 'pip3' not found, but can be installed with: sudo apt install python3-pip・実行結果(Python3.12に対応)
pip3.12 Usage: pip3.12 <command> [options] Commands: ... General Options: ...
python3.12 -m venv .python312_venv・activate
source .python312_venv/bin/activate・deactivate
deactivate
sudo apt update sudo apt install python3-pip pip3 --version・python3.12のpipをインストール・アップグレード
sudo python3.12 -m ensurepip --upgrade sudo python3.12 -m pip install --upgrade pip※ sudo を付与した pip 周辺で警告が表示されるが、ココでは問題はない。
python3.12 -m pip --version pip3.12 --version・pip3.12 を使って仮想環境外でパッケージをインストール
pip3.12 install --user numpy※ --user をつけることで、~/.local/ 以下にインストールされ、他環境には影響を与えない。
pip install --upgrade pip・仮想環境内でパッケージをインストール
pip install numpy※ pipは仮想環境内での使用が推奨:https://pip.pypa.io/warnings/venv
TMPDIR=/mnt/tmp pip3.12 install torch==2.6.0 torchvision==0.21.0 torchaudio==2.6.0 --index-url https://download.pytorch.org/whl/cu124~・仮想環境(.python312_venv)内へはpipを使ってやる。
TMPDIR=/mnt/tmp pip install torch==2.6.0 torchvision==0.21.0 torchaudio==2.6.0 --index-url https://download.pytorch.org/whl/cu124・実行確認(インタラクティブ実行で)
python3.12 >>> import torch >>> print(torch.cuda.is_available()) # TrueならOK True >>> print(torch.cuda.get_device_name(0)) # GPU名表示 NVIDIA A10-24Q
学習形式 | 入力形式 | ライブラリ | クラス |
次単語予測(事前学習) | 生テキスト | huggingface/transformers | Trainer |
SFT / Instruction tuning | JSON形式の会話データ | huggingface/TRL | SFTTrainer(Trainerを継承) |
プロジェクト内容 | 推奨トレーナー |
GPTのような汎用LMの事前学習 | Trainer(with Causal LM) |
ChatGPT風の会話モデル | SFTTrainer(またはLoRA + SFTTrainer) |
RLHF(報酬学習やPPO)まで進める | trl 内の SFTTrainer → RewardTrainer? → PPOTrainer の流れ |
from peft import PeftModel base_model = AutoModelForCausalLM.from_pretrained("meta-llama/Llama-2-7b-hf", device_map="auto") model = PeftModel.from_pretrained(base_model, "path/to/lora_adapter") merged_model = model.merge_and_unload() merged_model.save_pretrained("merged_model") tokenizer.save_pretrained("merged_model")
FROM llama2 # ファインチューニング済み GGUF を追加 PARAMETER_FILE ./llama-2-7b-q4.gguf
ollama create my-llama2-qa -f Modelfile
ollama run my-llama2-qa