Transformers documentation
Tinh chỉnh
Tinh chỉnh
Fine-tuning tiếp tục huấn luyện một mô hình lớn đã được huấn luyện trước trên một tập dữ liệu nhỏ hơn, đặc thù cho một tác vụ hoặc lĩnh vực. Ví dụ, fine-tuning trên một tập dữ liệu gồm các ví dụ về lập trình giúp mô hình trở nên giỏi hơn trong việc lập trình. Fine-tuning giống hệt với pretraining, ngoại trừ việc bạn không bắt đầu với các trọng số ngẫu nhiên. Nó cũng đòi hỏi ít tài nguyên tính toán, dữ liệu và thời gian hơn rất nhiều.
Hướng dẫn bên dưới đi qua các bước tinh chỉnh một mô hình ngôn ngữ lớn bằng Trainer.
Đăng nhập vào tài khoản Hugging Face của bạn bằng user token để đẩy mô hình đã fine-tune lên Hub.
from huggingface_hub import login
login()Tokenization
Tải một dataset và tokenize cột văn bản mà mô hình được huấn luyện trên đó (horoscope trong dataset bên dưới).
Tokenizer tạo ra các đầu vào cho mô hình, input_ids và attention_mask. Phương thức forward của mô hình chỉ chấp nhận input_ids và attention_mask, vì vậy hãy đặt remove_columns để loại bỏ các cột như horoscope sau khi tokenization.
- Đặt
truncation=Truevà mộtmax_lengthđể cắt các chuỗi dài hơn xuống độ dài tối đa được chỉ định. - Sử dụng phương thức
train_test_splitđể tạo một tập kiểm tra nhằm đánh giá mô hình.
from datasets import load_dataset
from transformers import AutoTokenizer, DataCollatorForLanguageModeling
model_name = "Qwen/Qwen3-0.6B"
tokenizer = AutoTokenizer.from_pretrained(model_name)
dataset = load_dataset("karthiksagarn/astro_horoscope", split="train")
def tokenize(batch):
return tokenizer(
batch["horoscope"],
truncation=True,
max_length=512,
)
dataset = dataset.map(tokenize, batched=True, remove_columns=dataset.column_names)
dataset = dataset.train_test_split(test_size=0.1)Data collator tập hợp các mẫu từ bộ dữ liệu thành các lô (batch) để mô hình xử lý. DataCollatorForLanguageModeling động đệm (pad) mỗi lô đến độ dài của chuỗi dài nhất trong lô đó, thay vì đệm mọi chuỗi trong bộ dữ liệu về cùng một độ dài. Điều này tiết kiệm tài nguyên tính toán và bộ nhớ bằng cách tránh việc tính toán các token đệm không cần thiết.
- Đặt
mlm=Falseđể tránh việc che ngẫu nhiên các token.
data_collator = DataCollatorForLanguageModeling(tokenizer, mlm=False)Tải một mô hình
Tải checkpoint được huấn luyện trước để tinh chỉnh (xem hướng dẫn Tải mô hình để biết thêm chi tiết về việc tải mô hình).
- Đặt
dtype="auto"để tải trọng số với dtype đã lưu. Nếu không, PyTorch sẽ tải trọng số ởtorch.float32, làm tăng gấp đôi bộ nhớ sử dụng nếu trọng số ban đầu làtorch.bfloat16.
from transformers import AutoModelForCausalLM, TrainingArguments, Trainer
model_name = "Qwen/Qwen3-0.6B"
model = AutoModelForCausalLM.from_pretrained(model_name, dtype="auto")Cấu hình huấn luyện
TrainingArguments cung cấp tất cả các tùy chọn để tùy chỉnh một phiên huấn luyện. Chỉ các đối số phổ biến nhất được đề cập ở đây. Mọi thứ khác đều có giá trị mặc định hợp lý hoặc chỉ liên quan đến các kịch bản cụ thể như huấn luyện phân tán. Xem tài liệu API của TrainingArguments để có danh sách đầy đủ các đối số.
num_train_epochsvàper_device_train_batch_sizekiểm soát thời lượng huấn luyện và kích thước lô.learning_rateđặt tốc độ học ban đầu cho bộ tối ưu.
- Đặt
bf16=Trueđể huấn luyện độ chính xác hỗn hợp nhanh nếu phần cứng của bạn hỗ trợ (GPU Ampere trở lên). Nếu không, hãy chuyển sangfp16=Truetrên phần cứng cũ hơn. gradient_accumulation_stepsmô phỏng kích thước batch hiệu dụng lớn hơn bằng cách tích lũy gradient qua nhiều lần truyền tiến trước khi cập nhật trọng số.gradient_checkpointingđánh đổi tính toán lấy bộ nhớ bằng cách tính lại các kích hoạt trung gian trong quá trình truyền ngược thay vì lưu trữ chúng. Để có sự cân bằng giữa bộ nhớ và tốc độ, hãy xem partial checkpointing.- Khi
gradient_checkpointing=True, hãy đặtgradient_checkpointing_kwargs={"offload": True}để giữ các activation đã lưu trong bộ nhớ host được ghim và giảm mức sử dụng bộ nhớ GPU cho các chuỗi dài. Xem offloading các activation đã lưu để biết về sự đánh đổi. - Đặt
train_sampling_strategy="group_by_length"để nhóm các ví dụ có độ dài tương tự vào cùng một batch và giảm padding. Xem nhóm mẫu theo độ dài cho các tập dữ liệu đa phương thức dựa trên processor và độ dài đã tính trước.
eval_strategyvàsave_strategyxác định thời điểm đánh giá mô hình trong quá trình huấn luyện và thời điểm lưu checkpoint.load_best_model_at_endsẽ tải checkpoint tốt nhất khi quá trình huấn luyện kết thúc. Tham số này yêu cầueval_strategyphải được thiết lập.
logging_stepskiểm soát tần suất cập nhật và trả về loss trong quá trình huấn luyện.
training_args = TrainingArguments(
output_dir="qwen3-finetuned",
num_train_epochs=3,
per_device_train_batch_size=2,
gradient_accumulation_steps=8,
gradient_checkpointing=True,
gradient_checkpointing_kwargs={"every_n_layers": 4},
bf16=True,
learning_rate=2e-5,
logging_steps=10,
eval_strategy="epoch",
save_strategy="epoch",
load_best_model_at_end=True,
)Huấn luyện
Tạo một instance Trainer với tất cả các thành phần cần thiết, sau đó gọi train() để bắt đầu.
trainer = Trainer(
model=model,
args=training_args,
train_dataset=dataset["train"],
eval_dataset=dataset["test"],
processing_class=tokenizer,
data_collator=DataCollatorForLanguageModeling(tokenizer, mlm=False),
)
trainer.train()
trainer.push_to_hub()push_to_hub() tải lên Hub các trọng số đã tinh chỉnh, cấu hình sinh, tokenizer và cấu hình mô hình.
Các bước tiếp theo
- Đọc hướng dẫn Các tính năng của Trainer để xem các ví dụ hoạt động tối giản cho các tính năng phổ biến của Trainer như hàm loss tùy chỉnh, đánh giá tiết kiệm bộ nhớ, checkpointing và nhiều hơn nữa.
- Đọc hướng dẫn Subclassing Trainer methods để tìm hiểu cách subclass các phương thức của Trainer nhằm hỗ trợ các tính năng mới và tùy chỉnh.
- Đọc hướng dẫn Callbacks để tìm hiểu cách gắn vào các sự kiện huấn luyện cho việc ghi log, dừng sớm và các hành vi tùy chỉnh khác.
- Đọc hướng dẫn Data collators để tìm hiểu cách tùy chỉnh cách các mẫu được tập hợp thành các lô (batches).
- Chạy một script huấn luyện trên GPU thuê bằng Hugging Face Jobs.
- Duyệt notebooks hoặc phần Resources > Task Recipes để xem thêm các ví dụ huấn luyện cho các tác vụ khác nhau về văn bản, âm thanh, thị giác và đa phương thức.