Skip to content

build: pin tilelang 0.1.11 for the automodel and sglang extras on aarch64 too - #4755

Open
linmuchuiyang wants to merge 2 commits into
NVIDIA-NeMo:mainfrom
linmuchuiyang:fix/tilelang-aarch64-marker
Open

linmuchuiyang wants to merge 2 commits into
NVIDIA-NeMo:mainfrom
linmuchuiyang:fix/tilelang-aarch64-marker

Conversation

@linmuchuiyang

Copy link
Copy Markdown

What does this PR do?

Closes #4754.

Extends the platform_machine == 'x86_64' marker on the two tilelang==0.1.11 pins (automodel and sglang extras)
to aarch64, and regenerates uv.lock accordingly.

Why

On aarch64 the Automodel worker venv currently resolves tilelang 0.1.12 (base range >=0.1.9,<0.1.13; the pin only
applies on x86). tile-kernels==1.0.0, pinned by nemo-automodel[moe], cannot be imported on 0.1.12
(tilelang.utils.target.determine_target moved to tilelang.backend.target; deepseek-ai/TileKernels#24). Automodel
swallows the import error, _HAS_TILE_KERNELS_SINKHORN becomes False, and DeepSeek-V4.1 — which forces
sinkhorn_backend="tilelang" whenever backend.attn == "tilelang" — fails at the first log-prob forward:

RuntimeError: dsv4 sinkhorn TileLang backend was requested, but the optional kernel is unavailable or inputs do not satisfy CUDA tensors.

The pin's rationale is not x86-specific (Automodel's FLA kernels, and Automodel main's apache-tvm-ffi<=0.1.11 cap
against the 0.1.12 SIGABRT). The vllm extra already pins its tilelang on both architectures.

Validation

  • aarch64, 16 × 4 GB200, deepseek-v4.1-support recipe
    (dapo-deepseek-v4.1-12n4g-fsdp2tp1-ep48-colocated-stream-adam.yaml): with tilelang 0.1.11 in the Automodel venv the
    recipe trains 31 steps with validations at steps 10/20/30 (AIME-2024 accuracy 0.479 → 0.496 → 0.579); with 0.1.12 it
    fails at step 1 as above.
  • uv run --extra automodel python -c "import tile_kernels" succeeds on aarch64 after the change.
  • x86 is unaffected (the resolved version there was already 0.1.11).

Lock

uv.lock regenerated with uv lock (uv 0.11.28, on aarch64, against main @ 540d2568, 568 packages resolved).
Changes are confined to the consequences of the two markers: the tilelang entries of the nemo-rl dependencies
(platform_machine != 'x86_64' with the automodel/sglang extras: 0.1.12 → 0.1.11), the tile-kernels and
nemo-automodel[moe] requirement markers, and the now-simplified markers of six packages that were conditioned on the
same expression (apache-tvm-ffi, cloudpickle, ml-dtypes, numpy, psutil, setuptools, plus the
tilelang 0.1.11/0.1.12 resolution-marker blocks). No package versions other than tilelang change.

…ch64 too

The `tilelang==0.1.11` pins of the `automodel` and `sglang` extras carry a
`platform_machine == 'x86_64'` marker, so on aarch64 (GB200) the Automodel venv
resolves tilelang 0.1.12 from the base `tilelang>=0.1.9,<0.1.13` range.
`tile-kernels==1.0.0` (pinned by nemo-automodel[moe]) cannot import on 0.1.12
(`tilelang.utils.target` moved; deepseek-ai/TileKernels#24), Automodel's
`_HAS_TILE_KERNELS_SINKHORN` becomes False, and DeepSeek-V4.1 -- which forces the
TileLang sinkhorn backend under `backend.attn: tilelang` -- fails at the first
log-prob forward with "dsv4 sinkhorn TileLang backend was requested, but the
optional kernel is unavailable".

The pin's rationale (FLA kernels, and Automodel's apache-tvm-ffi<=0.1.11 cap
against the 0.1.12 SIGABRT) is not architecture-specific. Extend both markers
to aarch64, matching the base dependency and the vllm extra, and regenerate
uv.lock (uv 0.11.28 on aarch64): only the tilelang entries for
platform_machine != 'x86_64' and the markers that depended on the same
expression change.

Verified on 16 x 4 GB200: with tilelang 0.1.11 in the Automodel venv the V4.1
DAPO recipe trains (31 steps, validations at steps 10/20/30).

Signed-off-by: linmuchuiyang <6169320+linmuchuiyang@users.noreply.github.com>
@copy-pr-bot

copy-pr-bot Bot commented Oct 16, 2026

Copy link
Copy Markdown

This pull request requires additional validation before any workflows can run on NVIDIA's runners.

Pull request vetters can view their responsibilities here.

Contributors can view more details about this message here.

@sharonyu-115 sharonyu-115 added the CI:L1 Run doctests, unit tests, and functional tests label Nov 2, 2026
@sharonyu-115

Copy link
Copy Markdown
Contributor

/ok to test cbd35bf

@sharonyu-115 sharonyu-115 left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks for contributing the ARM64 extension to the Automodel and SGLang TileLang 0.1.11 pins, addressing the Automodel import incompatibility.

(C1) Commit the formatter output to resolve the failing lint check. This is a formatting failure introduced by the change. GPU tests were skipped.

Generated by Codex

Comment thread pyproject.toml
"flashinfer-jit-cache==0.6.14",
"transformers==5.12.1",
"tilelang==0.1.11; sys_platform == 'linux' and platform_machine == 'x86_64'",
"tilelang==0.1.11; sys_platform == 'linux' and (platform_machine == 'x86_64' or platform_machine == 'aarch64')",

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

C1 · 1 action item.
TL;DR — P3: commit the Taplo formatting changes to unblock CI.

The longer platform marker changes Taplo's alignment of the inline comments on lines 192–193. The lint job fails because the formatter modifies those lines.

AI-1

Action: Run uv run --group dev pre-commit run taplo-format --files pyproject.toml and commit the resulting changes. The formatter edits lines 192–193 outside this PR's diff, so an in-place suggestion cannot cover the fix.

@svcnvidia-nemo-ci svcnvidia-nemo-ci removed the waiting-on-maintainers Waiting on maintainers to respond label Nov 2, 2026

This branch has not been deployed

No deployments
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

CI:L1 Run doctests, unit tests, and functional tests community-request

Projects

None yet

3 participants