Skip to content

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

40 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

seminars-infra-judger

AI Infra Seminars(未名超算队 × LCPU)实践作业的自动评测机,fork 自 lcpu-club/lfs-auto-grader。 单机 Docker 执行,无需 Kubernetes;对接 AOI(hpcgame.pku.edu.cn)的 Runner 协议。

架构

AOI 后端 ──poll──▶ manager(单进程,250ms 轮询)
                    │  按题目 judge.config 起一次性 Docker 容器
                    ▼
              评测容器(judge-image/*)
                    │  下载学生提交 → 官方题目树 + 白名单覆盖 → 跑测试
                    │  报告写入 bind mount 的 /output
                    ▼
              adapter 解析报告计分 ──PATCH/details/complete──▶ AOI
  • internal/manager/ — 轮询 AOI、容器编排、结果上报
  • internal/executor/ — Docker 执行器(支持 GPU:gpus/shmSize 配置)
  • internal/adapters/ — 报告解析适配器(注册表模式):
    • lfs1 — 纯 pytest 报告,按通过率等权计分(LFS 作业,保留自上游)
    • wmhpc1 — pytest 报告 + cuda_report.json 加权合并计分(Seminars 作业)
  • judge-image/wmhpc1/ — assignment01 评测镜像(CUDA 12.8 devel + torch/triton/tilelang)
  • pkg/aoiclient/ — AOI Runner 协议客户端
  • pkg/judgerproto/ — 容器 stdout JSON-Lines 协议(可选通道)

部署

评测机要求:NVIDIA GPU + 驱动 + nvidia-container-toolkit + Docker。

just build                      # 构建 build/manager 和 build/utility

# 1. 注册 runner(token 由 AOI 组织管理员在后台生成)
./build/utility register --name <评测机名> --label wmhpc-a1 --token <registrationToken>
# 成功后生成 runner.env(RUNNER_ID / RUNNER_KEY)

# 2. 准备官方题目数据(评测容器只读挂载)
git clone git@github.com:lcpu-club/wmhpc-training-camp-x-lcpu-ai-infra-seminars.git /tmp/seminars
mkdir -p /data/wmhpc && cp -r /tmp/seminars/assignment01 /data/wmhpc/assignment01

# 3. 构建评测镜像
docker build -t crmirror.lcpu.dev/wmhpc/seminars-infra-judge-a1:latest judge-image/wmhpc1/

# 4. 启动 manager
set -a; source runner.env; set +a
ENDPOINT=https://hpcgame.pku.edu.cn ./build/manager

题目在 AOI 上的 judge 配置见 judge-image/wmhpc1/problem_config.json, 其中 label 必须与 runner 注册时的 --label 一致。

wmhpc1 评测流程

  1. 容器下载学生 zip,解压后定位含 kernels//cuda/ 的根目录;
  2. 复制只读的官方 assignment01/official)为工作树,仅把 grading/student_files.txt 白名单内的学生文件覆盖进去(学生改 tests/conftest.pyMakefile 不生效);
  3. WMHPC_GRADING=1 下跑 pytest --json-report(Triton/TileLang 题), 跳过的测试一律按未完成计;
  4. grading/grade_cuda.sh(CUDA 题:逐目标编译运行,退出码定通过与否, 压轴题走 judge_saxpy.sh 七个测试点给部分分);
  5. manager 侧 wmhpc1 adapter 合并两份报告:pytest 每测试权重 1, CUDA 条目按 grading/cuda_targets.txt 的权重,加权得分率 × 100 为总分。

grading/ 目录随课程仓库维护(assignment01/grading/),评分范围与权重 调整不需要动本仓库。

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

Packages

Contributors

Languages