
Transformers 与 Nanotron 集成将 Hugging Face 模型转换为支持 3D 并行的大规模预训练实现【免费下载链接】transformers Transformers: the model-definition framework for state-of-the-art machine learning models in text, vision, audio, and multimodal models, for both inference and training.项目地址: https://gitcode.com/GitHub_Trending/tra/transformers本文讲解 Transformers 与分布式训练框架 Nanotron 的集成方式如何使用官方转换脚本把一个普通的 Transformers 模型以 Llama 为例转换为适合预训练的 Nanotron 模型以及 Transformers 在其中扮演的角色——从from_pretrained加载模型与配置、权重映射与 QKV/Gate-Up 投影融合到复用AutoTokenizer完成文本预处理。读完后你可以独立完成Transformers 检查点 → Nanotron 预训练模型的转换并理解转换过程中每个步骤在 Transformers 侧对应的实现机制。Nanotron 是什么面向数百张 GPU 的 3D 并行训练框架Nanotron 是一个分布式训练框架支持张量并行Tensor Parallelism、流水线并行Pipeline Parallelism和数据并行Data Parallelism即 3D 并行3D parallelism设计目标是支撑跨数百张 GPU 的大规模训练负载。3D 并行的思路可以从 Transformers 文档中的并行方法指南并行方法得到印证数据并行把 batch 切分到各 GPU每个 GPU 持有完整模型副本并各自处理部分数据最后同步梯度。Nanotron 的数据并行通常结合 ZeRO 类优化把优化器状态、梯度、参数分片存储以降低显存占用流水线并行把模型层切成若干 stage 分布在不同 GPU 上并用 micro-batch 流水线化前向/反向传播减少 GPU 空闲时间张量并行把单个张量运算沿水平或垂直方向切片到多张 GPU 上并行计算适合单卡装不下大张量的场景。单独使用任何一类并行都有明显短板数据并行通信开销随 GPU 数增长、流水线并行存在气泡bubble、张量并行引入高频 AllReduce 通信。Nanotron 的核心价值在于把三者组合使用——文档中的 Ultrascale Playbook 资源链接也正是围绕如何高效扩展 Nanotron 训练展开的。因此当你面对单卡装不下模型 多机扩展预训练这类问题时Nanotron 是一个典型的组合策略方案。转换流程把 Transformers 检查点转成 Nanotron 模型Nanotron 提供了一个官方转换脚本convert_hf_to_nanotron.py位于 Nanotron 仓库的examples/llama/目录下可以把任意 Transformers 模型转换为优化的 Nanotron transformer 模型实现用于预训练。仓库文档中给出的标准用法是torchrun --nproc_per_node1 examples/llama/convert_hf_to_nanotron.py \ --checkpoint_pathmeta-llama/Llama-2-7b-hf \ --save_path./llama-7b-nanotron参数说明torchrun --nproc_per_node1使用 PyTorch 弹性启动器以单进程方式运行转换脚本转换是权重搬运任务通常不需要多卡--checkpoint_path源 Transformers 检查点可以是 Hub 上的模型 id如meta-llama/Llama-2-7b-hf也可以是本地目录--save_path转换产出的 Nanotron 模型保存路径。转换完成后的产物是一个可被 Nanotron 训练入口直接加载的模型后续预训练即在 Nanotron 侧按其 3D 并行配置进行。Transformers 集成转换脚本背后的三步机制文档明确给出了转换脚本与 Transformers 的集成过程共三步加载 Transformers 模型。以LlamaForCausalLM.from_pretrained加载受支持的 Transformers 模型如Llama。这一步会读取检查点目录中的config.json并构建对应的LlamaConfig同时通过from_pretrained加载权重文件safetensors/bin。from_pretrained的参数语义在 PreTrainedModel.from_pretrained 的 docstring 中有完整说明pretrained_model_name_or_path可以是 Hub 模型 id、本地目录或None此时需显式传入config与state_dict还支持revision、use_safetensors、local_files_only等常用参数配置格式映射。Nanotron 把LlamaConfig映射到它自己的配置格式并据此构造 Nanotron 模型结构层数、隐藏维度、注意力头数、FFN 中间维度等均来自该配置权重转换与融合。Transformers 权重被转换为 Nanotron 权重其间由一份**权重映射weight mapping**指导 Nanotron 参数名与 Transformers 参数名之间的对应关系并处理必要的形状变换最典型的就是QKV 投影融合与gate/up 投影融合。为什么需要 QKV 与 Gate-Up 融合这一步之所以关键是因为两套框架对投影层的参数组织方式不同。从 Transformers 的 Llama 源码可以看到注意力层的 Q/K/V 是三个独立的nn.LinearLlamaAttention 中q_proj/k_proj/v_proj分别定义于第 230-239 行# src/transformers/models/llama/modeling_llama.py (LlamaAttention) self.q_proj nn.Linear(...) self.k_proj nn.Linear(...) self.v_proj nn.Linear(...) self.o_proj nn.Linear(...)同样MLP 部分的 gate 与 up 投影也是两个独立线性层LlamaMLP 中gate_proj/up_proj/down_proj定义于第 169-171 行# src/transformers/models/llama/modeling_llama.py (LlamaMLP) self.gate_proj nn.Linear(self.hidden_size, self.intermediate_size, ...) self.up_proj nn.Linear(self.hidden_size, self.intermediate_size, ...) self.down_proj nn.Linear(self.intermediate_size, self.hidden_size, ...)而 Nanotron 为了减少张量并行切分时的通信次数、让 GEMM 计算更稠密高效会把q_proj k_proj v_proj拼成一个大的qkv矩阵把gate_proj up_proj拼成一个gate_up矩阵。转换脚本中的权重映射正是负责在两套命名与形状之间做张量级别的对齐把分离的小矩阵按正确的维度顺序cat成融合矩阵再把输出投影o_proj、下投影down_proj、LayerNorm、嵌入层等参数一一对应过去。这也是weight mapping guides how to map Nanotron parameter names to Transformers parameter names这一文档表述的具体含义。Tokenizer 的复用除模型权重外Nanotron 还依赖 Transformers 的AutoTokenizer在预处理preprocessing和生成generation阶段把文本转为 token ids。这意味着转换流程只覆盖模型权重与结构数据管线一侧仍然完全复用 Transformers 生态检查点目录里的 tokenizer 文件tokenizer.json/vocab.json等可直接沿用无需为 Nanotron 单独准备词表。适用场景与使用建议结合文档定位Nanotron 位于 Transformers 文档的社区集成章节见 文档目录可以明确它的使用前提适用以 Hub 上已有 Transformers 检查点Llama 系列等文本生成模型为起点做大规模多机多卡继续预训练或全参数预训练的场景不适用/需自行评估纯单机推理、小模型微调等场景直接走 Transformers 自带方案Trainer Accelerate 分布式即可无需引入 Nanotron工作流torchrun执行转换脚本得到 Nanotron 检查点 → 在 Nanotron 侧按其 3D 并行配置张量并行度、流水线 stage 数、数据并行规模启动训练 → 数据预处理与 tokenize 继续用AutoTokenizer。参考资料Nanotron 仓库huggingface/nanotron转换脚本位于该仓库examples/llama/convert_hf_to_nanotron.pyUltrascale Playbook系统介绍如何用 Nanotron 高效扩展训练规模在 Transformers 文档的 并行方法 与 多卡推理/并行 章节中均被作为大模型扩展的参考资源提及仓库内相关源码PreTrainedModel.from_pretrained 入口、Llama 模型实现投影层定义。【免费下载链接】transformers Transformers: the model-definition framework for state-of-the-art machine learning models in text, vision, audio, and multimodal models, for both inference and training.项目地址: https://gitcode.com/GitHub_Trending/tra/transformers创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考