Repository navigation
ci: compile every declared CUDA backend - #101
Draft
xiaoyu-xyz wants to merge 2 commits into
Draft
xiaoyu-xyz wants to merge 2 commits into
xiaoyu-xyz wants to merge 2 commits into
Conversation
`@tilelang.jit` was called without a target, so TileLang resolved one at
export time: `determine_target("auto")` returns `auto_detect_target()`,
which yields the bare string `cuda`, and TVM's CUDA codegen then picks the
architecture from whatever it can detect. With no device attached it cannot
detect the CUDA version, warns, and defaults to `-arch=sm_50`, which nvcc
rejects with `Unsupported gpu architecture 'sm_50'`. CUDA 12.6 fails too,
elsewhere, inside TileLang's own `tl_templates/cuda/common.h`.
So the export only ran where a Hopper card was present, which is not a
property a build should have. Every other layer already states the target:
`tools/export.py` compiles the generated source with
`-gencode=arch=compute_90a,code=sm_90a`, `tools/build.py` records
`"arch": "sm_90a"`, `build.sh` refuses any other capability, and the READMEs
say `sm_90a` only.
`determine_target` rejects a target string that carries options ("Pass
target options as a dict"), so the target is given as a mapping.
Verified by building the backend on a runner with no GPU: export and link
both complete.
The contract's Tier 2 -- build each backend, so a kernel that stops compiling cannot land -- was the only tier with no wiring at all, so nothing in CI has ever compiled a `.cu` file. The job reads the manifests, runs each backend's own build script with an output directory and its default compute capability, and requires the library the manifest names. Adding a backend needs no edit here, and one failure does not hide the others. No GPU and no self-hosted runner: nvcc cross-compiles for a target it is not running on, and nothing here runs what it builds. The container carries nvcc and cuBLASLt, and the TileLang the Laya recipe records is installed because that backend's export needs it. Depends on the TileLang target pin in the preceding commit: without it Laya's export falls back to sm_50 and this job cannot be green.
This was referenced Oct 8, 2026
This branch has not been deployed
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Purpose
contract.mddescribes three validation tiers. Tier 1 is the contract checker, Tier 3 needs a card — and Tier 2, compile, has never been wired up, so nothing in CI has compiled a.cufile.This adds it. The job reads the manifests, runs each backend's own build script with an output directory and its default compute capability, and requires the library the manifest names. Adding a backend needs no edit here, and one failure does not hide the others: the whole set is reported before the job fails.
No GPU and no self-hosted runner.
nvcccross-compiles for a target it is not running on, and nothing here runs what it builds. The container carries nvcc and cuBLASLt, and the TileLang the Laya recipe records is installed because that backend's export needs it. Only Tier 3, which executes kernels, needs hardware.Test Result
== laya: build.sh -> liblaya_cuda.so (sm_90),built 1 backend(s), job green.scoringand cuda: declare the qwen3_5 backend #77'sqwen3_5manifests also present, all three build. That run also caught a real compile error mid-iteration — an undefinedCS_SCORE_ABI_VERSION— which is the failure mode this exists for.Merge order
Depends on the preceding commit, the Laya TileLang target pin: without it Laya's export falls back to
-arch=sm_50and this job cannot be green. This is stacked, so it shows that commit too until it lands.Related: Tier 1 for this contract is #25, and the
qwen3_5manifest is #77.