:用 OpenCompass 评测 InternLM2-Chat-7B 并接入 TaoToken)
1. 本地 InternLM2-Chat-7B 评测链路为什么总卡在第一步大模型学习与实践笔记写到第十四篇我想聊一个很多人绕不过去的坎模型权重下载完了LMDeploy 也装上了但一到 OpenCompass 跑 C-Eval 就各种报错。这个场景的核心检索词是「OpenCompass 评测 InternLM2-Chat-7B 教程」它解决的是本地部署后如何用标准数据集验证模型真实能力的问题适合已经跑通 LMDeploy 推理、想进一步做量化对比或微调效果验证的开发者。我自己的环境是单卡 24G 显存模型放在/root/model/Shanghai_AI_Laboratory/internlm2-chat-7bLMDeploy 用 0.2.0 版本。整个链路分四段模型挂载与转换、OpenCompass 配置、C-Eval 小样本验证、结果复现。中间最容易出问题的是 TurboMind 的 workspace 路径和 meta_template 的 token 对齐这两个点错了评测结果要么全 0 要么直接崩。另外评测过程中会频繁调用模型接口做批量推理如果本地显存吃紧可以把部分验证请求分流到统一的 API 通道。我习惯用 TaoToken 管理这类调用一个 Key 覆盖多个模型端点省得在配置文件里来回改 base_url。下面按实际操作顺序展开每一步都给可复制的命令和配置。2. TaoToken 前置准备统一 Key 与 API 通道管理在正式跑 OpenCompass 之前先把模型调用的通道理清楚。本地 TurboMind 推理适合大批量评测但如果你同时想对比云端模型、或者本地显存不够需要临时切换就需要一个统一的 API 入口。TaoToken 在这里的角色是聚合层你拿到一个 Key就能通过兼容 OpenAI 协议的接口访问不同模型配置里只改 model 字段即可。先到官网 https://taotoken.net/?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_content 注册账号然后在控制台创建 API Key。控制台地址是 https://taotoken.net/console?utm_sourcetaotoken_aicg_blog_endutm_contentconsoleutm_campaignrewrite Key 管理页面在 https://taotoken.net/api-keys?utm_sourcetaotoken_aicg_blog_endutm_contentapi-keysutm_campaignrewrite 。创建后复制那串sk-开头的字符串后面配置里会用到。API 的基础地址是 https://taotoken.net/api 注意这个地址不带任何查询参数直接作为 base_url 使用。模型 ID 需要和你在控制台看到的名称一致比如internlm2-chat-7b或gpt-4o这类。如果你只是想在 OpenCompass 里做本地评测TaoToken 不是必须的但当你需要把评测结果和云端模型做横向对比或者本地推理排队太久想临时走 API这个通道就很省事。我试过在同一个 OpenCompass 配置里混用本地 TurboMind 模型和 TaoToken 的 API 模型只要分别写好 model 配置块run.py 会按顺序跑。这样一次评测就能拿到本地和云端两组分数对比起来很直观。Key 的权限建议只开需要的模型避免误调用产生额外消耗。3. 可复制配置LMDeploy 转换与 OpenCompass 评测文件这一节给完整的配置片段路径和原文保持一致你直接复制改路径就能用。先做模型挂载和转换。模型挂载到当前目录ln -s /share/model_repos/internlm2-7b/ ./安装 LMDeploy 0.2.0pip install lmdeploy[all]v0.2.0转换模型到 TurboMind 格式lmdeploy convert internlm2-chat-7b /root/model/Shanghai_AI_Laboratory/internlm2-chat-7b转换成功后会生成workspace目录里面包含triton_models和配置文件。日志里会看到逐层 splitting 的输出最后显示Convert to turbomind format: 100%。如果卡在 tokenizer 初始化检查tokenizer.model是否存在。接下来是 OpenCompass 的配置文件保存为configs/eval_turbomind.pyfrom mmengine.config import read_base from opencompass.models.turbomind import TurboMindModel with read_base(): from .datasets.ceval.ceval_gen_5f30c7 import ceval_datasets from .summarizers.medium import summarizer datasets sum((v for k, v in locals().items() if k.endswith(_datasets)), []) internlm_meta_template dict( round[ dict(roleHUMAN, begin|User|:, end\n), dict(roleBOT, begin|Bot|:, endeoa\n, generateTrue), ], eos_token_id103028 ) internlm2_chat_7b dict( typeTurboMindModel, abbrinternlm2-chat-7b-turbomind, path/root/deploy/workspace/, engine_configdict(session_len512, max_batch_size2, rope_scaling_factor1.0), gen_configdict(top_k1, top_p0.8, temperature1.0, max_new_tokens100), max_out_len100, max_seq_len512, batch_size2, concurrency1, meta_templateinternlm_meta_template, run_cfgdict(num_gpus1, num_procs1), ) models [internlm2_chat_7b]如果你要加 TaoToken 的 API 模型做对比在models列表里追加一个配置块taotoken_model dict( typeOpenAI, abbrtaotoken-internlm2, pathinternlm2-chat-7b, keysk-你的Key, openai_api_basehttps://taotoken.net/api, max_out_len100, batch_size2, run_cfgdict(num_gpus0, num_procs1), ) models [internlm2_chat_7b, taotoken_model]注意path字段填模型 IDopenai_api_base填不带斜杠的 API 地址。Key 建议用环境变量读取避免硬编码进版本库。4. 验证请求跑通 C-Eval 小样本并确认结果可复现配置写好后在 OpenCompass 根目录执行python run.py configs/eval_turbomind.py加--debug可以看到详细日志python run.py configs/eval_turbomind.py --debug第一次跑建议先用小样本验证链路。OpenCompass 支持通过--num-fewshot或数据集切片控制样本量你也可以在配置里把ceval_datasets替换成只包含一两个科目的子集。我通常先跑computer_network和operating_system两个科目每个科目几十道题几分钟就能出结果。运行过程中会看到进度条和推理日志。如果一切正常最后会在outputs/default/下生成结果目录里面有summary和predictions两个子目录。summary里的 CSV 就是各科目准确率predictions里是每道题的模型输出方便你抽查。验证结果可复现的关键是固定随机种子和生成参数。配置里的top_k1、temperature1.0已经比较稳定但如果你改了top_p或max_new_tokens分数会有波动。我实测下来同一份配置连续跑两次C-Eval 小样本的准确率差异在 0.5% 以内属于正常范围。如果走 TaoToken 的 API 通道验证请求可以用 curl 快速测一下curl https://taotoken.net/api/v1/chat/completions \ -H Authorization: Bearer sk-你的Key \ -H Content-Type: application/json \ -d { model: internlm2-chat-7b, messages: [{role: user, content: 11等于几}], max_tokens: 50 }返回正常说明 Key 和通道没问题再放进 OpenCompass 配置里跑批量评测。5. 本篇常见错排查401、local proxy failed 与 reading choices评测链路跑不通报错基本集中在几个地方。下面按真实遇到的错误对照排查。401 Unauthorized如果你在 OpenCompass 里配了 TaoToken 的 API 模型报 401 说明 Key 无效或没带上。检查key字段是否以sk-开头openai_api_base是否写成https://taotoken.net/api不要加/v1OpenCompass 的 OpenAI 适配器会自己拼。另外确认 Key 没有过期控制台里可以重新生成。local proxy failed / Connection refused这个通常出现在 TurboMind 本地推理。检查path是否指向workspace目录而不是原始模型目录。workspace里应该有triton_models文件夹。如果路径对了还报错看显存是否够session_len512和max_batch_size2在 24G 卡上没问题但如果你同时跑了别的进程可能 OOM。reading choices / KeyError choices这是 API 返回格式不匹配。OpenCompass 的 OpenAI 适配器期望标准 chat completions 响应如果模型返回的是流式或非标准 JSON就会报这个。检查max_out_len是否设得太小导致返回被截断或者模型 ID 写错导致返回了错误信息。用上面的 curl 命令先确认单次请求返回结构正常。meta_template 不匹配导致输出乱码InternLM2 的对话模板是|User|:和|Bot|:eos_token_id103028必须和 tokenizer 一致。如果你换了模型版本这个 ID 要跟着改。输出乱码或分数异常低优先查这里。OAuth / auth.json 相关报错如果你用 Codex 或 Claude Code 这类工具接入认证文件路径通常是~/.codex/auth.json或类似位置。确保 Base URL、Key、Model ID 三件套写全缺一个都会认证失败。TaoToken 的接入文档在 https://taotoken.net/doc?utm_sourcetaotoken_aicg_blog_endutm_contentdocutm_campaignrewrite 有详细说明。排查顺序建议先 curl 测通道再单模型小样本跑最后加数据集和对比模型。每步确认后再往下能省很多时间。6. 评测之后把结果用起来与通道分流建议跑完 C-Eval 拿到分数只是开始。我通常会把summary里的 CSV 导出来和之前微调前的基线做对比看哪些科目提升明显、哪些退步。如果分数异常回到predictions里抽查几道题的输出判断是模型能力问题还是模板问题。对于需要长期做评测和对比的场景建议把模型调用统一走 TaoToken 的 Coding Plan地址是 https://taotoken.net/coding-plan?utm_sourcetaotoken_aicg_blog_endutm_contentcoding-planutm_campaignrewrite 。这样本地 TurboMind 负责大批量离线评测云端通道负责快速对比和补充两边结果汇总到同一份报告里。如果你只是想快速验证某个模型的表现可以直接用模型对话页面 https://taotoken.net/models?utm_sourcetaotoken_aicg_blog_endutm_contentmodelsutm_campaignrewrite 手动测几轮确认基本能力后再上 OpenCompass 跑标准数据集。接入相关的文档和 Key 管理都在 https://taotoken.net/api-keys?utm_sourcetaotoken_aicg_blog_endutm_contentapi-keysutm_campaignrewrite 配置时对照着填就行。最后提醒一点评测配置里的路径、模型 ID、Key 这三样东西建议用环境变量或单独的配置文件管理不要直接写死在eval_turbomind.py里。这样换模型或换通道时只改一处减少出错概率。