ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

Colossal-AI Community Examples 全指南:从 RoBERTa 中文预训练到 TransformerEngine FP8 的社区实践

Colossal-AI Community Examples 全指南:从 RoBERTa 中文预训练到 TransformerEngine FP8 的社区实践 Colossal-AI Community Examples 全指南从 RoBERTa 中文预训练到 TransformerEngine FP8 的社区实践【免费下载链接】ColossalAIMaking large AI models cheaper, faster and more accessible项目地址: https://gitcode.com/GitHub_Trending/co/ColossalAI本文系统性介绍 Colossal-AI 仓库中的社区示例Community Examples计划它由社区共同维护、以种类多样且超出核心库范围的功能示例为定位当前收录了 RoBERTa 从零预训练与 TransformerEngine FP8 两大实例。读完本文你将掌握社区示例的目录组织、两个已收录示例从环境准备到数据预处理、训练/恢复训练直至下游微调的完整操作路径以及该计划期待收录的模型方向与贡献流程。一、Community Examples 是什么在 Colossal-AI 仓库中examples/community是一个由社区驱动的示例专区。其定位在 examples/community/README.md 中有明确说明它让用户可以把基于 Colossal-AI 构建的示例共享给整个社区目标是建立一个社区维护的、构建在 Colossal-AI 之上、功能多样且非典型exotic的示例集合——即那些由真实用户在实践中沉淀出来、不一定进入核心主线但极具复用价值的用例。反馈渠道如果某个社区示例运行结果不符合预期可以在仓库的 Issue 区新建 issue 并 该示例作者来报告问题机制源自 examples/community/README.md。当前收录示例一览下表来自 examples/community/README.md其中两个示例分别由 Moore Threads沐曦AI 团队与 NVIDIA 团队贡献示例说明代码位置Colab作者RoBERTa为 SFT 与 Prompts 模型训练添加 RoBERTa 支持RoBERTa-YY Lin (Moore Threads)TransformerEngine FP8将 TransformerEngine 与 FP8 训练结合TransformerEngine FP8-Kirthi Shankar Sivamani (NVIDIA)...............目录结构速览从仓库结构看examples/community下每个子目录即一个独立示例两个示例的源码/文档组织如下examples/community/roberta/从零预训练 RoBERTa 的完整工程内含preprocessing/语料预处理、pretraining/模型预训练两个子工程以及各自的 README.mdexamples/community/fp8/TransformerEngine FP8 的 MNIST 训练示例完整说明与代码位于 mnist/README.md 与 mnist/main.py。二、社区示例一RoBERTa 从零预训练Moore Threads 贡献examples/community/roberta/README.md 开宗明义该示例介绍如何从零预训练 RoBERTa覆盖数据预处理preprocessing、预训练pretraining、下游微调finetune三大阶段目标是帮助用户快速训练出高质量的 RoBERTa 模型。它针对中文语料实现的是 Whole Word MaskingWWM整词掩码方案并提供了可复现的多机训练脚本。2.1 环境前提多机免密与集群配置RoBERTa 从零预训练通常需要多机多卡集群示例给出了如下先决条件安装 Colossal-AI依赖清单见 roberta/requirements.txt包括colossalai、torch、h5py、wandb、tensorboard等统一 SSH 端口编辑各宿主机/etc/ssh/sshd_config与/etc/ssh/ssh_config使每台机器 server 与 client 暴露相同的 ssh 端口root 用户还需将sshd_config中的PermitRootLogin设为yes多机免密登录保证任意两台主机间可无密码互登若有 n 台机器需要执行 n² 次ssh-keygen ssh-copy-id -i ~/.ssh/id_rsa.pub ip_destination统一 hosts 记录在所有主机上编辑/etc/hosts登记各机器的名字与 IP例如192.168.2.1 GPU001 192.168.2.2 GPU002 192.168.2.3 GPU003 192.168.2.4 GPU004 192.168.2.5 GPU005 192.168.2.6 GPU006 192.168.2.7 GPU007 ...重启 SSH 服务service ssh restart这些机器名会在后续--hostfile与--include参数中直接使用。2.2 阶段一中文 WWM 语料预处理预处理工程位于 examples/community/roberta/preprocessing其 README.md 说明了中文整词掩码数据的完整加工流程语料可取自开源中文语料集文档中示例来自 WuDao 开源语料。数据预处理被拆为切句分片与分词打掩码两步且强调要结合服务器 CPU、内存、磁盘与语料体量来划分 shard 数——单机数据并行度为 n 时读取分片约需 n×shard_size 内存因此数据预处理与预训练是和硬件博弈的过程而不只是 GPU。第 1 步句子切分与分片耗时较短python sentence_split.py --input_path /original_corpus --output_path /shard --shard 100--input_path原始语料目录例如/original_corpus/0.json、/original_corpus/1.json…--output_path切句后分片输出目录例如/shard/0.txt、/shard/1.txt…--shard分片数量例如 10、50 或 100。示例中以 200G 语料切 100 片、每片约 2G 为参考处理过程会把每个文件中的多篇文档按句号、感叹号等标点切分为句子其输入/输出形态如下]]用作文档分隔标记# 输入 json [ {id: 0, title: 打篮球, content: 我今天去打篮球。不回来吃饭。}, {id: 1, title: 旅游, content: 我后天去旅游。下周请假。} ] # 输出 txt 我今天去打篮球。 不回来吃饭。 ]] 我后天去旅游。 下周请假。第 2 步分词 整词掩码耗时主要在这一步python tokenize_mask.py --input_path /shard --output_path /h5 --tokenizer_path /roberta --backend python--input_path上一步得到的分片 txt 目录--output_path输出 h5 目录每个分片对应一个.h5内容为token_id / input_mask / segment_ids / masked_lm_positions四类特征--tokenizer_pathHuggingFace tokenizer 目录需含tokenizer.json示例要求从 hfl/chinese-roberta-wwm-ext-large 下载config.json、special_tokens_map.json、vocab.txt、tokenizer.json等文件--backendpython或c指定 C 可获得更快的预处理速度见下文--dupe_factor同一篇文章/文档被重复生成训练样本的次数--worker并行进程数。[可选但推荐] C 后端加速工程内置了基于 pybind11 的 C 掩码实现在 preprocessing 目录执行make即可编译出加速模块。对应构建规则见 preprocessing/Makefile它调用python3 -m pybind11 --includes获取头文件路径、以-O3 -shared -stdc14编译 mask.cpp 生成 Python 可导入的扩展最终由 tokenize_mask.py 在--backend c时调用。预处理最终产出 h5 numpy 格式示意如下input_ids: [[id0,id1,id2,id3,id4,id5,id6,0,0..], ...] input_mask: [[1,1,1,1,1,1,0,0..], ...] segment_ids: [[0,0,0,0,0,...], ...] masked_lm_positions: [[label1,-1,-1,label2,-1...], ...]2.3 阶段二Colossal-AI 分布式预训练预训练工程位于 examples/community/roberta/pretraining入口脚本为 run_pretraining.py。工程提供了两个现成脚本新训练run_pretrain.shbash run_pretrain.sh从断点恢复run_pretrain_resume.shbash run_pretrain_resume.sh两个脚本的核心均为通过colossalai run启动多机训练恢复脚本额外携带了--resume_train、--load_pretrain_model与--load_optimizer_lr。主要参数说明如下融合自 pretraining/README.md 与脚本实际内容参数说明参考取值--hostfile取自/etc/hosts的服务机器名列表默认读取./hostfile需按集群修改参考 pretraining/hostfile./hostfile--include实际参与训练的服务机器GPU002,GPU003,GPU004,GPU007--nproc_per_node每台机器的进程GPU数8--master_addr/--master_port主节点地址与端口GPU007/20024--lr初始学习率2.0e-4--train_micro_batch_size_per_gpu每 GPU 训练微批大小190--eval_micro_batch_size_per_gpu每 GPU 评估微批大小20--epoch训练轮数15--data_path_prefix训练数据绝对路径前缀即预处理输出如/h5/0.h5/h5--eval_data_path_prefix评估数据绝对路径前缀/eval_h5--tokenizer_path含 HuggingFacetokenizer.json的目录/roberta--bert_config模型结构config.json/roberta/config.json--mlm主干模型类型bert或deberta_v2bert--tensorboard_path/--log_path/--ckpt_pathTensorBoard、日志、检查点输出目录脚本内自动创建--log_interval打印训练信息的间隔步数50--wandb开启 Weights Biases 可视化开关--checkpoint_activations是否启用激活检查点梯度重计算开关--resume_train是否从早期 checkpoint 恢复训练仅恢复脚本--load_pretrain_model模型 checkpoint 绝对路径/ckpt/1.pt--load_optimizer_lr优化器/学习率 checkpoint 绝对路径/ckpt/1.op_lrs更完整的参数声明见 pretraining/arguments.py从中还可提炼出以下控制分布式方案的关键开关--distplan默认CAI_Gemini可选 colossalai即 Gemini零冗余 ZeRO-3 级别、CAI_ZeRO1、CAI_ZeRO2、torch_ddp、torch_zero 等在 run_pretraining.py 中CAI_ZeRO1/CAI_ZeRO2/CAI_Gemini分别映射到zero_stage 1/2/3并通过zero_model_wrapper、zero_optim_wrapper完成模型与优化器的 ZeRO 包装--placement默认cpuGemini 下参数在 GPU/CPU 间的放置策略auto/cpu/gpu--shardinit在模型初始化时即切分张量以降低峰值显存仅与CAI_Gemini搭配合法代码中通过ColoInitContextShardSpec实现--tp_degree张量并行度使用 colossalai 方案时有效--max_seq_length默认 512与--max_predictions_per_seq默认 80序列长度与每条序列最大掩码预测数--gradient_accumulation_steps梯度累积步数--seed随机种子默认 42。在代码层面run_pretraining.py 的启动链路非常清晰正常集群训练走colossalai.launch_from_torch()由colossalai run启动器注入环境变量支持 VSCode 单机调试模式--vscode_debug时改用colossalai.launch随后加载 HuggingFaceAutoTokenizer、按--mlm构建 bert/deberta_v2 模型模型定义见 pretraining/model/bert.py 与 pretraining/model/deberta_v2.py训练数据由NvidiaBertDatasetProvider从预处理产出的 h5 读取loss 计算由独立的 loss.py 提供训练过程中定期执行评估evaluation.py并通过get_timers、throughput_calculator等记录吞吐与内存信息pretrain_utils.py。依赖说明示例工程在其 requirements.txt 中要求colossalai 0.1.12、torch 1.8.1属于该示例撰写时的历史版本约束实际运行前请结合你安装的 Colossal-AI 版本核对接口兼容性。2.4 阶段三下游任务微调兼容 HuggingFace 生态该示例的亮点之一是训练产物可直接接入 HuggingFace 中文 RoBERTa 生态README 明确指出本仓库产出的 checkpoint 可以直接替换 hfl/chinese-roberta-wwm-ext-large 仓库中的pytorch_model.bin随后用 HuggingFace transformers 进行下游任务微调。这意味着从零预训练的权重与官方中文 RoBERTa-wwm-ext-large 的网络结构对齐省去了权重格式转换的额外工作。三、社区示例二TransformerEngine FP8NVIDIA 贡献第二个已收录示例位于 examples/community/fp8/mnist由 NVIDIA 提供。其 README.md 说明了背景TransformerEngine 是用于在 NVIDIA GPU 上加速 Transformer 模型的库支持在 Hopper 架构 GPU 上使用8-bit 浮点FP8精度在训练与推理中带来更好性能与更低显存占用。3.1 三种运行模式该示例基于经典 PyTorch MNIST CNN允许一键对比三种配置fp8/mnist/README.mdpython main.py # 纯 PyTorch 基线 python main.py --use-te # 全连接层替换为 TransformerEngine Linear python main.py --use-fp8 # TransformerEngine Linear FP8需要留意的是该示例文档同时说明正在推进与 Colossal-AI 的集成将很快完成——即以当前仓库内容为准它是一个可独立运行的 TransformerEngine FP8 教学示例集成工作属于进行时状态读者不应将其视为已完成 Colossal-AI 深度耦合的案例。3.2 实现细节与关键参数从 mnist/main.py 可以看清其实现逻辑模型替换Net(use_teTrue)时两个全连接层fc1/fc2由nn.Linear换成transformer_engine.pytorch的te.Linear其余卷积/池化层保持不变FP8 上下文训练与测试时通过te.fp8_autocast(enableduse_fp8)包裹前向计算开关由--use-fp8控制显式 FP8 推理校准--use-fp8-infer路径要求先以 bfloat16 权重完成calibrate()校准te.fp8_autocast(enabledFalse, calibratingTrue)保存 checkpoint 后再加载并评估从而验证 FP8 推理精度环境断言脚本启动时会先尝试导入 TransformerEngineHAVE_TE标志一旦使用--use-te/--use-fp8/--use-fp8-infer即断言其已安装且使用 TE 相关能力要求 CUDA 环境FP8 运行在 Hopper 级别 GPU 上--use-fp8-infer与--use-fp8互斥常规训练参数--batch-size(默认 64)、--test-batch-size(默认 1000)、--epochs(默认 14)、--lr(默认 1.0)、--gamma(默认 0.7配合 StepLR 每步衰减)、--seed(默认 1)、--log-interval(默认 10)、--save-model、--dry-run。运行示例前请通过 pip 安装transformer_engine与其对应 CUDA 版本的 PyTorch并确认 GPU 满足 FP8 硬件要求对于只想体验 FP8 数据格式流程、又暂无 Hopper GPU 的场景--use-te仅用 TE Linear、不开 FP8模式可作为一个过渡的验证手段。四、计划收录的示例方向Looking for Examplesexamples/community/README.md 同时列出了社区期待出现的新示例清单即当前未收录、但被社区认为很有价值的模型/方向供有意贡献者参考Swin-TransformerT5Segment Anything (SAM)ControlNetConsistency ModelsMAECLIP文档欢迎任何人在仓库 Issue 区新建 issue 分享自己的见解与需求可以理解为若你正在用 Colossal-AI 复现上述任一模型并有可分享的工程这里就是约定的投稿入口。五、如何参与与贡献官方给出的参与路径源自 examples/community/README.md访问仓库的examples目录浏览已有示例信息并阅读代码库了解组织方式与代码风格建议先通读 examples/community/README.md 与两个已有示例的工程结构贡献前先新建一个 issue概述你提议的特性或增强点团队会评审并给出反馈若你对自己的实现足够有把握也可以直接提交 PR。六、小结社区示例机制让 Colossal-AI 的外围生态能够随真实使用场景持续生长RoBERTa 示例覆盖了中文 WWM 语料预处理、C 加速掩码、colossalai run多机预训练、ZeRO/Gemini 并行与断点恢复、以及产出权重直接兼容 HuggingFace 中文 RoBERTa的微调闭环是一份非常完整的大模型从零预训练参考工程TransformerEngine FP8 示例则提供了在 CNN 基准上快速上手 TE Linear 与 FP8 校准/训练的最小可运行代码。若你的场景正好落在这两个示例上可直接按上文路径复现若你正计划复现 Swin-Transformer、SAM、CLIP 等模型则可以参照本节投稿机制把成果回馈给社区。【免费下载链接】ColossalAIMaking large AI models cheaper, faster and more accessible项目地址: https://gitcode.com/GitHub_Trending/co/ColossalAI创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表