人工智能大模型强化学习AI Agent微调【免费下载链接】OpenClaw-RLOpenClaw-RL: Train any agent simply by talking项目地址https://gitcode.com/gh_mirrors/op/OpenClaw-RL点击查看免费下载导读本文围绕 Megatron-LM 仓库中 examples/bert 目录提供的 BERT 预训练示例展开系统讲解基于 Docker 的训练环境搭建、340MBERT-Large基准脚本的每一组启动参数以及官方给出的 4B、20B 扩展配置。同时深入pretrain_bert.py与 Megatron Core 的BertModel、BERT 数据集实现说明 MLM/SOP 损失、掩码策略、注意力后端与张量/流水线并行是如何在代码层面落地的。读完本文你将具备从单机 8 卡到 128 卡规模部署并调优 Megatron-LM BERT 预训练任务的完整实战能力。1. 示例总览从 README 到可运行的训练入口Megatron-LM/examples/bert/目录只包含两份关键文件README.md训练环境搭建说明Docker 方式与三档模型规模配置340M / 4B / 20Btrain_bert_340m_distributed.sh默认执行的 340M 参数 BERT-Large 分布式预训练脚本。脚本最终调用的是仓库根目录下的 pretrain_bert.pytorchrun ... pretrain_bert.py该入口通过 Megatron 训练框架的pretrain()函数完成数据集构建、模型构建、前向/损失计算与分布式调度。整个调用链为train_bert_340m_distributed.sh └─ torchrun pretrain_bert.py ├─ train_valid_test_datasets_provider (构建 BERT Masked WordPiece 数据集) ├─ model_provider (构建 BertModel / legacy BertModel) └─ forward_step loss_func (MLM 损失 SOP 二分类损失)2. 训练环境搭建Docker 运行方式README 给出的标准启动方式是基于 NVIDIA PyTorch 容器运行先设置四个路径环境变量再一次性传入启动脚本PYTORCH_IMAGEnvcr.io/nvidia/pytorch:24.01-py3 CHECKPOINT_PATH # 指定 checkpoint 保存/加载路径 TENSORBOARD_LOGS_PATH # 指定 TensorBoard 日志路径 VOCAB_FILE # 指定 bert-vocab.txt或 bert-vocab.json文件路径 DATA_PATH # 指定数据前缀形如 prefix_text_document docker run \ --gpusall \ --ipchost \ --workdir /workspace/megatron-lm \ -v /path/to/data:/path/to/data \ -v /path/to/megatron-lm:/workspace/megatron-lm \ nvcr.io/nvidia/pytorch:24.01-py3 \ bash examples/bert/train_bert_340m_distributed.sh \ $CHECKPOINT_PATH $TENSORBOARD_LOGS_PATH $VOCAB_FILE $DATA_PATH关键点说明--gpusall将宿主机全部 GPU 暴露给容器配合脚本内的GPUS_PER_NODE8使用--ipchost共享宿主进程间通信命名空间避免 DataLoader 多进程共享内存不足--workdir /workspace/megatron-lm容器内工作目录因此脚本以examples/bert/train_bert_340m_distributed.sh这样的相对路径调用挂载卷数据目录与 Megatron-LM 源码目录都需要以卷的方式挂载进容器四个位置参数$CHECKPOINT_PATH $TENSORBOARD_LOGS_PATH $VOCAB_FILE $DATA_PATH依次对应脚本内$1 ~ $4顺序不能颠倒。README 也提示实际环境不同如 Kubernetes、Slurm、裸机多机时上述命令可能需要调整例如换成srun/mpirun或直接torchrun启动。数据格式说明DATA_PATH指向的是 Megatron 索引数据集IndexedDataset的文件前缀即通过 tools/preprocess_data.py 对语料做 WordPiece 分词、mmap 索引化后产出的prefix_text_document.idx/.bin系列文件。VOCAB_FILE 对应的即 BERT WordPiece 词表bert-vocab.txt或脚本注释中的bert-vocab.json。3. 340M 基准脚本逐参数拆解train_bert_340m_distributed.sh 第一行注释即声明“Runs the 340M parameter model (Bert - Large)”即该脚本对应 BERT-Large 规模的 340M 参数模型。下面按脚本内参数组逐段解读。3.1 分布式启动参数DISTRIBUTED_ARGSexport CUDA_DEVICE_MAX_CONNECTIONS1 GPUS_PER_NODE8 MASTER_ADDRlocalhost MASTER_PORT6000 NUM_NODES1 NODE_RANK0 WORLD_SIZE$(($GPUS_PER_NODE*$NUM_NODES)) DISTRIBUTED_ARGS( --nproc_per_node $GPUS_PER_NODE --nnodes $NUM_NODES --master_addr $MASTER_ADDR --master_port $MASTER_PORT )CUDA_DEVICE_MAX_CONNECTIONS1限制每设备 CUDA 连接数规避多进程通信时的潜在资源竞争单机 8 卡GPUS_PER_NODE8、NUM_NODES1总WORLD_SIZE8多机训练时只需把MASTER_ADDR改为主节点 IP、NUM_NODES改为节点数、NODE_RANK按节点 0 递增。3.2 模型结构参数BERT_MODEL_ARGSBERT_MODEL_ARGS( --num-layers 24 --hidden-size 1024 --num-attention-heads 16 --seq-length 512 --max-position-embeddings 512 --attention-backend auto # 可选 flash/fused/unfused/local )340M ≈ BERT-Large24 层 Transformer、隐藏维度 1024、16 头注意力与经典 BERT-Large 结构一致--seq-length 512与--max-position-embeddings 512一致训练序列长度与位置编码上限都取 512--attention-backend auto的取值flash/fused/unfused/local/auto与 arguments.py 中定义一致默认auto即由框架结合 Transformer EngineTE版本自动选择融合注意力路径。选择该参数时需注意约束local后端仅在与--spec local搭配时可用见 arguments.py 校验逻辑flash/fused 依赖 TE 且对版本有下限要求。3.3 训练与优化参数TRAINING_ARGSTRAINING_ARGS( --micro-batch-size 4 --global-batch-size 32 --train-iters 1000000 --weight-decay 1e-2 --clip-grad 1.0 --fp16 --lr 0.0001 --lr-decay-iters 990000 --lr-decay-style linear --min-lr 1.0e-5 --lr-warmup-fraction .01 )各参数含义与取值依据参数值说明--micro-batch-size4单卡单次前向/反向的 micro-batch 大小--global-batch-size32全局逻辑 batch由 micro-batch × 数据并行度 × 梯度累积步数构成--train-iters1000000总训练迭代数约百万步量级的完整预训练--weight-decay1e-2权重衰减系数默认值即 0.01arguments.py 中default0.01--clip-grad1.0梯度裁剪阈值默认 1.0--fp16—启用混合精度AMP节省显存并加速--lr0.0001初始学习率--lr-decay-iters990000学习率衰减跨度比 train-iters 略小留出尾部余量缺省时默认取 train-iters--lr-decay-stylelinear线性衰减可选 constant/linear/cosine/inverse-square-root/WSD--min-lr1.0e-5学习率下限--lr-warmup-fraction0.01前 1% 迭代约 1 万步线性 warmup默认从 0 起--lr-warmup-init默认 0.0注意脚本中--weight-decay与--clip-grad重复出现两次这是历史遗留冗余写法不影响正确性后者覆盖前者取值相同。3.4 模型并行参数MODEL_PARALLEL_ARGSMODEL_PARALLEL_ARGS( --tensor-model-parallel-size 8 --pipeline-model-parallel-size 16 )这是脚本中最激进的一组配置张量并行 8 路 × 流水线并行 16 段。在 8 卡单机上实际执行时流水线并行 16 意味着每个 GPU 上会承载 2 个流水线虚拟段即 virtual pipeline配合--num-layers-per-virtual-pipeline-stage使用可做跨机 VPP。若改为单机 8 卡直接运行建议将--pipeline-model-parallel-size调小例如 2 或 4或将其视为面向多机如 16 节点 × 8 卡 128 GPU的模板参数。这一点 README 中“Depending on the environment you are running it the above command might look slightly different”的提示同样适用。3.5 数据参数DATA_ARGSDATA_ARGS( --data-path $DATA_PATH --vocab-file $VOCAB_FILE --split 949,50,1 )--data-path索引数据集前缀该参数支持单前缀、权重前缀对列表如weight1 prefix1 weight2 prefix2、多前缀列表三种格式arguments.py--split 949,50,1训练/验证/测试按 94.9% / 5.0% / 0.1% 划分与 BERT 预训练常见的949,50,1惯例一致--vocab-fileWordPiece 词表路径。3.6 评估与日志参数EVAL_AND_LOGGING_ARGSEVAL_AND_LOGGING_ARGS( --log-interval 100 --save-interval 10000 --eval-interval 1000 --save $CHECKPOINT_PATH --load $CHECKPOINT_PATH --eval-iters 10 --tensorboard-dir $TENSORBOARD_LOGS_PATH )每 100 步打印一次日志每 1000 步在验证集上评估一次每轮 10 个 iteration每 10000 步保存一次 checkpoint且训练中断后可凭--load $CHECKPOINT_PATH恢复--tensorboard-dir输出 TensorBoard 事件配合--log-interval可实时观察 lm loss / sop loss 曲线。4. 模型规模扩展4B 与 20B 配置README 明确指出“示例展示的是 340M 模型的跑法”并额外给出了两档更大规模的配置模板仅需替换上述BERT_MODEL_ARGS与并行参数即可4B 配置--num-layers 48 \ --hidden-size 2560 \ --num-attention-heads 32 \ --tensor-model-parallel-size 1 \ --pipeline-model-parallel-size 1 \48 层、隐藏维度 2560、32 头模型并行均取 1即纯数据并行起步适合单机多卡如 8×A100直接扩展数据并行规模。20B 配置--num-layers 48 \ --hidden-size 6144 \ --num-attention-heads 96 \ --tensor-model-parallel-size 4 \ --pipeline-model-parallel-size 4 \48 层、隐藏维度 6144、96 头张量并行 4 × 流水线并行 4即 16 个模型并行分片通常需要至少 16 张 GPU如 4 节点 × 8 卡中取 16 卡或直接 2 节点 × 8 卡。可据此推算20B 配置下 FFN 隐藏维度默认为4 × hidden-size 24576arguments.py 中--ffn-hidden-size缺省时取 4×hidden-size。三档规模对比表规模层数hidden注意力头张量并行流水线并行参数量级340M24102416816~0.34BBERT-Large4B4825603211~4B20B4861449644~20B从源码结构看上述所有规模共用同一个pretrain_bert.py入口模型尺寸只由--num-layers / --hidden-size / --num-attention-heads决定并行切分只由--tensor-model-parallel-size / --pipeline-model-parallel-size决定因此替换参数即可无缝切换规模。5. 源码级实现原理从 pretrain_bert.py 到 BertModel5.1 入口与模型构建pretrain_bert.py 的model_provider展示了两个层面的模型实现legacy 模型--use-legacy-models时使用megatron.legacy.model.BertModelMegatron Core 模型默认使用 bert_layer_specs.py 提供的bert_layer_with_transformer_engine_specTransformer Engine 实现支持 FP8 等或--spec local切换为纯 Megatron Core 实现的bert_layer_local_spec使用ColumnParallelLinear/DotProductAttention。BertModelmegatron/core/models/bert/bert_model.py由四部分组成LanguageModelEmbedding含 token 类型嵌入num_tokentypes2当启用二分类头时、TransformerBlock编码器、BertLMHeadoutput_layer以及可选的binary_headPoolerNSP/SOP 二分类头。位置编码默认learned_absolute也支持rope。5.2 前向与损失MLM SOPforward_step从 batch 中解出tokens / types / sentence_order / loss_mask / lm_labels / padding_mask六个字段pretrain_bert.py其中tokens输入 token idstypes句子 A/B 的 token 类型 idsentence_order二分类标签下一句是否随机替换loss_mask仅对 masked 位置计算 MLM 损失的掩码lm_labels掩码位置的真实 token id。loss_funcpretrain_bert.py计算两类损失MLM 掩码语言模型损失按 loss_mask 加权平均与SOP 句子顺序损失sentence_order上的交叉熵二者相加作为总损失并分别记录lm loss与sop loss到日志。--bert-no-binary-head可关闭二分类头arguments.py此时不产生 sop loss模型退化为纯 MLM 预训练。5.3 数据集构建与掩码策略train_valid_test_datasets_provider使用BERTMaskedWordPieceDatasetmegatron/core/datasets/bert_dataset.py构建三份数据集其配置项包括--mask-prob默认 0.15token 被选为掩码候选的概率--short-seq-prob默认 0.1产出短序列小于目标长度的概率--mid-level-dataset-surplus、--allow-ambiguous-pad-tokens等辅助项。样本构造逻辑bert_dataset.py把样本切分为连续子段 A 与 B以 50% 概率随机交换生成is_random标签拼接为[CLS] A [SEP] B [SEP]再执行掩码。掩码替换策略bert_dataset.py遵循 BERT 原文的 80/10/10 规则80% 概率替换为[MASK]10% 概率替换为词表随机 token10% 概率保持原词不变。此外MaskedWordPieceDatasetConfigmasked_dataset.py支持 SpanBERT 风格的 n-gram 掩码扩展masking_max_ngram、masking_use_geometric_distribution等当前 BERT 示例固定为 3-gram、整词掩码、无置换、无几何分布。5.4 注意力后端与掩码维度随 TE 版本自适配BertModel._sanity_check_attention_and_get_attn_mask_dimensionbert_model.py根据--attention-backend与 Transformer Engine 版本决定注意力掩码的维度格式TE ≥ 1.10flash/fused/unfused 均使用 padding mask掩码形状[b,1,1,s]b11sTE 1.7 ~ 1.10flash/fused 用 b11sunfused 用[b,1,s,s]b1ssTE 1.7仅支持 unfused且禁用 flash/fused使用 localMCore 原生DotProductAttention时仅允许local/auto掩码为 b1ss。这就是--attention-backend auto可以“无脑使用”的原因框架会根据实际安装的 TE 版本自动降级到可用后端。若显式指定 flash 而 TE 版本过旧训练会直接断言报错。6. 实战注意事项小结并行规模与显存匹配340M 脚本默认 TP8 × PP16 面向多机设计单机 8 卡直接跑时请下调 PP 并开启 virtual pipeline或改用 4B 配置TP1、PP1做纯数据并行。容器版本对齐README 指定nvcr.io/nvidia/pytorch:24.01-py3其中预装的 TE 版本决定可用的注意力后端若要使用flash/fused请确认 TE ≥ 1.7。数据与词表DATA_PATH必须是经 tools/preprocess_data.py 预处理过的索引数据集前缀词表文件需与数据分词方式BertWordPieceLowerCase一致pretrain_bert.py入口默认 tokenizer 类型即BertWordPieceLowerCase。学习率调度--lr-decay-iters 990000略小于--train-iters 1000000保证训练结束前学习率已平滑衰减到--min-lr 1.0e-5若希望严格对齐可保持--lr-decay-iters缺省默认取 train-iters。断点续训--save与--load指向同一CHECKPOINT_PATH配合--save-interval 10000可在长程预训练中稳定恢复。通过本示例开发者可以快速验证从数据预处理、Docker 启动到三档规模配置的完整 BERT 预训练流水线并借助源码路径进一步定制掩码策略、注意力后端与并行方案。赞分享人工智能大模型强化学习AI Agent微调【免费下载链接】OpenClaw-RLOpenClaw-RL: Train any agent simply by talking项目地址https://gitcode.com/gh_mirrors/op/OpenClaw-RL点击查看免费下载相关推荐Snowflake Arctic Embed M Long OpenMind部署指南本地、云端和边缘计算全攻略Snowflake Arctic Embed M Long OpenMind部署指南本地、云端和边缘计算全攻略 Snowflake Arctic EmbedMegatron-LM GPT-3 175B 大规模预训练实战从 Docker 环境到分布式训练脚本全解析Megatron LM GPT 3 175B 大规模预训练实战从 Docker 环境到分布式训练脚本全解析 本篇技术指南基于 Megatron LM 仓库中的人工智能大模型预训练分布式训练深度学习强化学习Megatron-LM实战指南解锁大规模Transformer训练的高效密码Megatron LM实战指南解锁大规模Transformer训练的高效密码 Megatron LM是一款由NVIDIA开发的开源项目专注于实现大规模Tra人工智能大模型预训练分布式训练深度学习强化学习上一篇从 clinical_index 到患者队列用 idc-index 发现、解码并关联 IDC 临床数据的实战指南下一篇OnyxdanswerGroup Manager 范围化权限设计研究is_manager 角色绑定、双门强制执行与实时作用域解析创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考