大语言模型微调 llm sft ,llamafactory 启动参数详解,以医药信息作为案例

发布时间:2026/7/16 20:21:30
大语言模型微调 llm sft ,llamafactory 启动参数详解,以医药信息作为案例 完整日志逐段拆解 报错/警告/关键参数深度讲解环境ROCm AMD GPU LlamaFactory LoRA微调 Qwen2-512048层大模型断点续训checkpoint-2500单卡训练。一、前置脚本报错与优化方案rocm-smi--gpureset# ERROR: No device specified. One device must be specified for GPU reset原因--gpureset必须指定单张GPU序号不能批量重置所有卡无参数会直接报错。修复脚本兼容单/多AMD卡exportACCELERATE_DEBUG1# 批量杀死训练进程修复pkill警告pkill-9-fpythonpkill-9-ftorchrunpkill-9-fllamafactory-clipkill-9-flauncher.py# 自动获取所有GPU并逐个重置GPUS$(rocm-smi--showgpuinfo|grepGPU|awk{print $2})forgpuin$GPUS;dorocm-smi-d$gpu--gpuresetdonellamafactory-cli train /workspace/training_configs_512/binding_paired.yamlpkill 警告pattern longer than 15 characters will match zeroLinuxpkill不加-f仅匹配进程名限制15字符llamafactory-cli等长命令会匹配失败你已经加了pkill -9 -f llamafactory这条警告可以忽略属于无害提示。二、Deprecated 日志logging_dir弃用提示logging_dir is deprecated and will be removed in v5.2. Please set TENSORBOARD_LOGGING_DIR instead.transformers 5.2版本废弃旧参数logging_dir修复yaml配置把logging_dir: xxx替换为tensorboard_logging_dir: xxx。三、分布式训练基础信息Process rank: 0, world size: 1, device: cuda:0, distributed training: False, compute dtype: torch.bfloat16world_size1单卡训练无多卡DDP/DeepSpeedcuda:0ROCm环境PyTorch依然复用cuda设备标识底层是AMD HIPcompute dtypebfloat16计算精度bf16适合大模型训练显存占用比fp16更低、数值稳定性更强。四、Qwen2 模型配置解析48层大基座hidden_size:5120,# 模型维度5120超大尺寸显存压力极高num_hidden_layers:48,#48层Transformernum_attention_heads:40,num_key_value_heads:8,#GQA分组注意力KV头远少于Q头省显存max_position_embeddings:131072,# 128k上下文窗口rope_theta:1000000.0,# 百万级RoPE缩放适配超长文本vocab_size:203711,tie_word_embeddings:false# 输入输出embedding不共享权重重复加载config日志连续三次load config.json无害LlamaFactory内部流程读取模型基础配置初始化分词器对齐token id加载generation生成配置三次加载是正常流程不影响性能。五、数据集加载逻辑AIGC蛋白→SMILES药物分子配对任务样本结构Instructionaigc drug 蛋白氨基酸序列Pxxx/PResponse药物SMILES结构式Lxxx/L|end_of_sentence|label_ids 全-100原理LLaMA Factory标准微调逻辑-100在CrossEntropyLoss中会自动忽略计算loss输入prompt部分Instruction蛋白序列全部标记-100只对ResponseSMILES结构式计算损失完全符合SFT监督微调范式日志里label/input_ids映射正常数据集加载无错误。六、关键警告1FlashAttention-2 is not installed[WARNING] FlashAttention-2 is not installed.影响未启用FlashAttention使用原生SDPA注意力显存占用更高、速度更慢AMD ROCm环境FlashAttention适配差官方FlashAttention对HIP支持残缺不用强行安装下文AOTriton SDPA是AMD最优替代。替代方案你当前已生效日志后续Using torch SDPA for faster trainingPyTorch原生缩放点积注意力ROCm下AOTriton后端加速。七、ROCm HIP 内存警告expandable_segments not supportedUserWarning: expandable_segments not supported on this platform (Triggered internally at /pytorch/c10/hip/HIPAllocatorConfig.h:36.)原理PyTorch CUDA有可扩展内存分段分配预分配大块显存动态扩容减少cudaMalloc调用AMD HIP架构不支持该机制只能按需小块申请显存。影响与优化无害警告不报错崩溃仅分配效率轻微下降缓解设置HIP预留显存环境变量减少频繁分配exportPYTORCH_HIP_ALLOC_CONFmax_split_size_mb:2048exportHIP_VISIBLE_DEVICES0八、模型加载核心信息权重加载safetensors安全权重格式100%加载完成无权重缺失/损坏精度策略基座模型加载为bfloat16LoRA微调参数自动upcast到float32日志Upcasting trainable params to float32逻辑基座冻结bf16省显存LoRA权重fp32保证梯度更新精度标准LoRA优化方案微调方式Fine-tuning method: LoRA参数统计trainable params: 275,251,200 || all params: 15,574,150,144 || trainable%: 1.7674总参155亿可训练LoRA仅2.75亿占比1.77%显存压力可控梯度检查点开启Gradient checkpointing enabled牺牲少量计算速度大幅降低激活值显存占用5120维度大模型必须开启否则OOMKV Cache训练关闭KV cache is disabled during training训练阶段不需要缓存KV推理才启用正常行为。九、Token ID 对齐警告重要配置点The tokenizer has new PAD/BOS/EOS tokens that differ from the model config and generation config. Updated tokens: {eos_token_id: 203704, bos_token_id: 203703, pad_token_id: 203704}原因基座原始Qwen2 config中pad_token_idnull你自定义分词器新增了特殊token|end_of_sentence|对应203704框架自动覆盖模型/生成配置的token id保证训练、推理token一致性。风险提示训练没问题但导出推理模型前需要保存更新后的config/generation_config否则推理时token id不匹配会乱生成。十、断点续训核心参数训练任务全貌Num examples 209,776 # 总训练样本20.9万 Num Epochs 3 # 完整训练轮次3轮 Instantaneous batch size per device 1 # 单卡微批次1 Gradient Accumulation steps 16 # 梯度累积16步 Total train batch size 1*1616 # 等效批次16 Total optimization steps 39,333 # 总迭代步数 Resume from global step 2500, epoch 0计算逻辑总步数公式ceil(总样本 / 等效批次) * 轮次 ceil(209776/16)*3 39333参数匹配无误当前从第2500步继续训练会自动跳过前2500个梯度累积批次数据加载断点逻辑正常。十一、AOTriton SDPA 前后向警告最末尾两行核心讲解UserWarning: Using AOTriton backend for Efficient Attention forward... UserWarning: Using AOTriton backend for Efficient Attention backward..1. AOTriton 是什么Triton是PyTorch官方GPU内核编程语言AOT Ahead-of-Time 预编译ROCm AMD平台没有FlashAttentionPyTorch针对HIP开发了AOTriton实现的SDPA缩放点积注意力是AMD显卡目前速度最优的注意力内核。2. 警告含义不是报错是信息提示前向、反向传播全部启用预编译Triton注意力算子替代原生HIP实现。优缺点✅ 优势AMD ROCm唯一稳定高效注意力实现比原生HIP SDPA提速20~40%兼容bfloat16、GQA注意力你的Qwen2 GQA完美适配和梯度检查点、LoRA微调无冲突。❌ 劣势第一次运行会触发内核编译前几百步训练速度偏慢编译缓存后速度稳定相比N卡FlashAttention显存占用略高极低版本ROCm可能出现数值误差建议ROCm 5.7。优化手段进一步提速# 开启Triton缓存避免每次重启重新编译exportTRITON_CACHE_DIR/workspace/triton_cache# 启用ROCm优化编译器exportROCM_USE_FLASH_ATTN_V2_TRITON1十二、整体状态总结无致命错误训练已正常启动进度条0/39333代表训练正在运行所有日志均为警告/弃用提示/信息输出不存在OOM、算子报错、权重加载失败、数据集报错环境适配AMD ROCm AOTriton注意力 梯度检查点 LoRA微调 组合合理待优化点可选提升稳定性/速度修复rocm-smi --gpureset批量重置脚本yaml替换废弃logging_dir参数配置HIP显存分配、Triton缓存环境变量训练结束导出模型时保存更新后的token config防止推理异常。label_ids、labels 完整拆解一句话先讲核心1. label_ids 数组含义规则基础PyTorch 训练大模型时交叉熵损失函数 CrossEntropyLoss 规定值为 -100 的 token 直接忽略不计算损失、不参与梯度更新。分段对应你的样本前面超长一串全部 -100对应 input_ids 里整段 PromptBelow is an instruction... ### Instruction: aigc drug P长蛋白氨基酸序列/P ### Response:这一整段是输入提示词上下文我们不希望模型学习“复述蛋白、复述指令”所以全部标 -100训练时不在这里算 loss。末尾正常数字203706,46,28…203704这部分才是模型需要预测输出的目标答案LSMILES分子串|end_of_sentence|只有这段会计算损失反向传播更新 LoRA/模型权重。203706 自定义标记L的token id中间一堆数字 SMILES结构式逐字符分词ID203704 结束符|end_of_sentence|代表分子生成完毕这么设计的好处贴合你的药物生成任务只约束模型学会读蛋白序列 → 输出对应药物SMILES不会乱学复述输入蛋白、冗余指令完全是标准SFT监督微调掩码方案。2. 下方labels:文本行LOC(c1ccc(cc1)S(O)(O)N)Cn1cnc2c1cccc2/L|end_of_sentence|纯日志打印用方便你肉眼调试不参与任何训练计算和 label_ids 末尾那串数字一一对应数字ID还原出来就是这段分子文本L 分子开头标记|end_of_sentence| 生成终止标记是你自定义新增的特殊分词。3. 补充关键细节为什么不是全部token都参与loss如果不掩码、不填-100模型会被迫学习“预测下一个氨基酸、预测指令文字”任务跑偏收敛极慢、效果变差。和 input_ids 的关系input_ids完整整段指令蛋白分子给模型做输入label_ids相同长度输入部分屏蔽(-100)仅分子部分保留真实token作为学习目标。