[ PROMPT_NODE_22392 ]
distributed-eval
[ SKILL_DOCUMENTATION ]
# 分布式评估
使用数据并行、张量并行和流水线并行在多个 GPU 上运行评估的指南。
## 概述
分布式评估通过以下方式加速基准测试:
- **数据并行**: 将评估样本拆分到多个 GPU(每个 GPU 拥有完整模型副本)
- **张量并行**: 将模型权重拆分到多个 GPU(用于大模型)
- **流水线并行**: 将模型层拆分到多个 GPU(用于超大模型)
**何时使用**:
- 数据并行: 模型适合单个 GPU,但希望加快评估速度
- 张量/流水线并行: 模型太大,无法放入单个 GPU
## HuggingFace 模型 (`hf`)
### 数据并行 (推荐)
每个 GPU 加载模型的一个完整副本,并处理评估数据的一个子集。
**单节点 (8 个 GPU)**:
bash
accelerate launch --multi_gpu --num_processes 8
-m lm_eval --model hf
--model_args pretrained=meta-llama/Llama-2-7b-hf,dtype=bfloat16
--tasks mmlu,gsm8k,hellaswag
--batch_size 16
**加速比**: 近乎线性 (8 个 GPU = ~8 倍速度)
**内存**: 每个 GPU 需要完整模型 (7B 模型 ≈ 14GB × 8 = 总计 112GB)
### 张量并行 (模型分片)
将模型权重拆分到多个 GPU,适用于单个 GPU 放不下的模型。
**不使用 accelerate 启动器**:
bash
lm_eval --model hf
--model_args
pretrained=meta-llama/Llama-2-70b-hf,
parallelize=True,
dtype=bfloat16
--tasks mmlu,gsm8k
--batch_size 8
**使用 8 个 GPU**: 70B 模型 (140GB) / 8 = 每个 GPU 17.5GB ✅
**高级分片**:
bash
lm_eval --model hf
--model_args
pretrained=meta-llama/Llama-2-70b-hf,
parallelize=True,
device_map_option=auto,
max_memory_per_gpu=40GB,
max_cpu_memory=100GB,
dtype=bfloat16
--tasks mmlu
**选项**:
- `device_map_option`: `"auto"` (默认), `"balanced"`, `"balanced_low_0"`
- `max_memory_per_gpu`: 每个 GPU 的最大内存 (例如 `"40GB"`)
- `max_cpu_memory`: 用于卸载的 CPU 最大内存
- `offload_folder`: 磁盘卸载目录
### 组合数据并行 + 张量并行
对超大模型同时使用两者。
**示例: 在 16 个 GPU 上运行 70B 模型 (2 个副本,每个副本 8 个 GPU)**:
bash
accelerate launch --multi_gpu --num_processes 2
-m lm_eval --model hf
--model_args
pretrained=meta-llama/Llama-2-70b-hf,
parallelize=True,
dtype=bfloat16
--tasks mmlu
--batch_size 8
**结果**: 数据并行带来 2 倍加速,张量并行使 70B 模型得以运行
### 使用 `accelerate config` 进行配置
创建 `~/.cache/huggingf