On an NVIDIA DGX Spark (GB10, Grace-Blackwell, aarch64, CUDA compute sm_121) neither setup.sh nor the Dockerfile produces a working install, because both hardcode x86_64 artifacts. It does run well on this hardware once those two assumptions are removed.
What breaks
- flash-attn wheel is
linux_x86_64. setup.sh (and the Dockerfile) install
flash_attn-2.8.3+cu12torch2.8...-linux_x86_64.whl. On aarch64 that wheel can't install; the
Dockerfile additionally fails the build rather than falling through. There is no published
arm64 flash-attn wheel, and a source build is impractical here.
- Torch install targets the x86 CUDA wheels.
pip install torch==2.8.* --index-url .../cu128
isn't guaranteed to give a build with sm_121 kernels on aarch64.
What works (the fix)
- Force SDPA:
VIBEVOICE_ATTN_IMPLEMENTATION=sdpa. The bundled core falls back cleanly; quality
is unaffected for our use.
- Don't reinstall torch — reuse one already known-good for the GPU. We base the image on a
container whose torch already runs on sm_121/aarch64 (in our case the pinned vllm/vllm-openai
image) and simply pip install -e . + requirements-api.txt on top, skipping the setup.sh
torch/flash-attn steps entirely. The core's transformers==4.51.3 pin downgrades the base image's
transformers, which is fine for a TTS-only container.
- Everything else (voices,
/v1/audio/speech, opus output) works unmodified.
Suggestion
A small arm64 branch in setup.sh/Dockerfile that (a) skips the flash-attn wheel on non-x86 and
relies on the existing SDPA fallback, and (b) doesn't hard-fail the build when flash-attn is absent,
would make Spark/GB10 a supported target. Happy to send a PR if useful.
Environment: DGX Spark, GB10 (Grace-Blackwell), aarch64, CUDA 13 / driver sm_121, Docker.
VibeVoice-Large (bf16) via SDPA — real-time-ish, produces clean audio.
On an NVIDIA DGX Spark (GB10, Grace-Blackwell,
aarch64, CUDA computesm_121) neithersetup.shnor theDockerfileproduces a working install, because both hardcode x86_64 artifacts. It does run well on this hardware once those two assumptions are removed.What breaks
linux_x86_64.setup.sh(and theDockerfile) installflash_attn-2.8.3+cu12torch2.8...-linux_x86_64.whl. On aarch64 that wheel can't install; theDockerfileadditionally fails the build rather than falling through. There is no publishedarm64 flash-attn wheel, and a source build is impractical here.
pip install torch==2.8.* --index-url .../cu128isn't guaranteed to give a build with
sm_121kernels on aarch64.What works (the fix)
VIBEVOICE_ATTN_IMPLEMENTATION=sdpa. The bundled core falls back cleanly; qualityis unaffected for our use.
container whose torch already runs on
sm_121/aarch64 (in our case the pinnedvllm/vllm-openaiimage) and simply
pip install -e .+requirements-api.txton top, skipping thesetup.shtorch/flash-attn steps entirely. The core's
transformers==4.51.3pin downgrades the base image'stransformers, which is fine for a TTS-only container.
/v1/audio/speech, opus output) works unmodified.Suggestion
A small arm64 branch in
setup.sh/Dockerfilethat (a) skips the flash-attn wheel on non-x86 andrelies on the existing SDPA fallback, and (b) doesn't hard-fail the build when flash-attn is absent,
would make Spark/GB10 a supported target. Happy to send a PR if useful.
Environment: DGX Spark, GB10 (Grace-Blackwell), aarch64, CUDA 13 / driver sm_121, Docker.
VibeVoice-Large (bf16) via SDPA — real-time-ish, produces clean audio.