[Bug] `tilelang==0.1.11` pin in the `automodel` extra is x86-only; on aarch64 (GB200) the Automodel venv gets tilelang 0.1.12, `tile_kernels` cannot import, and DeepSeek-V4.1 training fails at the first forward
I maintainer di solito rispondono entro 2 giorni
Valutazione
- Difficoltà
- 2/5
- Tempo stimato
- 1-3 ore
- Idoneità per principianti
- 35/100
- Tipo di issue
- Bug
- Chiarezza
- Specificata chiaramente
- Stato di attività
- Attiva
- Ambito
- build-system
Direzione di ricerca
The fix lives in pyproject.toml: the automodel and sglang extras pin tilelang==0.1.11 only when platform_machine is x86_64. Read the markers there and the aarch64 resolution recorded in uv.lock. Done means the marker also matches aarch64 and the lock is regenerated; PR #4755 already exists, so review or verify that PR rather than starting a new change.
Scritto dal modello di indicizzazione a partire dal testo della issue.
Descrizione
Describe the bug
pyproject.toml pins TileLang for the Automodel worker venv only on x86:
automodel = [
...
# Automodel's FLA kernels require this TileLang version on Hopper.
# Keep this scoped to the automodel fork; sglang intentionally pins TileLang 0.1.8.
"tilelang==0.1.11; sys_platform == 'linux' and platform_machine == 'x86_64'",
The base dependency allows tilelang>=0.1.9,<0.1.13 on both architectures and the vllm extra pins 0.1.12, so on
aarch64 the automodel venv resolves tilelang 0.1.12 (uv.lock on main: tilelang 0.1.12 for
platform_machine != 'x86_64' and extra == 'extra-7-nemo-rl-automodel').
nemo-automodel[moe] pins tile-kernels==1.0.0, and tile_kernels/__init__.py cannot be imported on tilelang 0.1.12:
File ".../site-packages/tile_kernels/quant/common.py", line 7, in <module>
from tilelang.utils.target import determine_target
ModuleNotFoundError: No module named 'tilelang.utils.target'
(determine_target moved to tilelang.backend.target in 0.1.12 — deepseek-ai/TileKernels#24, open since July.)
Automodel wraps that import in safe_import_from, so _HAS_TILE_KERNELS_SINKHORN silently becomes False. For
DeepSeek-V4.1 that is fatal: deepseek_v41/model.py forces sinkhorn_backend="tilelang" whenever backend.attn == "tilelang" (the recipe setting), and the first policy forward (log-prob computation of step 1) raises
RuntimeError: dsv4 sinkhorn TileLang backend was requested, but the optional kernel is unavailable or inputs do not satisfy CUDA tensors.
File ".../nemo_automodel/components/models/deepseek_v41/layers.py", line 114, in forward
File ".../nemo_automodel/components/models/deepseek_v4/optimized_kernels.py", line 194, in dsv4_sinkhorn_normalize
File ".../nemo_automodel/components/models/deepseek_v4/optimized_kernels.py", line 124, in _should_use_tilelang
The pin's own rationale ("Automodel's FLA kernels require this TileLang version") is not architecture-specific, and
Automodel main additionally caps apache-tvm-ffi<=0.1.11 because 0.1.12 "double-registers TVM FFI TypeAttrs and
SIGABRTs the tilelang kernels" — a second reason to keep the Automodel venv on the 0.1.11 stack on every architecture.
The same x86-only marker is on the sglang extra's tilelang==0.1.11 line.
Steps/Code to reproduce bug
On an aarch64 host (GB200), from a main checkout:
uv sync --frozen --extra automodel
uv run --extra automodel python - <<'PY'
import tilelang; print(tilelang.__version__) # 0.1.12
import tile_kernels # ModuleNotFoundError: tilelang.utils.target
PY
End to end: examples/configs/recipes/llm/dapo-deepseek-v4.1-12n4g-fsdp2tp1-ep48-colocated-stream-adam.yaml
(branch deepseek-v4.1-support, 12 × 4 GB200) fails in policy.get_logprobs of step 1 with the error above.
Installing tilelang==0.1.11 into the Automodel venv (uv pip install --no-deps tilelang==0.1.11) makes
tile_kernels import and the recipe trains (31 steps, three validations, on our cluster).
Expected behavior
The automodel (and sglang) extras should pin tilelang==0.1.11 on aarch64 as well:
"tilelang==0.1.11; sys_platform == 'linux' and (platform_machine == 'x86_64' or platform_machine == 'aarch64')",
(or drop the platform_machine clause entirely, as the vllm extra already does for 0.1.12), and uv.lock
regenerated. A PR with this change is attached.
Environment overview
- NeMo RL
deepseek-v4.1-support@8e056c2f(same pyproject lines onmain@540d2568, 2026-10-16) - aarch64 GB200 NVL72, 4 GPUs per node; container derived from
nvcr.io/nvidia/nemo-rl:v0.7.0with the branch's venvs
rebuilt byuv sync --frozen(uv 0.11.28, Python 3.13.14) - Automodel venv: torch 2.11.0+cu130, nemo-automodel 0.7.0+aef1fbfc, tile-kernels 1.0.0, tilelang 0.1.12 (broken) /
0.1.11 (working)
Additional context
- deepseek-ai/TileKernels#24 tracks the import failure; tile-kernels 2.0.0/2.1.0 (2026-09-30 / 2026-10-14) move to
tilelang>=0.1.15andtorch>=2.13, so they are not a drop-in replacement for the 1.0.0 pin. - x86 Hopper users never see this because the marker matches there; the failure is aarch64-only.
- Lingua principale
- Python
- Stelle
- 2.1k
- Fork
- 612
- Merge medio
- 3g 14h
- PR unite (30g)
- 267
Preparare l'ambiente
- Nessun Dockerfile né file Docker Compose
- Ha un modello di pull request
- Leggi la guida per i contributori
Come iniziare
- Leggi tutta la issue e poi la guida ai contributi del progetto.
- Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
- Fai un fork del repository e lavora su un branch.
- Apri una pull request che faccia riferimento al numero della issue.
Altre issue di NVIDIA-NeMo/RL
-
bbox_giou_reward is unbounded: reversed-corner or NaN boxes score far above 1 (RefCOCO env)Forse già presa @jimmy-holdout l’ha presa 1 giorno fa. Apertabug community-request
Difficoltà 2/5 1-3 ore Idoneità per principianti 73/100
NVIDIA-NeMo/RL#4871 ·
I maintainer di solito rispondono entro 2 giorni
-
bug
Difficoltà 2/5 1-3 ore Idoneità per principianti 72/100
NVIDIA-NeMo/RL#4800 ·
I maintainer di solito rispondono entro 2 giorni
-
r0.8.0: pyrefly rejects captured optional config in make_policy_factory, blocking CIForse già presa Una pull request collegata a questa issue è aperta o già unita. Apertabug
Difficoltà 2/5 1-3 ore Idoneità per principianti 78/100
NVIDIA-NeMo/RL#4599 ·
I maintainer di solito rispondono entro 2 giorni
-
Feature
Difficoltà 2/5 Mezza giornata Idoneità per principianti 78/100
NVIDIA-NeMo/RL#4016 ·
I maintainer di solito rispondono entro 2 giorni
-
bug
Difficoltà 2/5 1-3 ore Idoneità per principianti 72/100
NVIDIA-NeMo/RL#2948 ·
I maintainer di solito rispondono entro 2 giorni
Tutte le issue di NVIDIA-NeMo/RL
Issue simili
-
Project submission:Aperta
Difficoltà 1/5 Meno di un'ora Idoneità per principianti 72/100
slavakurilyak/awesome-ai-agents#845 ·
I maintainer di solito rispondono entro 1 giorno
-
tests: pin that the atomic writers in utils/paths.py stage the temporary file in the target's directoryForse già presa Una pull request collegata a questa issue è aperta o già unita. Apertadifficulty:2 enhancement good first issue
Difficoltà 1/5 1-3 ore Idoneità per principianti 92/100
MakazhanAlpamys/Soup#2178 ·
I maintainer di solito rispondono entro 1 giorno
-
[BUG] dcg.waggr permutation p-values are folded twice, so near-zero scores get the smallest p-valuesAperta
Difficoltà 2/5 1-3 ore Idoneità per principianti 75/100
scverse/rapids-singlecell#854 ·
I maintainer di solito rispondono entro 1 giorno
-
Slang input: int8_t4_packed and uint8_t4_packed are copied into CrossGLForse già presa @ninglinLiu l’ha presa oggi. Apertaarea:frontend backend:slang bug direction:input
Difficoltà 2/5 1-3 ore Idoneità per principianti 70/100
I maintainer di solito rispondono entro 1 giorno
-
random_elements(unique=True) on an OrderedDict: ZeroDivisionError once only zero weights remain, AssertionError with use_weighting=FalseForse già presa Una pull request collegata a questa issue è aperta o già unita. Aperta
Difficoltà 2/5 1-3 ore Idoneità per principianti 85/100
I maintainer di solito rispondono entro 13 giorni