| name | test-model-deepseekr1-base-tp |
| description | Runs LightLLM DeepSeek-R1 baseline TP gsm8k: single api_server with --tp 8 and --batch_max_tokens only, no MTP draft, no --dp, no EP MoE (distinct from deepseekr1-mtp-tp which adds MTP). GSM8K lm_eval on localhost port 8089. Requires a dedicated log directory, api_server and eval logs under that tree, summary.txt as consolidated report, tokenizer aligned with MODEL_DIR. Use for baseline R1 tensor-parallel accuracy runs without MTP/EP. |
DeepSeek-R1 Base–TP(无 MTP / 无 EP,--tp 8)本地 GSM8K 评测
测试标识:仅 --tp 8 与 --batch_max_tokens 等基础推理参数,无 MTP、--dp、--enable_ep_moe。用于与 MTP–TP(含 MTP 草稿)、MTP–EP(EP MoE + TP+DP)等流程区分。
启动一组 api_server,待端口就绪后对同一服务执行一次 lm_eval(任务 gsm8k,batch_size 500)。整轮产物须落在同一日志目录内归档日志与 summary.txt(见「日志目录」);具体操作见「启动说明」。
日志目录(含 summary.txt)
- 每次评测先选定或新建一个日志目录(例如带时间戳或任务名),与其它测试轮次分开,便于区分管理。
api_server 进程的标准输出/错误须写入该目录下文件(示例同级命名 server_base_tp.log;也可按变体或日期分子目录,团队任选其一,保持可追溯)。
summary.txt 固定放在该日志目录下,写入本轮启动参数摘要、lm_eval 关键结果、失败原因或简要结论;不再把「最终总结」散落在当前工作目录或其它路径。
lm_eval 终端输出建议单独落盘(如 eval_gsm8k.log);summary.txt 仍承担总览结论角色。
启动说明
本节包含:启动前检查 → 启动服务的命令模板(可变项说明)→ 一条完整 server 命令 → 评测命令。
启动前检查
开跑前先确认资源可用;不满足则先清理相关进程,再启动服务与评测。
- 显卡占用:用
nvidia-smi(或与集群一致的占用查看方式)检查目标 GPU 是否被无关任务占满;若有冲突进程,结束后再启动本评测。
- 端口:服务固定
8089(与下文 lm_eval 的 base_url 一致);用 ss -tlnp、lsof -i :8089 等确认无进程监听该端口;若已被占用,查出 PID 并结束占用进程后再启动。
启动服务的命令模板(可变项)
下列命令中出现的可变项含义如下(其余为固定写法):
| 可变项 | 含义 |
|---|
LOG_DIR | 本轮评测日志目录,建议绝对路径;执行前 export LOG_DIR=…。 |
MODEL_DIR | 主模型目录,对应 --model_dir;与 lm_eval 的 tokenizer 必须一致。 |
server_*.log、eval_*.log | 仅文件名示例,可按任务重命名。 |
开跑前在同一 shell 中导出路径(将引号内整段替换为本机绝对路径;勿写死下文未给出的机器路径):
export LOG_DIR='〈日志根目录〉'
export MODEL_DIR='〈主模型目录,对应 --model_dir〉'
首次试跑可用的默认 MODEL_DIR 见「执行约定」;与当前环境不符时再改为用户提供的目录。
一条 server 启动命令(后台落盘)
本条为 Base–TP 固定形态:LOADWORKER=18,--batch_max_tokens 6000,--tp 8,--port 8089,无 MTP / 无 --dp / 无 EP。以下为可直接执行的后台启动形式(已含 nohup 与日志重定向);若暂时不需落盘,可自行去掉 nohup、>> … 2>&1 & 并在前台调试。命令中 ${MODEL_DIR}、${LOG_DIR} 须已由上文 export 赋值。
LOADWORKER=18 \
nohup python -m lightllm.server.api_server \
--batch_max_tokens 6000 \
--model_dir "${MODEL_DIR}" --tp 8 --port 8089 \
>> "${LOG_DIR}/server_base_tp.log" 2>&1 &
评测命令(服务就绪后执行一次)
服务就绪后执行(本地回环走代理时用 no_proxy / NO_PROXY 排除本机)。model_args 中 tokenizer 必须与本次 server 的 --model_dir(即 ${MODEL_DIR})为同一字符串路径。以下为带日志落盘的完整命令(--model_args 使用双引号以便展开 ${MODEL_DIR}):
HF_ALLOW_CODE_EVAL=1 HF_DATASETS_OFFLINE=0 \
no_proxy=127.0.0.1,localhost,::1 \
lm_eval --model local-completions \
--model_args "{\"model\":\"deepseek-ai/DeepSeek-R1\", \"base_url\":\"http://localhost:8089/v1/completions\", \"max_length\": 16384, \"tokenizer\":\"${MODEL_DIR}\"}" \
--tasks gsm8k --batch_size 500 --confirm_run_unsafe_code \
>> "${LOG_DIR}/eval_gsm8k.log" 2>&1
LOG_DIR:与启动服务一节相同;若仅调试不重定向,去掉 \ 续行及最后的 >> "${LOG_DIR}/eval_gsm8k.log" 2>&1 即可在前台查看输出。
MODEL_DIR:须与 server 启动命令中的 --model_dir 一致;路径随环境变化时的默认试跑与向用户确认见「执行约定」。
- 若环境需要,可同时设置
NO_PROXY=127.0.0.1,localhost,::1(或与团队约定一致的列表)。
执行约定(不要额外写“专用启动脚本”)
模型目录(随环境变化):MODEL_DIR 在不同机器上路径不同。首轮试跑可先用下列默认(与常见本地部署对应;若本机不存在则跳过默认、直接执行下一步「向用户确认」):
export MODEL_DIR=/mtc/models/DeepSeek-R1
若按默认路径 export 后仍无法启动服务,或日志中出现明确的模型路径 / 权重加载 / 文件不存在等错误,不要反复盲试:根据日志判断为路径问题时,请用户提供当前环境下实际的主模型目录,更新 export MODEL_DIR=… 后再执行(且保证 MODEL_DIR 与 lm_eval 的 tokenizer 仍为同一路径)。
- 后台启动 server:用 shell 后台或终端任务跑
python -m lightllm.server.api_server ...,并将该进程输出重定向到本轮日志目录下的日志文件(见上文「日志目录(含 summary.txt)」);排查问题时 tail 该文件,而不是依赖未落盘的终端缓冲。
- 不要用 health 接口 判断就绪;改为探测 端口 8089 是否处于 listen(例如
ss -tlnp / lsof -i :8089 等,与系统一致即可)。
- 等待启动:若端口未就绪,约 每 20 秒 查看一次服务日志文件,区分仍在启动还是已报错退出;报错则写入日志目录下的
summary.txt(或先写服务日志再在 summary.txt 引用)并停止,不要继续盲等。
- 维护
summary.txt:位于日志目录;记录本条使用的完整启动命令(或等价摘要)、端口检测结果、lm_eval 关键输出;全部结束后在该文件内写最终汇总(是否成功、主要指标或失败原因)。可与用户口头摘要对照,但以日志目录中 summary.txt 为归档准绳。
- 全部完成后:确认日志目录下的
summary.txt 已包含完整最终总结;原始 server / eval 日志保留在同目录(或子目录)中备查。
输出文件
summary.txt:仅位于本轮日志目录,作为本次 Base–TP 评测的最终总结文档。
- 服务与评测日志:全部落在同一日志目录(建议按任务命名文件或分子目录),不得与未指定目录混写。