1. veRL 0.7版本架构演进全景作为昇腾AI生态中的核心强化学习框架veRL在0.7版本完成了从传统训练框架向服务化架构的关键转型。这次升级不是简单的功能迭代而是从根本上重构了框架的运行时模型——将原本紧耦合的离线推理模式解耦为分布式服务化架构同时统一了碎片化的训练后端实现。这些改动直接影响了框架的四个核心维度执行模式从同步SPMD到异步服务化资源管理从静态分配到动态调度组件边界从功能耦合到职责分离性能分析从单进程到分布式profiling这种架构转变使得veRL能够更好地支持Agentic RL场景也为后续的多模态、多任务学习奠定了基础。下面这张对比表清晰地展示了v0.6到v0.7的核心变化维度v0.6架构特点v0.7架构改进推理模式离线同步SPMD在线服务化AgentLoop训练后端FSDP/Megatron双轨制统一Engine抽象层资源调度静态绑定的Worker进程动态HttpServer负载均衡Profiling单进程同步采集跨进程异步profiling2. 推理架构从离线SPMD到服务化AgentLoop2.1 AgentLoop服务化改造背景传统强化学习框架的推理过程即rollout阶段通常采用同步数据并行SPMD模式这种设计存在三个根本性缺陷扩展性瓶颈当需要集成LLM等重型模型时同步执行的通信开销成为性能瓶颈灵活性不足无法支持多轮对话multi-turn、工具调用等Agentic RL必需的特性资源利用率低GPU/NPU在等待环境反馈或人工输入时处于空闲状态veRL的解决方案是将rollout过程重构为服务化的AgentLoop模式其核心设计目标包括支持用户自定义rollout逻辑的插件式扩展提供标准化的推理请求API接口实现请求级别的负载均衡实际测试表明在对话类任务中服务化改造使NPU利用率从40%提升至75%单卡支持的并发对话数增加3倍2.2 服务化架构实现细节2.2.1 核心组件交互关系AgentLoop架构采用分层设计各层之间通过Ray进行跨进程通信AgentLoopManager (控制面) ├── AgentLoopWorker1 (业务逻辑层) │ └── AsyncLLMServerManager (资源调度) ├── AgentLoopWorker2 │ └── AsyncLLMServerManager └── ...关键组件职责AgentLoopManager批量请求的分片与调度维护全局状态AgentLoopWorker具体业务逻辑执行单元每个worker对应一个Ray ActorAsyncLLMServerManager管理底层HttpServer实例实现负载均衡2.2.2 通信协议优化为减少跨进程通信开销veRL设计了专用的序列化协议使用Arrow格式压缩传输数据对张量数据启用Zero-Copy传输请求批处理默认batch_size32# 典型请求处理流程 async def generate_sequences(self, prompts): chunks split_into_batches(prompts, self.batch_size) results await asyncio.gather(*[ self.worker.generate.remote(chunk) for chunk in chunks ]) return merge_results(results)2.3 性能优化实践2.3.1 动态批处理策略针对不同长度的prompt采用动态批处理策略短文本增大batch_size提高吞吐长文本减小batch_size保证低延迟def calculate_batch_size(prompts): avg_len sum(len(p) for p in prompts) / len(prompts) if avg_len 50: return 64 elif avg_len 200: return 32 else: return 162.3.2 内存优化技巧在NPU环境下特别有效的内存管理方法使用分页注意力(PagedAttention)减少KV缓存碎片对连续的小张量请求进行合并分配设置显存水位线自动触发GC3. 训练架构从多后端到统一Engine3.1 统一训练架构的必要性在v0.6版本中veRL同时维护FSDP和Megatron两套训练实现导致重复代码量超过60%新功能需要多次实现profiling等基础设施难以统一3.2 统一架构设计3.2.1 分层抽象设计TrainingTask (PPO/DPO等算法) └── BaseWorker (Actor/Critic等角色) └── BaseEngine (FSDP/Megatron等后端)关键抽象层Engine抽象封装分布式训练原语梯度聚合方式模型分片策略通信优化方法Worker抽象定义训练逻辑数据加载流程损失计算方式验证逻辑3.2.2 典型训练流程class PPOTrainer: def __init__(self, engine_type): self.engine create_engine(engine_type) # 动态创建引擎 self.actor ActorWorker(self.engine) self.critic CriticWorker(self.engine) def train(self, data): with self.engine.step_context(): # 自动处理梯度同步 loss self.actor.compute_loss(data) self.engine.backward(loss)3.3 性能对比数据统一架构后在不同硬件配置下的性能表现硬件配置v0.6吞吐(samples/s)v0.7吞吐(samples/s)提升幅度8xAscend910B12,34515,67827%4xA100-80G9,87611,23414%单机8卡MI250X8,76510,98725%4. 异步Profiling系统改造4.1 改造前架构的局限性原有profiling系统基于同步设计存在三大痛点跨进程采集失效无法采集分离部署的推理服务数据控制链路冗长需要从Trainer穿透多层调用到具体Worker配置依赖过重装饰器必须依赖profiler实例参数4.2 异步改造方案4.2.1 推理侧profiling下沉将profiling能力植入到HttpServer内部每个HttpServer独立维护profiler实例通过Replica统一控制采集启停结果通过OSS/MinIO统一存储class HttpServer: async def start_profiling(self, config): self.profiler create_profiler(config) await self.profiler.start() async def stop_profiling(self): await self.profiler.stop() upload_results(self.profiler.output())4.2.2 训练侧profiling上移通过Engine抽象层统一管理在BaseEngine中集成profiling控制各Worker自动继承profiling能力支持按训练阶段过滤采集class BaseEngine: def __init__(self): self.profiler DistProfiler() def step_context(self): self.profiler.annotate(step) def _step(): pass return _step()4.3 性能数据采集优化4.3.1 数据量控制策略针对NPU profiler的特殊优化默认关闭memory profiling限制activity类型为关键算子设置10ms的采样间隔# profiler_config.yaml npu_profiler: activities: - kernel - runtime options: sampling_interval: 10ms memory: false4.3.2 跨进程时间同步使用NTP协议同步各节点时钟误差控制在±1ms内主节点作为NTP server工作节点定期同步时钟采集数据时记录同步状态5. 典型问题排查指南5.1 推理延迟突增问题现象特定请求的延迟是平均值的10倍以上排查步骤检查HttpServer的负载均衡情况# 获取各Server负载 for server in manager.list_servers(): print(server.stats().queue_size)分析profiling数据定位慢请求检查是否有超长prompt未分片解决方案调整动态批处理参数增加prompt长度检查扩容HttpServer实例5.2 Profiling数据缺失问题现象部分节点的profiling结果为空检查清单确认NTP服务正常运行ntpstat检查profiler配置同步状态验证OSS存储权限根治措施增加配置校验环节实现profiling健康检查API添加异常重试机制6. 演进方向与实用建议6.1 近期优化路线单卡多进程支持解决NPU环境下多进程profiling冲突动态profiling控制基于运行时指标自动调整采集粒度调度Timeline可视化识别流水线中的气泡问题6.2 架构设计启示服务化解耦将rollout拆分为独立服务是支持Agentic RL的关键抽象分层训练架构的统一显著降低了维护成本可观测性异步profiling为分布式系统提供了新的调试手段6.3 实践建议对于计划升级到veRL 0.7的用户建议先在小规模环境验证服务化推理逐步迁移训练任务到统一架构利用异步profiling定位性能瓶颈在NPU环境下的特别注意事项调整默认的profiling配置减少数据量监控跨进程通信的内存使用定期检查时间同步状态