SkyPilot Sandboxes:在自有 Kubernetes 上大规模运行不可信 LLM 代码的执行层
深入分析 SkyPilot Sandboxes——一种 BYOC(自带云)代码执行方案,可在用户自有的 Kubernetes 集群上创建轻量隔离的 Pod 来安全运行 LLM 生成代码,成本低至托管服务的 1/10,延迟更低,且代码与数据不离开用户环境。
概述
SkyPilot Sandboxes 是 SkyPilot 团队推出的**自带云(Bring Your Own Cloud, BYOC)**代码沙箱方案。它允许用户在已有的 Kubernetes 集群上按需创建轻量级、隔离的 Pod,用于执行不可信的 LLM 生成代码(如来自 agent、编码助手或强化学习奖励评分的输出)。与托管沙箱服务(如 Modal)相比,SkyPilot Sandboxes 宣称可降低成本 4–10 倍,同时提供更快的首次命令延迟(p50 ~1.0s vs Modal ~1.2s)、更低的尾部延迟(p99 ~1.5s vs ~2.0s),且代码与数据永不离开用户的基础设施。
本文发布于 2026 年 6 月,包含完整的架构说明、RL 后训练示例、性能基准与详细成本对比,并提供了可复现的基准脚本和开源示例代码。
背景与问题
LLM 生成代码已成为 agent、编码助手和强化学习训练流水线的核心环节。但模型输出的代码本质上不可信——可能包含无限循环、内存耗尽、文件写入、进程衍生、外连请求等危险行为。因此需要隔离且可丢弃的执行环境。当前主流做法是使用托管沙箱服务,但存在三大痛点:
- 成本高昂:用户不仅需要支付底层计算资源,还要负担服务商按沙箱加价的费用。
- 隐私风险:代码、提示词、模型输出、测试用例等敏感数据被发送至第三方基础设施。
- 跨区域延迟:托管服务通常仅部署在少数地域(如美国),非该区域用户每次调用需承受网络往返延迟。
另一方面,许多团队已经运营着自己的 Kubernetes 集群,却未充分利用它们来运行这些临时性的代码执行任务。SkyPilot Sandboxes 正是为了弥合这一鸿沟而设计。
核心内容解析
架构与工作原理
SkyPilot Sandboxes 是一个运行在用户自有 Kubernetes 集群上的代码执行层。每个沙箱对应一个独立的 Pod,具有专用镜像、CPU 和内存。核心机制包括:
- BYOC 模式:用户注册自己的 Kubernetes 集群(可跨多个云和地域),SkyPilot 负责资源调度。
- 温池(Warm Pool):预先创建并保持空闲的 Pod 集合。创建沙箱时直接从温池取用运行中的 Pod,免去 Kubernetes 调度和镜像拉取的时间,使启动延迟降低 50% 以上。
- 每个沙箱独立 Pod:资源隔离,代码异常不会影响其他沙箱;沙箱使用后即销毁(
terminate())。 - 私有凭据注入:通过 SkyPilot Secrets Manager 注入密钥(如私有包索引、数据库凭据),不写入镜像。
- 同步与异步 API:提供
create()、exec()、terminate()及其.aio异步变体,支持大规模扇出(fan-out)。例如通过一次调用创建 64 个沙箱,并发执行命令。
强化学习后训练示例(GRPO)
文章详细展示了一个代码生成模型的 RL 后训练流水线,其中 Sandbox Reward Server 替代了传统的字符串匹配奖励函数——直接在沙箱中运行生成的候选代码,执行隐藏测试,返回奖励信号(1.0 全部通过,0.0 否则)。
系统架构涉及五个服务,通过 HTTP 通信,构成一个 SkyPilot job group:
- Data Server:提供 MBPP 风格的编程问题与隐藏测试。
- Rollout Server(SGLang):使用当前策略生成候选函数。
- Sandbox Reward Server:对每个候选函数创建沙箱,执行测试,返回奖励。
- Replay Buffer:存储评分后的 rollout。
- PPO Trainer(GRPO):使用奖励更新策略,循环继续进行。
关键设计原则:坏 rollout 绝不能导致奖励函数向外抛出异常。训练早期大多数候选会失败,但循环必须持续。代码中将超时或任何异常都映射为 reward=0.0,从根源上保证了鲁棒性。
温池在服务器启动时创建,关闭时释放,示例中使用 8 个副本。
性能基准测试
文章提供了与 Modal(托管沙箱服务)的对比基准(内部测试,2026 年 6 月),关键指标为创建 + 首次命令耗时(create 后立即 exec),测试 200 次循环:
| 平台 | p50 | p99 |
|---|---|---|
| SkyPilot (BYOC + 温池) | ~1.0s | ~1.5s |
| Modal (美国地域) | ~1.2s | ~2.0s |
总结:SkyPilot 尾部延迟更优,因为 Modal 的 create() 返回较快但并未就绪,就绪工作转移到首次 exec(),导致方差较大;SkyPilot 则将就绪前置到 create() 中。
此外,跨区域延迟测试显示:当客户端位于亚太地区,Modal 的 exec 延迟跳升 3.9 倍(~0.37s vs ~0.096s),而 BYOC 沙箱运行在用户本地地域,不受此影响。
单集群可承受 ~50,000 个健康沙箱(原文称基于 220 个节点),支持多集群扩展。
成本分析
文章使用两种场景对比 SkyPilot BYOC 与按需定价的 Modal:
| 场景 | 沙箱规格 | 托管月成本(每小时) | BYOC 月成本(每小时) | 节省倍数 |
|---|---|---|---|---|
| 通用节点 | 2 vCPU, 4 GB | $19,030/hr | $4,650/hr | ~4.1x |
| 突发实例 | 2 vCPU, 2 GB | $16,610/hr | $1,680/hr | ~9.9x |
- 通用节点使用 GKE n4-standard-2(2 vCPU, 8 GB,每节点 $0.093/hr),每节点运行一个沙箱(留有系统开销)。
- 突发实例使用 AWS t4g.medium(2 vCPU, 4 GB,$0.0336/hr),针对间歇性负载优化,但需注意 CPU 积分耗尽风险,持续满负荷场景应选择通用节点。
可复现性
文章提供了独立基准脚本(Gist 链接),可通过一行命令运行对比两种平台,包含 warmup 和清理逻辑。
关键概念与机制
| 概念 | 说明 |
|---|---|
| 沙箱(Sandbox) | 一个轻量级、隔离的 Kubernetes Pod,用于运行不可信代码,执行后销毁。 |
| 温池(Warm Pool) | 预置并保持空闲的 Pod 集合,用于加速沙箱创建。可通过 create_pool() 创建,aclose() 释放。 |
| BYOC(Bring Your Own Cloud) | 用户使用自己已有的 Kubernetes 集群资源,而非托管服务商的机器。 |
| Secrets Manager | SkyPilot 内置的凭据管理机制,运行时注入到沙箱,避免将凭据嵌入镜像。 |
| GRPO | PPO 的一种变体,本文示例中用于更新代码生成策略。 |
| p50 / p99 | 延迟百分位指标,p50 为 50% 分位数(中位数),p99 为 99% 分位数(尾部延迟)。 |
优势、局限与适用场景
优势
- 成本可控:仅需支付裸金属机器成本,无厂商加价。对于突发负载,使用抢占式/突发实例可进一步降低成本。
- 数据隐私:代码与数据始终留在用户云环境内,适合处理敏感数据(如企业私有代码)。
- 低延迟:首次命令 p50 ~1.0s,且无跨区域延迟税。
- 大规模并发:单集群支持 50,000+ 沙箱,通过多集群可进一步扩展。
- 灵活的 API:与 Modal API 风格一致,可零成本迁移现有代码;异步 API 适合大规模扇出。
- 资源隔离:每个沙箱独立 Pod,异常不会影响其他沙箱。
- 私有凭据注入:无需在镜像中硬编码密钥。
局限与风险
- 运维负担:用户需自行管理 Kubernetes 集群,包括扩缩容、节点维护、安全性配置等。
- 突发实例 CPU 积分耗尽:若沙箱负载持续全核心运行(如长时间计算任务),突发型实例的 CPU 积分会快速耗尽,导致性能下降。
- 温池管理:需要合理设置温池副本数以平衡启动速度与闲置成本。过小则无法满足峰值,过大则浪费资源。
- 早期访问限制:文章提及 Sandboxes 仍处于有限早期访问(limited early access),可能尚未对所有用户开放。
- 网络与安全模型:虽然沙箱间 Pod 隔离,但用户需自行配置 Kubernetes 网络策略和租户隔离措施。
- 对比局限性:基准测试为内部测试,需用户自行在自有环境中验证;Modal 的跨区域延迟问题可通过选择靠近用户的地域缓解(但可能额外收费)。
适用场景
- LLM Agent 执行:为 agent 提供临时、隔离的代码执行环境。
- 编码助手:运行模型生成的代码并验证结果。
- 强化学习奖励评分:在 RL 训练循环中大规模执行候选代码,如 GRPO 流水线。
- 并行评估:快速评价大量模型输出,如竞赛代码评估或单元测试执行。
- 需要隐私保护的企业场景:不允许代码或数据离开自有基础设施的组织。
关键要点总结
- SkyPilot Sandboxes 通过 BYOC 模式,在用户自有的 Kubernetes 集群上提供沙箱执行能力,解决了托管服务的高成本、隐私和跨区域延迟问题。
- 单集群可支持 50,000+ 同步沙箱,首次命令延迟 p50 ~1.0s,优于 Modal 的 ~1.2s,尾部延迟表现更优(p99 ~1.5s vs ~2.0s)。
- 成本可降低 4–10 倍,取决于节点类型(通用 vs 突发实例)。
- 温池技术是性能关键,可将启动延迟降低 50% 以上。
- 完整的 RL 后训练示例展示了如何在 GRPO 流程中集成沙箱奖励服务器,代码开源可复现。
- 主要局限包括用户需自行管理 K8s 集群、突发实例 CPU 积分的潜在限制以及当前处于早期访问阶段。
参考资料
- 源文章:https://blog.skypilot.co/sandboxes
- SkyPilot 官方文档:https://skypilot.readthedocs.io/
- SkyPilot GitHub 仓库:https://github.com/skypilot-org/skypilot
- Modal 沙箱产品页(供对比):https://modal.com/
- 性能基准测试脚本:
https://gist.githubusercontent.com/lloyd-brown/58bdefdea5ff15f1563efa81fbed272a/raw/benchmark.py - HuggingFace Open R1 项目(提及的托管沙箱问题):https://github.com/huggingface/open-r1