)
人工智能大模型AI 技能/插件分布式训练微调深度学习【免费下载链接】ml-engineeringMachine Learning Engineering Open Book项目地址https://gitcode.com/gh_mirrors/ml/ml-engineering点击查看免费下载本篇技术指南来自 ml-engineering 开源仓库的 Re-train HF Hub models from scratch using finetuning examples 一文讲解一个非常实用的小技巧如何直接复用 HuggingFace Transformers 官方开箱即用的 Finetuning 示例脚本如run_clm.py来对一个模型进行从零训练from scratch而无需编写任何自定义的训练循环。读完本文你将掌握借助AutoConfig.from_pretrainedAutoModelForCausalLM.from_config生成仅有初始化、没有学习过任何数据的模型检查点并用torchrun启动从头训练的完整配方同时了解精度选择、数据集与超参数的实战取舍。核心思路Finetuning 示例为何能用来做 From-Scratch 训练HuggingFace Transformers 的examples/pytorch目录下提供了覆盖几乎所有模态的优秀微调示例语言建模、翻译、图像分类、多模态等这些示例开箱即用——你只需准备好数据与预训练模型名即可跑起来。但这里有一个前提示例默认会加载预训练权重而从零训练恰恰不想要任何预训练权重。两者看似矛盾而本配方给出的小技巧极其简单先用AutoModelForCausalLM.from_config(config)按配置随机初始化一个模型此时它没有任何训练痕迹再调用save_pretrained()把它保存成一个本地目录。这个目录里既有架构配置、也有模型权重、还有分词器文件看起来就像一个预训练模型——但它的权重只是完成了一次初始化从未接受过任何训练。于是run_clm.py这类微调脚本通过--model_name_or_path指向这个本地目录时就会把它当作预训练模型加载然后启动训练。整个流程本质上等价于用微调脚本跑了一次从零训练只是把随机初始化的权重包装成了脚本熟悉的预训练检查点形态。第一步用 from_config 生成仅初始化模型目录以facebook/opt-1.3b为例并计划采用 bf16 训练范式。首先创建一个准备脚本prep-bf16.pyfrom transformers import AutoConfig, AutoModelForCausalLM, AutoTokenizer import torch mname facebook/opt-1.3b config AutoConfig.from_pretrained(mname) model AutoModelForCausalLM.from_config(config, torch_dtypetorch.bfloat16) tokenizer AutoTokenizer.from_pretrained(mname) path opt-1.3b-bf16 model.save_pretrained(path) tokenizer.save_pretrained(path)逐行拆解这个脚本你会看到它巧妙利用了 HuggingFace 三个 API 的不同语义AutoConfig.from_pretrained(mname)只下载模型的架构配置config.json体积极小不下载任何权重。这一步保证了后续from_config能构建出与原模型完全一致的拓扑结构层数、隐藏维度、注意力头数、词表大小等。AutoModelForCausalLM.from_config(config, torch_dtypetorch.bfloat16)这是整个配方的关键一行。from_config与from_pretrained的本质区别在于from_pretrained会去下载并加载预训练权重而from_config只依据配置进行随机初始化不会触碰任何已有权重。torch_dtypetorch.bfloat16则让所有参数在创建时直接以 bf16 精度实例化与后续训练使用的混合精度体制保持一致。AutoTokenizer.from_pretrained(mname)分词器是词表不是权重。从零训练仍需要原模型的词表与特殊 token 定义因此这里照常从 Hub 加载并保存。model.save_pretrained(path)与tokenizer.save_pretrained(path)将随机初始化的权重如model.safetensors、配置config.json与分词器文件写入本地目录opt-1.3b-bf16。然后运行python prep-bf16.py运行结束后opt-1.3b-bf16目录中就有训练从零开始的模型所需的全部内容。用原文档的话说你拥有的是一个类预训练模型只不过它只完成了初始化、还没有任何训练。精度选择bf16 / fp16 / fp32torch_dtype 的取舍如果计划使用其他精度只需把脚本中的torch_dtypetorch.bfloat16相应改为torch_dtypetorch.float16 # fp16 torch_dtypetorch.float32 # fp32并结合仓库 training/dtype.md 中对数据类型的深入讲解来做决策。以下几点对本配方尤其重要bf16 是目前大模型从零训练的主流选择dtype.md 指出fp16 在大模型训练中被证明非常不稳定训练 LLM 极为困难bf16 出现后以相同的混合精度协议取代了 fp16使 LLM 训练稳定得多。因此本配方默认采用 bf16 是符合当前实践的做法。fp16 的动态范围上限约 64kdtype.md 特别警告——用 bf16 预训练的模型切换到 fp16 训练通常会因溢出fp16 可表示的最大数值只有 64k而失败反过来fp16 预训练模型切到 bf16 通常可行只是转换会损失部分性能。这条经验同样适用于本配方一旦选定torch_dtype后续训练脚本的混合精度开关应与之一致。低精度训练的累积问题dtype.md 还强调了 fp32 累加器的重要性——诸如 LayerNorm、梯度累积、优化器 step 等操作必须在 fp32 中累加否则大量低精度数相加会产生严重误差bf16 的梯度累积更是必须在 fp32 中进行。第二步用 run_clm.py 把随机权重模型当作预训练模型来训练现在可以像微调一样训练这个已保存的模型了。原文档给出的启动命令如下torchrun \ --nproc_per_node1 --nnode1 --node_rank0 \ --master_addr127.0.0.1 --master_port9901 \ examples/pytorch/language-modeling/run_clm.py --bf16 \ --seed 42 --model_name_or_path opt-1.3b-bf16 \ --dataset_name wikitext --dataset_config_name wikitext-103-raw-v1 \ --per_device_train_batch_size 12 --per_device_eval_batch_size 12 \ --gradient_accumulation_steps 1 --do_train --do_eval --logging_steps 10 \ --save_steps 1000 --eval_steps 100 --weight_decay 0.1 --num_train_epochs 1 \ --adam_beta1 0.9 --adam_beta2 0.95 --learning_rate 0.0002 --lr_scheduler_type \ linear --warmup_steps 500 --report_to tensorboard --output_dir save_dir命令可以拆成两部分理解。前半部分是torchrun分布式启动器参数--nproc_per_node1每节点进程数即使用的 GPU 数这里为 1--nnode1、--node_rank0节点总数与本节点编号单机单卡时如上即可--master_addr127.0.0.1、--master_port9901主节点的地址与端口单机场景用回环地址即可。若需要在多节点上扩展可参考仓库 emulate-multi-node.md 中单机模拟多节点的思路来先行验证拓扑。后半部分是run_clm.py因果语言建模训练脚本的参数其中最有价值的部分是一个典型的从零训练超参数起点--bf16开启 bf16 混合精度训练与第一步生成的 bf16 权重严格对应若第一步选了 fp16/fp32这里需相应换成--fp16或不加默认 fp32--seed 42固定随机种子。从零训练对初始状态极其敏感固定种子是复现与调试的前提仓库 reproducibility/README.md 提供了更完整的enforce_reproducibility方案--model_name_or_path opt-1.3b-bf16整个配方的关键入口——opt-1.3b-bf16就是上一步生成的本地目录run_clm.py会按加载预训练模型的路径读取它加载到的却是随机初始化的权重--dataset_name wikitext --dataset_config_name wikitext-103-raw-v1使用 HuggingFace Hub 上的 wikitext-103-raw 数据集--per_device_train_batch_size 12 --per_device_eval_batch_size 12 --gradient_accumulation_steps 1每设备 batch 为 12梯度累积步数为 1因此本配置下全局 batch 大小GBS 12 × 1 × 进程数--do_train --do_eval --logging_steps 10 --eval_steps 100 --save_steps 1000训练与评估开关及日志/评估/保存频率--weight_decay 0.1 --adam_beta1 0.9 --adam_beta2 0.95AdamW 优化器的权重衰减与 β 参数--learning_rate 0.0002 --lr_scheduler_type linear --warmup_steps 500学习率 2e-4线性调度500 步 warmup--num_train_epochs 1训练 1 个 epoch--report_to tensorboard --output_dir save_dir指标上报 TensorBoard检查点输出到save_dir。数据集原始语料与替代方案从零重训面临一个微调场景不存在的现实问题原模型是在什么数据上训练的原文档给出的经验是有时你能找到与原模型训练所用完全相同的数据集有时则不得不使用替代数据集。以facebook/opt-1.3b为例wikitext-103-raw-v1是一个可行的入门数据集——它与 OPT 原始训练语料并不完全一致但对于验证从零训练流程能否跑通已经足够。如果你关心数据集加载与预处理在分布式环境下的效率仓库 training/datasets.md 专门讨论了如何在主进程上串行下载与缓存数据集main_process_first上下文管理器及其源码实现 training/tools/main_process_first.py避免多进程重复下载同一份数据互相踩踏。超参数从论文、模型卡与相似训练中偷师原文档明确建议其余的超参数通常可以在模型随附的论文或文档中找到。这个建议背后有一套完整的方法论仓库 training/hparams.md 把它总结为一条核心原则——找到一份已成功训练的相似任务配置直接偷它的超参数作为起点。具体来源包括公开的训练日志training logbookshparams.md 收集了一批公开 LLM/VLM 训练日志里面真实记录了每次训练使用的完整超参数是最可靠的偷师对象论文与模型卡很多论文会披露超参数细节模型卡model card文档页同样常见直接联系作者如果对方没有公开这些信息可以尝试直接向作者索要。针对从零训练这种场景hparams.md 还有两条与本配方直接相关的进阶经验全局 Batch 大小GBS的渐进式增长如果最终目标 GBS 很大如 1024、2048 甚至更高训练刚开始时模型完全是随机的喂太精细的大 batch 纯属浪费数据与算力。例如 BLOOM-176B 训练中实测 GBS16 时仅 8 TFLOPS几乎不可用最终从 GBS19273 TFLOPS起步再每 9,765,625 个样本增加 16逐步爬到 GBS2048150 TFLOPS。STD 初始化init-method-std权重初始化标准差对从零训练的稳定性影响巨大且其取值并非固定 0.02而是依赖隐藏维度。仓库 instabilities/README.md 记录了 BLOOM 104B 前身实验的教训默认--init-method-std0.02过大导致训练在前几千步内无法突破。两个常用公式是 Transformers without Tears 的sqrt(2/(NHIDDEN*5))与 530B 论文的sqrt(1/(NHIDDEN*3))后者给出更小的初始化值例如NHIDDEN14336时sqrt(1/(14336*3)) 0.00482。稳定性、复现性与检查点管理从零训练比微调更容易遭遇不稳定问题本配方中--seed 42只是起点仓库提供了成体系的配套工具复现性reproducibility/README.md 给出的enforce_reproducibility(seed)除了固定 Python/numpy/PyTorch 各层 RNG还会关闭cudnn.benchmark、开启use_deterministic_algorithms并设置CUBLAS_WORKSPACE_CONFIG:4096:8从而把 cuDNN/cuBLAS 的算法选择也钉死。注意这些确定性开关只应在调试时开启因为会牺牲速度。不稳定定位若从零训练出现 loss 尖峰或发散可借助仓库 debug/pytorch.md 的 inf/nan 检测与下溢/上溢检测工具定位问题张量。instabilities/README.md 还记录了两种值得留意的现象一是数据批次与模型参数状态的坏组合PaLM 团队观察到不规律间隔的 loss 尖峰缓解办法是回退到更早的检查点并跳过可疑批次二是 Adam 的 ε 值不够小导致的时间域相关发散可尝试将 ε 设为 0。检查点工具训练过程中如果出现保存的检查点异常仓库 checkpoints/README.md 提供了两个现成脚本——torch-checkpoint-shrink.py可修复tensor 的 storage 大于其视图导致的检查点膨胀问题torch-checkpoint-convert-to-bf16可把 fp32 检查点转换为 bf16。小结适用范围与注意事项这条配方的价值在于弥合了微调示例与从零训练之间的鸿沟可以归纳为三步用AutoConfig.from_pretrainedAutoModelForCausalLM.from_config构建并保存一个仅含随机初始化的类预训练本地目录按需选择 bf16/fp16/fp32在 Transformers 的examples/pytorch中选择覆盖对应模态的微调示例脚本用torchrun启动并把--model_name_or_path指向第一步生成的本地目录。它适用于你能在 HF Hub 上找到架构配置的任意模型——包括 OPT、LLaMA 这类因果 LM以及示例目录所覆盖的其他模态。需要注意的边界是这本质上是用随机权重充当预训练权重的包装技巧训练效果取决于数据集选择与超参数起点优先从论文、模型卡和公开训练日志中获取而训练稳定性则需要通过固定种子、STD 初始化、fp32 累加器等配套手段来保障——这些细节正是 ml-engineering 仓库的 training 章节围绕本配方给出的完整实战体系。赞分享人工智能大模型AI 技能/插件分布式训练微调深度学习【免费下载链接】ml-engineeringMachine Learning Engineering Open Book项目地址https://gitcode.com/gh_mirrors/ml/ml-engineering点击查看免费下载相关推荐如何快速掌握LitGPT模型参数初始化完整指南与最佳实践如何快速掌握LitGPT模型参数初始化完整指南与最佳实践 LitGPT是一个强大的开源项目允许用户在自己的数据上预训练、微调20多种大型语言模型LLMs大模型预训练微调模型推理服务从零开始训练Hugging Face Hub模型的技术指南从零开始训练Hugging Face Hub模型的技术指南 前言 在机器学习工程实践中我们经常需要重新训练预训练模型而不是仅仅进行微调。本文将详细介绍如何利人工智能大模型AI 技能/插件分布式训练微调深度学习Chinese-CLIP权重初始化预训练模型加载Chinese CLIP权重初始化预训练模型加载 概述 Chinese CLIP作为中文多模态理解的重要模型其权重初始化过程直接影响模型性能和训练效果。本文人工智能多模态预训练模型评测上一篇LaravelS 源码解析揭秘高性能服务器背后的实现机制下一篇Hindsight记忆审计记录所有记忆操作的完整日志创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考