--- license: cc-by-4.0 language: - en - de - es - fr pipeline_tag: automatic-speech-recognition tags: - automatic-speech-recognition - onnx - directml - nemo - canary base_model: - nvidia/canary-1b-flash --- # NVIDIA canary-1b-flash — DirectML-safe ONNX ONNX export of [nvidia/canary-1b-flash](https://huggingface.co/nvidia/canary-1b-flash) whose **encoder is re-exported in the TorchScript idiom** (`torch.onnx.export(dynamo=False)`), so the model runs on the ONNX Runtime **DirectML EP** (and every other EP). ## Why istupakov's `canary-1b-flash-onnx` encoder is a torch-**dynamo** export. On the DirectML EP it is a two-sided trap (isolated by graph bisection): dynamic shapes crash the Reshape/attention kernels (`MLOperatorAuthorImpl.cpp:2597`, then a D3D12 device-removal `887A0020`), and forcing static shapes fails session creation in `InferAndVerifyOutputSizes` (`:2853`) — both unfixed ORT-DML defects around the dynamo `view` idiom (upstream onnxruntime #26826 / #26944; the DML EP is in maintenance mode). NVIDIA's Parakeet FastConformer, exported via TorchScript, runs fine on DML — so this repo re-exports the **same encoder** the same way. ## What changed - `encoder-model.onnx` (+ `encoder-model.int8.onnx`): re-exported from the `nvidia/canary-1b-flash` NeMo checkpoint via `torch.onnx.export(dynamo=False, opset=17)`, same I/O contract as istupakov (`audio_signal[B,128,T]`, `length[B]` → `encoder_embeddings[B,S,1024]`, `encoder_mask[B,S]`). Numerically identical to istupakov's encoder on CPU (max|Δ| ≈ 4e-6 — export-tracer float noise). - `decoder-model.onnx` / `decoder-model.int8.onnx` / `config.json` / `vocab.txt`: **unchanged** from [istupakov/canary-1b-flash-onnx](https://huggingface.co/istupakov/canary-1b-flash-onnx) — the DML crash was encoder-only; the AED decoder is byte-for-byte the same. Produced by [WinSTT](https://github.com/dahshury/WinSTT)'s `canary_encoder_export.py`.