2026-07-08 08:57:50 +00:00

223 lines
8.0 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 沙箱环境使用
为了完成LLM代码能力评测我们需要搭建一套独立的评测环境避免在开发环境执行错误代码从而造成不可避免的损失。目前EvalScope 接入了[ms-enclave](https://github.com/modelscope/ms-enclave) 沙箱环境允许用户在受控的环境中评测模型的代码能力例如使用HumanEval、LiveCodeBench等评测基准。
接下来介绍两种不同的沙箱使用方式:
- 本地使用在本地机器上搭建沙箱环境并在本地进行评测需本地机器支持Docker
- 异地使用在远程服务器上搭建沙箱环境并通过API接口进行评测需远端机器支持Docker。
```{tip}
- 数据集默认的**沙箱环境配置**可以在数据集配置中查看,例如[HumanEval](../benchmarks/humaneval.md)。
- **沙箱工作进程数** 需要根据本地机器的资源情况进行调整建议设置为不超过本地CPU核心数的一半例如本地有8核CPU则建议设置为4尤其是多语言镜像(`volcengine/sandbox-fusion`),其消耗资源更多,建议适当减少工作进程数。
- 同一套沙箱基础设施同时驱动 [Agent 评测](agent/index.md) 中的 `environment='docker'`,可在 `agent_config.environment_extra` 中复用 `image` / `timeout` 等参数。
```
## 0. 统一 Sandbox 配置
EvalScope 通过嵌套字段 `TaskConfig.sandbox`(对应 `SandboxTaskConfig`)来统一管理沙箱设置。
`SandboxTaskConfig` 字段:
| 字段 | 类型 | 说明 | 默认值 |
|------|------|------|--------|
| `enabled` | `bool` | 是否启用沙箱 | `false` |
| `engine` | `str` | 沙箱引擎:`docker` / `volcengine` 等 | `docker` |
| `default_config` | `dict` | 任务级沙箱配置,会与 `BenchmarkMeta.sandbox_config` 合并;同时作为 Agent 模式中每个样本环境的默认配置 | `{}` |
| `manager_config` | `dict` | 转发给 ms_enclave manager 的参数(远端 docker 的 `base_url`、volcengine 凭证等) | `{}` |
| `pool_size` | `int \| None` | 池化执行的预热池大小,`None` 时跟随 `eval_batch_size` | `None` |
`sandbox` 字段同时接受 `SandboxTaskConfig` 实例与等价字典,两种写法行为一致:
```python
from evalscope.config import SandboxTaskConfig
# 方式 A使用 SandboxTaskConfig推荐享有类型提示
TaskConfig(
sandbox=SandboxTaskConfig(
enabled=True,
engine='docker',
manager_config={'base_url': 'http://remote:1234'},
),
)
# 方式 B直接传 dict
TaskConfig(
sandbox={
'enabled': True,
'engine': 'docker',
'manager_config': {'base_url': 'http://remote:1234'},
},
)
```
## 1. 本地使用
使用Docker在本地机器上搭建沙箱环境并在本地进行评测需本地机器支持Docker
### 安装环境
1. **安装Docker**请确保您的机器上已安装Docker。您可以从[Docker官网](https://www.docker.com/get-started)下载并安装Docker。
2. **安装沙箱环境相关依赖**在本地使用的Python环境中安装`ms-enclave`等包:
```bash
pip install evalscope[sandbox]
```
### 配置参数
在运行评测时,通过 `sandbox` 字段启用沙箱环境,其余参数与普通评测相同:
下面是一个在HumanEval上进行模型评测的完整示例代码
```python
from dotenv import dotenv_values
env = dotenv_values('.env')
from evalscope import TaskConfig, run_task
task_config = TaskConfig(
model='qwen-plus',
datasets=['humaneval'],
api_url='https://dashscope.aliyuncs.com/compatible-mode/v1',
api_key=env.get('DASHSCOPE_API_KEY'),
eval_type='openai_api',
eval_batch_size=5,
limit=5,
generation_config={
'max_tokens': 4096,
'temperature': 0.0,
'seed': 42,
},
sandbox={
'enabled': True, # 启用沙箱
'engine': 'docker', # 指定沙箱引擎
},
)
run_task(task_config)
```
在模型评测过程中EvalScope会自动启动并管理沙箱环境确保代码在隔离的环境中运行。控制台有如下输出
```text
[INFO:ms_enclave] Local sandbox manager started
...
```
## 2. 异地使用
在远程服务器上搭建沙箱环境并通过API接口进行评测需远端机器支持Docker。
### 安装环境
你需要分别在远端机器和本地机器上进行安装和配置。
#### 远端机器
在远端机器上安装的环境与上述本地使用方式类似:
1. **安装Docker**请确保您的机器上已安装Docker。您可以从[Docker官网](https://www.docker.com/get-started)下载并安装Docker。
2. **安装沙箱环境相关依赖**在远端机器的Python环境中安装`ms-enclave`等包:
```bash
pip install evalscope[sandbox]
```
3. **启动沙箱服务器**:运行以下命令以启动沙箱服务器:
```bash
ms-enclave server --host 0.0.0.0 --port 1234
```
#### 本地机器
此时本地机器无需安装Docker但需要安装EvalScope
```bash
pip install evalscope[sandbox]
```
### 配置参数
在运行评测时,通过 `sandbox` 字段启用沙箱环境,并在 `manager_config` 中指定远端沙箱服务器的API地址
完整示例代码如下:
```python
from dotenv import dotenv_values
env = dotenv_values('.env')
from evalscope import TaskConfig, run_task
task_config = TaskConfig(
model='qwen-plus',
datasets=['humaneval'],
api_url='https://dashscope.aliyuncs.com/compatible-mode/v1',
api_key=env.get('DASHSCOPE_API_KEY'),
eval_type='openai_api',
eval_batch_size=5,
limit=5,
generation_config={
'max_tokens': 4096,
'temperature': 0.0,
'seed': 42,
},
sandbox={
'enabled': True, # 启用沙箱
'engine': 'docker', # 指定沙箱引擎
'manager_config': {
'base_url': 'http://<remote_host>:1234' # 远端沙箱管理器URL
},
},
)
run_task(task_config)
```
在模型评测过程中EvalScope会通过API与远端沙箱服务器进行通信确保代码在隔离的环境中运行。控制台有如下输出
```text
[INFO:ms_enclave] HTTP sandbox manager started, connected to http://<remote_host>:1234
...
```
## 3. 额外支持的沙箱环境
### 使用VolcEngine沙箱环境
EvalScope 还支持使用[VolcEngine 沙箱环境](https://bytedance.github.io/SandboxFusion/docs/docs/get-started/) 用户可以选择使用VolcEngine提供的沙箱镜像来进行代码评测。
1. **安装Docker**请确保您的机器上已安装Docker。您可以从[Docker官网](https://www.docker.com/get-started)下载并安装Docker。
2. **启动VolcEngine沙箱服务器**
启动VolcEngine沙箱服务器的命令如下
```bash
docker run -it -p 8080:8080 vemlp-cn-beijing.cr.volces.com/preset-images/code-sandbox:server-20250609
```
3. **配置评测参数**
使用VolcEngine沙箱环境时只需将`engine`参数设置为`volcengine`并确保远端机器上已安装并运行了VolcEngine沙箱服务器。
```python
...
sandbox={
'enabled': True, # 启用沙箱
'engine': 'volcengine', # 指定使用VolcEngine沙箱
'manager_config': {
'base_url': 'http://<remote_host>:8080', # 远端VolcEngine沙箱管理器URL
'dataset_language_map': { # 可选,指定数据集对应的编程语言
'r': 'R',
'd_ut': 'D_ut',
'ts': 'typescript',
},
},
},
...
```
控制台输出如下:
```text
2026-01-20 08:07:22 [debug ] running command python /tmp/tmpyhpyii_k/tmpf_q4hcoq.py [sandbox.runners.base]
2026-01-20 08:07:23 [debug ] stop running command python /tmp/tmpv1hp4llu/tmpowprm7uz.py [sandbox.runners.base]
2026-01-20 08:07:23 [debug ] stop running command python /tmp/tmpeytkvisz/tmpxkproid8.py [sandbox.runners.base]
2026-01-20 08:07:23 [debug ] stop running command python /tmp/tmpyhpyii_k/tmpf_q4hcoq.py [sandbox.runners.base]
2026-01-20 08:07:23 [debug ] stop running command python /tmp/tmpqcbuep0x/tmplxz4z9cw.py [sandbox.runners.base]
2026-01-20 08:07:23 [debug ] stop running command python /tmp/tmp3msgd871/tmplldfzrp9.py [sandbox.runners.base]
...
```