一键导入
transformers-optimization
HuggingFace Transformers Trainer 训练优化审计
用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
菜单
HuggingFace Transformers Trainer 训练优化审计
用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
基于 SOC 职业分类
DeepSpeed ZeRO 显存优化与训练加速
Flash Attention 版本选型与最佳配置
提交代码到远程仓库
NVIDIA Nsight Systems 系统级 GPU Profiling
Nsight Systems 自动检测、安装与升级
PyTorch Profiler 性能分析,提供算子级瓶颈定位
| name | transformers-optimization |
| description | HuggingFace Transformers Trainer 训练优化审计 |
| user-invocable | false |
针对直接使用 HuggingFace Transformers Trainer + TrainingArguments 的训练项目,快速识别已采用和未采用的优化手段,提供针对性的显存优化与性能加速建议。适用于使用 Transformers 原生训练流程(非 LlamaFactory / ms-swift 等上层封装框架)的项目。
当识别到用户项目满足以下条件时触发:
from transformers import Trainer / from transformers import TrainingArguments / from transformers import Seq2SeqTrainerTrainer(model=..., args=...).train()transformers(且不匹配 LlamaFactory / ms-swift / VideoX-Fun 等上层框架)TrainingArguments 特有参数:per_device_train_batch_size、gradient_accumulation_steps、fp16/bf16、torch_compile、use_liger_kernel、fsdp、deepspeed注意:此 skill 仅在未检测到 LlamaFactory / ms-swift / VideoX-Fun 等上层框架时触发。上层框架有自己的专项 skill,能提供更精准的优化建议。
你是 HuggingFace Transformers 训练优化专家。被调用时,请按照以下清单对目标项目进行全面审计。对每个检查项,判定其状态:已启用 / 未启用 / 建议启用 / 不适用,并给出具体的配置修改建议。
扫描项目的 Python 训练脚本和配置文件,确定:
Trainer / Seq2SeqTrainer / 自定义 Trainer 子类model_name_or_path 或 AutoModelFor* 调用,识别模型系列和参数量peft 库的 LoRA / QLoRA 等适配器/system-resources 结果)max_length / max_seq_length| 检查项 | 配置参数 | 审计要点 |
|---|---|---|
| BF16 混合精度 | TrainingArguments(bf16=True) | Ampere+(A100/H100/H20) 首选。无需 loss scaling,数值稳定 |
| FP16 混合精度 | TrainingArguments(fp16=True) | V100/T4 使用。需配合 loss scaling |
| TF32 模式 | TrainingArguments(tf32=True) | Ampere+ GPU,matmul 最高 8x 加速。torch_compile=True 时自动启用 |
| BF16 全量 Eval | TrainingArguments(bf16_full_eval=True) | Eval 阶段全 BF16,节省显存加速推理 |
| FP16 全量 Eval | TrainingArguments(fp16_full_eval=True) | Eval 阶段全 FP16 |
评分 /5
建议:
bf16=Truefp16=Truetf32=Truebf16 和 fp16 互斥,不可同时启用| 检查项 | 配置参数 | 审计要点 |
|---|---|---|
| 梯度检查点 | TrainingArguments(gradient_checkpointing=True) | 以 ~20% 计算换 ~60% 激活显存。长序列/大 batch 必开 |
| GC Kwargs | gradient_checkpointing_kwargs={"use_reentrant": False} | use_reentrant=False 兼容性更好,推荐。FSDP 场景强制 False |
| 显存定期清理 | TrainingArguments(torch_empty_cache_steps=100) | 定期调用 torch.cuda.empty_cache(),~10% 性能换 OOM 缓解 |
| 自动 Batch Size | TrainingArguments(auto_find_batch_size=True) | OOM 时自动减小 batch size 重试。不兼容 DeepSpeed ZeRO-3 |
| Eval 累积 | TrainingArguments(eval_accumulation_steps=N) | 评估时在 GPU 上累积 N 步后再移到 CPU,防止 eval OOM |
评分 /5
建议:
gradient_checkpointing=Truegradient_checkpointing_kwargs={"use_reentrant": False}torch_empty_cache_steps(如每 100 步)auto_find_batch_size=True| 检查项 | 配置参数 | 审计要点 |
|---|---|---|
| LoRA | peft.LoraConfig(r=8, lora_alpha=32, target_modules=["q_proj","v_proj"]) | 参数高效微调,7B 模型 ~16GB。target_modules="all-linear" 覆盖更广 |
| QLoRA 4-bit | BitsAndBytesConfig(load_in_4bit=True, bnb_4bit_quant_type="nf4", bnb_4bit_use_double_quant=True) | 7B→~6GB。NF4 + double_quant 最优 |
| QLoRA 8-bit | BitsAndBytesConfig(load_in_8bit=True) | LLM.int8(),7B→~10GB |
| GPTQ | GPTQConfig(bits=4, group_size=128) | 训练后量化,需校准数据集 |
| AWQ | AwqConfig(bits=4) | 激活感知量化 |
| TorchAO | TorchAoConfig(quant_type=...) | PyTorch 原生量化,兼容 torch.compile |
| FP8 | FbgemmFp8Config() / FineGrainedFP8Config() | Hopper+ GPU,~50% 显存节省 |
| DoRA | LoraConfig(use_dora=True) | 权重分解 LoRA,效果更好但略增显存 |
评分 /8
建议:
load_in_4bit=True + bnb_4bit_quant_type="nf4" + bnb_4bit_use_double_quant=True)use_dora=Truemodel.load_adapter(path, hotswap=True) 避免内存累积| 检查项 | 配置参数 | 审计要点 |
|---|---|---|
| Fused AdamW | optim="adamw_torch_fused" | PyTorch >= 2.8 默认。比标准 AdamW 更快(融合 CUDA kernel) |
| 8-bit AdamW | optim="adamw_bnb_8bit" | 优化器状态显存 -75%,需 bitsandbytes |
| 4-bit AdamW | optim="adamw_torch_4bit" | 优化器状态显存 -87%(PyTorch >= 2.3) |
| Paged AdamW | optim="paged_adamw_8bit" | OOM 时自动将优化器状态卸载到 CPU |
| Adafactor | optim="adafactor" | 存储行/列均值代替完整状态,大幅降低优化器显存 |
| GaLore | optim="galore_adamw" / "galore_adamw_layerwise" | 梯度低秩投影,全参训练显存接近 LoRA 水平 |
| APOLLO | optim="apollo_adamw" / "apollo_adamw_layerwise" | 自适应梯度缩放,显存高效 |
| LOMO | optim="lomo" / "adalomo" | 近零优化器显存,适合全参微调大模型 |
| Schedule-Free | optim="schedule_free_adamw" | 无需 LR scheduler,自适应学习率 |
评分 /7
建议:
adamw_torch_fused(PyTorch 2.8+ 自动启用)adamw_bnb_8bit(优化器状态 -75%)galore_adamw_layerwise(全参效果 + LoRA 级别显存)lomo(近零优化器显存,仅全参微调)| 检查项 | 配置参数 | 审计要点 |
|---|---|---|
| DDP 基本设置 | ddp_backend="nccl"ddp_find_unused_parameters=Falseddp_bucket_cap_mb=25 | 多卡基本分布式。GC 开启时自动 find_unused_parameters=False |
| FSDP Full Shard | fsdp="full_shard auto_wrap" | 分片参数+梯度+优化器(ZeRO-3 等效),最大显存节省 |
| FSDP Shard Grad Op | fsdp="shard_grad_op auto_wrap" | 分片梯度+优化器(ZeRO-2 等效),更快 |
| FSDP Hybrid Shard | fsdp="hybrid_shard auto_wrap" | 节点内全分片,跨节点复制。多机首选 |
| FSDP CPU Offload | fsdp="full_shard offload auto_wrap" | CPU 卸载,显存极不足时使用 |
| FSDP2 | fsdp_config={"fsdp_version": 2} | FSDP v2,Per-parameter sharding,支持 DTensor |
| FSDP 激活检查点 | fsdp_config={"activation_checkpointing": True} | FSDP 原生 GC,优于 gradient_checkpointing(避免冗余 AllGather) |
| FSDP 预取 | fsdp_config={"backward_prefetch": "backward_pre", "forward_prefetch": True} | 预取下一分片,隐藏通信延迟 |
| FSDP 高效加载 | fsdp_config={"cpu_ram_efficient_loading": True, "sync_module_states": True} | 仅 rank 0 加载权重,广播到其他 rank |
| DeepSpeed ZeRO-2 | deepspeed="ds_z2_config.json" | 分片梯度+优化器。LoRA 多卡首选 |
| DeepSpeed ZeRO-3 | deepspeed="ds_z3_config.json" | 分片参数+梯度+优化器。全参大模型必用 |
| DeepSpeed CPU Offload | ZeRO-3 + offload_optimizer.device: "cpu" | 优化器卸载到 CPU |
| Parallelism Config | parallelism_config=ParallelismConfig(tp_size=N, cp_size=N, sp_size=N) | 张量并行/上下文并行/序列并行(Accelerate 1.10.1+) |
评分 /10
建议:
shard_grad_opfull_shardhybrid_shard(减少跨节点通信)activation_checkpointing 而非 gradient_checkpointing(避免冗余 AllGather)cpu_ram_efficient_loading=True 节省模型加载时 CPU 内存| 检查项 | 配置参数 | 审计要点 |
|---|---|---|
| SDPA | model = AutoModel.from_pretrained(..., attn_implementation="sdpa") | PyTorch 2.1+ 默认。自动调度 Flash/Memory-Efficient/Math kernel |
| Flash Attention 2 | attn_implementation="flash_attention_2" | 高优先级。需安装 flash-attn。显存 O(N²)→O(N),速度 2-4x |
| Flash Attention 3 | attn_implementation="flash_attention_3" | Hopper GPU 专属 |
| Flex Attention | attn_implementation="flex_attention" | PyTorch 2.5+,支持自定义注意力模式(block-sparse 等) |
| 注意力动态切换 | model.set_attention_implementation("flash_attention_2") | 加载后动态切换注意力实现 |
评分 /5
建议:
attn_implementation="flash_attention_2"flash-attn 失败时退回 attn_implementation="sdpa"(PyTorch 2.1+ 默认)flash_attention_3| 检查项 | 配置参数 | 审计要点 |
|---|---|---|
| torch.compile | TrainingArguments(torch_compile=True) | 高优先级。PyTorch 2.0+,吞吐 +20~50%,零代码修改 |
| compile 后端 | torch_compile_backend="inductor" | inductor(默认推荐)/ cudagraphs / aot_eager |
| compile 模式 | torch_compile_mode="max-autotune" | default / reduce-overhead / max-autotune(最激进,编译慢但运行快) |
| Liger Kernel | TrainingArguments(use_liger_kernel=True) | 高优先级。Triton 融合算子,吞吐 +20%,显存 -60% |
| Liger 细粒度 | liger_kernel_config={"rope": True, "swiglu": True, "cross_entropy": True, "fused_linear_cross_entropy": True, "rms_norm": True} | 按需选择融合算子 |
评分 /5
建议:
torch_compile=True + use_liger_kernel=True(可同时使用)max-autotune 模式编译较慢但运行最快,适合长训练任务torch_compile_backend 或 torch_compile_mode 会自动启用 torch_compile| 检查项 | 配置参数 | 审计要点 |
|---|---|---|
| DataLoader Workers | TrainingArguments(dataloader_num_workers=4) | 多进程数据加载。默认 0(主进程加载)。建议 4~8 |
| Pin Memory | dataloader_pin_memory=True | 默认开启。加速 CPU→GPU 数据传输 |
| Persistent Workers | dataloader_persistent_workers=True | 跨 epoch 保持 worker,避免重启开销 |
| Prefetch Factor | dataloader_prefetch_factor=2 | 每 worker 预取 batch 数。需 num_workers>0 |
| Group By Length | train_sampling_strategy="group_by_length" | 按序列长度分组,最小化 padding 浪费 |
| Length Column | length_column_name="length" | 预计算长度列,加速 group_by_length 排序 |
| 移除未用列 | remove_unused_columns=True | 默认开启。减少数据传输开销 |
评分 /7
建议:
dataloader_num_workers=4(或更高)+ dataloader_persistent_workers=Truetrain_sampling_strategy="group_by_length" 减少 paddingdataloader_prefetch_factor=2 预取数据accelerator_config={"non_blocking": True} 启用异步数据传输| 检查项 | 配置参数 | 审计要点 |
|---|---|---|
| NEFTune | neftune_noise_alpha=5.0 | 嵌入层注入噪声,显著提升 SFT 效果。推荐范围 5~15 |
| 梯度累积 | gradient_accumulation_steps=N | 等效增大 batch size,不增加显存。有效 batch = per_device × devices × accum |
| 梯度裁剪 | max_grad_norm=1.0 | 默认开启。设 0 禁用 |
| Label Smoothing | label_smoothing_factor=0.1 | 软标签防止过拟合,典型 0.0~0.1 |
| 仅保存模型 | save_only_model=True | 跳过保存优化器/调度器状态,大幅减小 checkpoint 体积 |
| JIT Checkpoint | enable_jit_checkpoint=True | SIGTERM 信号时立即保存,适合抢占式集群 |
评分 /5
建议:
neftune_noise_alpha=5(显著提升效果,零性能成本)gradient_accumulation_steps 等效增大 batchsave_only_model=True| 检查项 | 配置参数 | 审计要点 |
|---|---|---|
| Static KV Cache | model.generation_config.cache_implementation="static" | 固定大小缓存,支持 torch.compile,推理加速 2-4x |
| Quantized KV Cache | cache_implementation="quantized"cache_config={"nbits": 4, "backend": "quanto"} | KV Cache 量化到 4/2-bit,支持超长序列 |
| Offloaded KV Cache | cache_implementation="offloaded" | KV Cache 卸载到 CPU,序列超长时使用 |
| 推测解码 | model.generate(assistant_model=draft_model) | 小模型草稿 + 大模型验证,推理速度 2-3x |
| Prompt Lookup | model.generate(prompt_lookup_num_tokens=3) | N-gram 匹配推测,无需额外模型 |
| torch.compile 推理 | model.forward = torch.compile(model.forward, mode="reduce-overhead", fullgraph=True) | 配合 Static Cache,推理加速最高 4x |
| Prefill Chunking | generation_config.prefill_chunk_size=2048 | 分块预填充,降低长 prompt 峰值显存 |
| 推理量化 (INT4/INT8) | AutoModelForCausalLM.from_pretrained(..., quantization_config=AwqConfig(...))AutoGPTQForCausalLM.from_quantized(...) | AWQ (INT4, 激活感知) 和 GPTQ (INT4, 梯度感知) 在显存减少 3-4x 的同时精度损失极小。AWQ 推理更快(kernel 更优),GPTQ 量化精度略高 |
| FP8 推理量化 | FbgemmFp8Config()、FineGrainedFP8Config() | H100+ GPU 可用 FP8 量化 GEMM,接近 BF16 精度但吞吐提升 ~2x。无需校准(post-training 即可) |
| 推理引擎集成 | vllm.LLM(model=...)、tensorrt_llm.Builder(...)onnxruntime.InferenceSession(...) | 生产推理优先使用成熟引擎。vLLM(PagedAttention + Continuous Batching)、TensorRT-LLM(图优化 + kernel 融合)、ONNX Runtime(跨平台 + 图优化)通常比裸 HF generate 快 3-10x |
| Continuous Batching | vLLM/TensorRT-LLM/SGLang 默认支持 | 动态迭代级调度,新请求不等当前 batch 完成就可插入。静态 batch 中短序列完成后 GPU 空闲等长序列,浪费算力。HF Transformers 原生 generate 不支持 |
| Prefill/Decode 分离 | vLLM chunked_prefill、TRT-LLM paged_kv_cache | Prefill 是 compute-bound(大矩阵乘),Decode 是 memory-bound(逐 token 取 KV Cache)。两者用不同 kernel 策略。Chunked prefill 避免长 prompt 阻塞 decode 请求 |
| Tensor Parallel 推理 | tensor_parallel_size=N(vLLM)TP mapping(TRT-LLM) | 大模型推理跨多卡部署时,TP 比 PP 延迟低(无 pipeline bubble)。优先用 NVLink 连接的卡做 TP |
评分 /12
建议:
prefill_chunk_size 分块预填充# 方案 A:HF Transformers 原生推理(简单场景)
from transformers import AutoModelForCausalLM, AutoTokenizer
model = AutoModelForCausalLM.from_pretrained(
"model_path",
torch_dtype=torch.bfloat16,
attn_implementation="flash_attention_2",
)
model.forward = torch.compile(model.forward, mode="reduce-overhead", fullgraph=True)
model.generation_config.cache_implementation = "static"
model.generation_config.max_new_tokens = 256
# 方案 B:vLLM(生产推荐)
from vllm import LLM, SamplingParams
llm = LLM(
model="model_path",
dtype="bfloat16",
tensor_parallel_size=1, # 单卡
gpu_memory_utilization=0.9, # KV Cache 使用 90% 空闲显存
max_model_len=4096,
# enforce_eager=False, # 默认开启 CUDA Graph
)
params = SamplingParams(temperature=0.7, max_tokens=256)
# 方案 C:AWQ INT4 量化推理(显存受限)
from transformers import AutoModelForCausalLM, AwqConfig
quantization_config = AwqConfig(bits=4, fuse_max_seq_len=4096)
model = AutoModelForCausalLM.from_pretrained(
"model_path_awq",
quantization_config=quantization_config,
attn_implementation="flash_attention_2",
)
from transformers import TrainingArguments
training_args = TrainingArguments(
output_dir="output/7b-full-sft",
# 混合精度
bf16=True,
tf32=True,
# 计算加速
torch_compile=True,
torch_compile_mode="max-autotune",
use_liger_kernel=True,
# 显存优化
gradient_checkpointing=True,
gradient_checkpointing_kwargs={"use_reentrant": False},
optim="adamw_torch_fused",
# 数据加载
per_device_train_batch_size=4,
gradient_accumulation_steps=4,
dataloader_num_workers=4,
dataloader_pin_memory=True,
dataloader_persistent_workers=True,
dataloader_prefetch_factor=2,
train_sampling_strategy="group_by_length",
# 训练策略
neftune_noise_alpha=5,
learning_rate=2e-5,
num_train_epochs=3,
warmup_steps=100,
lr_scheduler_type="cosine",
max_grad_norm=1.0,
)
# 模型加载
model = AutoModelForCausalLM.from_pretrained(
"model_path",
torch_dtype=torch.bfloat16,
attn_implementation="flash_attention_2",
)
from transformers import TrainingArguments, BitsAndBytesConfig
from peft import LoraConfig, get_peft_model
# 4bit 量化
bnb_config = BitsAndBytesConfig(
load_in_4bit=True,
bnb_4bit_quant_type="nf4",
bnb_4bit_use_double_quant=True,
bnb_4bit_compute_dtype=torch.bfloat16,
)
model = AutoModelForCausalLM.from_pretrained(
"model_path",
quantization_config=bnb_config,
attn_implementation="flash_attention_2",
)
# LoRA
lora_config = LoraConfig(
r=32, lora_alpha=64,
target_modules="all-linear",
lora_dropout=0.05,
task_type="CAUSAL_LM",
)
model = get_peft_model(model, lora_config)
training_args = TrainingArguments(
output_dir="output/7b-qlora",
bf16=True,
gradient_checkpointing=True,
gradient_checkpointing_kwargs={"use_reentrant": False},
optim="paged_adamw_8bit", # Paged 8-bit,OOM 自动卸载
per_device_train_batch_size=4,
gradient_accumulation_steps=4,
learning_rate=2e-4,
num_train_epochs=3,
dataloader_num_workers=4,
dataloader_persistent_workers=True,
neftune_noise_alpha=5,
)
training_args = TrainingArguments(
output_dir="output/7b-full-fsdp",
bf16=True,
# FSDP
fsdp="full_shard auto_wrap",
fsdp_config={
"fsdp_version": 2,
"backward_prefetch": "backward_pre",
"forward_prefetch": True,
"activation_checkpointing": True, # FSDP 原生 GC
"cpu_ram_efficient_loading": True,
"sync_module_states": True,
},
# 计算加速
torch_compile=True,
use_liger_kernel=True,
# 训练配置
per_device_train_batch_size=4,
gradient_accumulation_steps=2,
optim="adamw_torch_fused",
learning_rate=2e-5,
num_train_epochs=3,
# 数据
dataloader_num_workers=4,
dataloader_persistent_workers=True,
train_sampling_strategy="group_by_length",
neftune_noise_alpha=5,
)
# 启动: torchrun --nproc_per_node=8 train.py
training_args = TrainingArguments(
output_dir="output/70b-lora-ds",
bf16=True,
deepspeed="ds_z2_config.json",
# 计算加速
use_liger_kernel=True,
# 训练配置
per_device_train_batch_size=1,
gradient_accumulation_steps=16,
gradient_checkpointing=True,
gradient_checkpointing_kwargs={"use_reentrant": False},
optim="adamw_torch_fused",
learning_rate=5e-5,
num_train_epochs=3,
dataloader_num_workers=4,
dataloader_persistent_workers=True,
save_only_model=True,
)
# ds_z2_config.json
# {
# "zero_optimization": {"stage": 2, "overlap_comm": true},
# "bf16": {"enabled": "auto"},
# "train_batch_size": "auto",
# "train_micro_batch_size_per_gpu": "auto",
# "gradient_accumulation_steps": "auto"
# }
training_args = TrainingArguments(
output_dir="output/70b-full-ds",
bf16=True,
deepspeed="ds_z3_config.json",
torch_compile=True,
use_liger_kernel=True,
per_device_train_batch_size=1,
gradient_accumulation_steps=8,
gradient_checkpointing=True,
gradient_checkpointing_kwargs={"use_reentrant": False},
optim="adamw_torch_fused",
learning_rate=1e-5,
num_train_epochs=3,
dataloader_num_workers=4,
dataloader_persistent_workers=True,
save_only_model=True,
)
# ds_z3_config.json
# {
# "zero_optimization": {
# "stage": 3,
# "overlap_comm": true,
# "contiguous_gradients": true,
# "stage3_gather_16bit_weights_on_model_save": true
# },
# "bf16": {"enabled": "auto"},
# "train_batch_size": "auto",
# "train_micro_batch_size_per_gpu": "auto",
# "gradient_accumulation_steps": "auto",
# "gradient_clipping": "auto"
# }
按以下格式输出审计结果:
# HuggingFace Transformers Trainer 训练优化审计报告
## 基本信息
- 模型:{model_name_or_path}({参数量})
- Trainer 类型:{Trainer / Seq2SeqTrainer / 自定义}
- 训练任务:{CausalLM / 分类 / Seq2Seq / ...}
- PEFT:{LoRA / QLoRA / 无}
- 硬件:{GPU型号} x {数量}({显存}GB)
- 序列长度:{max_length}
## 审计结果总览
| 类别 | 得分 | 已启用 | 建议启用 |
|------|------|--------|----------|
| A. 混合精度 | x/5 | ... | ... |
| B. 梯度检查点与显存 | x/5 | ... | ... |
| C. PEFT 与量化 | x/8 | ... | ... |
| D. 优化器 | x/7 | ... | ... |
| E. 分布式优化 | x/10 | ... | ... |
| F. 注意力优化 | x/5 | ... | ... |
| G. 计算加速 | x/5 | ... | ... |
| H. 数据处理 | x/7 | ... | ... |
| I. 训练策略 | x/5 | ... | ... |
| J. 推理优化 | x/12 | ... | ... |
| **总计** | **x/69** | | |
## 优先优化建议(按影响排序)
### P0 — 立即执行(显著收益,零风险)
1. ...
### P1 — 强烈推荐(明显收益,低风险)
1. ...
### P2 — 建议尝试(中等收益,需测试)
1. ...
## 推荐配置修改
(给出具体的 TrainingArguments 参数修改和模型加载参数修改)
开始
├── 显存不足(OOM)?
│ ├── 是 → 当前用全参训练?
│ │ ├── 是 → 切换为 LoRA(peft)
│ │ │ └── 仍然 OOM? → QLoRA 4-bit(BitsAndBytesConfig)
│ │ └── 否(已用 LoRA/QLoRA)
│ │ ├── 确认 gradient_checkpointing 已开启
│ │ ├── 减小 batch size + 增大 gradient_accumulation_steps
│ │ ├── 切换 8-bit 优化器(optim="adamw_bnb_8bit")
│ │ ├── 尝试 auto_find_batch_size=True
│ │ └── 仍然 OOM? → torch_empty_cache_steps / 降低 max_length / DeepSpeed Offload
│ └── 否 → 继续性能优化
├── 训练速度慢?
│ ├── attn_implementation 已设 flash_attention_2?
│ │ ├── 否 → 设置 attn_implementation="flash_attention_2"
│ │ └── 是 → 继续
│ ├── torch_compile 已启用?
│ │ ├── 否 → 设置 torch_compile=True
│ │ └── 是 → 继续
│ ├── use_liger_kernel 已启用?
│ │ ├── 否 → 设置 use_liger_kernel=True
│ │ └── 是 → 继续
│ ├── bf16/tf32 已启用?
│ │ ├── 否 → 设置 bf16=True, tf32=True
│ │ └── 是 → 继续
│ ├── 数据加载是瓶颈?
│ │ ├── 是 → dataloader_num_workers=4~8, persistent_workers=True, prefetch_factor=2
│ │ └── 否 → 继续
│ ├── 变长序列 padding 浪费?
│ │ ├── 是 → train_sampling_strategy="group_by_length"
│ │ └── 否 → 继续
│ ├── 多卡训练?
│ │ ├── LoRA → DeepSpeed ZeRO-2 或 FSDP shard_grad_op
│ │ └── 全参 → DeepSpeed ZeRO-3 或 FSDP full_shard
│ └── 优化器慢? → optim="adamw_torch_fused"
└── 训练效果差?
├── 启用 neftune_noise_alpha=5
├── 调整 LoRA rank(增大到 64~128)+ use_dora=True
├── 使用 label_smoothing_factor=0.1
└── 调整 lr_scheduler_type="cosine"
| 方法 | 精度 | 7B | 14B | 30B | 70B |
|---|---|---|---|---|---|
| 全参(bf16 混合) | 混合精度 | 120GB | 240GB | 600GB | 1200GB |
| LoRA | 16-bit | 16GB | 32GB | 64GB | 160GB |
| QLoRA | 8-bit | 10GB | 20GB | 40GB | 80GB |
| QLoRA | 4-bit | 6GB | 12GB | 24GB | 48GB |
| GaLore(全参) | 16-bit | ~16GB | ~32GB | ~64GB | ~160GB |
| LOMO(全参) | 16-bit | ~16GB | ~30GB | ~60GB | ~140GB |
用于识别直接使用 HuggingFace Transformers Trainer 的项目:
| 类别 | 关键词/模式 |
|---|---|
| import | from transformers import Trainer、from transformers import TrainingArguments、from transformers import Seq2SeqTrainer、from transformers import Seq2SeqTrainingArguments |
| 实例化 | Trainer(model=、TrainingArguments(、trainer.train() |
| 模型加载 | AutoModelForCausalLM.from_pretrained、AutoModelForSequenceClassification.from_pretrained、attn_implementation= |
| PEFT | from peft import、LoraConfig、get_peft_model、PeftModel |
| 量化 | BitsAndBytesConfig、GPTQConfig、AwqConfig、load_in_4bit、load_in_8bit |
| 分布式 | deepspeed=(指向 JSON 配置文件路径)、fsdp=、fsdp_config= |
| 启动方式 | torchrun、accelerate launch、deepspeed |
| 依赖 | transformers、accelerate、peft、bitsandbytes、flash-attn、liger-kernel |