Skip to content

[Windows ARM64] Enable native CUDA serving on SM12x - #82

Closed
khmyznikov wants to merge 6 commits into
SystemPanic:vllm-for-windowsfrom
khmyznikov:contrib/windows-arm64-native-cuda
Closed

[Windows ARM64] Enable native CUDA serving on SM12x#82
khmyznikov wants to merge 6 commits into
SystemPanic:vllm-for-windowsfrom
khmyznikov:contrib/windows-arm64-native-cuda

Conversation

@khmyznikov

Copy link
Copy Markdown

Purpose

Enable native CUDA serving on Windows 11 ARM64 with NVIDIA SM12x GPUs.

Before this change, the Windows fork could not build and package a complete native ARM64 CUDA wheel or run the Rust frontend and SM120 kernels without platform workarounds.

This PR:

  • Adds Windows ARM64 CUDA discovery, dependency gating, and wheel packaging.
  • Adds native Windows process, listener, and signal handling to the Rust frontend.
  • Works around the MSVC ARM64 ABI limitation for aligned CUTLASS parameters.
  • Builds FlashAttention 2 with native sm_120 SASS.
  • Enables FA4 only when SM12x and the required CuTeDSL runtime are available.
  • Synchronizes safetensors CUDA copies before closing the mmap on integrated GPUs.

The six commits were developed and reviewed independently in the contributor fork:

  1. Build and packaging foundation
  2. Rust Windows support
  3. SM120 CUTLASS indirect launch
  4. Native SM120 FA2 SASS
  5. FA4 runtime and SM12x gating
  6. Windows UMA safetensors synchronization

This supersedes #77 with a clean, descriptive head branch and the completed validation results.

No overlapping SystemPanic issue or PR was found. Two unrelated local fixes were deliberately excluded because they overlap upstream vLLM #50393 and #48956.

Test Plan

Validated on Windows 11 ARM64 with an NVIDIA RTX Spark N1X (SM12.1), CUDA 13.4, CPython 3.13 ARM64, and the native ARM64 MSVC toolchain.

cargo check --workspace --locked
cargo fmt --all -- --check

uv run --no-sync python -m pytest `
  --confcutdir=tests/vllm_flash_attn `
  tests/vllm_flash_attn/test_flash_attn_interface.py -q

uv run --no-sync python -m pytest `
  --confcutdir=tests/model_executor `
  tests/model_executor/test_weight_utils.py::test_synchronize_safetensors_mmap_on_windows_integrated_gpu -q

$env:VLLM_TARGET_DEVICE = "cuda"
$env:TORCH_CUDA_ARCH_LIST = "12.0"
$env:VLLM_REQUIRE_RUST_FRONTEND = "1"
$env:VLLM_BUILD_DEEPGEMM = "0"
$env:VLLM_BUILD_QUTLASS = "0"
$env:VLLM_BUILD_FLASHMLA = "0"
$env:VLLM_BUILD_FMHA_SM100 = "0"
$env:VLLM_BUILD_TML_FA4 = "0"
uv run --no-sync python -m build --wheel --no-isolation --skip-dependency-check

The resulting wheel was extracted and inspected with dumpbin /headers and cuobjdump --list-elf, then smoke-imported from the extracted artifact.

Test Result

  • CMake/Ninja completed all 189 native targets.
  • Built vllm-0.26.1.dev6+g00334106a.cu134-cp313-cp313-win_arm64.whl.
  • All seven .pyd files and vllm-rs.exe report AA64 machine (ARM64).
  • FA2 contains 76 native sm_120.cubin entries.
  • The exact wheel imports vLLM, stable-libtorch, MoE, and FA2 extensions successfully.
  • Rust workspace check and formatting pass.
  • FA4 tests: 6 passed; Ruff passed.
  • UMA synchronization test: 1 passed; Ruff passed.
  • End-to-end loading and generation with unsloth/gemma-4-31B-it-NVFP4 succeeded using native CUTLASS NVFP4 and Triton attention.

No model-quality comparison was run because this platform-enablement change does not modify model implementations, weights, or numerical semantics.

Generated build documentation is intentionally excluded and can be contributed separately after the implementation is accepted.

All commits carry DCO sign-off. AI assistance was used; the contributor reviewed every changed line and validated the resulting native wheel.


Essential Elements of an Effective PR Description Checklist
  • Purpose and scope are documented.
  • Test commands are provided.
  • Native build, binary inspection, unit-test, and model results are provided.
  • Documentation requirements were considered and deferred to a separate change.

Assisted-by: GitHub Copilot
Signed-off-by: Gleb Khmyznikov <6115884+khmyznikov@users.noreply.github.com>
Assisted-by: GitHub Copilot
Signed-off-by: Gleb Khmyznikov <6115884+khmyznikov@users.noreply.github.com>
Assisted-by: GitHub Copilot
Signed-off-by: Gleb Khmyznikov <6115884+khmyznikov@users.noreply.github.com>
Assisted-by: GitHub Copilot
Signed-off-by: Gleb Khmyznikov <6115884+khmyznikov@users.noreply.github.com>
Assisted-by: GitHub Copilot
Signed-off-by: Gleb Khmyznikov <6115884+khmyznikov@users.noreply.github.com>
Assisted-by: GitHub Copilot
Signed-off-by: Gleb Khmyznikov <6115884+khmyznikov@users.noreply.github.com>
@khmyznikov
khmyznikov marked this pull request as draft August 27, 2026 20:40
khmyznikov added a commit to vortex-captain/vllm-windows that referenced this pull request Aug 28, 2026
Port the non-overlapping dependency, Triton 3.8, native artifact, and Rust executable handling from SystemPanic#82.

Assisted-by: GitHub Copilot
Signed-off-by: Gleb Khmyznikov <6115884+khmyznikov@users.noreply.github.com>
@SystemPanic

Copy link
Copy Markdown
Owner

Hi, thank you for your contribution.

I do not have a Windows ARM64 platform to test the proposed changes. Let me see if I can get one to test it.

@khmyznikov

Copy link
Copy Markdown
Author

@SystemPanic we are working on a better patch, vortex-captain#2 I'll likely close this particular PR

@SystemPanic

Copy link
Copy Markdown
Owner

Sure, feel free to open a new PR when you are done with the patch.

In the meantime I will try to acquire a RTX Spark.

@khmyznikov

Copy link
Copy Markdown
Author

@SystemPanic Just in case, we have the device and can run any checks you ask to verify.

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

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants