赛道 C3“算子调度与模型部署”的完整提交实现,覆盖 C3.1–C3.5。最新要求以 赛题说明、C3.5 Worker 协议和 赛道三 Q&A为准;文档冲突及实测结论见 更新核对记录,最终目录结构见 提交要求。旧版评分说明仅作为历史参考。
scheduler/ C3.1–C3.4 图 IR、策略、融合、内存规划
export_dag.py C3.1 DAG 导出入口
infer.py C3.5 CuPy 推理运行时
infer_worker.py C3.5 持久化 worker 入口
tests/ 独立自测脚本
tools/benchmark.py 2 warmup + 5 timed + NVML 20ms 基准工具
docs/ 最新赛题文档与更新说明
package_submission.py 确定性提交包生成器
模型、测试数据、私钥、服务器信息和测试输出不会进入提交包。开发容器中的最新版四模型
资料包位于 /workspace/C3/testcases;仓库内旧资料包只保留三个小模型,便于日常回归,
BigFormer 的约 18GB 外部权重不纳入版本控制。
C3.1:
python3 export_dag.py --onnx {onnx} --output {output}C3.5:
python3 infer_worker.py本地查看 ONNX DAG 可视化网页:
python3 visualize.py /path/to/model.onnx网页会自动打开并覆盖 C3.1–C3.5:DAG、精度路由、Kernel 分解与调优、融合检查、内存与
多流执行计划、运行时兼容性和正式 benchmark 命令;各模块报告均可导出 JSON。也可以载入
export_dag.py 生成的纯 C3.1 JSON 文件。服务仅监听 127.0.0.1:8000,按 Ctrl+C
退出;用 --batch-size 可以调整 C3.2 problem size 的动态 batch。
worker 启动后只向 stdout 输出 READY 和逐任务 JSON;日志、异常均写 stderr。评测机在
同一进程内对一个模型连续发送任务,结束后发送 {"cmd":"exit"}。
- C3.1:稳定导出输入、输出、节点和数据依赖边,兼容空名及重复节点名。
- C3.2:覆盖 fp32/fp16/fp8/fp4 路由、关键算子分解、中间张量与合法 tuning 参数。
- C3.3:实现题面五类融合 pattern,并保留图输入、输出和数值等价性。
- C3.4:best-fit 设备内存池、lifetime slot 复用、pinned H2D、权重预取和多流事件同步均 接入实际运行路径。
- C3.5:支持公开图实际出现的 18 类算子(题面 17 类加
Identity);BigFormer 外部权重 以 mmap 读取,首次预热时将大型 QKV、FFN 和方形投影缓存为 fp16,再在 768MiB 设备窗口 内逐层上传、回收;cuBLAS GEMM 使用 fp32 累加和输出,小型输出头保持严格 fp32。同一 worker 内复用已校验的 ONNX 元数据,静态张量末次使用位置通过单遍图扫描生成。
每个脚本直接运行,不依赖 pytest:
python3 tests/c31_selftest.py
python3 tests/c32_selftest.py
python3 tests/c32_selftest.py --include-transformer
python3 tests/c32_selftest.py --full-fp32
python3 tests/c33_selftest.py
python3 tests/c34_selftest.py
python3 tests/c35_selftest.py
python3 tests/worker_selftest.py
python3 tests/robustness_test.py
python3 tests/web_selftest.py小模型端到端检查:
python3 smoke_test.py --model mlp
python3 smoke_test.py --model resnet
python3 smoke_test.py --model transformer在官方服务器验证单个性能模型:
python3 tools/benchmark.py \
--worker "python3 infer_worker.py" \
--onnx /workspace/C3/testcases/models/bigformer_v1.onnx \
--case /workspace/C3/testcases/testdata/c35/bigformer_v1 \
--batch-size 64该工具遵循正式协议:每个模型启动新 worker,2 次预热、5 次计时取中位数,计时阶段以 20ms 间隔读取 NVML 绝对显存并取五次峰值最大值。
公开样例、batch 64、正式 worker 口径:
| 模型 | 计时中位数 | NVML 峰值 | 最大绝对误差 | 准确率 |
|---|---|---|---|---|
| MLP | 0.103s | 不计性能分 | 1.53e-5 | 98.35% |
| ResNet | 5.085s | 557,842,432B | 8.58e-6 | 93.51% |
| Transformer | 1.070s | 不计性能分 | 3.34e-5 | — |
| BigFormer | 3.811s | 4,651,483,136B | 1.06e-3 | — |
四个模型均通过官方 selfcheck_worker.py 的完整 2+5、多轮输出、精度和干净退出检查。
ResNet 与 BigFormer 的显存结果由仓库 benchmark 以 20ms NVML 绝对值采样得到。
BigFormer 的最大绝对误差可高于单独的 atol,但仍满足正式的
atol + rtol * abs(golden) 逐元素条件。
以下命令只生成可放入最终 C3/ 目录的组件源码包,不是完整赛道 C 总包:
python3 package_submission.py dist/c3-submission.tgz
sha256sum dist/c3-submission.tgz
tar -tzf dist/c3-submission.tgz打包器使用源码白名单和固定 tar 元数据;同一源码可重复生成相同 SHA-256,组件根目录中的
说明文件名为规范要求的 readme.md。正式提交前还需将其内容与 C1/、C2/ 一起放进
TrackC-成员编号姓名-.../,再按成员信息生成同名 .zip。本仓库不包含 C1、C2 或成员信息,
因此不会自行生成最终总包。