TRL documentation
SDFT
SDFT
Fine-Tuning Tự Chưng cất (SDFT) được mô tả trong bài báo Self-Distillation Enables Continual Learning của Idan Shenfeld, Mehul Damani, Jonas Hübotter và Pulkit Agrawal.
Học tập liên tục, cho phép các mô hình thu nhận kỹ năng và kiến thức mới mà không làm suy giảm các khả năng hiện có, vẫn là một thách thức cơ bản đối với các mô hình nền tảng. Trong khi học tăng cường theo chính sách (on-policy reinforcement learning) có thể giảm thiểu sự quên, phương pháp này đòi hỏi các hàm phần thưởng rõ ràng, vốn thường không khả dụng. Học từ các minh chứng của chuyên gia, phương án thay thế chính, bị chi phối bởi tinh chỉnh có giám sát (SFT), vốn mang tính chất ngoại chính sách (off-policy) một cách bản chất. Chúng tôi giới thiệu Tinh chỉnh Tự Phân phối (Self-Distillation Fine-Tuning - SDFT), một phương pháp đơn giản cho phép học tập theo chính sách trực tiếp từ các minh chứng. SDFT tận dụng học trong ngữ cảnh (in-context learning) bằng cách sử dụng mô hình có điều kiện theo minh chứng làm giáo viên của chính nó, tạo ra các tín hiệu huấn luyện theo chính sách giúp bảo toàn các khả năng trước đó trong khi thu nhận kỹ năng mới. Trên các tác vụ học kỹ năng và thu nhận kiến thức, SDFT luôn vượt trội hơn SFT, đạt độ chính xác cao hơn trên tác vụ mới trong khi giảm đáng kể sự quên thảm khốc. Trong các thí nghiệm học tập tuần tự, SDFT cho phép một mô hình duy nhất tích lũy nhiều kỹ năng theo thời gian mà không có sự suy giảm hiệu suất, thiết lập phân phối theo chính sách (on-policy distillation) như một con đường thực tiễn để học tập liên tục từ các minh chứng.
Cách hoạt động
Fine-tuning giám sát thông thường huấn luyện trên văn bản minh họa theo cách off-policy, điều này có xu hướng ghi đè lên các khả năng trước đó. SDFT thay vào đó học theo on-policy: học sinh tạo ra từ prompt thuần túy, một giáo viên — chính là mô hình được xem prompt cùng với privileged_context của ví dụ — chấm điểm lại các token đó, và phân phối có điều kiện minh họa của nó được chưng cất ngược lại vào học sinh. Giáo viên và học sinh là một mạng duy nhất chỉ khác nhau ở những gì chúng nhìn thấy, tạo thành một vòng lặp chưng cất tự thân.
Chọn giáo viên
teacher_model_kind xác định bản sao nào của mô hình đóng vai trò teacher. "base" (mặc định) đóng băng trọng số ban đầu làm tham chiếu cố định, khớp với bài báo; "live" tái sử dụng student hiện tại làm self-teacher không độ trễ; "ema" duy trì trung bình trượt mũ, được đồng bộ lại mỗi teacher_sync_steps bước với tỷ lệ teacher_update_rate. Trong PEFT, "base" được lấy bằng cách vô hiệu hóa adapter trong quá trình forward của teacher để khôi phục trọng số cơ sở, và "ema" khi huấn luyện pure-LoRA giữ trung bình trượt trong một adapter "teacher" riêng thay vì một bản sao mô hình thứ hai. "ema" với mô hình PEFT không phải pure-LoRA (ví dụ modules_to_save hoặc bias) không được hỗ trợ, vì bản sao EMA riêng biệt không thể khớp tham số với student.
Mặc định, mô hình sinh viên (student) tạo nội dung từ prompt gốc; đặt generate_from_teacher=True để lấy mẫu từ prompt có điều kiện bởi bản trình diễn (demonstration) thay thế, đánh đổi độ trung thực on-policy để có các rollout chất lượng cao hơn. Mục tiêu chưng cất (distillation) được thiết lập bởi distillation_mode (mặc định là "topk_logits", với các lựa chọn thay thế "full_logits" và "sampled_token"), distillation_alpha, và distillation_topk; num_loss_tokens_to_skip loại bỏ các token hoàn thành (completion) ở đầu khỏi loss. Quá trình huấn luyện chỉ dùng văn bản; việc tạo nội dung chạy qua transformers theo mặc định, hoặc vLLM (chế độ colocate hoặc server) khi use_vllm=True.
Cách sử dụng
from datasets import Dataset
from trl.experimental.sdft import SDFTConfig, SDFTTrainer
dataset = Dataset.from_dict(
{
"prompt": [[{"role": "user", "content": "Solve 2+2."}]],
"privileged_context": ["Example answer: 4."],
}
)
training_args = SDFTConfig(
output_dir="sdft-model",
distillation_alpha=0.5,
distillation_mode="topk_logits",
distillation_topk=5,
max_completion_length=64,
)
trainer = SDFTTrainer(
model="Qwen/Qwen2.5-1.5B-Instruct",
args=training_args,
train_dataset=dataset,
)
trainer.train()Để tạo từ prompt có điều kiện của teacher thay vì prompt của student, hãy đặt generate_from_teacher=True.
Để tùy chỉnh cách xây dựng prompt của teacher, hãy đặt teacher_prompt_template trên experimental.sdft.SDFTConfig.
Phục vụ mô hình teacher từ máy chủ vLLM
Với teacher_model_kind="live", teacher chính là student hiện tại, mà server vLLM đã giữ các trọng số của nó (chúng được đồng bộ cho mỗi bước sinh). Đặt use_teacher_server=True để tính điểm log-probabilities của teacher trên cùng server đó thay vì chạy một bước forward teacher cục bộ riêng, loại bỏ hoàn toàn teacher khỏi bước huấn luyện:
training_args = SDFTConfig(
output_dir="sdft-model",
use_vllm=True,
vllm_mode="server",
teacher_model_kind="live",
use_teacher_server=True,
distillation_mode="sampled_token",
)Khi sử dụng máy chủ giáo viên:
use_vllm=Truevàvllm_mode="server"là bắt buộcteacher_model_kindphải là"live"(máy chủ giữ trọng số của học sinh hiện tại)distillation_modephải là"sampled_token"(reverse KL trên token thực tế) hoặc"topk_logits". Server trả về top-k log-probs của chính teacher, do đótopk_logitssẽ thực hiện distillation trên top-k support của teacher (không thể dùng support của student, khác với local objective); với teacher"live", hai support này gần như trùng khớp.full_logitskhông khả dụng.
Các cột dữ liệu tập được kỳ vọng
Mỗi ví dụ phải cung cấp:
prompt: prompt dành cho sinh viênprivileged_context: chỉ bao gồm thông tin bổ sung dành riêng cho giáo viên, chẳng hạn như một ví dụ minh họa, gợi ý hoặc phản hồi đặc quyền
Cả prompt văn bản tiêu chuẩn và prompt hội thoại đều được hỗ trợ bởi cơ chế xử lý prompt của trainer.
Callbacks
Trainer phát ra một bộ nhỏ các callback hooks hữu ích cho việc gỡ lỗi, quan sát và kiểm thử. Các hook này được thiết kế như những điểm tích hợp thực tế cho các quy trình tự chưng cất (self-distillation) mang tính thử nghiệm.
Các hook tự chưng cất chung:
on_self_distillation_batch_prepared: được kích hoạt khi một batch tự chưng cất đã sẵn sàng. Payload bao gồmprompt_ids,completion_idsvàold_per_token_logpskhi các đầu vào cho việc cắt xén lấy mẫu quan trọng (importance-sampling clipping) khả dụng.on_generation_batch_built: được kích hoạt khi một lô sinh có bộ đệm mới được tạo. Nội dung tải bao gồmgenerate_everyvàsteps_per_generation.
Hook dành riêng cho SDFT:
on_generation_prompts_selected: được kích hoạt khi SDFT chọn nguồn prompt cho quá trình tạo on-policy. Payload bao gồmgeneration_promptsđã được chọn vàgeneration_prompt_texttương ứng.
Mẫu script
Sử dụng examples/sdft_privileged_context/sdft_privileged_context.py để khởi động huấn luyện SDFT từ dòng lệnh. Script hỗ trợ bất kỳ causal LM nào từ Hub, các bộ dữ liệu cục bộ tùy chỉnh thông qua --dataset_path, và PEFT/LoRA thông qua các cờ chuẩn của ModelConfig.
python examples/sdft_privileged_context/sdft_privileged_context.py \
--model_name_or_path Qwen/Qwen3.5-0.8B \
--dataset_name your-org/your-dataset \
--output_dir outputs/sdft-qwen3.5-0.8b \
--per_device_train_batch_size 1 \
--gradient_accumulation_steps 16 \
--learning_rate 2e-5 \
--max_prompt_length 1024 \
--max_completion_length 512 \
--generate_from_teacher \
--teacher_model_kind ema \
--teacher_sync_steps 1 \
--teacher_update_rate 0.05 \
--eval_strategy steps \
--eval_steps 50 \
--report_to wandbBản triển khai ban đầu có sẵn tại idanshen/Self-Distillation.
SDFTConfig
lớp trl.experimental.sdft.SDFTConfig
< source >( output_dir: str | None = Noneper_device_train_batch_size: int = 8num_train_epochs: float = 3.0max_steps: int = -1learning_rate: float = 5e-05lr_scheduler_type: transformers.trainer_utils.SchedulerType | str = 'linear'lr_scheduler_kwargs: dict | str | None = Nonewarmup_steps: float = 0optim: transformers.training_args.OptimizerNames | str = 'adamw_torch_fused'optim_args: str | None = Noneweight_decay: float = 0.0adam_beta1: float = 0.9adam_beta2: float = 0.999adam_epsilon: float = 1e-08optim_target_modules: None | str | list[str] = Nonegradient_accumulation_steps: int = 1average_tokens_across_devices: bool = Truemax_grad_norm: float = 1.0label_smoothing_factor: float = 0.0bf16: bool | None = Nonefp16: bool = Falsebf16_full_eval: bool = Falsefp16_full_eval: bool = Falsetf32: bool | None = Nonegradient_checkpointing: bool = Truegradient_checkpointing_kwargs: dict[str, typing.Any] | str | None = Nonetorch_compile: bool = Falsetorch_compile_backend: str | None = Nonetorch_compile_mode: str | None = Noneuse_liger_kernel: bool = Falseliger_kernel_config: dict[str, bool] | None = Noneuse_cache: bool = Falseneftune_noise_alpha: float | None = Nonetorch_empty_cache_steps: int | None = Noneauto_find_batch_size: bool = Falselogging_strategy: transformers.trainer_utils.IntervalStrategy | str = 'steps'logging_steps: float = 10logging_first_step: bool = Falselog_on_each_node: bool = Truelogging_nan_inf_filter: bool = Trueinclude_num_input_tokens_seen: str | bool = 'no'log_level: str = 'passive'log_level_replica: str = 'warning'disable_tqdm: bool | None = Nonereport_to: None | str | list[str] = 'none'run_name: str | None = Noneproject: str = 'huggingface'trackio_space_id: str | None = Nonetrackio_bucket_id: str | None = Nonetrackio_static_space_id: typing.Union[str, NoneType, typing.Literal[False]] = Noneeval_strategy: transformers.trainer_utils.IntervalStrategy | str = 'no'eval_steps: float | None = Noneeval_delay: float = 0per_device_eval_batch_size: int = 8prediction_loss_only: bool = Falseeval_on_start: bool = Falseeval_do_concat_batches: bool = Trueeval_use_gather_object: bool = Falseeval_accumulation_steps: int | None = Noneinclude_for_metrics: list[str] = <factory>batch_eval_metrics: bool = Falsesave_only_model: bool = Falsesave_strategy: transformers.trainer_utils.SaveStrategy | str = 'steps'save_steps: float = 500save_on_each_node: bool = Falsesave_total_limit: int | None = Noneenable_jit_checkpoint: bool = Falsepush_to_hub: bool = Falsehub_token: str | None = Nonehub_private_repo: bool | None = Nonehub_model_id: str | None = Nonehub_strategy: transformers.trainer_utils.HubStrategy | str = 'every_save'hub_always_push: bool = Falsehub_revision: str | None = Noneload_best_model_at_end: bool = Falsemetric_for_best_model: str | None = Nonegreater_is_better: bool | None = Noneignore_data_skip: bool = Falserestore_callback_states_from_checkpoint: bool = Falsefull_determinism: bool = Falseseed: int = 42data_seed: int | None = Noneuse_cpu: bool = Falseaccelerator_config: dict | str | None = Noneparallelism_config: accelerate.parallelism_config.ParallelismConfig | None = Nonedataloader_drop_last: bool = Falsedataloader_num_workers: int = 0dataloader_pin_memory: bool = Truedataloader_persistent_workers: bool = Falsedataloader_prefetch_factor: int | None = Nonedataloader_multiprocessing_context: str | None = Nonedataloader_in_order: bool = Trueremove_unused_columns: bool = Falselabel_names: list[str] | None = Nonetrain_sampling_strategy: str = 'random'length_column_name: str = 'length'ddp_find_unused_parameters: bool | None = Noneddp_bucket_cap_mb: int | None = Noneddp_broadcast_buffers: bool | None = Noneddp_static_graph: bool | None = Noneddp_backend: str | None = Noneddp_timeout: int = 1800fsdp: str | None = Nonefsdp_config: dict[str, typing.Any] | str | None = Nonedeepspeed: dict | str | None = Nonedebug: str | list[transformers.debug_utils.DebugOption] = ''skip_memory_metrics: bool = Truedo_train: bool = Falsedo_eval: bool = Falsedo_predict: bool = Falseresume_from_checkpoint: str | None = Nonelocal_rank: int = -1model_init_kwargs: dict[str, typing.Any] | None = Nonetrust_remote_code: bool = Falsedisable_dropout: bool = Truemax_prompt_length: int | None = 512num_generations: int = 8num_generations_eval: int | None = Nonemax_completion_length: int | None = 256ds3_gather_for_generation: bool = Trueshuffle_dataset: bool = Truegeneration_batch_size: int | None = Nonesteps_per_generation: int | None = Nonetemperature: float = 1.0top_p: float = 1.0top_k: int = 0min_p: float | None = Nonegeneration_kwargs: dict[str, typing.Any] | None = Nonechat_template_kwargs: dict[str, typing.Any] | None = Nonerepetition_penalty: float = 1.0cache_implementation: str | None = Noneuse_vllm: bool = Falseuse_teacher_server: bool = Falsevllm_mode: str = 'colocate'vllm_model_impl: str = 'vllm'vllm_enable_sleep_mode: bool = Falsevllm_server_base_url: str | None = Nonevllm_server_host: str = '0.0.0.0'vllm_server_port: int = 8000vllm_group_port: int = 51216vllm_server_timeout: float = 240.0vllm_tensor_parallel_size: int = 1vllm_gpu_memory_utilization: float = 0.3vllm_max_model_length: int | None = Nonenum_iterations: int = 1teacher_model_kind: str = 'base'teacher_update_rate: float = 0.05teacher_sync_steps: int = 1distillation_alpha: float = 0.5distillation_mode: typing.Literal['sampled_token', 'full_logits', 'topk_logits'] = 'topk_logits'distillation_topk: int | None = 100distillation_is_clip: float | None = 2.0distillation_add_tail: bool = Falsegenerate_from_teacher: bool = Falseteacher_prompt_template: str = '{prompt}\n\n{privileged_context}'num_loss_tokens_to_skip: int = 0 )
Các tham số kiểm soát tổn thất SDFT
- distillation_alpha (
float, tùy chọn, mặc định là0.5) — Hệ số nội suy phân kỳ cho việc chưng cất logit top-k của SDFT. - distillation_mode (
Literal["sampled_token", "full_logits", "topk_logits"], tuỳ chọn, mặc định là"topk_logits") — Chế độ mục tiêu chưng cất. SDFT mặc định sử dụng chưng cất logit top-k. - distillation_topk (
int, tùy chọn, mặc định là100) — Số lượng token hàng đầu được sử dụng bởi mục tiêu logit top-k SDFT mặc định. - distillation_is_clip (
float, tùy chọn, mặc định là2.0) — Hệ số cắt cho lấy mẫu quan trọng trong tự chưng cất.Nonetắt việc cắt. - distillation_add_tail (
bool, tùy chọn, mặc định làFalse) — Có thêm một bucket đuôi cho khối lượng xác suất không thuộc top-k hay không. - num_loss_tokens_to_skip (
int, tuỳ chọn, mặc định là0) — Số lượng token hoàn thành ban đầu được loại trừ khỏi tổn thất chưng cất.
Các tham số điều khiển teacher
- teacher_model_kind (
str, tuỳ chọn, mặc định là"base") — Lựa chọn giáo viên ngữ nghĩa cho SDFT.basesử dụng học sinh ban đầu,livesử dụng học sinh hiện tại, vàemasử dụng giáo viên trung bình mũ. - teacher_update_rate (
float, tùy chọn, mặc định là0.05) — Tốc độ cập nhật EMA được sử dụng khiteacher_model_kind="ema". Giá trị1.0giảm cập nhật xuống thành ghi đè cứng, đồng bộ lại giáo viên với trọng số học trò hiện tại theo định kỳ. - teacher_sync_steps (
int, tùy chọn, mặc định là1) — Số bước tối ưu hóa giữa các lần cập nhật teacher.
Các tham số kiểm soát việc tạo điều kiện bởi giáo viên
- generate_from_teacher (
bool, tùy chọn, mặc định làFalse) — Xác định xem việc tạo nội dung on-policy có nên sử dụng prompt có điều kiện từ teacher thay vì prompt của student hay không. - teacher_prompt_template (
str, tùy chọn, mặc định là"{prompt}\n\n{privileged_context}") — Mẫu được sử dụng để kết hợp prompt của student và privileged context thành prompt của teacher.
Các tham số điều khiển mô hình
- model_init_kwargs (
dict[str, Any], tùy chọn) — Các đối số dạng từ khóa chotransformers.AutoModelForCausalLM.from_pretrained, được sử dụng khi đối sốmodelcủaSDFTTrainerđược cung cấp dưới dạng chuỗi. Giá trịrevisioncũng được sử dụng khi nạp lớp xử lý. - trust_remote_code (
bool, tùy chọn, mặc định làFalse) — Có cho phép tải các model và tokenizer có kèm theo mã Python tùy chỉnh từ Hub hay không. Tham số này được chuyển tiếp đến from_pretrained và from_pretrained, cho cả student lẫn teacher. - disable_dropout (
bool, tùy chọn, mặc định làTrue) — Có vô hiệu hóa dropout trong các mô hình student và teacher hay không.
Các tham số kiểm soát tiền xử lý dữ liệu
- remove_unused_columns (
bool, tùy chọn, mặc định làFalse) — Có nên chỉ giữ lại các cột cần thiết cho trainer trong dataset hay không. Giữ giá trị này ởFalsenếu bạn cung cấp các cột bổ sung (chẳng hạn nhưprivileged_context) mà trainer cần. - max_prompt_length (
int, tùy chọn, mặc định là512) — Độ dài tối đa của prompt. Các prompt dài hơn sẽ bị cắt bỏ từ phía bên trái. - shuffle_dataset (
bool, tùy chọn, mặc định làTrue) — Có nên xáo trộn bộ dữ liệu huấn luyện hay không.
Các tham số kiểm soát quá trình sinh
- num_generations (
int, tùy chọn, mặc định là8) — Số lượng thế hệ cần lấy mẫu. Kích thước lô hiệu dụng (num_processes per_device_batch_size gradient_accumulation_steps) phải chia hết cho giá trị này. - num_generations_eval (
int, tùy chọn) — Số lượng generation cần lấy mẫu trong quá trình đánh giá. Điều này cho phép sử dụng ít generation hơn trong đánh giá để tiết kiệm tài nguyên tính toán. Nếu làNone, sẽ sử dụng giá trị củanum_generations. - max_completion_length (
int, tùy chọn, mặc định là256) — Độ dài tối đa của phần hoàn thành được tạo ra. - temperature (
float, tùy chọn, mặc định là1.0) — Nhiệt độ cho quá trình lấy mẫu. Nhiệt độ càng cao, các phần hoàn thành càng ngẫu nhiên. - top_p (
float, tùy chọn, mặc định là1.0) — Kiểm soát xác suất tích lũy của các token hàng đầu cần xem xét. Phải nằm trong khoảng (0, 1]. Đặt bằng 1.0 để xem xét tất cả các token. - top_k (
int, tùy chọn, mặc định là0) — Số lượng token từ vựng có xác suất cao nhất được giữ lại cho lọc top-k. Nếu là0, lọc top-k sẽ bị vô hiệu hóa và tất cả các token đều được xem xét. - min_p (
float, tùy chọn) — Xác suất tối thiểu của token, sẽ được nhân với xác suất của token có khả năng cao nhất. Giá trị này phải nằm trong khoảng từ 0.0 đến 1.0. Các giá trị điển hình thường nằm trong khoảng 0.01-0.2. - repetition_penalty (
float, tùy chọn, mặc định là1.0) — Giá trịfloatáp dụng hình phạt cho các token mới dựa trên việc chúng có xuất hiện trong prompt và văn bản đã tạo ra cho đến hiện tại hay không. Các giá trị > 1.0 khuyến khích mô hình sử dụng các token mới, trong khi các giá trị < 1.0 khuyến khích mô hình lặp lại các token. - cache_implementation (
str, tùy chọn) — Cách triển khai phương pháp cache để tạo nhanh hơn khi use_vllm được đặt thành False. - generation_kwargs (
dict[str, Any], tùy chọn) — Các đối số từ khóa bổ sung để truyền choGenerationConfig(nếu dùng transformers) hoặcSamplingParams(nếu dùng vLLM) khi lấy mẫu các câu trả lời hoàn chỉnh. Tham số này có thể được dùng để tùy chỉnh thêm hành vi sinh, chẳng hạn đặtsuppress_tokens,num_beams, v.v. Nếu nó chứa các khóa xung đột với các tham số sinh khác (nhưmin_p,top_p, v.v.), chúng sẽ ghi đè lên các tham số đó. - chat_template_kwargs (
dict[str, Any], tùy chọn) — Các đối số từ khóa bổ sung để truyền cho hàmapply_chat_templatekhi tạo các câu trả lời hoàn chỉnh. - ds3_gather_for_generation (
bool, tùy chọn, mặc định làTrue) — Cài đặt này áp dụng cho DeepSpeed ZeRO-3. Nếu được bật, trọng số của mô hình chính sách sẽ được thu thập (gather) cho quá trình sinh, giúp cải thiện tốc độ sinh. Tuy nhiên, việc tắt tùy chọn này cho phép huấn luyện các mô hình vượt quá dung lượng VRAM của một GPU đơn lẻ, dù phải đánh đổi bằng tốc độ sinh chậm hơn. Việc tắt tùy chọn này không tương thích với sinh bằng vLLM.
Các tham số kiểm soát việc tăng tốc sinh nội dung được hỗ trợ bởi vLLM
- use_vllm (
bool, tùy chọn, mặc định làFalse) — Có sử dụng vLLM để tạo các câu trả lời hoàn chỉnh hay không. Nếu đặt thànhTrue, trình huấn luyện sẽ sử dụng vLLM để tạo nội dung thay vì model.generate() mặc định. Yêu cầuvllmphải được cài đặt. - use_teacher_server (
bool, tùy chọn, mặc định làFalse) — Tính logprobs của teacher từ máy chủ sinh vLLM đang chạy thay vì một bước forward cục bộ của teacher. Chỉ được hỗ trợ vớiteacher_model_kind='live'cùnguse_vllm=Truevàvllm_mode='server', vàdistillation_modenằm trong {‘sampled_token’, ‘topk_logits’} (máy chủ trả về top-k logprobs của teacher, không phải toàn bộ bảng từ vựng;topk_logitsthực hiện distillation trên tập top-k riêng của teacher). - vllm_mode (
str, tùy chọn, mặc định là"colocate") — Chế độ sử dụng cho tích hợp vLLM khiuse_vllmđược đặt thànhTrue. Phải là một trong'server'hoặc'colocate'.'server': Trainer sẽ gửi các yêu cầu sinh nội dung đến một máy chủ vLLM riêng biệt. Hãy đảm bảo rằng máy chủ vLLM đang chạy (khởi động bằngvllm serve).'colocate': vLLM sẽ chạy trong cùng tiến trình và chia sẻ các GPU huấn luyện. Cách này tránh được nhu cầu về một máy chủ riêng nhưng có thể gây ra xung đột tài nguyên với quá trình huấn luyện. - vllm_model_impl (
str, tuỳ chọn, mặc định là"vllm") — Cài đặt mô hình để sử dụng cho vLLM. Phải là một trongtransformershoặcvllm.transformers: Sử dụng backendtransformerscho cài đặt mô hình.vllm: Sử dụng thư việnvllmcho cài đặt mô hình. - vllm_enable_sleep_mode (
bool, tùy chọn, mặc định làFalse) — Bật chế độ ngủ của vLLM để chuyển trọng số/bộ đệm ra ngoài trong bước tối ưu hóa. Giữ mức sử dụng bộ nhớ GPU thấp, nhưng việc đánh thức engine sẽ thêm độ trễ chuyển dữ liệu giữa host và thiết bị. - vllm_server_base_url (
str, tùy chọn) — URL gốc cho máy chủ vLLM (ví dụ: ‘http://localhost:8000’). Nếu được cung cấp,vllm_server_hostvàvllm_server_portsẽ bị bỏ qua. - vllm_server_host (
str, tùy chọn, mặc định là"0.0.0.0") — Host của máy chủ vLLM cần kết nối. Bỏ qua nếu đã cung cấp vllm_server_base_url. - vllm_server_port (
int, tùy chọn, mặc định là8000) — Cổng của máy chủ vLLM để kết nối. Bỏ qua nếu vllm_server_base_url được cung cấp. - vllm_group_port (
int, tuỳ chọn, mặc định là51216) — Số cổng cho nhóm cập nhật trọng số. Cổng này được dùng để liên lạc với máy chủ vLLM. Trừ khi cổng đang bị chiếm dụng, bạn không cần phải thay đổi nó. - vllm_server_timeout (
float, tuỳ chọn, mặc định là240.0) — Tổng thời gian chờ (tính bằng giây) để máy chủ vLLM khởi động. Nếu máy chủ chưa sẵn sàng sau thời gian chờ này, mộtConnectionErrorsẽ được ném ra. - vllm_tensor_parallel_size (
int, tùy chọn, mặc định là1) — Kiểm soát kích thước song song tensor cho vLLM. Cài đặt này chỉ áp dụng khivllm_modeđược đặt thành'colocate'. Nếu bạn đang sử dụngvllm_mode='server', tham số này phải được truyền riêng khi khởi động máy chủ vLLM thông qua cờ--vllm_tensor_parallel_size. - vllm_gpu_memory_utilization (
float, tuỳ chọn, mặc định là0.3) — Kiểm soát mức sử dụng bộ nhớ GPU cho vLLM. Cài đặt này chỉ áp dụng khivllm_modeđược đặt thành'colocate'. Nếu bạn đang sử dụngvllm_mode='server', tham số này phải được truyền riêng khi khởi động máy chủ vLLM thông qua cờ--vllm_gpu_memory_utilization. - vllm_max_model_length (
int, tùy chọn) — Cửa sổ ngữ cảnh cho vLLM. Đặt giá trị này ít nhất bằng độ dài prompt tối đa trong bộ dữ liệu cộng vớimax_completion_length; nếu bỏ qua, giá trị sẽ được suy ra từ cấu hình mô hình.
Các tham số kiểm soát quá trình huấn luyện
- num_iterations (
int, tùy chọn, mặc định là1) — Số lần lặp cho mỗi batch (ký hiệu là μ trong thuật toán). - generation_batch_size (
int, tùy chọn) — Kích thước batch để sử dụng cho quá trình sinh. Nếu làNone, giá trị mặc định sẽ là kích thước batch huấn luyện hiệu dụng:per_device_train_batch_size * num_processes * steps_per_generation. - steps_per_generation (
int, tùy chọn) — Số bước cho mỗi lần sinh. Nếu làNone, giá trị mặc định sẽ làgradient_accumulation_steps.
Lớp cấu hình cho experimental.sdft.SDFTTrainer.
SDFTTrainer
lớp trl.experimental.sdft.SDFTTrainer
< source >( model: typing.Union[str, transformers.modeling_utils.PreTrainedModel, torch.nn.Module]args: trl.experimental.sdft.sdft_config.SDFTConfig | None = Nonetrain_dataset: datasets.arrow_dataset.Dataset | datasets.iterable_dataset.IterableDataset | None = Noneeval_dataset: datasets.arrow_dataset.Dataset | datasets.iterable_dataset.IterableDataset | dict[str, datasets.arrow_dataset.Dataset | datasets.iterable_dataset.IterableDataset] | None = Noneprocessing_class: transformers.tokenization_utils_base.PreTrainedTokenizerBase | transformers.processing_utils.ProcessorMixin | None = Nonecallbacks: list[transformers.trainer_callback.TrainerCallback] | None = Noneoptimizers: tuple[typing.Optional[torch.optim.Optimizer], typing.Optional[torch.optim.lr_scheduler.LambdaLR]] = (None, None)peft_config: PeftConfig | None = None )
Trainer cho tự phân phối chính sách theo kiểu SDFT với các prompt giáo viên rõ ràng.
train
< source >( resume_from_checkpoint: str | bool | None = Nonetrial: optuna.Trial | dict[str, Any] | None = Noneignore_keys_for_eval: list[str] | None = None ) → ~trainer_utils.TrainOutput
Tham số
- resume_from_checkpoint (
strhoặcbool, tùy chọn) — Nếu làstr, đường dẫn cục bộ đến một checkpoint đã lưu bởi một phiênTrainertrước đó. Nếu làboolvà bằngTrue, tải checkpoint cuối cùng trong args.output_dir do một phiênTrainertrước đó lưu lại. Nếu có, quá trình huấn luyện sẽ tiếp tục từ trạng thái model/optimizer/scheduler được tải ở đây. - trial (
optuna.Trialhoặcdict[str, Any], tùy chọn) — Lần chạy thử nghiệm hoặc từ điển siêu tham số cho việc tìm kiếm siêu tham số. - ignore_keys_for_eval (
list[str], tùy chọn) — Một danh sách các khóa trong đầu ra của mô hình của bạn (nếu đó là một từ điển) cần được bỏ qua khi thu thập các dự đoán để đánh giá trong quá trình huấn luyện.
Trả về
~trainer_utils.TrainOutput
Đối tượng chứa số bước toàn cục, tổn thất huấn luyện và các chỉ số.
Điểm vào chính cho quá trình huấn luyện.
Sẽ lưu mô hình, để bạn có thể tải lại bằng from_pretrained().
Chỉ lưu từ tiến trình chính.
push_to_hub
< source >( commit_message: str | None = 'End of training'blocking: bool = Truetoken: str | None = Nonerevision: str | None = None**kwargs )
Tham số
- commit_message (
str, tùy chọn, mặc định là"End of training") — Thông điệp để commit khi đẩy lên. - blocking (
bool, tùy chọn, mặc định làTrue) — Xác định xem hàm có chỉ trả về khigit pushđã hoàn tất hay không. - token (
str, tùy chọn, mặc định làNone) — Token có quyền ghi để ghi đè lên các args gốc của Trainer. - revision (
str, tùy chọn) — Phiên bản git để commit từ. Mặc định là đầu của nhánh “main”. - kwargs (
dict[str, Any], tùy chọn) — Các đối số từ khóa bổ sung được truyền đến~Trainer.create_model_card.
Tải self.model và self.processing_class lên 🤗 model hub tại repo self.args.hub_model_id.