
基于 Qwen 复现 ARC-AGI-1 评估vLLM/SGLang 推理与多线程评测流水线实战指南【免费下载链接】Qwen1.5Qwen3 is the large language model series developed by Qwen team, Alibaba Cloud.项目地址: https://gitcode.com/GitHub_Trending/qw/Qwen1.5本指南以 eval 目录 为对象完整讲解如何复现 Qwen 系列大模型在 ARC-AGI-1 基准pass1上的评测分数。你将掌握从启动 vLLM 推理服务、配置评估 YAML、多线程并行推理到最终计算并核对分数的完整流水线并理解eval目录下每个脚本的底层实现逻辑能够在自己的 GPU 集群上直接复现仓库报告的 40.75ARC-AGI-1 pass1Qwen3-235B-A22B-Instruct-2507结果。eval 目录定位一套可复现的评测工具箱仓库的 eval/README.md 明确说明该目录提供脚本用于在各类基准上复现Qwen系列大语言模型的评估结果。当前仓库已内置 ARC-AGI-1pass1一个基准的完整评测链路模型输出与最终评分分别存放在 eval/output 与 eval/eval_res 中后续基准会持续追加。ModelDatasetConfigReproduced ScoreQwen3-235B-A22B-Instruct-2507ARC-AGI 1 (pass1)eval/configs/ARCAGI-Qwen3-235B-A22B-Instruct-2507.yaml40.75该分数可在仓库内直接核验eval/eval_res/ARCAGI-Qwen3-235B-A22B-Instruct-2507_eval_result.txt 中记录的Task: arc_agi_1, Accuracy: 0.4075即对应上表的 40.75。流水线全景两阶段四步走的评估架构从目录结构与脚本职责看评测分为推理生成与离线评分两大阶段eval/ ├── configs/ # 推理与评分共用的 YAML 配置 ├── data/arc_agi_1.jsonl # 输入提示含答案与 task_id ├── generate_api_answers/ │ ├── infer_multithread.py # 多线程并行推理入口 │ └── utils_vllm.py # OpenAI 兼容 API 客户端 ├── output/ # 推理输出jsonl ├── eval/ │ ├── eval.py # 评分入口 │ └── arc_agi_1.py # ARC-AGI-1 评分实现 └── eval_res/ # 最终评分结果完整执行流程对应 README 的四步Step 0 环境准备安装依赖Python ≥ 3.9 vLLM 或 SGLangStep 1 启动推理服务vLLM OpenAI 兼容服务可选 SGLang Router 加速Step 2 推理生成infer_multithread.py按配置逐条调用 API 并落盘Step 3 计算分数eval/eval.py解析模型输出并与标准答案比对输出 Accuracy。Step 0环境准备与依赖安装前置条件eval/README.md 原文要求Python ≥ 3.9已安装 vLLM 或 SGLang文章内仅作环境要求说明不在仓库范围内安装评测脚本依赖pip install -r requirements.txteval/requirements.txt 的依赖清单为# common openai0.28.1,1.65.5 packaging numpy tqdm datasets2.14.6 pyyaml其中openai客户端用于访问推理服务兼容 0.28.x 与 1.x 两代 SDK见下文源码分析numpy用于评分阶段的均值聚合tqdm提供推理进度条pyyaml负责解析配置文件。Step 1启动 vLLM 推理服务按 eval/README.md 的官方命令启动 vLLM OpenAI 兼容服务export MODEL_NAMEQwen/Qwen3-235B-A22B-Instruct-2507 # Replace with desired model export MODEL_PATH$MODEL_NAME # Or path to local checkpoint export NUM_GPUS8 python -m vllm.entrypoints.openai.api_server \ --model $MODEL_PATH \ --trust-remote-code \ --served-model-name $MODEL_NAME \ --tensor-parallel-size $NUM_GPUS \ --enforce-eager \ --port 8030参数要点--tensor-parallel-size按 GPU 数量调整README 提示 Adjust according to your GPU setup8 卡对应 Qwen3-235B 这类超大 MoE 模型的常规配置--served-model-name对外暴露的模型名必须与配置文件中的model_name一致--port 8030服务端口配置文件base_url默认指向http://127.0.0.1:8030/v1--trust-remote-code与--enforce-eager分别用于信任远端模型代码与避免 CUDA Graph 编译带来的启动开销。可选优化SGLang Router推荐长时评测由于完整评估可能持续数天README 建议改用SGLang 数据并行加速python -m sglang_router.launch_server \ --model-path Qwen/Qwen3-235B-A22B-Instruct-2507 \ --dp-size 4 \ --host 0.0.0.0 \ --port 30000注意两点--dp-size需根据可用资源调整--port必须与后续步骤中的base_url保持一致。若使用 SGLang Router需将配置文件中base_url指向其端口如http://127.0.0.1:30000/v1。配置文件详解一份 YAML 驱动全流程仓库将推理与评分参数统一收敛在 eval/configs/ARCAGI-Qwen3-235B-A22B-Instruct-2507.yamlinfer_multithread.py与eval.py均以--config指向该文件实现一份配置、两阶段复用。# Data from https://github.com/fchollet/ARC-AGI/tree/399030444e0ab0cc8b4e199870fb20b863846f34/data/evaluation # Prompt Template from https://www.kaggle.com/code/hansuelijud/template-llama-3-8b-arc-prize-2024-inference?scriptVersionId182406327cellId16 # Input and Output Path input_file: data/arc_agi_1.jsonl output_file: output/ARCAGI-Qwen3-235B-A22B-Instruct-2507.jsonl # Sampling Size for each query n_samples: 1 max_workers: 128 # vLLM server setting base_url: http://127.0.0.1:8030/v1 model_name: Qwen/Qwen3-235B-A22B-Instruct-2507 # Sampling Parameters top_p: 0.8 temperature: 0.7 top_k: 20 max_tokens: 32768 presence_penalty: 1.5 # Eval Parameters eval_input_path: output/ARCAGI-Qwen3-235B-A22B-Instruct-2507.jsonl details_path: output/ARCAGI-Qwen3-235B-A22B-Instruct-2507_details.jsonl task_name: arc_agi_1结合 infer_multithread.py 的源码默认值各字段含义与影响如下配置项本仓库值代码默认值说明input_file/output_filedata/... / output/...必填缺失即报错退出推理输入与输出路径n_samples11每条 prompt 采样次数pass1 即取 1max_workers128128ThreadPoolExecutor并发线程数决定吞吐上限base_urlhttp://127.0.0.1:8030/v1http://10.77.249.36:8030/v1OpenAI 兼容服务地址model_nameQwen3-235B-A22B-Instruct-2507Qwen/QwQ-32B服务端暴露的模型名top_p0.80.7核采样阈值temperature0.70.8采样温度top_k2020前 k 候选采样max_tokens3276832768最大生成 token 数ARC-AGI 输出网格可能很长须留足空间presence_penalty1.51.0存在惩罚抑制重复eval_input_path/details_pathoutput/...jsonl评分阶段必填评分输入与明细输出task_namearc_agi_1评分阶段必填任务名需在ALL_TASKS注册表中存在运行前提所有路径均为相对eval目录的相对路径因此推理与评分命令都应在eval目录下执行README 中命令即是如此组织。Step 2多线程并行推理推理服务就绪后运行mkdir -p output # Example: Evaluate on ARC-AGI python generate_api_answers/infer_multithread.py \ --config configs/ARCAGI-Qwen3-235B-A22B-Instruct-2507.yaml实现细节并发模型与容错infer_multithread.py 的实现要点并发调度主流程将每个 prompt 展开为n_samples份任务后通过concurrent.futures.ThreadPoolExecutor(max_workersmax_workers)提交L153-L168tqdm实时展示进度线程安全落盘process_item中每个线程拿到结果后在file_lockthreading.Lock保护下以追加模式写一行 JSON 并flush()L59-L62保证并发写入不交错、进程中断不丢已完成数据断点续跑启动时count_completed_samples会扫描已存在的输出文件按 prompt 统计已完成采样数仅补齐剩余样本L132-L146。因此 README 明确说明进程中断后直接重跑同一条命令即可自动续跑采样参数下传YAML 中的top_p / temperature / top_k / max_tokens / presence_penalty会逐项传递给 API 客户端。底层 API 客户端兼容两代 openai SDKutils_vllm.py 是推理脚本的请求层通过packaging.version.parse判断openai.__version__是否 ≥ 1.0.0L8v1 走openai.OpenAI(base_url..., timeouthttpx.Timeout(...))v0.28 走openai.ChatCompletion.createtop_k在 v1 SDK 中以extra_body传递在旧版 SDK 中直接作为调用参数L44-L53超时默认OPENAI_API_REQUEST_TIMEOUT99999秒适配长思考/长输出的极端场景OPENAI_API_KEY默认取环境变量缺省为EMPTY针对连接错误、限流自动随机休眠 25~35 秒后抛出ClientErrorL76-L79超过上下文长度maximum context length时返回空生成标记避免整个任务崩溃。Step 3计算评分推理完成后运行评分脚本mkdir -p eval_res python eval/eval.py \ --config configs/ARCAGI-Qwen3-235B-A22B-Instruct-2507.yaml \ eval_res/ARCAGI-Qwen3-235B-A22B-Instruct-2507_eval_result.txt最终分数会写入上述文件仓库已有样例输出。评分入口eval.py 的任务注册机制eval/eval.py 采用注册表式任务分发顶部维护ALL_TASKS {}通过from arc_agi_1 import compute_scores_arc_agi_1与ALL_TASKS[arc_agi_1] compute_scores_arc_agi_1注册评分函数L7-L10新增基准只需扩展此字典强校验eval_input_path、details_path、task_name三项必填task_name不在注册表时报错并列出可用任务L46-L66关键预处理get_after_think会将Qwen3思考链格式的输出按\n/think\n\n切分只保留思考标签之后的最终答案文本参与评分L12-L17——这是针对带 think/reasoning 输出的模型的必要处理逐行读取推理输出 JSONL将每条记录的gen[0]替换为去思考链后的文本再调用对应任务评分函数最后打印Task: {task_name}, Accuracy: {acc}。评分核心arc_agi_1.py 的答案解析与逐任务统计eval/arc_agi_1.py 实现了 ARC-AGI-1 的评分逻辑容错解析parse_model_outputL6-L27先直接尝试json.loads失败则用正则提取json/python代码块中的内容取最后一个再退而求其次提取[[...]]数组结构。三种策略逐级降级最大化接受模型的不规范输出严格比对solution_scoreL30-L33预测与标准答案完全相等得 1.0 分否则 0 分任一为空也判 0ARC-AGI 要求输出网格逐格精确匹配逐任务聚合L36-L53按task_id分组求平均再对全部任务取均值并断言任务数为400ARC-AGI-1 官方 evaluation 集规模数据不完整直接 AssertionError防止误用不完整结果实时落盘明细save_cache将每条带acc字段的样本写入details_path并逐行 flush便于事后审计单条对错。输入数据形态ARC-AGI-1 提示词结构eval/data/arc_agi_1.jsonl 每行包含prompt、answer、task_id三个字段。从数据样例可以看到提示词采用 few-shot 模板给出若干示例输入/输出对让模型归纳底层规则随后给出测试输入并要求模型以json形式输出网格数组。颜色以 0~9 整数编码0 为背景色评分即对生成的整数网格做逐元素精确匹配——这正是 ARC-AGI 基准抽象推理 精确输出的核心评测范式。结果核验与产物说明完整跑通后得到两类产物eval/output/ARCAGI-Qwen3-235B-A22B-Instruct-2507.jsonl每条推理记录prompt、gen、answer、task_id可断点续跑是评分的唯一输入eval/output/ARCAGI-Qwen3-235B-A22B-Instruct-2507_details.jsonl逐样本 acc 明细用于定位失败样本与审计eval/eval_res/ARCAGI-Qwen3-235B-A22B-Instruct-2507_eval_result.txt最终评分输出仓库内对应Accuracy: 0.4075即 40.75 pass1。扩展与注意事项新增基准在 eval.py 的ALL_TASKS注册新的评分函数并在配置文件中切换task_name即可README 亦注明 Additional benchmarks will be added in future updates端口一致性vLLM 服务端口、base_url、SGLang Router 端口三者必须对齐否则推理请求会直接失败长时任务建议ARC-AGI-1 共 400 个任务、max_tokens高达 32768README 明确提示整体评估可能持续数天优先使用 SGLang 数据并行dp-size分摊负载并善用推理脚本自带的断点续跑能力思考链兼容评分脚本已内置对/think分隔的 reasoning 输出的剥离逻辑复现其他带思考过程的模型时无需改动评分代码。本文所有命令与参数均以 eval/README.md 为准并与 配置文件 及 推理、评分 两阶段源码一一对应读者可直接在eval目录下按步骤复现仓库报告的 40.75 分数。【免费下载链接】Qwen1.5Qwen3 is the large language model series developed by Qwen team, Alibaba Cloud.项目地址: https://gitcode.com/GitHub_Trending/qw/Qwen1.5创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考