ARTICLE DETAIL

资讯详情

深耕编程入门与网站建设的一线实战洞察。

继续预训练不是玄学:用 Axolotl 把通用模型调进法律领域的完整指南

继续预训练不是玄学:用 Axolotl 把通用模型调进法律领域的完整指南 继续预训练不是玄学用 Axolotl 把通用模型调进法律领域的完整指南【免费下载链接】axolotlGo ahead and axolotl questions项目地址: https://gitcode.com/GitHub_Trending/ax/axolotl你的通用模型写合同、读判例时经常文不对题换几个提示词也救不回来——这类知识缺失靠继续预训练补。本文带你用 Axolotl 走完领域适应的最小闭环环境、流式数据、一份能直接跑的 YAML、盯盘指标外加一个法律场景的配置差异和效果参考值。全程不需要分布式经验一台带 40GB 显存的机器就够。先搞清楚继续预训练解决什么问题通用大模型在开放域表现不错但落到合同条款、判例文书这类文本上术语理解、引用习惯都会露怯。继续预训练Continued Pretraining的思路很直接拿现成基座在领域语料上接着做语言建模把领域知识灌进权重。它和微调最大的区别是目标不同——继续预训练补的是知识微调教的是格式。该选哪种可以先看这张表方案本质适合场景硬件成本LoRA 微调只更新少量低秩权重模型本体不动数据少、只想改输出风格或遵循指令单卡即可全参数微调在指令数据上全量更新权重有标注数据、想强化特定任务行为多卡继续预训练在领域文本上继续做语言建模领域知识整体缺失、有大规模语料多卡或长周期判断标准一句话如果你的模型是不知道选继续预训练如果是知道但不会说选微调。想清楚了再往下走后面的环境搭建就是体力活了。五分钟搭好训练环境把仓库拉到本地然后用 docker-compose 起一个带 GPU 的容器依赖全部预装git clone https://gitcode.com/GitHub_Trending/ax/axolotl cd axolotl docker-compose up -d容器内工作区挂载的是仓库目录配置文件改完即用。硬件按模型规模分级参考以 bf16 全参数训练估算基座规模起步配置从容配置吞吐参考100M-1B1 张 24GB 显存卡2 张 48GB 卡约 8 万-15 万 tokens/s1B-8B4 张 80GB 卡8 张 80GB 卡约 4 万-8 万 tokens/s8B 以上8 张 80GB 卡起步多机多卡按卡数线性外推打折经验值先用 135M 级别的小模型把全流程跑通确认数据、指标、检查点都没问题再放大到目标基座省得大模型跑到一半发现配置错了。环境就位后接下来是最容易被新手卡住的一环领域数据怎么喂给模型。让领域数据流式喂给模型继续预训练的数据量经常是 GB 起步全量预处理再加载既不现实也没必要。Axolotl 的流式数据集streaming是边训练边从数据源拉取样本内存占用恒定。仓库里现成的例子在 examples/streaming/pretrain.yaml核心几行长这样pretraining_dataset: # 指定该字段流式加载自动开启 - path: HuggingFaceFW/fineweb-edu text_column: text # 装正文的列名 split: train streaming_multipack_buffer_size: 10000 # 缓冲区里的样本数越大打包越满、越吃内存 sample_packing: true # 把多条短样本拼进同一条序列减少填充浪费 pretrain_multipack_attn: true # 隔离打包样本之间的注意力防止互相串话streaming_multipack_buffer_size默认就是 1000040GB 显存环境建议别超过这个数发现内存吃紧就往下调。本地领域数据用 JSONL 即可每行一个对象、必须有text字段{text: 依据《民法典》第五百八十五条约定违约金低于造成的损失的人民法院可以根据当事人请求予以增加。} {text: 合同成立须具备当事人、标的与意思表示三要素欠缺任一要素则合同不成立。}一个提醒法律术语、法条编号、金额数字这类信息要原样保留。过度清洗比如把标的额 50 万元以上抹平成金额较大会让模型学到的恰恰是错的清洗只删广告、乱码这类噪声。数据通了下面把一份完整配置从头到尾拆开讲这是全文最值钱的一段。一份能直接跑的 YAML 精讲下面合并了 examples/streaming/pretrain.yaml 的关键项20 行以内可以直接当模板改base_model: HuggingFaceTB/SmolLM2-135M pretraining_dataset: - path: HuggingFaceFW/fineweb-edu type: pretrain text_column: text split: train sequence_len: 128 sample_packing: true pretrain_multipack_attn: true streaming_multipack_buffer_size: 10000 max_steps: 1000 learning_rate: 5e-4 warmup_ratio: 0.1 gradient_accumulation_steps: 8 micro_batch_size: 1 optimizer: adamw_torch lr_scheduler: cosine bf16: auto attn_implementation: flash_attention_2 gradient_checkpointing: true save_steps: 250 save_total_limit: 3 output_dir: ./outputs/law-pretrain序列设置sequence_len是每条序列的长度。示例里是 135M 小模型的调试值正式跑法律文本建议 1024-4096因为条文和案情段落普遍偏长序列太短会频繁截断上下文语义被切碎。sample_packing开启后多条短样本拼进一条序列GPU 不再为填充 token 空转pretrain_multipack_attn则保证拼在一起的样本注意力互不干扰两个要一起开。训练控制继续预训练的学习率推荐区间是 2e-5 到 5e-5明显小于从头预训练示例里的 5e-4 只适合 135M 这种小基座。学习率给大了会破坏通用能力这就是灾难性遗忘的主要来源。max_steps按数据量换算粗略地每 100 万 tokens 约需 100 步比如 2 亿 tokens 的语料配 20000 步。warmup_ratio: 0.1表示前 10% 步数线性升温让优化器起步更稳。save_total_limit: 3只保留最近 3 个检查点避免磁盘撑爆。省显存开关gradient_checkpointing用重计算换显存大约省一半激活内存代价是约 20% 的算力大基座上默认开着。flash_attention_2则同时提速和降显存N 卡上建议常开。三个开关都开后40GB 卡跑 1B 级模型、序列 2048 基本能装下。配置改完就可以发出去了但别发完就走。训练启动后盯住这三个指标axolotl train examples/streaming/pretrain.yaml --auto-resume--auto-resume的意思是训练中断后重启命令会自动从最近保存的检查点接着跑而不是从头开始长训练强烈建议带上。启动后重点盯三条train loss应该缓慢下降。前期每 100 步降 0.05-0.2 是正常节奏后期每 500 步降 0.1 左右属于健康放缓如果横盘超过 500 步多半是学习率偏低或数据分布不均。验证集 loss 与 train loss 的差值差距稳定在 0.3 以内说明在学知识而非背数据差距持续拉大就是过拟合信号后面速查表里给了对应的药方。显存占用理想是稳定在 80%-90%偶发触顶 95% 可接受反复触顶就按降sequence_len→ 增gradient_accumulation_steps的顺序处理后者几乎不损失有效吞吐。另外困惑度perplexity就是 e 的 loss 次方数值越低说明模型对这段文本越熟练是领域适应最直观的标尺。想量化对比用这条命令在领域文本上跑评估axolotl evaluate examples/streaming/pretrain.yaml评估完把基座模型的 perplexity 记下来当基线训练后在同一份文本上再评一次下降 20%-40% 是常见幅度参考值随语料质量波动。指标都健康的话就可以把这套流程正式搬进目标行业了。实战把模型调进法律行业以中文法律为对象数据筛选走两条线一是从公开语料库按关键词过滤保留含判决合同侵权标的等高频法律词的文档二是掺入自己整理的判例、法条 JSONL 保证下限。两者比例大约 7:3 到 9:1量靠前者、质靠后者。注意流式模式当前只支持单个数据源所以混合数据要先合成一个数据集再挂载。配置层面相对通用模板只需要动四处sequence_len: 4096 # 条文与案情段落长给足上下文 learning_rate: 2e-5 # 正式基座用区间下沿压制灾难性遗忘 warmup_ratio: 0.1 max_steps: 10000 # 按每 100 万 tokens 约 100 步估算对应 1.2-2 亿 tokens训练前后在固定评测集上对比数字为示例实际随数据量与质量浮动参考指标基座模型继续预训练后变化法律文本困惑度96.463.2-34.4%判例法条检索命中率58.6%79.3%20.7 个百分点法条引用准确率47.2%68.5%21.3 个百分点如果困惑度没明显下降先怀疑数据——清洗过度、语料和目标场景错位比学习率问题常见得多。当然路上大概率还会遇到下面这几类毛病不用逐个排查直接查表。踩坑速查表现象调整方向配置示例损失前期大幅震荡增大有效批、开启混洗gradient_accumulation_steps: 16显存 OOM缩缓冲区、换量化基座streaming_multipack_buffer_size: 5000过拟合train loss 降、验证 loss 升加正则、降学习率、提前收尾weight_decay: 0.01数据卡顿、吞吐骤降远端源换本地缓存或先axolotl preprocessstreaming: true最后一列每行只放一个最直接的开关实际调试时一次只动一处方便归因。问题清零后整个流程可以浓缩成三步带走。收尾三步清单与延伸阅读准备数据筛出领域 JSONL保留专业术语或选好可流式加载的远端数据源。改配置以 examples/streaming/pretrain.yaml 为底调streaming_multipack_buffer_size、sequence_len、learning_rate、max_steps四处。跑与盯axolotl train 配置文件 --auto-resume启动盯 train loss、验证集 loss 差值、显存占用三条线收敛后跑一次axolotl evaluate对比困惑度。想继续深挖examples/目录按基座模型分了子目录examples/llama-3/fft-8b.yaml 是一份 8B 全参数微调参考配置docs/目录里流式加载、sample packing、数据格式各有专篇配置项报错时直接查文档比猜快得多。最后一个建议先用 135M 小模型把这套流程完整跑一遍再放大到目标基座——出了问题排查成本最低的就是小模型。跑通之后欢迎带着你的领域案例来交流配置细节。【免费下载链接】axolotlGo ahead and axolotl questions项目地址: https://gitcode.com/GitHub_Trending/ax/axolotl创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表