完整日志逐段拆解 + 报错/警告/关键参数深度讲解(法律大模型微调专属版)
环境:ROCm AMD GPU + LlamaFactory LoRA微调 Qwen2-5120(48层大模型),断点续训 checkpoint-2500,单卡训练。
训练任务:法律领域监督微调(法律问答/法条解析/文书生成)
一、前置脚本报错与优化方案
Plain
rocm-smi --gpureset
# ERROR: No device specified. One device must be specified for GPU reset
原因
--gpureset 必须指定单张GPU序号,不能批量重置所有卡;无参数会直接报错。
修复脚本(兼容单/多AMD卡)
Plain
export ACCELERATE_DEBUG=1
# 批量杀死训练进程(修复pkill警告)
pkill -9 -f python
pkill -9 -f torchrun
pkill -9 -f llamafactory-cli
pkill -9 -f launcher.py
# 自动获取所有GPU并逐个重置
GPUS=$(rocm-smi --showgpuinfo | grep GPU | awk '{print $2}')
for gpu in $GPUS; do
rocm-smi -d $gpu --gpureset
done
llamafactory-cli train /workspace/training_configs_512/binding_paired.yaml
pkill 警告:pattern longer than 15 characters will match zero
Linux pkill 不加 -f 仅匹配进程名(限制15字符) ,llamafactory-cli等长命令会匹配失败;
你已经加了 pkill -9 -f "llamafactory",这条警告可以忽略,属于无害提示。
二、Deprecated 日志:logging_dir 弃用提示
Plain
`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。
三、分布式训练基础信息
Plain
Process rank: 0, world size: 1, device: cuda:0, distributed training: False, compute dtype: torch.bfloat16
-
world_size=1:单卡训练,无多卡DDP/DeepSpeed; -
cuda:0:ROCm环境PyTorch依然复用cuda设备标识,底层是AMD HIP; -
compute dtype=bfloat16:计算精度bf16,适合法律大模型长文本训练,显存占用低、数值稳定性强,适配法条、文书超长上下文。
四、Qwen2 模型配置解析(48层法律微调基座)
Plain
"hidden_size": 5120, # 模型维度 5120(大参数量,擅长法律长文本语义理解)
"num_hidden_layers": 48, # 48层Transformer,深层网络适配复杂法律逻辑推理
"num_attention_heads": 40,
"num_key_value_heads": 8, # GQA分组注意力,大幅节省显存,适配法律长文本批次训练
"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生成配置
三次加载是正常流程,不影响性能。
五、数据集加载逻辑(法律领域SFT微调任务)
全新样本结构(替换原药物/蛋白任务)
训练任务:法律指令/问题 → 法律专业回答/法条解析/文书续写
-
Instruction:法律任务指令(法律问答、法条解读、合同撰写、案例分析)
-
Input:用户法律问题、案件描述、合同片段、法条原文
-
Response:标准法律答复、合规分析、法条引用、完整法律文书
label_ids 全 -100 原理(法律微调核心逻辑)
-100 在CrossEntropyLoss中会自动忽略计算loss,不参与梯度更新 ;
输入prompt部分(指令、用户法律问题、原文输入)全部标记-100,只对模型输出的法律答案/文书文本计算损失。
作用:强制模型只学习「根据法律问题输出合规专业回答」,不学习复述用户提问、复述输入法条,完全适配法律SFT监督微调范式,数据集加载逻辑正常无错误。
六、关键警告1:FlashAttention-2 is not installed
Plain
[WARNING] FlashAttention-2 is not installed.
影响
未启用FlashAttention,使用原生SDPA注意力,显存占用更高、速度更慢 ;
AMD ROCm环境FlashAttention适配差,官方FlashAttention对HIP支持残缺,无需强行安装。
替代方案(当前已生效)
日志后续:Using torch SDPA for faster training,PyTorch原生缩放点积注意力,ROCm下AOTriton后端加速,是法律长文本微调最优稳定方案。
七、ROCm HIP 内存警告:expandable_segments not supported
Plain
UserWarning: expandable_segments not supported on this platform (Triggered internally at /pytorch/c10/hip/HIPAllocatorConfig.h:36.)
原理
PyTorch CUDA拥有可扩展内存分段分配机制,AMD HIP架构不支持,只能按需小块申请显存。
影响与优化
无害警告,不报错、不崩溃 ,仅显存分配效率轻微下降;
可通过环境变量优化,减少频繁显存申请,提升法律长文本训练稳定性:
Plain
export PYTORCH_HIP_ALLOC_CONF=max_split_size_mb:2048
export HIP_VISIBLE_DEVICES=0
八、模型加载核心信息
-
权重加载:safetensors安全权重格式,100%加载完成,无权重缺失、损坏;
-
精度策略:基座模型加载为bfloat16节省显存,LoRA微调参数upcast为float32保证法律文本精细语义微调精度;
-
微调方式:LoRA微调,仅训练少量参数,不破坏基座通用能力,精准适配法律领域知识;
Plain
trainable params: 275,251,200 || all params: 15,574,150,144 || trainable%: 1.7674
155亿大基座,仅微调1.77%参数,显存压力可控,适合法律垂直领域微调。
-
梯度检查点开启:大幅降低长文本激活显存占用,适配法条、判决书超长文本训练,杜绝OOM;
-
KV Cache训练关闭:训练阶段无需缓存KV,仅推理启用,属于正常训练机制。
九、Token ID 对齐警告(重要配置点)
Plain
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}
原因
原生Qwen基座无合法pad_token,法律微调新增自定义结束符、占位符,框架自动覆盖对齐token ID,保证训练/推理文本截断、生成逻辑一致。
风险提示
训练无问题,训练结束导出模型必须保存更新后的config,否则法律推理时会出现截断异常、乱码、生成不完整问题。
十、断点续训核心参数(法律微调任务全貌)
Plain
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*16=16 # 等效批次16
Total optimization steps = 39,333 # 总迭代步数
Resume from global step 2500, epoch 0
计算逻辑无误:ceil(总样本/等效批次)*轮次 = 39333,当前从2500步断点续训,数据加载、梯度更新逻辑正常。
十一、AOTriton SDPA 前后向警告解析
Plain
UserWarning: Using AOTriton backend for Efficient Attention forward...
UserWarning: Using AOTriton backend for Efficient Attention backward..
1. AOTriton 作用
AMD ROCm平台替代FlashAttention的最优注意力内核,预编译Triton算子,专门优化超长法律文本注意力计算。
2. 警告含义
非报错,是信息提示:模型前向、反向传播均启用优化注意力算子,适配128k法律长文本。
3. 适配法律任务优势
-
支持超长判决书、合同全文并行计算;
-
兼容bf16精度与GQA注意力,训练稳定不溢出;
-
LoRA微调适配性拉满,法律语义学习更精准。
提速优化命令
Plain
# 开启Triton缓存,避免每次重启重新编译
export TRITON_CACHE_DIR=/workspace/triton_cache
# 启用ROCm优化编译器
export ROCM_USE_FLASH_ATTN_V2_TRITON=1
十二、整体训练状态总结(法律微调版)
-
无任何致命报错,训练正常运行 ,所有日志均为无害警告、版本提示、环境适配信息;
-
整套环境完美适配法律垂直领域大模型微调 :超长上下文+AMD优化注意力+低参LoRA微调+梯度显存优化;
-
模型正在稳步学习:法律问题理解、法条引用、文书生成、合规推理能力;
-
可选优化项:修复重置脚本、替换废弃参数、配置显存与缓存环境变量、导出时保存最新token配置。
label_ids、labels 完整拆解(法律微调专属)
1. label_ids 数组核心规则
PyTorch 大模型SFT训练标准规则:值为 -100 的token 忽略loss计算、不更新权重,仅正常数字token参与训练。
分段对应法律训练样本
① 超长全部 -100 部分
对应整条输入Prompt:
Plain
Below is an instruction that describes a task. Write a response that appropriately completes the request.
### Instruction:
legal consultation / legal analysis / document generation
用户法律问题/案件描述/合同文本
这部分全部屏蔽loss,不让模型学习复述用户问题、复述输入文本。
② 末尾正常数字token部分
对应模型需要学习预测的法律标准答案/法律文书内容,仅这部分计算损失、反向传播更新LoRA权重。
-
自定义起始Token:法律回答开头标记
-
中间数字:逐词法律文本分词ID(法条、专业术语、文书语句)
-
末尾终止Token:标记法律文本生成完成
2. labels 文本行作用
纯可视化日志,方便肉眼核对,不参与任何训练计算 ;
内容是当前样本对应的标准法律输出答案,与label_ids末尾有效数字一一对应。
3. 该掩码设计对法律微调的核心价值
-
杜绝模型"复述提问""复述输入法条"的劣质学习行为;
-
强制模型学习问题→专业法律输出的映射逻辑;
-
完美适配法律问答、文书生成、法条解析、案例研判全场景微调。
(注:部分内容可能由 AI 生成)