怎么安全地跑 agent 生成的代码?
verifier 为什么要放在 sandbox 外面?
先弄清楚:每个概念是什么
- Sandbox
- 一个受限的执行环境,候选代码只能在里面跑,出了事不波及外面。
- Container
- 和宿主共享同一个 kernel 的一组进程。namespace 管它看得见什么,cgroups 管它能用多少 CPU 和 memory。
- gVisor
- 跑在 user space 的一层 kernel。候选代码的 system call(syscall)先被它拦下来处理,不直接交给宿主 kernel。
- MicroVM
- 用硬件虚拟化起的轻量 VM,有自己的 guest kernel。例:Firecracker 用 KVM 创建 microVM。
- Verifier
- 判定候选代码对不对、快不快的固定代码。agent 改不了它。
看图:谁在 sandbox 里,谁在外面
30 秒回答
Agent-written code is untrusted. Each candidate gets its own container or microVM, started from the same clean image, with CPU, memory and time limits, no network, and write access only to its workspace. The verifier and the benchmark scripts sit outside that boundary and are read-only, so the agent only proposes and can't edit what judges it. On GPUs, compilation can go to CPU nodes, but a timed run gets a whole device, for safety and clean timing. A container shares the host kernel; gVisor or a microVM isolates more strongly.
三种隔离技术
| syscall 到哪里 | 隔离强度 | |
|---|---|---|
| Container | 直接到宿主 kernel | 最弱 |
| gVisor | 先到 user space 的那层 kernel | 居中 |
| MicroVM | 到自己的 guest kernel | 最强 |
FlashVector 没写 sandbox 用哪一种。能看到的只有 GPU kernel 在 local simulated environment 里跑,config sweep 在生产机型的隔离节点上跑。自己团队的 agent 写的 kernel,我会先用 container 加资源上限。要跑别的租户的代码时,再换 gVisor 或 microVM。
Sandbox 要管住什么
| 管什么 | 做法 |
|---|---|
| CPU 和 memory | cgroups 设上限 |
| 时间 | timeout,到点由外面的进程 kill |
| 网络 | 默认断网,给 sandbox 一个不通外网的 network namespace |
| 文件 | 只有 workspace 可写;verifier 和 benchmark 脚本只读 |
| 状态 | 每份候选代码从同一个 image 启动,不留上一份的状态 |
| GPU | 测量时独占一张卡;编译放 CPU 节点 |
GPU 这一行是 CUDA Agent 的做法。它有 128 张 H20 的 sandbox pool,verify 和 profile 脚本用文件权限保护。独占一张卡也是为了计时干净(见 kernel benchmark)。agent 钻评测漏洞的例子见 reward hacking。
必答点
- agent 写的代码按 untrusted 处理,每份候选代码一个 sandbox
- 限 CPU、memory 和时间,默认断网,只有 workspace 可写
- container 共享宿主 kernel;gVisor 在 user space 拦截 syscall;microVM 有自己的 guest kernel
- verifier 和 benchmark 脚本在 sandbox 外且只读,agent 只提案
- GPU 测量时独占一张卡,编译放 CPU 节点
- FlashVector 只在图里提到 sandbox,没写用什么技术
追问
让 agent 自己写 test 行不行?
不行,判定要由 sandbox 外的 verifier 做(见 kernel 正确性)。
microVM 和普通 VM 有什么区别?
microVM 只模拟很少的设备,所以启动快、开销小。Firecracker 官网写它只有 5 个模拟设备,启动时间低于 125 ms,每个 microVM 的 memory 开销低于 5 MiB。
来源FlashVector Figure 2、§4.2 Profile、§5.4.2 · CUDA Agent(GPU sandbox pool、CPU 编译和 GPU 测量分离) · KernelFalcon · gVisor 文档 · Firecracker 官网 · 面经原帖:科大讯飞、字节 · ml-八股 08 第 27 题 · 同类系统对照表