Kimi AI 与 kvcache-ai 开源 ‘AgentENV’:支撑 Kimi K3 智能体强化学习训练的分布式系统
Moonshot AI 的 Kimi 团队与 kvcache-ai 已开源 AgentENV (AENV),一个用于大规模运行智能体环境的分布式平台。AgentENV 为 Moonshot 的 2.8 万亿参数混合专家模型 Kimi K3 提供智能体强化学习训练支持。代码以 MIT 许可证发布。
环境基础设施为何制约智能体强化学习
智能体强化学习不仅涉及文本采样,还需要模型在真实计算机内部执行操作。每次 rollout 都需要一个独立的 Linux 环境,包含文件系统、网络栈和实时进程。
这一需求带来了艰难的权衡:容器启动快但共享宿主内核,会削弱模型生成代码的隔离性;完整虚拟机隔离性好但启动慢,空闲时仍占用内存。
AgentENV 正好针对这一缺口。它运行 Firecracker 微虚拟机,使空闲、重启和分支操作足够廉价,从而能在训练规模下运行。
AgentENV 的 Firecracker 架构详解
每个沙箱都是一个 Firecracker 微虚拟机,拥有自己的 Linux 内核、文件系统和网络命名空间。请求发往 Axum HTTP API,该 API 再转发给管理沙箱生命周期的协调器。
存储设计是亮点。根文件系统通过由 overlaybd 分层镜像支持的 ublk 用户态块设备提供。只读基础层在沙箱间共享,每个沙箱写入自己的上层。
在每个客户机内部,一个名为 envd 的守护进程负责命令执行、文件操作和健康报告(端口 49983)。反向代理将来自客户端的 HTTP 和 WebSocket 流量路由到 VM 内部运行的服务。
项目还列出了两种密度机制:主机页缓存在存储和内存快照数据之间共享;内存气球回收可归还的客户机内存给宿主机,随着环境随时间分叉,这有助于维持超分。
快照、暂停、恢复、分支
这四个特性是该项目的存在理由。AgentENV 增量式地快照内存和文件系统变化,而不是每次写入完整镜像。
报告的数据如下:基于快照的环境启动或恢复时间在 50 毫秒以内,暂停时间在 100 毫秒以内。即使在磁盘大量修改的情况下,增量快照捕获也在 100 毫秒以内完成。
分支是强化学习最特定的功能。一个运行中的沙箱可以在同一节点上克隆出最多 16 个独立的子沙箱。源沙箱在捕获期间短暂暂停,然后恢复。每个子沙箱继承源文件系统、内存和资源配置。
实际效果是昂贵的设置只需运行一次。团队可以安装依赖、克隆仓库并到达任务状态。然后该确切状态分叉为多个并行 rollout。快照持久化到 S3 兼容的对象存储或共享分布式文件系统。
需要注意一个默认设置:每个沙箱带有 TTL,到期触发的是暂停而非删除。删除需要向创建 API 传递 autoPause: false。
按需加载与快照仓库
镜像通过 overlaybd 按需加载。本地磁盘充当有界缓存,保留热数据并驱逐冷数据。
这正是实现集群级能力的关键。节点无需预热每个镜像或持有每个快照的完整副本。因此,可寻址的镜像集可以超过本地磁盘容量,同时集群范围内启动速度依然很快。
快照状态分为三层:构建器暂存工作区存放构建中的工件;已提交的快照仓库是持久化的真实来源;节点本地运行时缓存存放启动时派生的配置。
支持两个仓库后端:posix_fs(默认)和 oss。oss 路径通过共享的 S3 兼容客户端运行,因此需要明确的 region 参数。
一个基于 iroh 的可选点对点传输可以通告已提交的工件给对等节点。它默认是禁用的。文档明确指出 P2P 不会改变已提交快照模型。对于共享存储,文档要求至少 1 Gbps,强烈建议 10 Gbps 或更高。
AgentENV 暴露了一个兼容 E2B 的 HTTP API。将 E2B_API_URL 指向你的服务器,官方的 E2B Python 或 TypeScript SDK 无需修改代码即可工作。
这是一个有意为之的分发选择:已经在 E2B 上运行智能体的团队可以自托管运行时,无需重写智能体代码。项目还提供了一个原生的 aenv CLI,文档推荐用于 AgentENV 特定的工作流。
部署路径
前置要求为 Linux 内核 6.8+ 和 /dev/kvm 访问;安装脚本额外要求 Ubuntu 24.04。aenv CLI 支持 Linux 和 macOS 的 x86_64 和 arm64 架构。服务器本身仅支持 Linux,因为它需要 KVM。
文档列出了五种路径:
- 一个安装脚本,将服务器作为 systemd 服务运行
- 一个发布在 ghcr.io/kvcache-ai/aenv-server 的 Docker 镜像
- 一个模拟多节点集群的 Docker Compose 栈
- 包含网关、调度器和节点 DaemonSet 的 Kubernetes 清单
- 使用 Rust 工具链从源码构建
多节点部署会添加一个在 :8080 的网关和一个在 :9090 的调度器。
要点总结
- 部署覆盖安装脚本、Docker、Docker Compose 和 Kubernetes;多节点控制平面被记录为原型。
- AgentENV 将每个智能体环境运行为 Firecracker 微虚拟机而非容器,因此隔离是内核级别的。
- 项目报告从快照启动或恢复在 50 毫秒以内,暂停在 100 毫秒以内。
- 一个运行中的沙箱可以在同一节点上分支为最多 16 个独立子沙箱。
- HTTP API 兼容 E2B,因此现有的 E2B Python 和 TypeScript SDK 代码可以无需修改地运行。