Skip to content

Commit 316b398

Browse files
authored
fix lmeval start speed (#1343)
1 parent 8196f35 commit 316b398

1 file changed

Lines changed: 59 additions & 0 deletions

File tree

skills/test_model/SKILL.md

Lines changed: 59 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,59 @@
1+
---
2+
name: test-model-common
3+
description: >-
4+
Common override guidance for all skills/test_model sub-skills. Applies to
5+
LightLLM model accuracy/speed tests that use lm_eval or lmms_eval, especially
6+
local-completions GSM8K runs.
7+
---
8+
9+
# Test Model 通用覆盖规则
10+
11+
本目录下所有子 skill 默认继承这些规则。若子 skill 中的命令与这里冲突,优先按这里执行;
12+
只有在用户明确要求在线拉取数据/模型,或本地缓存缺失时,才临时关闭对应离线变量。
13+
14+
## lm_eval 启动加速
15+
16+
`lm_eval` 每次新进程启动都会加载 task、dataset、tokenizer 和 HuggingFace 相关模块。
17+
实测 `local-completions + gsm8k --limit 1` 时,默认在线探测模式会在 tokenizer/dataset
18+
初始化阶段等待很久;强制使用本地缓存后,启动耗时明显下降。
19+
20+
执行所有 `lm_eval` 精度测试时,默认在命令前加:
21+
22+
```bash
23+
export HF_ALLOW_CODE_EVAL=1
24+
export HF_DATASETS_OFFLINE=1
25+
export TRANSFORMERS_OFFLINE=1
26+
export HF_HUB_OFFLINE=1
27+
export http_proxy=
28+
export https_proxy=
29+
export no_proxy=localhost,127.0.0.1,0.0.0.0,::1,${HOST:-127.0.0.1},${PD_MASTER_IP:-127.0.0.1}
30+
export NO_PROXY="${no_proxy}"
31+
```
32+
33+
然后再执行子 skill 中的 `lm_eval` 命令,例如:
34+
35+
```bash
36+
lm_eval --model local-completions \
37+
--model_args "model=${MODEL_NAME},base_url=${BASE_URL},num_concurrent=64,max_retries=3,tokenized_requests=False,tokenizer=${MODEL_DIR}" \
38+
--tasks gsm8k \
39+
--batch_size 64 \
40+
--confirm_run_unsafe_code
41+
```
42+
43+
## 使用前检查
44+
45+
- 先确认对应数据集和 tokenizer 已经在本地缓存中;如果离线模式报缓存缺失,再切回在线模式补齐缓存。
46+
- 精度评测前仍然要先做一次 `curl` warmup,确认服务端已经可用。
47+
- 如果只是压测吞吐,不要用 `lm_eval`;使用轻量 benchmark client,避免 `lm_eval` 的 task/dataset/metric 初始化成本。
48+
- 记录结果时要把是否启用了离线缓存写入 summary/log,方便比较不同轮次。
49+
50+
## 已验证现象
51+
52+
在本机 Qwen3.5-0.8B 普通服务上,`lm_eval --limit 1` 实测:
53+
54+
| 模式 | 耗时 |
55+
|---|---:|
56+
| 默认在线探测 | 约 123s |
57+
| 离线缓存模式 | 约 20s |
58+
59+
因此,除非有明确理由,`skills/test_model` 下的 `lm_eval` 测试都应默认启用离线缓存变量。

0 commit comments

Comments
 (0)