ARTICLE DETAIL

资讯详情

深耕网站视觉设计与运营推广的一线实战洞察。

opencompass评测框架部署:用TaoToken统一Key跑通本地评测配置

opencompass评测框架部署:用TaoToken统一Key跑通本地评测配置 1. 为什么本地评测总在 Key 上翻车opencompass 评测框架部署这件事真正卡人的往往不是装包而是多模型评测时 API Key 到处散落。你本地跑一个 Qwen2.5-7B再想拉两个 API 模型做横向对比配置文件里就会冒出OPENAI_API_KEY、ANTHROPIC_API_KEY、各家 base_url改一次模型换一次环境变量跑批量任务时还得手动切来切去。opencompass 评测框架本身设计得挺灵活models列表里可以混本地模型和 API 模型但灵活的另一面就是配置分散。这篇面向的是想在本地把 opencompass 跑起来、并且用统一 Key 管理多模型评测的人。核心思路是本地模型照常用 HuggingFace 加载API 模型全部走 TaoToken 的统一 Key 和统一 API 通道这样config.toml和settings.json里只需要维护一份凭证评测脚本不用为每个厂商写一套鉴权逻辑。适合谁手上有单卡或双卡、想验证评测流程是否跑通、又不想在 Key 管理上花太多时间的同学。我会给出可复制的配置骨架、一条最小验证命令以及几个我实际踩过的坑。全程在 WSL2 Ubuntu 22.04 环境下操作Windows 原生环境可能有兼容问题建议直接上 WSL2。2. TaoToken 前置统一 Key 与 API 通道准备在动手改 opencompass 配置之前先把统一入口准备好。TaoToken 在这里扮演的角色是一个兼容 OpenAI 风格接口的 API 通道你拿一个 Key就能在评测配置里指向同一个base_url不用为每个模型厂商单独配环境变量。第一步去官网注册并进入控制台。地址是 https://taotoken.net/?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_content 注册后在控制台里创建 API Key。创建入口在 https://taotoken.net/console?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_content Key 的管理页面是 https://taotoken.net/api-keys?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_content 。拿到 Key 之后API 的基础地址是https://taotoken.net/api注意这个地址不带任何查询参数直接作为base_url使用。如果你要确认某个模型名是否可用可以先去模型对话页面试一条请求https://taotoken.net/models?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_content 。这里有个关键点opencompass 里 API 模型的接入方式本质是走 OpenAI 兼容接口。所以你在配置里要填的是openai_api_base和key而不是每个厂商自己的 SDK。统一之后评测配置里所有 API 模型共享同一个base_url只有abbr和path模型名不同。注意不要把 Key 硬编码进提交到 git 的配置文件。建议用环境变量TAOTOKEN_API_KEY注入配置文件里读环境变量。3. 可复制配置config.toml 与 settings.json 骨架opencompass 的配置分两层一层是 Python 的评测配置文件定义 datasets 和 models另一层是运行时的 settings。为了统一 Key我习惯把凭证抽到一个config.toml里Python 配置读它。先建目录结构mkdir -p ~/opencompass-eval/{configs,outputs,models} cd ~/opencompass-eval3.1 config.toml 骨架# ~/opencompass-eval/config.toml [taotoken] base_url https://taotoken.net/api api_key_env TAOTOKEN_API_KEY [models.qwen_api] abbr qwen-api model_name qwen-plus max_out_len 512 [models.glm_api] abbr glm-api model_name glm-4 max_out_len 512 [eval] work_dir ./outputs这个 toml 的作用是把「通道地址」「Key 来源」「模型清单」集中管理。api_key_env指向环境变量名而不是直接写 Key这样配置文件可以安全地进版本库。3.2 settings.json 骨架opencompass 有些版本会读一个 settings 文件来控制运行参数我把它放在项目根{ taotoken: { base_url: https://taotoken.net/api, api_key_env: TAOTOKEN_API_KEY }, runtime: { work_dir: ./outputs, max_num_workers: 4, debug: false }, models: { local_qwen: { path: /home/llm_location/Qwen/Qwen2___5-7B-Instruct, max_seq_len: 4096, max_out_len: 128, batch_size: 1 } } }3.3 Python 评测配置读取统一 Key下面这个qwen25_7b_mmlu.py是核心它同时挂本地模型和一个 API 模型API 模型走 TaoToken# ~/opencompass-eval/configs/qwen25_7b_mmlu.py import os import toml from copy import deepcopy from mmengine.config import read_base # 读取统一配置 cfg toml.load(os.path.expanduser(~/opencompass-eval/config.toml)) TAOTOKEN_BASE cfg[taotoken][base_url] TAOTOKEN_KEY os.environ[cfg[taotoken][api_key_env]] with read_base(): from opencompass.configs.datasets.mmlu.mmlu_gen import mmlu_datasets from opencompass.models import HuggingFacewithChatTemplate, OpenAI # 只取一个子集验证流程 datasets deepcopy([ d for d in mmlu_datasets if d[abbr] lukaemon_mmlu_college_biology ]) # 本地模型 local_model dict( typeHuggingFacewithChatTemplate, abbrqwen25-7b-local, path/home/llm_location/Qwen/Qwen2___5-7B-Instruct, tokenizer_path/home/llm_location/Qwen/Qwen2___5-7B-Instruct, max_seq_len4096, max_out_len128, batch_size1, run_cfgdict(num_gpus1), model_kwargsdict( device_mapauto, quantization_configdict(load_in_4bitTrue), ), ) # API 模型统一走 TaoToken api_model dict( typeOpenAI, abbrcfg[models][qwen_api][abbr], pathcfg[models][qwen_api][model_name], keyTAOTOKEN_KEY, openai_api_baseTAOTOKEN_BASE, max_out_lencfg[models][qwen_api][max_out_len], run_cfgdict(num_gpus0), ) models [local_model, api_model]这里OpenAI这个 model type 是 opencompass 内置的 OpenAI 兼容接口封装openai_api_base填 TaoToken 的地址key填统一 Keypath填模型名。这样你加第二个 API 模型时只需要在config.toml里加一段Python 配置里循环生成即可。3.4 环境变量注入export TAOTOKEN_API_KEY你的Key建议写进~/.bashrc或用一个.env文件配合source别写进 Python 文件。4. 验证请求最小命令确认评测任务发起配置写好后先别急着跑全量。用一条最小命令确认 opencompass 能正常发起任务、API 通道能通。先装依赖如果还没装conda create -n opencompass python3.10 -y conda activate opencompass pip install -U opencompass pip install transformers4.46.3 bitsandbytes modelscope toml然后跑最小评测cd ~/opencompass-eval opencompass configs/qwen25_7b_mmlu.py -w ./outputs/qwen25_7b如果只想先验证 API 通道可以把models临时改成只留api_model这样不加载本地权重几秒就能看到请求发出opencompass configs/qwen25_7b_mmlu.py -w ./outputs/api_only --max-num-workers 1成功发起后./outputs/qwen25_7b/下会出现时间戳目录里面有logs/、predictions/、results/、summary/。logs/里能看到推理日志如果 API 通道有问题这里会直接报 401 或连接错误。验证 API 通道是否通也可以单独用 curl 打一条curl https://taotoken.net/api/chat/completions \ -H Authorization: Bearer $TAOTOKEN_API_KEY \ -H Content-Type: application/json \ -d {model:qwen-plus,messages:[{role:user,content:hi}]}返回正常 JSON 就说明 Key 和通道没问题opencompass 里报错就大概率是配置字段写错了。5. 本篇常见错排查5.1 报 401 或 invalid api key最常见。先确认TAOTOKEN_API_KEY在当前 shell 里真的存在echo $TAOTOKEN_API_KEY如果为空说明环境变量没生效重新source ~/.bashrc或手动 export。另一个坑是 Key 前后带了空格或换行从网页复制时容易带上用echo -n检查一下长度。5.2 opencompass 找不到 OpenAI model type有些旧版本 opencompass 的OpenAI类路径不一样。如果 import 报错改成from opencompass.models import OpenAI确认你的版本里opencompass/models/__init__.py有导出。实在不行用OpenAI的完整路径opencompass.models.openai_api.OpenAI。5.3 本地模型 OOM12G 显存跑 7B 全量推理会爆。配置里已经加了load_in_4bitTrue如果还 OOM把batch_size降到 1max_seq_len从 4096 降到 2048。另外device_mapauto在多卡环境下会自己分配单卡就保持默认。5.4 Acc0 或解析失败多半是 prompt 格式和评测集期望的输出格式对不上。MMLU 的 gen 模式要求最后一行是ANSWER: $LETTER如果你改了 prompt 但没保留这个格式框架解析不出来就全错。改 prompt 时务必对齐原始输出格式。5.5 API 模型返回空或超时检查max_out_len是不是设太小API 模型有时首 token 延迟高max_out_len太小会导致截断。另外run_cfg里num_gpus0要写对API 模型不需要 GPU。5.6 WSL 下模型下载到 /mnt 导致 IO 慢模型别放/mnt/c/...放 WSL 原生文件系统如/home/llm_location。cache_dir和local_dir的区别前者是共享缓存后者是独立目录个人实验用cache_dir更省空间。6. 后续怎么扩展与统一管理跑通之后扩展就很顺了。加新 API 模型只在config.toml里加一段[models.xxx]Python 配置里循环读出来生成 model dict。本地模型和 API 模型混跑时opencompass 会自动按abbr区分结果summary/里能看到每个模型的 Acc 对比。如果你要长期跑编码类或 Agent 类评测模型调用量大可以考虑 Coding Plan 来管理额度https://taotoken.net/coding-plan?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_content 。接入文档在 https://taotoken.net/doc?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_content 里面有各语言 SDK 的示例opencompass 走 OpenAI 兼容接口直接参考 OpenAI 那节就行。最后提醒一句评测配置里的 Key 永远走环境变量别图省事写死。我见过有人把 Key 提交到公开仓库第二天就被刷爆额度。统一 Key 的好处是管理集中但集中也意味着泄露风险集中这点要拎清。
返回列表