OpenBMB/SOAR-Toolkit
Python
Captured source
source ↗OpenBMB/SOAR-Toolkit
Language: Python
Stars: 5
Forks: 2
Open issues: 1
Created: 2026-02-24T17:21:04Z
Pushed: 2026-03-09T09:06:37Z
Default branch: main
Fork: no
Archived: no
README:
---
本次比赛围绕 OpenBMB MiniCPM-SALA 模型的推理性能优化展开。参赛者需在指定的硬件环境上基于官方提供的 MiniCPM-SALA 模型进行优化,不得提交或替换任何基座模型。为了方便各位参赛选手进行自测,我们提供了以下评测工具,帮助大家进行检验和合理规划。主要包括:
基础镜像
镜像下载
我们提供了可运行模型并进行推理的基础镜像(内置 SGLang 及必要依赖),用于本地开发、调试与评测自测。
# 国内下载(阿里云ACR) docker pull modelbest-registry.cn-beijing.cr.aliyuncs.com/public/soar-toolkit:latest # 海外下载(Github) docker pull ghcr.io/openbmb/soar-toolkit:latest
MiniCPM-SALA 模型下载
方式一:通过 Hugging Face 下载
在下载前,请先通过如下命令安装 Hugging Face 官方 CLI 工具。
pip install huggingface_hub
下载完整模型库到指定路径文件夹./models
huggingface-cli download OpenBMB/MiniCPM-SALA --local-dir ./models
方式二:通过 ModelScope 下载
在下载前,请先通过如下命令安装 ModelScope。
pip install modelscope
下载完整模型库到指定路径文件夹./models
modelscope download --model OpenBMB/MiniCPM-SALA --local_dir ./models
容器内挂载地址
模型:/models/MiniCPM-SALA
容器启动脚本参考
docker run 常用参数
| 参数 | 作用 | 示例 | | :--- | :--- | :--- | | --gpus | 选择可见 GPU | --gpus '"device=0"' | | -v ::ro | 挂载目录/文件到容器(只读) | -v /path/to/MiniCPM-SALA:/models/MiniCPM-SALA:ro | | -p : | 端口映射 | -p 30000:30000 | | -e KEY=VALUE | 传入环境变量(用于改启动参数) | -e SGLANG_SERVER_ARGS='...' | | --name | 容器命名(便于 docker logs) | --name minicpm_sglang | | -d | 后台运行 | -d | | --rm | 容器退出后自动删除 | --rm |
环境变量
| 环境变量 | 默认值 | 含义 / 对应 sglang.launch_server | 示例 | | :--- | :--- | :--- | :--- | | MODEL_PATH | /models/MiniCPM-SALA | --model-path | -e MODEL_PATH=/models/MiniCPM-SALA | | HOST | 0.0.0.0 | --host | -e HOST=0.0.0.0 | | PORT | 30000 | --port | -e PORT=30000 | | SGLANG_SERVER_ARGS | --disable-radix-cache --attention-backend minicpm_flashinfer --chunked-prefill-size 8192 --skip-server-warmup --dense-as-sparse | 若设置则覆盖默认参数,建议单引号包裹 | -e SGLANG_SERVER_ARGS='--disable-radix-cache ...' |
# 参考docker启动命令 docker run -d \ --name soar-sglang-server \ --gpus 'device=0' \ -p 30000:30000 \ -e SGLANG_SERVER_ARGS=[optional/可自定义部署参数,未设定时使用模型默认参数]'--xxxxx' \ -v ~/models/MiniCPM-SALA:/models/MiniCPM-SALA:ro \ modelbest-registry.cn-beijing.cr.aliyuncs.com/public/soar-toolkit:latest
> 本地与线上评测环境可能存在差异,最终成绩以官方评测环境为准。
注意事项
- SGLANG_SERVER_ARGS 里请用连字符参数名:例如
--dense-as-sparse,不要写--dense_as_sparse(镜像不做下划线自动转换)。
评测环境
为便于参赛选手有针对性地开展优化工作,现对评测环境说明如下:
- 参赛选手提交的全部文件总大小不得超过 2GB。
- 单次评测任务的资源上限为:20 CPU、128 GiB 内存。
- 单次评测任务的最长执行时间为 5 小时(不包含排队等待时间)。
- 硬件环境:本次比赛统一采用 NVIDIA 高端 RTX PRO 单卡 GPU 进行评测。
模型正确性评测
为了验证选手们对推理代码的优化不会影响模型在正确性上的表现,我们通过测试模型在特定数据集上的得分来进行评估。这里我们公开评测正确性所用的数据集perf_public_set.jsonl以及用于评测正确性的脚本eval_model.py,选手们也可以通过该数据集进行自查。
perf_public_set.jsonl
下载地址:https://github.com/OpenBMB/SOAR-Toolkit/blob/main/eval_dataset/perf_public_set.jsonl
本数据集包含不同长度的选择题或者信息提取题目,能够综合测试模型的整体性能表现。MiniCPM-SALA 在该数据集上的得分约在 82±2 分,我们取 80 分作为基准分。在对选手提交的代码进行评估的过程中,我们会验证模型在本数据集上的得分相对于基准分的相对分数,以此来判断模型能力在修改过程中是否会有所下降。该文件包含以下字段:
task:任务类型question:输入 prompt 文本gold:参考答案/关键词列表等(不同任务类型含义不同)
示例:
{"question":"...题目文本...", "task":"mcq", "gold":"B"}> 为避免可能存在的刷分行为,我们会在内部准备一个私有集perf_private_set.jsonl。两个数据集的长度分布和任务一致,在原始模型推理结果中分数相近,主要用于检查模型是否会在两个数据集上存在较大的差距,保证比赛的公平性。
eval_model.py
下载地址:https://github.com/OpenBMB/SOAR-Toolkit/blob/main/eval_model.py
eval_model.py 会通过调用已启动的 SGLang 推理服务,根据不同评测任务类型,给出模型在正确性上的评测分数,最后得到的ori_accuracy表示模型在该数据集上的原始得分,得到overall_accuracy表示相对于上述基准分(80 分)的分数,判断推理代码是否会影响模型的正确性效果。首先需要启动 SGLang 服务,并传入模型所使用的api_base:
python3 eval_model.py \ --api_base http://127.0.0.1:30000 \ --model_path \ --data_path /perf_public_set.jsonl \ --concurrency 32
参数说明(常用):
--api_base:SGLang 服务地址--model_path:模型路径--data_path:数据集路径--concurrency:(optional)并发请求数--num_samples:(optional)最多评测样本数(调试时可以进行少样本测试)--verbose:(optional)打印每条样本更详细的信息
模型速度评测
bench_serving.sh
下载方式:https://github.com/OpenBMB/SOAR-Toolkit/blob/main/bench_serving.sh
本脚本使用 sglang 官方 bench_serving 工具,在 3 档并发度下分别跑完所有评测请求,记录 Benchmark Duration。在对应档位传入数据集路径可以完成对应档位的测试,未输入数据集路径的可跳过该档位的测试,相关传参及说明对应如下:
| 参数 | 必填 | 说明 | 示例 | | :--- | :--- | :--- | :--- | | API_BASE | 是 | 模型服务地址 | http://127.0.0.1:30000 | | SPEED_DATA_S1 | 否 | S1 档位数据集(并发=1),可传入JSONL 路径 | /path/to/speech.jsonl(未设定时跳过该项测试) | | SPEED_DATA_S8 | 否 | S8 档位数据集(并发=8),可传入JSONL 路径 | /path/to/speech.jsonl(未设定时跳过该项测试) | | SPEED_DATA_SMAX | 否 | Smax 档位数据集(不设并发上限),可传入JSONL 路径 | /path/to/speech.jsonl(未设定时跳过该项测试) |
为了保证比赛结果的有效性和公平,这里暂不提供比赛中用于速度测试的数据集,题目长度分布可参考赛题。我们测试的方式是通过固定的模型输入和输出来对模型的速度进行测试,选手们可以通过以下字段构造 .jsonl 文件传入进行自测:
{"question": "问题内容...", "model_response": "模型回答内容..."}使用实例:
export SPEED_DATA_S1=/path/to/speech.jsonl export SPEED_DATA_S8=/path/to/speech.jsonl export SPEED_DATA_SMAX=/path/to/speech.jsonl bash SOAR/bench_serving.sh http://127.0.0.1:30000
提交说明
提交方式升级
为给选手提供更高的自由度,我们对提交方式进行了升级——选手现在可以自由定制运行环境与模型预处理流程。
提交要求
选手需将所有代码及资源打包为 .tar.gz 文件,其中须包含:
| 文件 | 是否必须 | 说明 | | :--- | :--- | :--- | | prepare_env.sh | 必须 | 环境构建脚本 | | prepare_model.sh | 可选 | 模型预处理脚本 | | 其他代码/资源 | 按需 | 选手自行组织 |
执行流程
1. 环境构建:平台启动基础环境后,将自动执行选手提供的 prepare_env.sh,在基础环境之上安装选手所需的依赖与配置。 2. 模型预处理(如提供):环境就绪后,平台将调用 prepare_model.sh,对原始模型进行处理并输出至指定路径,供后续推理阶段使用。
prepare_model.sh 须支持以下两个参数:
bash prepare_model.sh --input --output
| 参数 | 说明 | | :--- | :--- | | --input | 平台提供的原始模型路径,脚本从该路径读取模型 | | --output | 平台指定的输出路径,脚本须将处理后的模型写入该路径 |
注意事项
- 基础环境使用
uv作为包管理器。执行pip install等操作时,请使用uv pip install替代,并务必在本地充分测试后再提交。 - 旧提交方式迁移提示:此前采用 wheel 包方式提交的选手,请自行将原有逻辑适配到新的
prepare_env.sh+prepare_model.sh方式。例如,将 wheel 的安装命令迁移至prepare_env.sh中执行即可,原有的模型处理逻辑可迁移至prepare_model.sh。旧的 wheel 提交方式将不再支持。
提交 Demo
下载地址:[demo-sala.tar.gz](demos/demo-sala.tar.gz)
本目录是一个最小可运行的提交示例,演示如何按照平台要求组织 prepare_env.sh + prepare_model.sh 提交包。
目录结构
├── prepare_env.sh # 必须 — 环境构建脚本 ├── prepare_model.sh # 可选 — 模型预处理入口 ├── preprocess_model.py # prepare_model.sh 调用的 Python 脚本 └── sglang/python/ # 自定义 sglang 源码(editable install)
各文件说明
prepare_env.sh(必须)
平台在基础环境启动后自动执行此脚本。本 demo 中做了两件事: 1. 用 uv pip install --no-deps -e ./sglang/python 将自定义 sglang 以 editable 模式安装,替换镜像内置版本 2. 通过 export SGLANG_SERVER_ARGS 追加推理启动参数(示例中添加了 --log-level info)
uv pip install --no-deps -e ./sglang/python
export SGLANG_SERVER_ARGS="${SGLANG_SERVER_ARGS:-} --log-level…Excerpt shown — open the source for the full document.
Notability
notability 2.0/10New repo, very low community traction.