TRL documentation
Unsloth統合
Unsloth統合
Unslothは、LLM(Llama、OpenAI gpt-oss、Mistral、Gemma、DeepSeekなど)のファインチューニングと強化学習のためのオープンソースフレームワークです。VRAMを最大80%削減しながら、最大2倍の速度で学習できます。Unslothを使用すると、学習、評価、実行、およびllama.cpp、Ollama、vLLMなどの他の推論エンジンでのデプロイを行うことができます。
このライブラリは、学習、評価、推論、デプロイのための、Hugging Face 互換の簡素化されたワークフローを提供し、SFTTrainer と完全に互換性があります。
主な機能
- すべてのTransformer互換モデルのトレーニングサポート: テキストから音声への変換 (TTS)、マルチモーダル、BERT、強化学習など
- フルファインチューニング、事前学習、LoRA、QLoRA、8ビット学習などをサポート
- Linux、Windows、Colab、Kaggleで動作します。NVIDIA GPUに対応し、近々AMDおよびIntelの環境にも対応予定です。
- TRLがサポートするほとんどの機能、RLHF(GSPO、GRPO、DPOなど)を含む
- 手書きのTritonカーネルと手動のバックプロパゲーションエンジンにより、精度の劣化(近似誤差0%)がないことを保証します
インストール
pip install
ローカルインストール(Linux 推奨):
pip install unsloth
unslothは、公式ドキュメントに従ってインストールすることもできます。インストールが完了すると、非常にシンプルな方法でワークフローにunslothを組み込むことができます。AutoModelForCausalLMを読み込む代わりに、次のようにFastLanguageModelを読み込むだけです。
import torch
from trl import SFTConfig, SFTTrainer
from unsloth import FastLanguageModel
max_length = 2048 # Supports automatic RoPE Scaling, so choose any number
# Load model
model, tokenizer = FastLanguageModel.from_pretrained(
model_name="unsloth/mistral-7b",
max_seq_length=max_length,
dtype="auto", # For auto-detection. Float16 for Tesla T4, V100, Bfloat16 for Ampere+
load_in_4bit=True, # Use 4bit quantization to reduce memory usage. Can be False
)
# Do model patching and add fast LoRA weights
model = FastLanguageModel.get_peft_model(
model,
r=16,
target_modules=[
"q_proj",
"k_proj",
"v_proj",
"o_proj",
"gate_proj",
"up_proj",
"down_proj",
],
lora_alpha=16,
lora_dropout=0, # Dropout = 0 is currently optimized
bias="none", # Bias = "none" is currently optimized
use_gradient_checkpointing=True,
random_state=3407,
)
training_args = SFTConfig(output_dir="./output", max_length=max_length)
trainer = SFTTrainer(
model=model,
args=training_args,
train_dataset=dataset,
)
trainer.train()保存されたモデルは、Hugging Faceのtransformersライブラリと完全に互換性があります。unslothの詳細については、公式リポジトリをご覧ください。
Dockerでのインストール
docker run -d -e JUPYTER_PASSWORD="mypassword" \
-p 8888:8888 -p 2222:22 \
-v $(pwd)/work:/workspace/work \
--gpus all \
unsloth/unslothhttp://localhost:8888 で Jupyter Lab にアクセスし、ファインチューニングを開始してください!
トレーニング
これは、学習前に切り替え可能な一部の主要な設定です:
max_seq_length = 2048– コンテキスト長を制御します。Llama-3 は 8192 をサポートしていますが、テストには 2048 を推奨します。Unsloth を使用すると、4 倍の長いコンテキストでのファインチューニングが可能になります。dtype = "auto"– 自動検出に使用します。新しい GPU では torch.float16 または torch.bfloat16 を使用してください。load_in_4bit = True– 4ビット量子化を有効にし、ファインチューニング時のメモリ使用量を4分の1に削減します。無効にすると、LoRA 16ビットファインチューニングを有効にできます。- フルファインチューニング(FFT)を有効にするには、
full_finetuning = Trueを設定します。8ビットファインチューニングを行うには、load_in_8bit = Trueを設定します。注意: 一度にTrueに設定できる学習方法は1つのみです。
Unslothのハイパーパラメータや機能の設定に関する詳細については、こちらのドキュメントガイドをご覧ください。
モデルの保存
Unslothを使用すると、ファインチューニングしたモデルをLoRAアダプターと呼ばれる小さなファイルとして直接保存できます。モデルをアップロードしたい場合は、Hugging Faceハブにプッシュすることもできます。Hugging Faceトークンを取得し、トークンを追加することを忘れないでください。
GGUF形式での保存
GGUF形式で保存するには、Unslothはllama.cppを使用します。ローカルに保存するには:
model.save_pretrained_gguf("directory", tokenizer, quantization_method = "q4_k_m")
model.save_pretrained_gguf("directory", tokenizer, quantization_method = "q8_0")
model.save_pretrained_gguf("directory", tokenizer, quantization_method = "f16")ハブにプッシュするには:
model.push_to_hub_gguf("hf_username/directory", tokenizer, quantization_method = "q4_k_m")
model.push_to_hub_gguf("hf_username/directory", tokenizer, quantization_method = "q8_0")vLLM への保存
vLLM用に16ビットで保存するには、以下を使用します:
model.save_pretrained_merged("model", tokenizer, save_method = "merged_16bit",)
model.push_to_hub_merged("hf/model", tokenizer, save_method = "merged_16bit", token = "")