NVIDIA / NVIDIA/NeMo-Speech.cpp

[v0.1.0] SIGILL on AVX2-only machines

Open
#23 0 comments 0 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

Dominant language
C++
Stars
117
Forks
29
Avg merge
4d 15h
Merged PRs (30d)
6

Description

Hello 👋

The published CPU tarball for v0.1.0 dies with SIGILL on a machine that has AVX2 but no AVX-512. The name linux-x86_64-cpu reads as a generic x86_64 build, so I didn't expect that.

Setup

  • nemo-speech-0.1.0-linux-x86_64-cpu.tar.gz from the GitHub release
  • Host: AVX2 + FMA + BMI2, no AVX-512 (x264: MMX2 SSE2Fast SSSE3 SSE4.2 AVX FMA3 BMI2 AVX2)
  • Parakeet TDT 0.6B GGUF via nemo_speech_asr_recognize_f32, and streaming Nemotron (same ggml)

Model load is fine. The first real decode kills the process:

SIGILL: illegal instruction
signal arrived during cgo execution
instruction bytes: 0x62 0xf1 0x7f 0x28 0x7f 0x44 0x24 0x2 ...

0x62 is EVEX (AVX-512). ggml also prints AMX is not ready to be used! just before that, but it still ends up on a path that faults.

Rebuilding from source with GGML_NATIVE=OFF and AVX-512 disabled works on this box, so it looks like a packaging issue rather than the models or the C API.

I poked at the public tree a bit. There is no GitHub Actions job that produces these tarballs (only pre-commit), so I can't see the exact release flags. cpu-asr in CMakePresets.json never sets GGML_NATIVE, and ggml defaults that to ON (-march=native) unless you turn it off. The in-tree Docker build does pass -DGGML_NATIVE=OFF, but that's the CUDA image, not this CPU archive.

Best guess: the CPU artifact was configured like cmake --preset cpu-asr on a builder that has AVX-512, so native got baked in.

I'd expect a *-linux-x86_64-cpu* archive to run on AVX2, or for the release notes / filename to say AVX-512 is required.

For the actual binaries, something like whisper.cpp / llama.cpp portable CPU builds would help: GGML_NATIVE=OFF, AVX/AVX2/FMA on, AVX-512 off. Two tarballs (avx2 / avx512) would also be fine if that's easier.

Thomas

Contributor guide

Open the contributing guide

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

Research direction

Start with the cpu-asr preset in CMakePresets.json and compare its GGML_NATIVE settings with the in-tree Docker build, which passes GGML_NATIVE=OFF. Trace how the v0.1.0 CPU tarball was configured, then verify that the published binaries run through a real decode on an AVX2-only host without SIGILL.

Written by the indexing model from the issue text.

Assessment

Tech stack
cmake, cpp
Domain
build-system, release
Issue type
Bug
Difficulty
3/5
Estimated time
1-2 days
Activity status
Active
Clarity
Mostly clear
Newbie friendliness
58/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.