TRL documentation
Tích hợp Unsloth
Tích hợp Unsloth
Unsloth là một framework mã nguồn mở để fine-tuning và reinforcement learning, giúp huấn luyện các LLM (như Llama, OpenAI gpt-oss, Mistral, Gemma, DeepSeek và nhiều hơn) nhanh hơn tới 2 lần với lượng VRAM giảm tới 80%. Unsloth cho phép huấn luyện, đánh giá, chạy và triển khai với các inference engine khác như llama.cpp, Ollama và vLLM.
Thư viện cung cấp quy trình làm việc tối giản, tương thích với Hugging Face cho việc huấn luyện, đánh giá, suy luận và triển khai, đồng thời hoàn toàn tương thích với SFTTrainer.
Tính năng chính
- Hỗ trợ huấn luyện cho tất cả các mô hình tương thích với transformer: Text-to-speech (TTS), đa phương thức, BERT, RL và nhiều hơn nữa
- Hỗ trợ fine-tuning đầy đủ, pretraining, LoRA, QLoRA, huấn luyện 8-bit & nhiều hơn
- Hoạt động trên Linux, Windows, Colab, Kaggle; GPU NVIDIA, sắp hỗ trợ cấu hình AMD & Intel
- Hỗ trợ hầu hết các tính năng mà TRL hỗ trợ, bao gồm RLHF (GSPO, GRPO, DPO, v.v.)
- Các kernel Triton viết tay và bộ máy backprop thủ công đảm bảo không có sự suy giảm độ chính xác (0% lỗi xấp xỉ)
Cài đặt
pip install
Cài đặt cục bộ (khuyến nghị Linux):
pip install unsloth
Bạn cũng có thể cài đặt unsloth theo tài liệu chính thức. Sau khi cài đặt, bạn có thể tích hợp unsloth vào quy trình làm việc của mình một cách rất đơn giản; thay vì nạp AutoModelForCausalLM, bạn chỉ cần nạp một FastLanguageModel như sau:
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()Mô hình đã lưu hoàn toàn tương thích với thư viện transformers của Hugging Face. Tìm hiểu thêm về unsloth trong kho lưu trữ chính thức của họ.
Cài đặt Docker
docker run -d -e JUPYTER_PASSWORD="mypassword" \
-p 8888:8888 -p 2222:22 \
-v $(pwd)/work:/workspace/work \
--gpus all \
unsloth/unslothTruy cập Jupyter Lab tại http://localhost:8888 và bắt đầu tinh chỉnh!
Huấn luyện
Đây là một số cài đặt cơ bản mà bạn có thể bật/tắt trước khi huấn luyện:
max_seq_length = 2048– Kiểm soát độ dài ngữ cảnh. Mặc dù Llama-3 hỗ trợ 8192, chúng tôi khuyến nghị 2048 để kiểm thử. Unsloth cho phép fine-tuning với ngữ cảnh dài gấp 4 lần.dtype = "auto"– Để tự động phát hiện; sử dụng torch.float16 hoặc torch.bfloat16 cho các GPU đời mới.load_in_4bit = True– Bật lượng tử hóa 4-bit, giảm 4 lần bộ nhớ sử dụng khi fine-tuning. Tắt tính năng này cho phép bật fine-tuning LoRA 16-bit.- Để bật fine-tuning đầy đủ (FFT), đặt
full_finetuning = True. Đối với fine-tuning 8-bit, đặtload_in_8bit = True. Lưu ý: Chỉ có thể đặt một phương pháp huấn luyện thành True tại một thời điểm.
Để biết thêm thông tin về việc cấu hình các siêu tham số và tính năng của Unsloth, hãy đọc hướng dẫn tài liệu tại đây.
Lưu mô hình
Unsloth cho phép bạn lưu trực tiếp mô hình đã tinh chỉnh dưới dạng một tệp nhỏ gọi là bộ thích ứng LoRA. Bạn cũng có thể đẩy lên Hugging Face hub nếu muốn tải mô hình của mình lên! Hãy nhớ lấy token Hugging Face và thêm token của bạn!
Lưu vào GGUF
Để lưu dưới định dạng GGUF, Unsloth sử dụng llama.cpp. Để lưu cục bộ:
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")Để đẩy lên hub:
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")Lưu vào vLLM
Để lưu ở 16-bit cho vLLM, hãy sử dụng:
model.save_pretrained_merged("model", tokenizer, save_method = "merged_16bit",)
model.push_to_hub_merged("hf/model", tokenizer, save_method = "merged_16bit", token = "")