# DeepSeek-V4-Flash-INT8 评测经验总结

## 1. 环境配置

### 1.1 硬件
- GPU: 8× P800 OAM, 96GB each (XPU)
- 模型: DeepSeek-V4-Flash-INT8
- 服务: sglang at `http://localhost:30000/v1`
- 上下文长度: 1M tokens (`--context-length 1048576`)

### 1.2 sglang 启动参数
```bash
sglang.launch_server \
  --host 0.0.0.0 --port 30000 \
  --model-path /data1/models/DeepSeek-V4-Flash-INT8 \
  --attention-backend nsa --nsa-prefill klxdsa --nsa-decode klxdsa \
  --trust-remote-code --disable-custom-all-reduce \
  --tensor-parallel-size 8 --ep-size 8 \
  --disable-shared-experts-fusion --page-size 64 \
  --mem-fraction-static 0.75 --quantization w8a8_int8 \
  --kv-cache-dtype float16 --disable-piecewise-cuda-graph \
  --cuda-graph-max-bs 16 --context-length 1048576 \
  --watchdog-timeout 3000000 \
  --tool-call-parser deepseekv4 --reasoning-parser deepseek-v4 \
  --constrained-json-disable-any-whitespace \
  --enable-metrics --enable-request-time-stats-logging
```

### 1.3 Python 环境
- conda env: `evalscope` (Python 3.12)
- 正确路径: `/data1/miniconda3/envs/evalscope/bin/python`
- 注意: `conda run -n evalscope` 会覆盖 PYTHONPATH，导致 ms_enclave 找不到

## 2. 评测脚本

### 2.1 主运行脚本
- `/data1/sora/evalscope/bash/run.py` - 主评测驱动
- `/data1/sora/evalscope/bash/run_limit30.py` - limit=100 快速 benchmark
- `/data1/sora/evalscope/bash/run_swe_bench.py` - swe_bench 系列 (limit=3)
- `/data1/sora/evalscope/bash/auto_run.py` - 自动顺序运行
- `/data1/sora/evalscope/bash/run_longbench_oom_test.py` - 长文本 OOM 测试

### 2.2 配置文件
- `/data1/sora/evalscope/bash/dpv4-int8_nothinking.yaml` - 各数据集生成配置

### 2.3 关键参数
```python
# run.py 顶部可调参数
DATASETS = [...]          # 要评测的数据集列表
ENABLE_THINKING = False   # 是否启用 thinking 模式
BATCH_SIZE_LIST = [4]     # 评测 batch size
LIMIT = 10                # 每个子集最大样本数 (None=全部)
SEED = 42                 # 随机种子
SHUFFLE = True            # 是否打乱样本
```

## 3. 各数据集配置

### 3.1 温度设置
- 所有数据集: `temperature: 0.0`（确定性输出）
- temperature=1.0 需要多次运行取平均

### 3.2 max_tokens 设置
| 类别 | 数据集 | max_tokens |
|------|--------|-----------|
| 代码/工程 | terminal_bench_v2 | 262144 |
| 代码/工程 | live_code_bench, bigcodebench, humaneval | 32768-16384 |
| 推理/数学 | aime24/25/26, hmmt26, competition_math, gsm8k | 32768 |
| 推理/数学 | imo_answerbench | 98304 |
| 推理/数学 | gpqa_diamond, hle, super_gpqa | 8192 |
| 知识 | mmlu_pro, simple_qa, arc, bbh, cmmlu, drop, hellaswag, mmlu, trivia_qa, winogrande | 8192-32768 |
| 长上下文 | longbench_v2, openai_mrcr | 8192 |
| 智能体/工具 | browsecomp, mcp_atlas, tau2_bench | 16384-32768 |
| 智能体/工具 | swe_bench 系列 | 32768 |

### 3.3 Agent 配置
- swe_bench 系列: `max_steps: 300`
- tau2_bench: `max_steps: 50`
- terminal_bench_v2: `max_turns: 300`, `timeout_multiplier: 6.0` (1小时)

### 3.4 沙箱配置
```python
# 需要沙箱的数据集
SANDBOX_DATASETS = {'humaneval', 'bigcodebench'}

# 沙箱配置
SandboxTaskConfig(
    enabled=True,
    engine='docker',
    default_config={
        'image': 'python:3.11-slim',
        'tools_config': {
            'shell_executor': {},
            'python_executor': {}
        }
    }
)
```

## 4. 长文本截断

### 4.1 当前配置
```python
TRUNCATION_CONFIG = {
    'longbench_v2': 32768*4,   # 131072 tokens (128K)
    'openai_mrcr': 32768*4,    # 131072 tokens (128K)
}
```

### 4.2 截断方式
- Middle-truncation: 保留头部和尾部，截断中间
- 适用于长上下文 benchmark，保留问题和上下文的关键部分

### 4.3 OOM 测试
- 测试脚本: `run_longbench_oom_test.py`
- 测试 limit: 128K, 256K, 512K, 1M
- 输出目录: `output_longbench_128k/`, `output_longbench_256k/` 等

## 5. Docker 镜像

### 5.1 需要预拉的镜像
```bash
# 代码评测
docker pull docker.1ms.run/bigcodebench/bigcodebench-evaluate:latest

# Python 沙箱
docker pull python:3.11-slim
```

### 5.2 按样本拉取的镜像（无法预准备）
- **swe_bench 系列**: 每个样本需要不同的 `jefzda/sweap-images:{tag}`
  - 每个镜像 2-5GB
  - limit=3 需要 ~10GB
  - 完整 500 样本需要 ~1.75TB（不现实）
  - 建议: limit=1-3 或跳过

- **terminal_bench_v2**: 使用统一基础镜像，但任务环境不同
  - 镜像在运行时自动构建/拉取
  - 超时问题常见，需要 `timeout_multiplier: 6.0`

### 5.3 镜像源
- Docker Hub 被墙，使用镜像站:
  - `docker.1ms.run`
  - `docker.m.daocloud.io`
  - `docker.1panel.dev`

### 5.4 磁盘空间管理
- sglang 镜像: ~58GB（不能删）
- bigcodebench: ~25GB（跑完可删）
- sweap-images: ~21GB（按需删除）
- terminal_bench: ~2GB（可删）

## 6. 常见问题与解决方案

### 6.1 tau2_bench 空响应问题
**问题**: `UserMessage must have either content or tool_calls`
**解决**: 修改 `tau2-bench/src/tau2/user/user_simulator.py`，增加重试逻辑:
```python
max_retries = 5
for attempt in range(max_retries):
    assistant_message = generate(...)
    user_response = assistant_message.content
    if user_response and user_response.strip():
        break
    if attempt < max_retries - 1:
        logger.warning(f"Empty response, retrying...")
```

### 6.2 terminal_bench_v2 超时问题
**问题**: `EnvironmentStartTimeoutError: Environment start timed out after 600.0 seconds`
**解决**: 增加 `timeout_multiplier: 6.0` (1小时)

### 6.3 swe_bench 镜像拉取慢
**问题**: 网络慢，镜像大，磁盘满
**解决**: 
- 使用国内镜像站
- 限制 limit=1-3
- 定期清理 Docker 镜像

### 6.4 模型服务重启
**问题**: sglang 服务可能崩溃
**解决**: `/data1/restart_model_service.sh`

## 7. 结果提取与报告

### 7.1 提取脚本
- `/data1/sora/evalscope/bash/extract_results.py`
- 从 JSON 报告提取 score、perf metrics、percentiles

### 7.2 Excel 报告
- `/data1/sora/P800模型能力评测结果_updated.xlsx`
- 包含: score, 时间, tokens, TTFT/TPOT percentiles

### 7.3 结果合并策略
- 优先使用 `output_limit100/` 的结果（样本更多）
- 然后使用 `output_swe_bench/` 的结果
- 最后使用 `output/` 的结果

## 8. 评测策略建议

### 8.1 快速评测 (1天)
- 使用 limit=100 跑快速 benchmark
- 跳过 swe_bench 系列
- 长文本使用 128K 截断

### 8.2 完整评测 (1周+)
- 所有 benchmark 全量运行
- swe_bench limit=3-5
- 长文本测试 256K/512K/1M 边界

### 8.3 关键 benchmark
- **推理/数学**: aime24/25/26, competition_math, gpqa_diamond
- **代码**: humaneval, live_code_bench, bigcodebench
- **知识**: mmlu, mmlu_pro, cmmlu
- **长文本**: longbench_v2, openai_mrcr
- **智能体**: browsecomp, tau2_bench

## 9. 文件清单

```
/data1/sora/evalscope/bash/
├── run.py                      # 主运行脚本
├── run_limit30.py              # limit=100 快速运行
├── run_swe_bench.py            # swe_bench 系列
├── auto_run.py                 # 自动顺序运行
├── run_longbench_oom_test.py   # 长文本 OOM 测试
├── extract_results.py          # 结果提取
├── dpv4-int8_nothinking.yaml   # 数据集配置
├── generate_excel.py           # Excel 生成
├── generate_dashboard.py       # Dashboard 生成

/data1/sora/evalscope/output/              # 主输出目录
/data1/sora/evalscope/output_limit100/     # limit=100 输出
/data1/sora/evalscope/output_swe_bench/    # swe_bench 输出
/data1/sora/evalscope/output_longbench_*/  # 长文本测试输出

/data1/sora/P800模型能力评测结果_updated.xlsx  # Excel 报告
```

## 10. 运行命令汇总

```bash
# 激活环境
source /data1/miniconda3/bin/activate evalscope

# 运行主评测
python /data1/sora/evalscope/bash/run.py

# 运行 limit=100 快速评测
python /data1/sora/evalscope/bash/run_limit30.py

# 运行 swe_bench
python /data1/sora/evalscope/bash/run_swe_bench.py

# 自动顺序运行
python /data1/sora/evalscope/bash/auto_run.py

# 长文本 OOM 测试
python /data1/sora/evalscope/bash/run_longbench_oom_test.py

# 提取结果
python /data1/sora/evalscope/bash/extract_results.py

# 重启模型服务
bash /data1/restart_model_service.sh
```
