mirror of
https://github.com/Comfy-Org/comfyci-runpod-worker.git
synced 2026-11-04 23:47:32 +00:00
[PR #11] [MERGED] Lanes as data: per-image Dockerfile, build matrix, per-lane regression jobs #12
Labels
No labels
pull-request
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set.
Reference
Comfy-Org/comfyci-runpod-worker#12
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
📋 Pull Request Information
Original PR: https://github.com/Comfy-Org/comfyci-runpod-worker/pull/11
Author: @marawan206
Created: 10/19/2026
Status: ✅ Merged
Merged: 10/19/2026
Merged by: @marawan206
Base:
main← Head:lanes-cu130📝 Commits (7)
9166541Lanes as data: per-image Dockerfile, build matrix, per-lane regression jobsf3ae31fKeep the lane matrix script dependency-free for the plan jobs530292dCreate a lane's endpoint from endpoint_defaults in lanes.json4bcaebaProvision the py313-torch2.14.1-cu130 lane: endpoint 2192t0ar23kdb5d360061Test lane plumbing against an unprovisioned copy of the registry5226e3cReport worker failures underfailureand carry the server log tailaa08561Give the worker image a C compiler for torch 2.14's Triton kernels📊 Changes
16 files changed (+1035 additions, -99 deletions)
View changed files
📝
.github/workflows/build-image.yml(+73 -9)📝
.github/workflows/regression.yml(+45 -9)📝
Dockerfile(+45 -13)📝
README.md(+56 -11)📝
manifest/lanes.json(+63 -2)📝
scripts/golden_baseline.py(+9 -3)📝
scripts/index_builder.py(+21 -0)➕
scripts/lanes.py(+151 -0)📝
scripts/run_regression.py(+15 -3)➕
scripts/runpod_endpoints.py(+220 -0)📝
scripts/submit_and_poll.py(+10 -5)➕
scripts/tests/test_lanes.py(+172 -0)📝
scripts/tests/test_submit_and_poll.py(+16 -0)📝
src/checkout.py(+14 -2)📝
src/comfy_runner.py(+88 -33)📝
src/handler.py(+37 -9)📄 Description
Why
The matrix we agreed on in October (per-commit py3.13 / torch 2.14.1 / cu130, with the cu128 lane retiring after an overlap) has had its registry, per-lane storage prefixes,
--laneflags and dashboard selector for two weeks, but only the legacy lane existed because the image, endpoint and per-lane scheduling were still hand-built. This PR makes lanes data end to end and brings up the first new lane.What changes
manifest/lanes.json(schema 2) gains animagesblock (python, cuda, torch index and exact torch/torchvision pins per image),endpoint_defaults(pool, workers, volume, data center, registry credential, timeouts), and each lane names itsimageandendpoint_id. The new lanepy313-torch2.14.1-cu130is provisioned: endpoint2192t0ar23kdb5. The legacy image is marked"build": falseso CI never rebuilds or moves the lane that today's goldens were blessed on.Dockerfileis parameterised by those image fields. Python comes from uv (Ubuntu 24.04 has no 3.13), torch is installed from the lane's pins and the same pins are written to/comfy-config/constraints.txt, whichcheckout.pypasses to the runtime requirements install so a ComfyUI commit can never swap the torch build underneath a lane. The image writes/comfy-config/image.json, and every run record carries anenvblock (image id, build sha, python, torch, cuda, host driver, and the backend lines ComfyUI logged). No torchaudio on new images: ComfyUI dropped it from requirements in September and the cu130 index only has 2.9.1.build-image.ymlbuilds a matrix from the registry (scripts/lanes.py images), tags:<image>and:<image>-<sha>, caches per image in the registry, and then runsscripts/runpod_endpoints.py set-imageso every provisioned, non-legacy lane on that image is repointed to the sha tag. That retires the manual PATCH after every build.regression.ymlfans out overscripts/lanes.py per-commit: one job per provisioned per-commit lane, each with its own last-tested check under its own prefix, runningrun_regression.py --lane.Scripts:
run_regression.pyandgolden_baseline.pytake the endpoint from the lane (a lane withendpoint_id: nullrefuses to run rather than falling back to another lane's endpoint); the lane id travels in the job input and the worker echoes it.scripts/runpod_endpoints.py(status,set-image,create,--dry-run) talks to the control-plane REST v2 API.scripts/lanes.py validateis part of the test suite.Two worker fixes the lane surfaced
errorin a handler's output as the job failing, rejects a dict there (the job-done call returns 400) and stores the output without it, so every execution error came back asexecution_errorwith no detail. The worker now reports underfailureand attaches the last 6 KB of the ComfyUI server log to every failure; the client readsfailure, then the olderror, then the job-level error, so the legacy image keeps working. The SDK is pinned.torch._nativeroutesbmm_outer_product(hit by the Qwen3 and Gemma text encoders) to a Triton kernel, and Triton compiles its CUDA driver shim with the system compiler on first use. The slim image had none, so seven of nine workflows failed atCLIPTextEncodewhile SDXL and FLUX passed.gccandlibc6-devare in the image now.Verified
python -m pytest scripts/tests -q: 217 passed (12 new intest_lanes.py, 1 intest_submit_and_poll.py).build-image.ymldispatches; the second and third runs repointed endpoint2192t0ar23kdb5automatically (visible inrunpod_endpoints.py status).runpod_endpoints.py create --writefromendpoint_defaults; workers come up on RTX 4090s in EU-RO-1 with the 200 GB volume mounted.env.image_shaequal to the branch head.After merge
The push to main rebuilds the image and repoints the lane; the cron picks the lane up on its next tick and ci.comfy.org lists it after the first publish. Legacy stays primary until the new lane has a week of history, then
primaryflips in a one-line change.🔄 This issue represents a GitHub Pull Request. It cannot be merged through Gitea due to API limitations.