Hướng dẫn Gemma 4
Cách tinh chỉnh Gemma 4 với Unsloth: Hướng dẫn chi tiết từng bước

Unsloth hỗ trợ ngay từ ngày đầu cho cả bốn biến thể của Gemma 4 — E2B, E4B, 26B-A4B và 31B. Nó giúp huấn luyện các mô hình nhanh hơn gấp 2 lần và sử dụng ít VRAM hơn tới 70% so với phương pháp huấn luyện tiêu chuẩn của Hugging Face, điều này khiến nó trở thành sự lựa chọn thực tế cho bất kỳ ai làm việc trên phần cứng tiêu dùng.
Hướng dẫn này bao quát mọi thứ, từ việc chọn biến thể mô hình phù hợp cho đến việc xuất adapter đã hoàn thiện để sử dụng trong Ollama, llama.cpp hoặc LM Studio.
Đồ hình Gemma 4 nào bạn nên tinh chỉnh?
Câu trả lời phụ thuộc vào phần cứng của bạn và mục tiêu bạn muốn đạt được.
| Mô hình | VRAM cho huấn luyện (LoRA, bf16) | Tốt nhất cho |
|---|---|---|
| E4B | ~8–10 GB | Laptop, RTX 3060/4060, Colab miễn phí |
| E2B | ~6–8 GB | Các tác vụ đa phương thức + âm thanh, ngân sách hạn hẹp nhất |
| 26B-A4B | ~24+ GB (16-bit LoRA) | Cân bằng chất lượng/tốc độ, RTX 3090/4090 |
| 31B | ~20 GB (QLoRA 4-bit) | Chất lượng tối đa, NVIDIA A100 / GPU kép |
Một vài lưu ý thực sự quan trọng:
E4B là điểm khởi đầu phù hợp cho hầu hết mọi người. Nó chạy được trên Google Colab miễn phí (GPU T4), vừa vặn với bất kỳ GPU RTX nào có VRAM từ 12 GB hoặc hơn, và hỗ trợ tinh chỉnh cả văn bản lẫn đa phương thức (hình ảnh + âm thanh). Unsloth cung cấp các notebook Colab miễn phí cho mô hình này.
Tránh sử dụng QLoRA trên mô hình MoE 26B-A4B. Vì 26B-A4B là một mô hình Mixture-of-Experts (MoE), Unsloth khuyến nghị sử dụng 16-bit LoRA thay vì 4-bit QLoRA. Cách định tuyến của MoE và lượng tử hóa 4-bit tương tác kém với nhau. Hãy dùng load_in_16bit=True thay vì load_in_4bit=True cho biến thể này.
31B là một mục tiêu tinh chỉnh tốt khi chất lượng là ưu tiên hàng đầu. Đó là một mô hình dense (QLoRA hoạt động tốt) và hiện đang xếp hạng thứ 3 trên bảng xếp hạng văn bản Arena AI trong số các mô hình mở.
Trước khi bạn bắt đầu: Cài đặt và cập nhật Unsloth
Nếu bạn chưa cài đặt Unsloth, hãy bắt đầu tại đây. Có hai cách để sử dụng nó: Unsloth Studio (một giao diện web không mã nguồn) và Unsloth Core (thư viện Python cho các quy trình dựa trên mã nguồn).
Lựa chọn A — Unsloth Studio (Không mã nguồn, khuyến nghị cho người mới bắt đầu)
macOS, Linux, hoặc WSL:
curl -fsSL https://unsloth.ai/install.sh | sh
Windows PowerShell:
irm https://unsloth.ai/install.ps1 | iex
Sau khi cài đặt, khởi chạy Studio:
unsloth studio -H 0.0.0.0 -p 8888
Sau đó mở http://localhost:8888 trong trình duyệt của bạn. Ở lần khởi chạy đầu tiên, bạn sẽ tạo một mật khẩu, sau đó sử dụng trình hướng dẫn để tìm kiếm Gemma 4, chọn kích thước mô hình và chọn tập dữ liệu. Unsloth Studio xử lý phần còn lại — bạn chỉ cần theo dõi tiến trình huấn luyện từ giao diện và xuất kết quả khi hoàn tất.
Lựa chọn B — Unsloth Core (Dựa trên mã nguồn)
Nếu bạn đã cài đặt Unsloth từ trước, hãy cập nhật nó đầu tiên:
pip install --upgrade --force-reinstall --no-cache-dir unsloth unsloth_zoo
Để cài đặt mới với cơ chế backend PyTorch được tự động phát hiện:
pip install unsloth --torch-backend=auto
Chuẩn bị tập dữ liệu của bạn
Gemma 4 sử dụng định dạng hội thoại tiêu chuẩn với các vai trò user (người dùng) và model (mô hình) — không phải các định dạng đặc thù của Gemma thế hệ 1/2/3 trước đây. Dữ liệu huấn luyện của bạn nên trông như thế này:
{
"messages": [
{
"role": "user",
"content": "Phân loại cảm xúc của đánh giá này: 'Giao hàng bị trễ nhưng sản phẩm rất tuyệt vời.'"
},
{
"role": "model",
"content": "Hỗn hợp — cảm xúc tiêu cực đối với việc giao hàng, tích cực đối với sản phẩm."
}
]
}
Một vài quy tắc định dạng đặc thù cho Gemma 4:
- Sử dụng
"role": "model"(không phải"assistant") cho các phản hồi của Gemma 4. Điều này khớp với chat template của tokenizer. - Hỗ trợ system prompt gốc là điểm mới trong Gemma 4. Bạn có thể bao gồm một tin nhắn
{"role": "system", "content": "..."}ở đầu mỗi cuộc hội thoại. - Để kích hoạt chế độ suy nghĩ (thinking mode) trong khi huấn luyện, hãy đặt
<|think|>ở đầu system prompt của bạn. Nếu bạn muốn duy trì khả năng suy luận của mô hình, hãy trộn lẫn các ví dụ kiểu suy luận với các câu trả lời trực tiếp — Unsloth khuyến nghị giữ ít nhất 75% ví dụ suy luận nếu bạn quan tâm đến khả năng đó. - Đối với các cuộc hội thoại nhiều lượt (multi-turn), chỉ bao gồm câu trả lời cuối cùng có thể nhìn thấy được vào mục tiêu huấn luyện. Đừng đưa các khối suy nghĩ trước đó vào các lượt tiếp theo.
Hướng dẫn kích thước tập dữ liệu:
- Tinh chỉnh phong cách hoặc giọng văn: 200–1.000 ví dụ chất lượng cao.
- Thích ứng lĩnh vực cụ thể (y tế, pháp lý, kỹ thuật): 10.000–50.000 ví dụ.
- Tuân theo chỉ dẫn: 5.000–20.000 ví dụ.
- Các tác vụ phân loại hoặc trích xuất: 500–5.000 ví dụ.
Luôn dành ra 10–20% dữ liệu để đánh giá. Chỉ cần một ví dụ nhiễu hoặc dán nhãn sai cũng có thể làm mất lợi ích của hàng chục ví dụ sạch.
Tinh chỉnh văn bản: Hướng dẫn mã nguồn đầy đủ
Ví dụ này tinh chỉnh Gemma 4 E4B với LoRA cho một tác vụ văn bản. Hãy thay thế URL tập dữ liệu bằng nguồn dữ liệu của riêng bạn.
from unsloth import FastLanguageModel
import torch
from datasets import load_dataset
from trl import SFTTrainer, SFTConfig
max_seq_length = 2048 # Bắt đầu thận trọng. Tăng quy mô khi hệ thống đã hoạt động tốt.
# Tải tập dữ liệu của bạn — cần một cột "text", hoặc sử dụng tập dữ liệu định dạng chat
dataset = load_dataset("json", data_files={"train": "your_dataset.jsonl"}, split="train")
# Tải mô hình
model, tokenizer = FastLanguageModel.from_pretrained(
model_name = "google/gemma-4-e4b-it",
max_seq_length = max_seq_length,
load_in_4bit = False, # Với E4B và 31B dense: QLoRA (4-bit) cũng hoạt động tốt
load_in_16bit = True, # bf16 LoRA — điểm bắt đầu khuyến nghị
full_finetuning = False,
)
# Gắn LoRA adapters
model = FastLanguageModel.get_peft_model(
model,
r = 16, # LoRA rank — càng cao = dung lượng càng lớn, càng tốn VRAM
target_modules = [
"q_proj", "k_proj", "v_proj", "o_proj",
"gate_proj", "up_proj", "down_proj",
],
lora_alpha = 16,
lora_dropout = 0,
bias = "none",
use_gradient_checkpointing = "unsloth", # Cần thiết cho ngữ cảnh dài hoặc VRAM hẹp
random_state = 3407,
max_seq_length = max_seq_length,
)
# Huấn luyện
trainer = SFTTrainer(
model = model,
train_dataset = dataset,
tokenizer = tokenizer,
args = SFTConfig(
max_seq_length = max_seq_length,
per_device_train_batch_size = 1,
gradient_accumulation_steps = 4,
warmup_steps = 10,
max_steps = 100, # Thay thế bằng num_train_epochs cho phiên chạy thực tế
logging_steps = 1,
output_dir = "outputs_gemma4",
optim = "adamw_8bit",
seed = 3407,
dataset_num_proc = 1,
),
)
trainer.train()
Bị tràn bộ nhớ? Một vài thứ cần thử trước: giảm per_device_train_batch_size xuống 1, và giảm max_seq_length. Hãy giữ use_gradient_checkpointing="unsloth" — nó được thiết kế đặc biệt để giảm mức sử dụng VRAM và kéo dài độ dài ngữ cảnh hiệu dụng trong quá trình huấn luyện.
Tinh chỉnh mô hình MoE 26B-A4B
Mô hình MoE cần một loader hơi khác một chút. Sử dụng FastModel thay vì FastLanguageModel, và hãy dùng 16-bit LoRA:
import os
import torch
from unsloth import FastModel
model, tokenizer = FastModel.from_pretrained(
model_name = "unsloth/Gemma-4-26B-A4B-it",
max_seq_length = 2048,
load_in_4bit = False, # QLoRA không được khuyến nghị cho MoE
load_in_16bit = True, # bf16 LoRA
full_finetuning = False,
)
Một khi đã được nạp, hãy gắn LoRA adapters và huấn luyện theo cùng một cách như ví dụ E4B ở trên. Đối với tinh chỉnh MoE, Unsloth khuyến nghị bắt đầu với rank 16 và độ dài ngữ cảnh ngắn hơn, sau đó chỉ tăng quy mô sau khi hệ thống đã ổn định.
Tinh chỉnh đa phương thức (E2B và E4B)
E2B và E4B là các biến thể Gemma 4 được thiết kế cho các tác vụ đa phương thức — chúng xử lý hình ảnh và âm thanh một cách nguyên bản. Nếu tác vụ tinh chỉnh của bạn liên quan đến hình ảnh, hãy sử dụng FastVisionModel:
from unsloth import FastVisionModel
from unsloth.trainer import UnslothVisionDataCollator
from trl import SFTTrainer, SFTConfig
model, tokenizer = FastVisionModel.from_pretrained(
model_name = "google/gemma-4-e4b-it",
max_seq_length = 2048,
load_in_4bit = False,
use_gradient_checkpointing = "unsloth",
)
model = FastVisionModel.get_peft_model(
model,
finetune_vision_layers = False, # Bắt đầu với text-only để tiết kiệm VRAM
finetune_language_layers = True,
finetune_attention_modules = True,
finetune_mlp_modules = True,
r = 16,
lora_alpha = 16,
lora_dropout = 0,
bias = "none",
target_modules = "all-linear",
)
trainer = SFTTrainer(
model = model,
tokenizer = tokenizer,
data_collator = UnslothVisionDataCollator(model, tokenizer),
train_dataset = dataset,
args = SFTConfig(
per_device_train_batch_size = 1,
gradient_accumulation_steps = 4,
learning_rate = 2e-4,
output_dir = "outputs_gemma4_vision",
),
)
trainer.train()
Quan trọng: Trong các prompt đa phương thức của Gemma 4, hình ảnh phải nằm trước hướng dẫn văn bản trong danh sách nội dung tin nhắn. Định dạng cụ thể như sau:
{
"messages": [
{
"role": "user",
"content": [
{"type": "image", "image": "duong/dan/den/anh.jpg"},
{"type": "text", "text": "Hãy mô tả những gì đang diễn ra trong bức ảnh này."}
]
},
{
"role": "model",
"content": "..."
}
]
}
Đối với tinh chỉnh về âm thanh (chỉ dành cho E2B / E4B): hãy giữ các đoạn âm thanh ngắn và đặc thù cho tác vụ. Unsloth khuyến nghị theo dõi các ví dụ trong Vision RL notebook của họ cho các quy trình về âm thanh.
Lưu và xuất mô hình đã tinh chỉnh của bạn
Sau khi huấn luyện, bạn có vài con đường để xuất tùy thuộc vào nơi bạn dự định triển khai.
Lưu dưới dạng LoRA adapter (Nhanh nhất, nhỏ nhất)
model.save_pretrained("gemma4_e4b_adapter")
tokenizer.save_pretrained("gemma4_e4b_adapter")
Cách này chỉ lưu các trọng số của adapter — chỉ vài trăm MB thay vì toàn bộ mô hình. Bạn cần mô hình cơ sở khi thực hiện suy luận.
Hợp nhất và xuất sang GGUF (Cho llama.cpp / Ollama / LM Studio)
model.save_pretrained_gguf(
"gemma4_e4b_finetuned",
tokenizer,
quantization_method = "q4_k_m" # hoặc "q8_0", "f16"
)
File .gguf kết quả có thể được nạp trực tiếp vào llama.cpp, nhập vào Ollama bằng một Modelfile tùy chỉnh, hoặc nạp vào LM Studio.
Xuất từ Unsloth Studio
Nếu bạn sử dụng giao diện web Studio, hãy đi tới tab Export sau khi việc huấn luyện hoàn tất. Chọn GGUF, safetensors hoặc cả hai. Studio sẽ tự động xử lý việc hợp nhất (merging) cho bạn.
Một điều cần lưu ý: nếu mô hình xuất ra của bạn hoạt động không đúng mong đợi trong các môi trường chạy khác (Ollama, llama.cpp), nguyên nhân phổ biến nhất là sự không khớp về chat template hoặc EOS token. Luôn sử dụng cùng một chat template khi suy luận giống như lúc bạn huấn luyện.
Notebooks Colab miễn phí
Unsloth cung cấp các notebook Google Colab miễn phí cho tất cả các kích thước của Gemma 4. Notebook cho E2B/E4B chạy được trên GPU T4 miễn phí. Các notebook cho 26B-A4B và 31B yêu cầu một chiếc A100 (Colab Pro).
| Mô hình | Tác vụ | Liên kết |
|---|---|---|
| E2B | Văn bản | Mở trong Colab |
| E2B | Tầm nhìn | Mở trong Colab |
| E2B | Âm thanh | Mở trong Colab |
| 26B-A4B | Tầm nhìn (A100) | Mở trong Colab |
| 31B | Tầm nhìn (A100) | Mở trong Colab |
Các vấn đề thường gặp
Hết bộ nhớ trong khi huấn luyện. Hãy giảm max_seq_length trước tiên, sau đó giảm per_device_train_batch_size xuống 1. Hãy chắc chắn rằng use_gradient_checkpointing="unsloth" đã được thiết lập — nó được thiết kế đặc biệt để kéo dài độ dài ngữ cảnh và giảm VRAM, không phải chỉ là một cờ thông thường.
Sử dụng QLoRA trên 26B-A4B. Kiến trúc MoE và mức lượng tử hóa 4-bit tương tác rất kém. Hãy trung thành với 16-bit LoRA (load_in_16bit=True) cho các mô hình MoE.
Không khớp chat template sau khi xuất. Nếu mô hình xuất ra của bạn phản hồi sai trong Ollama hoặc llama.cpp, hãy kiểm tra xem môi trường chạy suy luận có đang sử dụng đúng chat template của Gemma 4 mà bạn đã dùng để huấn luyện hay không. Đây là nguyên nhân phổ biến nhất gây ra sự suy giảm hiệu năng sau khi xuất.
Khả năng suy luận bị giảm sút sau khi tinh chỉnh. Nếu bạn muốn bảo tồn khả năng suy luận có sẵn của Gemma 4, hãy trộn lẫn các ví dụ kiểu suy luận với các câu trả lời trực tiếp trong dữ liệu huấn luyện. Unsloth khuyến nghị ít nhất 75% ví dụ suy luận để duy trì hành vi suy nghĩ (thinking).
Để xem tài liệu hướng dẫn huấn luyện chính thức, hãy tham khảo Tài liệu Unsloth.
Các hướng dẫn liên quan
Hướng dẫn liên quan
Tiếp tục khám phá cụm nội dung Gemma 4 với bài hướng dẫn tiếp theo phù hợp với quyết định hiện tại của bạn.

Unsloth có hỗ trợ Gemma 4 không? Trạng thái chạy cục bộ và Fine-Tuning
Một câu trả lời thực tế cho câu hỏi liệu Unsloth có hỗ trợ Gemma 4 hay không, bao gồm hỗ trợ chạy cục bộ, hỗ trợ fine-tuning và những lưu ý quan trọng theo từng mô hình.

Hướng dẫn Gemma 4 Unsloth: Khi nào nó có ý nghĩa và Những gì cần lưu ý
Sử dụng hướng dẫn này để hiểu vị trí của Unsloth trong quy trình làm việc với Gemma 4 và những gì cần quyết định trước khi bạn bắt đầu tinh chỉnh.

llama.cpp có hỗ trợ Gemma 4 không? Trạng thái GGUF, các bản sửa lỗi và những gì hoạt động
Một câu trả lời thực tế cho câu hỏi liệu llama.cpp có hỗ trợ Gemma 4 hay không, kèm theo các liên kết GGUF chính thức, trạng thái hỗ trợ hiện tại và ý nghĩa thực sự của việc 'được hỗ trợ'.
Vẫn chưa biết nên đọc gì tiếp theo?
Quay lại trung tâm hướng dẫn để duyệt các bài so sánh model, hướng dẫn cài đặt và trang lập kế hoạch phần cứng.
