开源框架
整理各种面试中常见的八股问题,涵盖 Python 基础、PyTorch 基础、算法与数据结构等内容
ROLL
-
阿里巴巴开源的面向大规模学习的强化学习优化框架
- 为规模化而生:基于 Ray 的分布式架构构建,支持千卡 GPU 级别的大规模集群训练;实现的创新的 Rollout 调度器与 AutoDeviceMapping 模块显著提升了 GPU 资源利用率
- 训练推理分离:集成 Megatron-LM、DeepSpeed、FSDP2 等训练后端;SGLang、vLLM 等推理后端,显著加速模型训练与推理采样过程
- 算法支持:内置 PPO、GRPO 等主流强化学习算法
- 训练范式支持:RLVR、Agentic RL、Knowledge Distillation、DPO、SFT 等流水线,管理集群生命周期(创建、初始化、销毁),训练循环编排(卸载 / 加载循环、数据收集、训练步骤),检查点管理和指标追踪,数据采样和批次构建
-
Agentic RL Pipeline
-
环境定义
-
通过 EnvManager 管理环境并支持生成轨迹,支持 gym-like 接口扩展自定义环境
-
实现
run_rollout_loop方法def run_rollout_loop(self, data: DataProto): """ 1. 每次调用 run_rollout_loop 时,会持续执行 episode 直到收到数据收集完成的命令 2. 需要重置 seed 以确保所有 group 的一致性 3. episode_id 从 scheduler 端获取 Seed 更新逻辑: group_seed = base_seed + group_id episode_seed = group_seed + episode_id trajectory_id: f"{group_id}_{episode_id}_{episode_seed}" """ # 极简调用示例 while self.running: # 从 scheduler 获取 episode_id self.episode_id = ray.get(self.output_queue.get_episode_id.remote(self.env_config["group_id"])) if self.episode_id is None: break # 重置环境 rollout_cache = self.reset() while rollout_cache is not None and not rollout_cache.terminated and not rollout_cache.truncated: # 做出决策 lm_output = self.make_decision(rollout_cache) # 执行环境步骤 rollout_cache = self.step(lm_output) # 提交轨迹 rollout = self.formulate_rollouts(rollout_cache) ray.get(self.output_queue.put.remote(self.env_config['group_id'], self.episode_id, start_step, rollout)) -
while loop 无限循环:EnvManager 通过 while 循环持续执行 episode
-
数据集遍历完成才返回 None 退出:当数据集遍历完成时,
reset()方法返回 None,触发循环退出 -
每个 episode 必须有对应的轨迹 put:每个完成的 episode 必须通过
output_queue.put提交轨迹数据 -
数据管理:为了避免每个 env 各自读取数据造成的访存 / 内存瓶颈,框架层面提供了 GlobalDataset 组件,实现数据集的统一管理和分发
-
轨迹过滤:通过自定义过滤函数,可以基于轨迹的各种属性(如分数、长度、停止原因等)实现灵活的过滤策略
-
-
Environment-Level 异步并行:各环境独立采样轨迹,提高采样效率
-
异步训练:rollout-training 解耦,支持异步训练
-
学习粒度:支持 TrajectoryWise 形式 (StarPO) 和 StepWise (GiGPO) 训练形式
-
高效训练优化:支持 Sequence Packing(将多条短样本拼接成连续序列,减少 padding)与 Dynamic Batching(根据样本长度动态组 batch,按 batch 内最大长度统一 padding,最小化无效计算)
-
-
Distillation Pipeline
- 多种蒸馏损失:支持用不同蒸馏损失训练模型,并可通过相应参数进行更精细的配置
- 全面的性能监控:细粒度度量跟踪系统,监控性能指标,为模型训练过程提供全面的可视化和分析能力
- 高效训练优化:支持 Sequence Packing(将多条短样本拼接成连续序列,减少 padding)
-
On-Policy Distillation Pipeline
-
从学生模型采样轨迹,然后使用高性能的教师模型对轨迹中的每个 token 进行评分
┌─────────────────────────────────────────────────────────────────┐ │ On-Policy Distillation 流程 │ ├─────────────────────────────────────────────────────────────────┤ │ │ │ 1. Sample Trajectories │ │ ┌──────────┐ ┌──────────────────────────────────┐ │ │ │ Prompt │ ──▶ │ Student Model (rollout) │ │ │ └──────────┘ │ 生成轨迹 + student_log_probs │ │ │ └──────────────────────────────────┘ │ │ │ │ │ ▼ │ │ 2. Compute Teacher Log Probs │ │ ┌──────────────────────────────────┐ │ │ │ Teacher Model (forward) │ │ │ │ 计算 teacher_log_probs │ │ │ └──────────────────────────────────┘ │ │ │ │ │ ▼ │ │ 3. Compute Advantage │ │ advantage = teacher_log_prob - student_log_prob│ │ │ │ │ ▼ │ │ 4. Train with Importance Sampling │ │ ┌──────────────────────────────────┐ │ │ │ Student Model (train) │ │ │ │ 使用 advantage 进行策略更新 │ │ │ └──────────────────────────────────┘ │ │ │ └─────────────────────────────────────────────────────────────────┘ -
与 Off-Policy Distillation 的区别
特性 Off-Policy Distillation On-Policy Distillation 数据来源 预先生成的数据 学生模型实时生成的数据 状态分布 教师模型的状态分布 学生模型的状态分布 奖励信号 密集(每步都有) 密集(每步都有) 分布偏移 存在(学生可能进入教师未见过的状态) 不存在(在自己的分布上学习) 适用场景 大规模离线蒸馏 需要在线适应的场景 -
使用 Reverse KL 作为损失函数
-
-
DPO Pipeline
- 多种 DPO 损失:支持用不同 DPO 损失训练模型,并可通过相应参数进行更精细的配置
-
RLVR Pipeline
- 多样化任务支持:内置支持各种任务类型,包括数学推理、代码生成、LLM 作为评判器评估和指令遵循,每种类型都配备了专门的奖励评估机制和灵活的扩展接口,以适应新任务类型
- 多任务联合训练:能够同时优化模型在数学、编程和通用推理等多个领域的能力,灵活控制每个领域的数据采样比例和奖励权重配置
- 算法友好的强化学习框架:提供丰富的强化学习策略选项(超过 20 种),包括但不限于奖励归一化、奖励裁剪、各种优势估计方法等。不限于单一算法实现,支持多种强化学习算法,如 PPO、GRPO、Reinforce++、TOPR 和 RAFT++
-
SFT Pipeline
- 统一的数据编码与对话模板:支持 system/user/assistant 对话格式拼接,并自动构造
labels(仅对回答部分计 loss) - 高效训练优化:支持 Sequence Packing(将多条短样本拼接成连续序列,减少 padding)
- 统一的数据编码与对话模板:支持 system/user/assistant 对话格式拼接,并自动构造
-
VLM RLVR Pipeline
- 内置支持视觉推理和视觉感知任务,目前包括数学(推理)和检测(感知),每个任务都配备专门的奖励评估机制,使得能够同时优化模型在多个领域(如数学和检测)的能力
-
ROLL 的设计思路
- Task Layer(任务层)
- 任务级数据编排层,是用户最直观的交互层
- 定义不同任务的完整数据流程,仅调用 Worker 层的顶层接口,不感知底层实现
- 支持的任务包括 RLVR、Agentic RL、Distill、SFT、DPO 等
- Worker Layer(计算逻辑层)
- 算法逻辑的纯实现层,剥离了框架 / 硬件依赖
- 封装具体的算法计算逻辑,保证算法逻辑的纯粹性
- 包括 Actor Worker、Critic Worker、Infer Worker、Reward Worker、Teacher Worker / Student Worker
- 每个 Parallel Worker 持有⼀组 Ray PlacementGroup 资源
- Strategy Layer(训练 / 推理框架接入层)
- 底层训练 / 推理框架的适配层,实现多框架自由切换
- 通过统一接口抽象,让用户仅修改少量配置,即可在不同底层框架间切换
- 支持 Megatron、vLLM、SGLang、FSDP、DeepSpeed 等
- Platform Layer(硬件平台适配层)
- 硬件平台的轻量封装层,实现跨硬件兼容
- 对不同计算硬件做轻量级封装,屏蔽硬件差异
- CUDA(NVIDIA GPU)、CPU、NPU(昇腾等国产 AI 芯片)、ROCm(AMD GPU)
- Cluster 和 Device Mapping
- Cluster 是 ROLL 中连接 Task Layer 与 Worker Layer 的核心枢纽,其核心设计目标是彻底屏蔽分布式训练的底层复杂度
- 封装内容:资源管理、Worker 实例创建、多节点 / 多卡通信调度等分布式细节
- ROLL Cluster 本质就是分布式计算的统一代理层,用 分发(Map)→ 执行 → 收集(Reduce) 完成所有并行计算,同时完美兼容 SPMD(Megatron)+ 非 SPMD(vLLM/SGLang)两大框架体系
- Task Layer(任务层)
-
ROLL 的 rollout 流程是怎么样的
- 第一代:Offline Engine(离线批量推理)
- 直接用 vLLM LLM 类,SPMD Rollout
- 同步阻塞:一个请求慢 → 整个 Batch 卡住
- Agent 任务不友好:工具调用、多轮交互极易拖慢全局
- 第二代:AsyncEngine + HTTP 服务
- 启动 HTTP 服务,用 chat/completion 接口,解决异步问题
- 缺陷是 HTTP 通信开销大,同时经过 HTTP 序列化 / 反序列化、分词二次处理,导致 token 对齐失效
- 第三代:AsyncEngine + Ray 远程调用
- 直接调用 AsyncEngine 原生接口,Token In → Token Out(零序列化损耗),并且使用 Ray 远程调用替代 HTTP
- ROLL Server-Based Rollout 架构
- 采用生产者 (EnvManager) → 缓冲区 (SampleBuffer) → 调度器 (RolloutScheduler) → 消费者 (Trainer) 设计模式
- 生产者 EnvManager:执行 Rollout,生成轨迹(trajectory),多个实例完全独立异步运行,与环境 / 工具多轮交互后生成完整轨迹后放入缓冲区
- 消费者 Trainer:从缓冲区拿轨迹做训练(PPO / 奖励计算 / Critic 更新),与 Rollout 完全解耦,实现异步训练
- 调度器 RolloutScheduler
- 通过管理轨迹生命周期来控制 rollout 阶段
- 根据当前训练阶段动态生成任务令牌:每个 EnvManager 在生产前需先获取令牌,完成后将令牌和结果返回给调度器
- 当收集满一个 batch 后,调度器将结果返回给 Pipeline 进行后续训练流程
- 第一代:Offline Engine(离线批量推理)
-
ROLL 是怎么做环境异步交互和冗余采样的
-
ROLL 的异步训练机制
- 同步训练模式:Rollout 生成一批数据 → 等待训练完成更新模型 → 再进行下一轮 Rollout
- 在异步模式下,rollout 阶段无需等待训练完成,训练可以使用在旧版本策略下生成的响应进行优化
- 调度器每次会根据异步因子(async ratio)生成额外的令牌,EnvManager 可以持续进行生产;当满足 batch 要求后,调度器会先返回一部分数据给 Pipeline 进行训练
- 由于异步状态下训练和 rollout 使用不同的机器资源,中间是非阻塞的,只有在需要同步参数时才需要暂停
-
ROLL 的推理任务调度
- ROLL 通过 Proxy 模式 实现 EnvManager 与底层推理引擎的完全解耦
- EnvManager 不直接与 vLLM Worker 交互,而是通过 PolicyProxy 调用 LLM 生成 action
- 核心价值:将环境交互逻辑与推理引擎彻底解耦,底层可灵活切换 vLLM、SGLang 等不同推理引擎,上层代码无需修改
- RequestScheduler 是整个推理任务调度的核心,以 Ray Actor 形式运行,负责将多个 EnvManager 的请求分发到不同的 vLLM Worker
- Sticky Routing
- 每个 EnvManager 首次请求时,按负载均衡策略分配到一个 Worker
- 后续该 EnvManager 的所有请求,始终路由到同一个 Worker
- 这是由于同一 EnvManager 的请求通常有共同的 prompt 前缀,由同一 Worker 处理可避免重复计算,大幅提升推理效率
-
ROLL 的训练适配
- Megatron-LM 对分布式训练做了深度优化,但是存在两个核心问题
- 权重格式不兼容:与 Hugging Face Transformers 生态的权重格式不互通
- API 使用门槛高:初始化流程复杂,远不如 Hugging Face 易用,这导致模型在「HuggingFace 生态(推理 / 评测)」和「Megatron 生态(训练)」之间切换时,需要大量手工转换工作,效率极低
- mcore adapter 是 ROLL 开源版本中用于解决上述痛点的核心组件
- 双向格式转换:提供 HuggingFace ↔ Megatron 权重格式的全自动转换,完美兼容 TP/PP/EP/CP 等所有并行策略
- 统一加载接口:提供类 Hugging Face 的
AutoModel.from_pretrained()API,彻底屏蔽 Megatron 复杂的分布式初始化逻辑 - 流式转换:支持迭代式权重转换,大幅节省内存,可无缝集成 vLLM 等推理引擎,满足强化学习场景的关键需求
- Megatron-LM 对分布式训练做了深度优化,但是存在两个核心问题
-
ROLL 框架如何进行异步奖励计算和动态过滤的
- 传统的 batch rollout
- 生成、奖励计算、过滤 串行进行
- 大量时间等待,导致 GPU 资源闲置
- ROLL:样本级 async rollout,压榨 GPU 效率
- DynamicSamplingScheduler 管理 Prompt 生成,一旦生成完毕,立即调用对应 reward Worker 异步计算 reward,从而实现 generate 和 compute_rewards 的重叠与连续
- 传统的 batch rollout
-
ROLL 框架如何通过 Dynamic Batching 和 Sequence Packing 处理长尾 rollout 的?
- 在 RL 训练(尤其是 Agentic RL、多轮交互场景)中,rollout 阶段天然存在序列长度长尾分布,长序列样本会阻塞整个 batch,造成 GPU idle 气泡,利用率暴跌,训练效率大幅下降
- Dynamic Batching:按实际 token 负载均衡,消除 padding 浪费
- 传统静态批处理按样本数划分 DP 分片,强制 pad 到最大长度
- ROLL 动态批处理的核心是按实际 token 数量在 DP 分片中划分 rollout batch,保证各 GPU 负载均衡,最大化有效计算占比
- 将 rollout batch 中的样本按序列长度分组,相似长度样本聚合,减少跨分片长度差异
- 支持 Virtual Pipelie Model Parallel,优先拆分 tokens 数量多且 micro_batch_size > 1 的 micro_batch,使得 micro_batch 数量为 pp_size 整除倍
- Sequence Packing
- 将同一个 micro batch 内长短不同的句子打包在一起,消除 pad token,同时严格满足 Context Parallel + Tensor Parallel 的分布式约束
- 使用优化打包算法减少 micro batch 数量,提升训练效率
- 基本步骤
- 去掉每条样本原有 padding,只保留有效 token
- 重新 padding 到 2×CP×TP 对齐长度
- 按 CP 交错规则切分并分配到不同 CP rank
- 拼接成一段连续 token 送入模型
- 输出后解包,逐序列计算 loss 再累加
- 使用 Karmarkar-Karp 算法 在两层做均衡:
- Global Batch → DP Rank
- Mini Batch → Micro Batch
- 先做 Dynamic Batching:全局分片、负载均衡、控制单卡 token 数;再做 Sequence Packing:micro batch 内序列拼接,彻底去 padding
-
有了解 ROCK 框架吗?
AReaL
Ray
- Ray 分布式计算框架介绍
- 什么是 Ray 框架?
- ROLL 为什么要用 Ray 框架?有缺点是什么?
DeepSpeed
Megatron
Recompute 相关参数
- recompute_granularity
- 详情:重新计算激活的粒度
- 可选值:'full'、'selective'、'none'
- 'full':重新计算整个 transformer layer
- 'selective':只计算 transformer layer 中的核心注意力部分
- 'none':不进行激活重计算
- 默认值:'selective'
- 说明:通常'selective' 是推荐的
- recompute_method
- 详情:重计算方法,需将 recompute_granularity 设置为 'full' 才生效
- 可选值:'uniform'、'block'
- 默认值:None
- recompute_num_layers
- 详情:每个均匀划分的重计算单元的 transformer layers 数量,需 recompute_granularity='full' 且 recompute_method='uniform' 时生效
- 可选值:整数
- 默认值:None
- 说明:recompute_num_layers 越大,显存占用越小,计算成本越大
- recompute_modules
- 详情:选择性重计算的模块,在 recompute_granularity='selective' 时生效
- 可选值:["core_attn", "moe_act", "layernorm", "mla_up_proj", "mlp", "moe"]
- "core_attn":重新计算 Transformer 层中的核心注意力部分
- "mlp":重新计算密集的 MLP 层
- "moe":重新计算 MoE 层
- "moe_act":重新计算 MoE 中的 MLP 激活函数部分
- "layernorm":重新计算 input_layernorm 和 pre_mlp_layernorm
- "mla_up_proj":重新计算 MLA 上投影和 RoPE 应用部分
- 默认值:["core_attn"]
Fusion Kernel 相关参数
- masked_softmax_fusion
- 详情:开启 query_key_value 的 scaling, masking, and softmax 融合
- 可选值:True、False
- 默认值:True
- bias_dropout_fusion
- 详情:开启 bias 和 dropout 的融合
- 可选值:True、False
- 默认值:True
- bias_activation_fusion
- 详情:在可能的情况下融合偏置加法和激活函数
- 可选值:True、False
- 默认值:True
- apply_rope_fusion
- 详情:开启 rope 融合
- 可选值:True、False
- 默认值:False
- 说明:并非所有情况都支持,例如 MLA、mrope 等不支持
- gradient_accumulation_fusion
- 详情:开启梯度累加融合
- 可选值:True、False
- 默认值:True
- cross_entropy_loss_fusion
- 详情:启动交叉熵损失计算融合
- 可选值:True、False
- 默认值:True
- cross_entropy_fusion_impl
- 详情:交叉熵融合实现
- 可选值:'native'、'te'
- 默认值:None,CUDA 设置为 'te',NPU 设置为 'native'
批次与训练参数
- dataloader_pin_memory
- 详情:是否将数据加载到固定内存中以加速数据传输到 GPU
- 可选值:True、False
- 默认值:True
- dataloader_persist_workers
- 详情:是否在每个 epoch 结束后保持数据加载器的工作线程
- 可选值:True、False
- 默认值:True
- dataloader_prefetch_factor
- 详情:每个工作线程预取的批次数量
- 可选值:正整数
- 默认值:2
- group_by_length
- 详情:是否在训练数据集中将长度大致相同的样本分组在一起(有随机因素),以最小化填充并确保各节点与进程的负载均衡以提高效率
- 可选值:True、False
- 默认值:False
- padding_free
- 将一个 batch 中的数据进行展平而避免数据 padding,从而降低显存占用并加快训练速度
- 可选值:True、False
- 默认值:True
注意力相关参数
- attention_backend
- 详情:使用的注意力后端
- 可选值:'flash'、'fused'、'unfused'、'local'、'auto'
- 默认值:'flash'
- 说明:安装 'flash_attention_3' 则优先使用 fa3
- attention_softmax_in_fp32
- 详情:在 attention_mask 和 softmax 中使用 fp32 进行计算
- 可选值:True、False
- 默认值:True
- calculate_per_token_loss
- 根据全局批次中的非填充 token 数量来对交叉熵损失进行缩放
- 默认:None,
task_type为 'causal_lm' 且为预训练 / 微调时,默认为 True,否则默认为 False
优化器相关参数
- optimizer
- 详情:优化器类型
- 可选值:'adam'、'sgd'、'muon'、'dist_muon'
- 默认值:'adam'(实际为 'adamw')
- optimizer_cpu_offload
- 详情:将优化器状态卸载到 CPU
- 可选值:True、False
- 默认值:False
- 说明:可显著降低显存占用,但增加内存占用;若 global_batch_size 较大,则对训练速度的影响不大
- optimizer_offload_fraction
- 详情:优化器状态卸载到 CPU 的比例
- 可选值:0~1 之间的浮点数
- 默认值:None(默认为 1,即完全卸载)
- main_grads_dtype: 启用 use_precision_aware_optimizer 时主梯度的 dtype。可选为 'fp32', 'bf16'。默认为 'fp32'
- main_params_dtype: 启用 use_precision_aware_optimizer 时主参数的 dtype。可选为 'fp32', 'fp16'。默认为 'fp32'
- exp_avg_dtype: 启用 use_precision_aware_optimizer 时,adam 优化器中 exp_avg(即一阶矩)的 dtype。该 dtype 用于在训练过程中将优化器状态存储在内存中,但不会影响内核计算时的精度。可选为 'fp32', 'fp16', 'bf16', 'fp8'。默认为 'fp32'
- exp_avg_sq_dtype: 启用 use_precision_aware_optimizer 时,adam 优化器中 exp_avg_sq(即二阶矩)的 dtype。该 dtype 用于在训练过程中将优化器状态存储在内存中,但不会影响内核计算的精度。可选为 'fp32', 'fp16', 'bf16', 'fp8'。默认为 'fp32'
分布式并行参数
- tensor_model_parallel_size (tp)
- 详情:张量并行数
- 可选值:正整数
- 默认值:1
- pipeline_model_parallel_size (pp)
- 详情:流水线并行数
- 可选值:正整数
- 默认值:1
- context_parallel_size (cp)
- 详情:上下文并行数
- 可选值:正整数
- 默认值:1
- expert_model_parallel_size
- 详情:专家并行数
- 可选值:正整数
- 默认值:1
- sequence_parallel
- 详情:启动序列并行优化
- 可选值:True、False
- 默认值:False
- 说明:需设置 tensor_model_parallel_size 才生效
MoE 模型参数
- moe_router_load_balancing_type
- 详情:确定路由器的负载均衡策略,其中 "global_aux_loss" 需要 "megatron-core>=0.15"
- 可选值:"aux_loss"、"seq_aux_loss"、"global_aux_loss"、"sinkhorn"、"none"
- 默认值:None
- moe_router_dtype
- 详情:用于路由计算和专家输出加权平均的数据类型,增强数值稳定性,尤其在专家数量较多时;与 moe_permute_fusion 一起使用时性能影响可忽略不计;'none' 代表不改变数据类型
- 可选值:'none'、'fp32'、'fp64'
- 默认值:'fp32'
- moe_token_dispatcher_type
- 详情:要使用的 token 分发器类型
- 可选值:'allgather'、'alltoall'、'flex'、'alltoall_seq'
- 默认值:'alltoall'
- moe_enable_deepep
- 详情:启用 DeepEP 以实现 MoE 模型中的高效 token 调度和合并,仅在通过设置 --moe_token_dispatcher_type flex 使用弹性 token 调度器时有效
- 可选值:无(布尔型开关)
- 默认值:无
- moe_grouped_gemm
- 详情:当每个 rank 包含多个专家时,通过在多个流中启动多个本地 GEMM 内核,利用 TransformerEngine 中的 GroupedLinear 提高利用率和性能
- 可选值:True、False
- 默认值:True
- moe_permute_fusion
- 详情:在令牌分发过程中融合令牌重排操作
- 可选值:True、False
- 默认值:False
- moe_aux_loss_coeff
- 详情:默认为 0 不使用 aux_loss;值越大训练效果越差但 MoE 负载越均衡,需根据实验选择合适值
- 可选值:数值型
- 默认值:0
- moe_z_loss_coeff
- 详情:z-loss 的缩放系数
- 可选值:数值型 / None
- 默认值:None
- moe_shared_expert_overlap
- 详情:启用共享专家计算与调度器通信之间的重叠,不启用则共享专家在路由专家之后执行,仅在设置了 moe_shared_expert_intermediate_size 时有效
- 可选值:True、False
- 默认值:False
- moe_expert_capacity_factor
- 详情:每个专家的容量因子,None 表示不丢弃任何 token;设置后超出专家容量的 token 会基于选中概率被丢弃,可均衡训练负载、提升训练速度(如设为 1 或 2)
- 可选值:数值型 / None
- 默认值:None
- moe_pad_expert_input_to_capacity
- 详情:对每个专家的输入进行填充,使其长度与专家容量对齐,仅在设置了 --moe_expert_capacity_factor 参数后生效
- 可选值:True、False
- 默认值:False
- moe_token_drop_policy
- 详情:token 丢弃策略
- 可选值:'probs'、'position'
- 默认值:'probs'
Megatron-Bridge
- Megatron(含 Megatron-LM、Megatron-Core)采用分布式 PyTorch 检查点格式
- 主要格式:torch.save () 保存的 state_dict,包含模型权重、优化器状态、训练状态等,格式为
pt或bin - 分布式格式:针对 TP/PP/EP/CP 等并行策略,权重被切分成多个文件,每个文件对应一个并行分片(含模型权重、优化器状态、训练状态等)
- 主要格式:torch.save () 保存的 state_dict,包含模型权重、优化器状态、训练状态等,格式为
- 对 HuggingFace SafeTensors 格式的支持
- SafeTensors 是 HuggingFace 推出的安全、快速的张量存储格式,使用 Rust 实现,避免了 pickle 的安全风险,同时提供更快的加载速度
- Megatron-Bridge 提供了从 Megatron 分布式检查点到 HuggingFace SafeTensors 格式的转换工具,支持权重、优化器状态、训练状态等信息的完整转换
- save_hf_weights () 直接保存为 HF 兼容 Safetensors(分片、流式存储,支持大模型)
- save_hf_pretrained () 保存 config.json+tokenizer+model.safetensors,直接兼容 HuggingFace Transformers 加载
- 支持 PEFT/LoRA 权重的转换
- Megatron-Bridge 支持将 PEFT/LoRA 权重转换为 HuggingFace SafeTensors 格式,方便在 HuggingFace Transformers 中加载和使用
- 通过指定 base_model_checkpoint 和 peft_weights_checkpoint,工具会自动加载基础模型权重和 PEFT/LoRA 权重,并将它们合并后保存为 HF 兼容的 SafeTensors 格式