brazley commited on
Commit
aef7a1a
·
verified ·
1 Parent(s): 80d64c6

Add model card, NOTICE, and both governing licenses

Browse files
LICENSE ADDED
@@ -0,0 +1,11 @@
 
 
 
 
 
 
 
 
 
 
 
 
1
+ This repository is distributed under two upstream licenses, which apply to
2
+ different parts of the model. Both must be complied with.
3
+
4
+ NVIDIA Open Model Agreement -> LICENSE.Omni-NVIDIA-Open-Model-Agreement.pdf
5
+ Applies to the vision tower, audio tower, projection layers, and all
6
+ modeling / configuration / processing / tokenizer code.
7
+
8
+ OpenMDW-1.1 -> LICENSE.Lightning-OpenMDW-1.1
9
+ Applies to the language-model tower and the speculative drafter.
10
+
11
+ See NOTICE for attribution, and the model card for full provenance.
LICENSE.Lightning-OpenMDW-1.1 ADDED
@@ -0,0 +1,51 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved.
2
+
3
+ OpenMDW License Agreement, version 1.1 (OpenMDW-1.1)
4
+
5
+ By exercising rights granted to you under this agreement, you accept and agree
6
+ to its terms.
7
+
8
+ As used in this agreement, "Model Materials" means the materials provided to
9
+ you under this agreement, consisting of: (1) one or more machine learning
10
+ models (including architecture and parameters); and (2) all related artifacts
11
+ (including associated data, documentation and software) that are provided to
12
+ you hereunder.
13
+
14
+ Subject to your compliance with this agreement, permission is hereby granted,
15
+ free of charge, to deal in the Model Materials without restriction, including
16
+ under all copyright, patent, database, and trade secret rights included or
17
+ embodied therein.
18
+
19
+ If you distribute any portion of the Model Materials, you shall retain in your
20
+ distribution (1) a copy of this agreement, and (2) all copyright notices and
21
+ other notices of origin included in the Model Materials that are applicable to
22
+ your distribution.
23
+
24
+ If you file, maintain, or voluntarily participate in a lawsuit against any
25
+ person or entity asserting that the Model Materials directly or indirectly
26
+ infringe any patent or copyright, then all rights and grants made to you
27
+ hereunder are terminated, unless that lawsuit was in response to a
28
+ corresponding lawsuit first brought against you.
29
+
30
+ This agreement does not impose any restrictions or obligations with respect to
31
+ any use, modification, or sharing of any outputs generated by using the Model
32
+ Materials.
33
+
34
+ THE MODEL MATERIALS ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
35
+ OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
36
+ FITNESS FOR A PARTICULAR PURPOSE, TITLE, NONINFRINGEMENT, ACCURACY, OR THE
37
+ ABSENCE OF LATENT OR OTHER DEFECTS OR ERRORS, WHETHER OR NOT DISCOVERABLE, ALL
38
+ TO THE GREATEST EXTENT PERMISSIBLE UNDER APPLICABLE LAW.
39
+
40
+ YOU ARE SOLELY RESPONSIBLE FOR (1) CLEARING RIGHTS OF OTHER PERSONS THAT MAY
41
+ APPLY TO THE MODEL MATERIALS OR ANY USE THEREOF, INCLUDING WITHOUT LIMITATION
42
+ ANY PERSON'S COPYRIGHTS OR OTHER RIGHTS INCLUDED OR EMBODIED IN THE MODEL
43
+ MATERIALS; (2) OBTAINING ANY NECESSARY CONSENTS, PERMISSIONS OR OTHER RIGHTS
44
+ REQUIRED FOR ANY USE OF THE MODEL MATERIALS; OR (3) PERFORMING ANY DUE
45
+ DILIGENCE OR UNDERTAKING ANY OTHER INVESTIGATIONS INTO THE MODEL MATERIALS OR
46
+ ANYTHING INCORPORATED OR EMBODIED THEREIN.
47
+
48
+ IN NO EVENT SHALL THE PROVIDERS OF THE MODEL MATERIALS BE LIABLE FOR ANY CLAIM,
49
+ DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
50
+ OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE MODEL MATERIALS, THE
51
+ USE THEREOF OR OTHER DEALINGS THEREIN.
LICENSE.Omni-NVIDIA-Open-Model-Agreement.pdf ADDED
Binary file (66.8 kB). View file
 
NOTICE ADDED
@@ -0,0 +1,30 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ Licensed by NVIDIA Corporation under the NVIDIA Open Model Agreement.
2
+
3
+ This model is a derivative work incorporating material from:
4
+
5
+ nvidia/Nemotron-3-Nano-Omni-30B-A3B-Reasoning-NVFP4
6
+ Copyright (c) 2025, NVIDIA CORPORATION. All rights reserved.
7
+ Licensed under the NVIDIA Open Model Agreement.
8
+ See LICENSE.Omni-NVIDIA-Open-Model-Agreement.pdf
9
+
10
+ nvidia/NVIDIA-Nemotron-3.5-Lightning-30B-A3B-NVFP4
11
+ nvidia/NVIDIA-Nemotron-3.5-Lightning-30B-A3B-NVFP4-DSpark
12
+ Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved.
13
+ Licensed under the OpenMDW License Agreement, version 1.1 (OpenMDW-1.1).
14
+ See LICENSE.Lightning-OpenMDW-1.1
15
+
16
+ Modeling, configuration and processing code redistributed with this model
17
+ retains the copyright notices of its original authors, including:
18
+
19
+ Copyright (c) 2024-2025, NVIDIA CORPORATION. All rights reserved.
20
+ Copyright 2024 AI21 Labs Ltd.
21
+ Copyright 2024 HuggingFace Inc. team.
22
+ Copyright 2025 The Qwen team, Alibaba Group and the HuggingFace Inc. team.
23
+
24
+ Those files are licensed under the Apache License, Version 2.0, except
25
+ configuration_radio.py, which carries NVIDIA's proprietary notice and is
26
+ redistributed under the NVIDIA Open Model Agreement covering the work of
27
+ which it forms part.
28
+
29
+ This model is not an official NVIDIA release and is not endorsed by,
30
+ affiliated with, or supported by NVIDIA Corporation.
README.md CHANGED
@@ -1,3 +1,567 @@
1
  ---
2
- license: openmdw-1.1
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
3
  ---
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
  ---
2
+ license: other
3
+ license_name: nvidia-open-model-agreement-and-openmdw-1.1
4
+ license_link: LICENSE
5
+ base_model:
6
+ - nvidia/Nemotron-3-Nano-Omni-30B-A3B-Reasoning-NVFP4
7
+ - nvidia/NVIDIA-Nemotron-3.5-Lightning-30B-A3B-NVFP4
8
+ - nvidia/NVIDIA-Nemotron-3.5-Lightning-30B-A3B-NVFP4-DSpark
9
+ base_model_relation: merge
10
+ library_name: transformers
11
+ pipeline_tag: any-to-any
12
+ tags:
13
+ - multimodal
14
+ - merge
15
+ - nvfp4
16
+ - mixture-of-experts
17
+ - speculative-decoding
18
  ---
19
+
20
+ # Brazley Nemotron 3.5 Lightning Omni
21
+
22
+ **Unofficial model created by Nik Brazley — not an NVIDIA release.**
23
+
24
+ Omni's vision and audio towers on Lightning's text tower: a multimodal variant of
25
+ NVIDIA Nemotron 3.5 Lightning that NVIDIA has not published.
26
+
27
+ > ### Not an NVIDIA release
28
+ >
29
+ > **This is an independent derivative model. It is not an official
30
+ > NVIDIA product, it is not endorsed by, affiliated with, sponsored by, or supported
31
+ > by NVIDIA Corporation, and NVIDIA has not reviewed, validated, or approved it.**
32
+ >
33
+ > NVIDIA has not published a multimodal variant of Nemotron 3.5 Lightning. This model
34
+ > was assembled by Nik Brazley by combining two separately published NVIDIA checkpoints,
35
+ > and the "Brazley" in its name identifies that source. The behaviour of this model is
36
+ > the responsibility of that merge — not of NVIDIA or of either source model.
37
+ >
38
+ > "NVIDIA", "Nemotron", and "DGX Spark" are trademarks of NVIDIA Corporation, used
39
+ > here solely to identify the origin of the source models in accordance with
40
+ > Section 4 of the NVIDIA Open Model Agreement. No trademark rights are claimed
41
+ > and no affiliation is implied.
42
+ >
43
+ > For NVIDIA's official models, see
44
+ > [nvidia/NVIDIA-Nemotron-3.5-Lightning-30B-A3B-NVFP4](https://huggingface.co/nvidia/NVIDIA-Nemotron-3.5-Lightning-30B-A3B-NVFP4)
45
+ > and [nvidia/Nemotron-3-Nano-Omni-30B-A3B-Reasoning-NVFP4](https://huggingface.co/nvidia/Nemotron-3-Nano-Omni-30B-A3B-Reasoning-NVFP4).
46
+
47
+ ## At a Glance
48
+
49
+ | | |
50
+ |---|---|
51
+ | **Total parameters** | 34B (Mamba2-Transformer hybrid MoE + vision and audio encoders) |
52
+ | **Active parameters** | ~3B per token (A3B, inherited from both parents) |
53
+ | **Max context** | 262,144 tokens |
54
+ | **Modalities (in)** | Video, Audio, Image, Text |
55
+ | **Modality (out)** | Text |
56
+ | **Reasoning mode** | On by default; toggle via `enable_thinking` |
57
+ | **Best for** | Multimodal work at Nemotron 3.5 Lightning text quality — image and document understanding, speech transcription, video Q&A |
58
+ | **Speculative decoding** | External DSpark drafter at n=3 — [ships separately](#speculative-drafter), requires a plugin shim |
59
+ | **Minimum GPU (NVFP4)** | 1× DGX Spark (GB10, 128 GB unified memory) |
60
+ | **Precision** | NVFP4 — 5.69 effective bits per weight, 24.4 GB |
61
+
62
+ ## Quick Start Guide
63
+
64
+ ### Model Parameters
65
+
66
+ | Mode | temperature | top_p | top_k | frequency_penalty | max_tokens |
67
+ |------|-------------|-------|-------|-------------------|------------|
68
+ | **Thinking mode** | 0.6 | 0.95 | — | **0.1** | 4096+ |
69
+ | **Instruct mode** | 0.2 | — | 1 | **0.1** | 2048 |
70
+ | **Greedy / reproducible** | 0.0 | — | — | **0.1** | 2048 |
71
+
72
+ Send `frequency_penalty: 0.1` on every request, in every mode.
73
+
74
+ # Model Overview
75
+
76
+ ### Description:
77
+
78
+ Brazley Nemotron 3.5 Lightning Omni is a multimodal model built from two NVIDIA checkpoints. Its architecture, vision tower and audio tower come from [NVIDIA Nemotron 3 Nano Omni V2](https://huggingface.co/nvidia/Nemotron-3-Nano-Omni-30B-A3B-Reasoning-NVFP4); its text tower is [NVIDIA Nemotron 3.5 Lightning](https://huggingface.co/nvidia/NVIDIA-Nemotron-3.5-Lightning-30B-A3B-NVFP4), transplanted whole. NVIDIA publishes Lightning as a text-only model and has not released a multimodal variant of it. Nano Omni carries modality towers that Lightning does not, and the two checkpoints share enough structure that the text tower can be exchanged at the seam between them — this model is the result of trying it.
79
+
80
+ **No training was performed.** Zero gradient steps: no fine-tuning, no distillation, no adapter, no calibration pass over data. The model is a module transplant at the architectural seams, followed by quantization. Every weight is NVIDIA's, copied byte-for-byte from the source safetensors.
81
+
82
+ Because there were no gradient steps, building it has an inference-shaped compute profile rather than a training-shaped one — load, transplant, quantize, validate. That is what put it within reach here: one person and a set of AI agents, working on an M5 MacBook Pro driving a cluster of NVIDIA DGX Spark boxes, Thunderbolt from the Mac to the Sparks and the Spark fabric between the Sparks. DGX Spark is listed above as the minimum GPU for running this model.
83
+
84
+ Everything needed to run it is below — the container, the exact launch command, the sampling parameters, the full quantization composition, and the numbers it was measured at. It is available for commercial use under the terms of both governing licenses. Go and enjoy it.
85
+
86
+ ### License/Terms of Use
87
+
88
+ Governing Terms: use of this model is governed by **both** the [NVIDIA Open Model Agreement](https://www.nvidia.com/en-us/agreements/enterprise-software/nvidia-open-model-agreement/) and the [OpenMDW License Agreement v1.1](https://openmdw.ai/license/1-1/), which apply to different parts of the model. Both must be complied with. Full texts ship in this repository; see [License](#license) for the component breakdown and downstream obligations.
89
+
90
+ **Third-party code loaded at runtime:** this model's `config.json` references [`nvidia/C-RADIOv2-H`](https://huggingface.co/nvidia/C-RADIOv2-H) via `auto_map` for the vision-tower implementation. Loading with `trust_remote_code=True` fetches that code directly from NVIDIA, under the [NVIDIA Open Model License Agreement (June 14, 2024)](https://developer.download.nvidia.com/licenses/nvidia-open-model-license-agreement-june-2024.pdf) — a separate and older agreement from the one governing this model. It is not redistributed here.
91
+
92
+ ### Deployment Geography:
93
+ Global
94
+
95
+ ### Use Case:
96
+ Users who want Nemotron 3.5 Lightning's text behaviour with multimodal input:
97
+ - Document and image understanding where the downstream reasoning is the hard part
98
+ - Speech transcription (ASR) and audio Q&A
99
+ - Video question answering and temporal description
100
+ - Speculative-decoding deployments on a single DGX Spark
101
+
102
+ ### Release Date:
103
+ Hugging Face `08/20/2026` via:
104
+ - [`brazley/Brazley-Nemotron-3.5-Lightning-Omni`](https://huggingface.co/brazley/Brazley-Nemotron-3.5-Lightning-Omni)
105
+ - [`brazley/Brazley-Nemotron-3.5-Lightning-Omni-Drafter`](https://huggingface.co/brazley/Brazley-Nemotron-3.5-Lightning-Omni-Drafter)
106
+
107
+ ## Model Architecture:
108
+
109
+ **Architecture Type:** Mamba2-Transformer Hybrid Mixture of Experts (MoE), multimodal
110
+
111
+ **Resolved architecture:** `NemotronH_Nano_VL_V2`
112
+
113
+ **Network Architecture:**
114
+ - [Nemotron 3.5 Lightning (30B A3B)](https://huggingface.co/nvidia/NVIDIA-Nemotron-3.5-Lightning-30B-A3B-NVFP4) — the text tower, transplanted unmodified. 52 layers, hidden 2688, vocab 131072, 32 heads / 2 KV, head_dim 128.
115
+ - [C-RADIO v2-H](https://huggingface.co/nvidia/C-RADIOv2-H) — vision encoder for image and video frames, from the Nano Omni checkpoint.
116
+ - [Parakeet](https://huggingface.co/nvidia/parakeet-tdt-0.6b-v2) — speech encoder for audio inputs, from the Nano Omni checkpoint.
117
+ - `mlp1` and `sound_projection` — modality projectors, from the Nano Omni checkpoint.
118
+
119
+ **Number of model parameters:** 3.44 × 10^10 (34B total, ~3B active per token)
120
+
121
+ | Component | Parameters | Source |
122
+ |---|---|---|
123
+ | Language model | 32.9B | Nemotron 3.5 Lightning |
124
+ | Vision encoder | 0.65B | Nemotron 3 Nano Omni |
125
+ | Audio encoder | 0.62B | Nemotron 3 Nano Omni |
126
+ | Projectors (`mlp1`) | 0.16B | Nemotron 3 Nano Omni |
127
+
128
+ ## Input(s):
129
+
130
+ **Input Type(s):** Video, Audio, Image, Text
131
+
132
+ **Input Format(s):**
133
+ - Video: mp4
134
+ - Audio: wav, mp3. **Send raw base64 in `input_audio.data` — not a `data:` URL** (see [Notes](#notes))
135
+ - Image: RGB (jpeg, png)
136
+ - Text: String
137
+
138
+ **Input Parameters:**
139
+ - Video: Three-Dimensional (3D)
140
+ - Audio: One-Dimensional (1D)
141
+ - Image: Two-Dimensional (2D)
142
+ - Text: One-Dimensional (1D)
143
+
144
+ **Other Properties Related to Input:**
145
+ - Maximum context length up to 262,144 tokens
146
+ - Language support: English only
147
+
148
+ ## Output(s)
149
+
150
+ **Output Type(s):** Text
151
+
152
+ **Output Format(s):**
153
+ - Text: String
154
+
155
+ **Output Parameters:**
156
+ - Text: One-Dimensional (1D)
157
+
158
+ **Other Properties Related to Output:**
159
+ - Maximum context length up to 262,144 tokens
160
+ - Supports reasoning output with chain-of-thought via `enable_thinking`
161
+ - **Tool calling requires launching with a tool parser** — the reference invocation below does not include one, and a request carrying `tools` returns HTTP 400 until it does
162
+
163
+ ## Software Integration:
164
+
165
+ **Runtime Engine(s):**
166
+ * vLLM 0.27.1
167
+
168
+ **Supported Hardware Microarchitecture Compatibility:**
169
+ * NVIDIA Blackwell (DGX Spark / GB10)
170
+
171
+ **Preferred/Supported Operating System(s):**
172
+ * Linux (aarch64 / ARM64)
173
+
174
+ **Inference Runtimes:**
175
+ * vLLM — verified
176
+ * SGLang — the required sampling parameters are all expressible, but this model has not been served on it
177
+
178
+ This AI model can be embedded as an Application Programming Interface (API) call into the software environment described above.
179
+
180
+ ## Model Version(s):
181
+ `Brazley-Nemotron-3.5-Lightning-Omni`
182
+
183
+ ---
184
+
185
+ ### Download Model Weights
186
+
187
+ | Precision | Technical Name | HuggingFace URL |
188
+ |-----------|---------------|-----------------|
189
+ | NVFP4 | `Brazley-Nemotron-3.5-Lightning-Omni` | https://huggingface.co/brazley/Brazley-Nemotron-3.5-Lightning-Omni |
190
+ | NVFP4 | `Brazley-Nemotron-3.5-Lightning-Omni-Drafter` | https://huggingface.co/brazley/Brazley-Nemotron-3.5-Lightning-Omni-Drafter |
191
+
192
+ ```bash
193
+ pip install -U "huggingface_hub[hf_xet]"
194
+
195
+ WEIGHTS=/path/to/Brazley-Nemotron-3.5-Lightning-Omni
196
+ DRAFTER=/path/to/Brazley-Nemotron-3.5-Lightning-Omni-Drafter
197
+
198
+ hf download brazley/Brazley-Nemotron-3.5-Lightning-Omni --local-dir "$WEIGHTS"
199
+ hf download brazley/Brazley-Nemotron-3.5-Lightning-Omni-Drafter --local-dir "$DRAFTER"
200
+ ```
201
+
202
+ ---
203
+
204
+ ### vLLM
205
+
206
+ > **Required version:** vLLM **0.27.1**.
207
+
208
+ #### Container
209
+
210
+ You will want to build your own image rather than use the upstream one. On a DGX Spark, `vllm/vllm-openai:v0.27.1` cannot compile CPU kernels for ARMv9 — it surfaces as a *multimodal processor* error at startup, and disabling video just moves it to the next modality that compiles. Adding a compiler that knows ARMv9 fixes it, and it is a three-line Dockerfile:
211
+
212
+ ```dockerfile
213
+ FROM vllm/vllm-openai:v0.27.1
214
+ RUN apt-get update && DEBIAN_FRONTEND=noninteractive apt-get install -y g++-12 gcc-12 \
215
+ && rm -rf /var/lib/apt/lists/*
216
+ ENV CXX=g++-12 CC=gcc-12
217
+ RUN pip install --no-cache-dir librosa soundfile # audio path
218
+ ```
219
+
220
+ ```bash
221
+ docker build -t omni-vllm:v0.27.1-gcc12-audio .
222
+ ```
223
+
224
+ This applies to any torch/vLLM container on GB10 with gcc < 13, not only to this model.
225
+
226
+ #### General Invocation (1× DGX Spark)
227
+
228
+ ```bash
229
+ docker run -d --name omni-lightning \
230
+ --gpus all --shm-size 32g --network host --ipc=host \
231
+ -v "${WEIGHTS}:/models/Brazley-Nemotron-3.5-Lightning-Omni:ro" \
232
+ -v "${DRAFTER}:/models/Brazley-Nemotron-3.5-Lightning-Omni-Drafter:ro" \
233
+ -v "${DRAFTER}/nano_omni_eagle3.py:/usr/local/lib/python3.12/dist-packages/nano_omni_eagle3.py:ro" \
234
+ -v "${DRAFTER}/nano_omni_eagle3-0.1.dist-info:/usr/local/lib/python3.12/dist-packages/nano_omni_eagle3-0.1.dist-info:ro" \
235
+ omni-vllm:v0.27.1-gcc12-audio \
236
+ --model /models/Brazley-Nemotron-3.5-Lightning-Omni \
237
+ --served-model-name omni-lightning-nvfp4 \
238
+ --tensor-parallel-size 1 \
239
+ --trust-remote-code \
240
+ --gpu-memory-utilization 0.65 \
241
+ --max-model-len 262144 \
242
+ --reasoning-parser nemotron_v3 \
243
+ --speculative-config '{"method":"dspark","model":"/models/Brazley-Nemotron-3.5-Lightning-Omni-Drafter","num_speculative_tokens":3}' \
244
+ --port 8200
245
+ ```
246
+
247
+ **The two `nano_omni_eagle3` mounts are required for speculative decoding.** vLLM's DSpark path requires the target model to satisfy the `SupportsEagle3` protocol, which the Omni multimodal wrapper does not declare — stock Nano Omni has no speculative-capable text tower, and this one does only because of the Lightning transplant. The shim declares it as a standard `vllm.general_plugins` entry point; no forked engine and no rebuilt image. **Without the mounts the server still starts, serves, and reports healthy, and runs roughly 12 tok/s slower.** Confirm the drafter loaded by checking the log for:
248
+
249
+ ```
250
+ [nano-omni-eagle3] DRAFT WEIGHTS VERIFIED: 118 checkpoint tensors -> 92 draft
251
+ parameters (702.4M elements); 39/39 directly-comparable tensors match the
252
+ checkpoint EXACTLY, 0 mismatches.
253
+ ```
254
+
255
+ To serve without speculative decoding, drop `--speculative-config` and both shim mounts.
256
+
257
+ ##### Key Spark-Specific Flags
258
+
259
+ | Flag | Purpose | Spark Guidance |
260
+ |------|---------|----------------|
261
+ | `--gpus all` | Select GPU | Spark has one GB10; `all` is equivalent to `device=0` |
262
+ | `--gpu-memory-utilization` | Memory ceiling | 0.65 verified. It is a fraction of **total** unified memory, so what actually fits also depends on what the page cache holds at launch — the same value can succeed and later fail on the same machine |
263
+ | `--max-model-len` | Max context | 262144 verified to launch; reduce first if you hit OOM |
264
+ | `--mamba-cache-mode` | Mamba cache | **Silently coerced to `none` when prefix caching is disabled.** vLLM accepts `align`, echoes it back in `non-default args` so it looks applied, then downgrades it. Grep the startup log for coercion warnings — the CLI argument is not the resolved config |
265
+
266
+ Verify the server is ready:
267
+
268
+ ```bash
269
+ curl -sS http://localhost:8200/v1/models | python3 -m json.tool
270
+ ```
271
+
272
+ ---
273
+
274
+ ### API Client (OpenAI-compatible)
275
+
276
+ ```python
277
+ from openai import OpenAI
278
+ client = OpenAI(base_url="http://localhost:8200/v1", api_key="")
279
+ MODEL = "omni-lightning-nvfp4"
280
+ ```
281
+
282
+ **Image Example**
283
+
284
+ ```python
285
+ import base64
286
+
287
+ def image_to_data_url(path: str) -> str:
288
+ with open(path, "rb") as f:
289
+ b64 = base64.b64encode(f.read()).decode("utf-8")
290
+ return f"data:image/jpeg;base64,{b64}"
291
+
292
+ response = client.chat.completions.create(
293
+ model=MODEL,
294
+ messages=[{"role": "user", "content": [
295
+ {"type": "text", "text": "Describe this image in detail."},
296
+ {"type": "image_url", "image_url": {"url": image_to_data_url("example.jpeg")}},
297
+ ]}],
298
+ max_tokens=2048,
299
+ temperature=0.2,
300
+ frequency_penalty=0.1,
301
+ extra_body={"top_k": 1, "chat_template_kwargs": {"enable_thinking": False}},
302
+ )
303
+ print(response.choices[0].message.content)
304
+ ```
305
+
306
+ **Audio Example**
307
+
308
+ ```python
309
+ import base64
310
+
311
+ with open("speech.wav", "rb") as f:
312
+ audio_b64 = base64.b64encode(f.read()).decode("utf-8") # RAW base64, no data: prefix
313
+
314
+ response = client.chat.completions.create(
315
+ model=MODEL,
316
+ messages=[{"role": "user", "content": [
317
+ {"type": "input_audio", "input_audio": {"data": audio_b64, "format": "wav"}},
318
+ {"type": "text", "text": "Transcribe this audio."},
319
+ ]}],
320
+ max_tokens=2048,
321
+ temperature=0.2,
322
+ frequency_penalty=0.1,
323
+ extra_body={"top_k": 1, "chat_template_kwargs": {"enable_thinking": False}},
324
+ )
325
+ print(response.choices[0].message.content)
326
+ ```
327
+
328
+ **Text Example (curl)**
329
+
330
+ ```bash
331
+ curl -sS http://localhost:8200/v1/chat/completions \
332
+ -H "Content-Type: application/json" \
333
+ -d '{"model":"omni-lightning-nvfp4",
334
+ "messages":[{"role":"user","content":"Hello, what can you do?"}],
335
+ "temperature":0.2,"top_k":1,"frequency_penalty":0.1,
336
+ "chat_template_kwargs":{"enable_thinking":false}}' \
337
+ | python3 -c "import sys,json; print(json.load(sys.stdin)['choices'][0]['message']['content'])"
338
+ ```
339
+
340
+ ---
341
+
342
+ ### Reasoning Mode (`enable_thinking`)
343
+
344
+ | Setting | Behavior |
345
+ |---------|----------|
346
+ | **Default (omitted)** | Reasoning is **on**. The full response — reasoning and answer — arrives in `message.reasoning`, and **`message.content` is `null`**. |
347
+ | `"chat_template_kwargs": {"enable_thinking": false}` | Reasoning is **off**. The answer appears in `message.content`. |
348
+
349
+ To disable reasoning on a request, add to the JSON body:
350
+
351
+ ```json
352
+ "chat_template_kwargs": {"enable_thinking": false}
353
+ ```
354
+
355
+ **Read all three channels.** With `--reasoning-parser nemotron_v3`, an OpenAI client that reads only `.content` gets nothing back from a request that returned HTTP 200 with `finish_reason: stop` and billed completion tokens. Accumulate `content`, `reasoning_content` and `reasoning`, and cross-check the total against `usage.completion_tokens` — that way "the model emitted nothing" and "we failed to capture it" cannot produce identical output in your logs. This channel behaviour comes from Nemotron 3.5 Lightning and the `nemotron_v3` parser; the text donor does the same thing under an A/B on both endpoints.
356
+
357
+ **Reasoning and the answer share the `max_tokens` budget.** At `max_tokens: 2048` and `temperature 1.0`, image requests with thinking on returned empty `content` 3 times in 8, each with `finish_reason: length` and a full reasoning channel — median reasoning was 1984 tokens against the 2048 cap. Either raise the budget or send `enable_thinking: false` on that path. See [Best Practices](#best-practices).
358
+
359
+ We recommend thinking mode for tasks that involve reasoning and complex understanding. For video, audio, and omni use cases, try both enabling and disabling thinking for best results.
360
+
361
+ ---
362
+
363
+ <a id="notes"></a>
364
+ ### Notes
365
+
366
+ 1. **`frequency_penalty: 0.1` is required on every request**, in every sampling mode. It is a request parameter, not a launch flag.
367
+ 2. **Reasoning default:** reasoning is on by default and lands in `message.reasoning`, leaving `content` null. Send `enable_thinking: false` if your client reads `content`.
368
+ 3. **Audio input format:** `input_audio.data` takes **raw base64**, not a `data:` URL.
369
+ 4. **Thinking preamble on images:** with thinking left on, image requests may open with a `"Here's a thinking process:"` preamble. Set `enable_thinking: false` for direct image description.
370
+ 5. **Tool calling** requires `--enable-auto-tool-choice` and `--tool-call-parser` at launch. Without them a request carrying `tools` returns HTTP 400 on every turn. Detect this from the engine's own 400 rather than from a hostname — the same engine can be relaunched with a parser.
371
+ 6. **`max_tokens` vs `--max-model-len`:** `max_tokens` caps only the completion. It cannot exceed the server's `--max-model-len`, which is the ceiling for prompt + completion combined.
372
+ 7. **`no_repeat_ngram_size` does not exist** in vLLM 0.27.1 or SGLang. Do not plan around it.
373
+
374
+ ---
375
+
376
+ ## Training, Testing, and Evaluation Datasets:
377
+
378
+ ### Training Dataset:
379
+
380
+ **No training was performed.** This model is a merge of two published NVIDIA checkpoints; every weight is NVIDIA's, copied byte-for-byte from the source safetensors. For the training data behind those weights, see the model cards for [Nemotron 3.5 Lightning](https://huggingface.co/nvidia/NVIDIA-Nemotron-3.5-Lightning-30B-A3B-NVFP4) and [Nemotron 3 Nano Omni](https://huggingface.co/nvidia/Nemotron-3-Nano-Omni-30B-A3B-Reasoning-NVFP4).
381
+
382
+ **Data Modality:** N/A · **Data Collection Method:** N/A · **Labeling Method:** N/A
383
+
384
+ ### Evaluation Dataset:
385
+
386
+ **Benchmark Scores:**
387
+
388
+ Text quality against **Nemotron 3.5 Lightning**, the text-tower donor. Paired design: both models saw identical items in identical order under identical sampling (`temperature 0.0`, `frequency_penalty 0.1`) in a single process, so the comparison is the per-item difference rather than two independent accuracy estimates.
389
+
390
+ | Task | Benchmark | This model | Nemotron 3.5 Lightning | Δ | Agreement | McNemar (exact) |
391
+ |---|---|---|---|---|---|---|
392
+ | Grade-school math | GSM8K (n=200) | **93.0** | 92.5 | +0.5 | 195/200 | p = 1.0000 |
393
+ | Academic recall | MMLU (n=200) | **80.0** | 80.5 | −0.5 | 193/200 | p = 1.0000 |
394
+ | Grade-school math | GSM8K replication (n=200, independent harness) | **88.5** | 87.5 | +1.0 | 188/200 | p = 0.7744 |
395
+ | Code generation | HumanEval pass@1 (n=164) | **87.8** | 89.0 | −1.2 | 160/164 | p = 0.6250 |
396
+
397
+ Four paired comparisons across three tasks and three independently-built harnesses, 764 item-pairs, deltas straddling zero and none separable at p < 0.05. Item-level agreement — the two models returning the same verdict on the same problem — runs 94–98%.
398
+
399
+ On HumanEval the failure modes are near-identical: this model 18 `AssertionError` + 2 `IndexError`, the donor 17 + 1. Both fail by getting logic wrong rather than by emitting malformed or truncated code.
400
+
401
+ **Multimodal capability**, against ground truth. Every item was also sent to the text-only donor, which returns `HTTP 400 "not a multimodal model"` on all of them, so these results are not text priors:
402
+
403
+ | Task | Probe | Result |
404
+ |---|---|---|
405
+ | Diagram understanding | AI2D volcano cross-section | Correct structural reading |
406
+ | Scene description | COCO, two cats on a couch | 2/2 ground-truth elements |
407
+ | Shape + colour recognition | Synthetic shapes | 3/3 correct |
408
+ | Speech transcription | Verbatim TTS script | **WER 0.000** |
409
+ | Video temporal order | Forward vs reversed frames | Correct in both directions; a single-frame reader cannot produce the difference |
410
+
411
+ **Performance benchmarks**, measured against stock Nemotron 3.5 Lightning NVFP4 under one harness driving both endpoints in the same session, DSpark n=3 on both, `max_tokens 2048`, `enable_thinking: false`. Served rate is `sum(completion_tokens) / wall_clock_seconds`:
412
+
413
+ | Sampling regime | Concurrency | This model | Nemotron 3.5 Lightning | Ratio |
414
+ |---|---|---|---|---|
415
+ | `t=1.0, top_p=0.95` | 1 | 91.07 tok/s | 94.72 tok/s | 0.961 |
416
+ | `t=1.0, top_p=0.95` | 8 | **275.84 tok/s** | 267.61 tok/s | **1.031** |
417
+ | `t=0.0, freq_penalty=0.1` | 1 | 92.53 tok/s | 95.34 tok/s | 0.971 |
418
+ | `t=0.0, freq_penalty=0.1` | 8 | **291.64 tok/s** | 281.08 tok/s | **1.038** |
419
+
420
+ **The ratio changes sign with concurrency, in both regimes.** Single-stream decode is memory-bandwidth-bound, and this checkpoint moves ~9.5% more weight bytes per decode step than the text-only donor; at concurrency 8 those reads amortise across the batch and this model comes out ahead — carrying vision and audio towers the donor does not have.
421
+
422
+ Measured on separate DGX Spark nodes, each engine in its resident configuration: `gpu_memory_utilization` 0.65 here, 0.45 for the donor; `max_model_len` 262,144 and 16,384. Neither approaches its KV limit at these sequence lengths.
423
+
424
+ Stock Nemotron 3.5 Lightning NVFP4 reaches **94.72 tok/s** single-stream on this hardware, against its published 124.24 — that figure is not reproducible on a DGX Spark GB10 for either model.
425
+
426
+ **Speculative decoding**, DSpark n=3, per-position acceptance:
427
+
428
+ | Regime | c | This model | Nemotron 3.5 Lightning | Accepted tokens / step |
429
+ |---|---|---|---|---|
430
+ | `t=1.0` | 1 | 44.48% — 66.1 / 41.9 / 25.4 | 45.00% — 67.7 / 42.1 / 25.2 | 2.334 vs 2.350 |
431
+ | `t=1.0` | 8 | 47.15% — 69.0 / 44.6 / 27.8 | 45.27% — 67.7 / 42.0 / 26.1 | 2.414 vs 2.358 |
432
+ | `t=0.0` | 1 | 43.79% — 66.1 / 40.5 / 24.7 | 43.59% — 65.9 / 40.3 / 24.5 | 2.314 vs 2.308 |
433
+ | `t=0.0` | 8 | 47.05% — 69.1 / 44.2 / 27.9 | 47.13% — 68.9 / 44.7 / 27.8 | 2.411 vs 2.414 |
434
+
435
+ The drafter was trained against stock Lightning and runs here unmodified against a merged model. Acceptance sits within ~1.5 points of stock at every position and concurrency.
436
+
437
+ This model's acceptance figures are gated by the shim's tensor-level verification, which refuses to serve on mismatch and refuses to certify when it has nothing comparable to check. The stock control's drafter loads through vLLM's own DSpark path, which carries no equivalent gate; its evidence of correct loading is behavioural.
438
+
439
+ **Quantization Benchmark Scores:**
440
+
441
+ The NVFP4 recipe quantizes the MoE and dense GEMM weights to NVFP4 — FP4 E2M1 values with per-block FP8 E4M3 scales over groups of 16 elements and a per-tensor FP32 global scale — across 5,935 modules, with activations at 16-bit (`W4A16`). The Mamba mixer `in_proj` / `out_proj` are quantized to FP8 across 46 modules, and the KV cache is FP8. The SSM state path (`conv1d`, `gate`), the attention projections on the six KV-carrying layers, the embeddings and the `mtp` tensors are kept at higher precision, as are the vision and audio encoders and their MLP projectors — 72 excluded modules in total. This yields **5.69 effective bits per weight (24.4 GB)**; over the NVFP4 portion alone the rate is exactly **4.50 bits per weight**, being 4 bits of value plus one FP8 scale byte per 16 elements.
442
+
443
+ | | This model | Text donor (Lightning NVFP4) | Architecture donor (Nano Omni NVFP4) |
444
+ |---|---|---|---|
445
+ | Size | **24.4 GB** | 21 GB | 20.9 GB |
446
+ | Effective bpw | **5.69** | — | 4.98 |
447
+ | Total parameters | 34B | 30B | 31B |
448
+
449
+ The difference in bits-per-weight is the modality towers: 3.27B of this checkpoint's parameters sit in BF16 tensors, of which 1.44B are the vision and audio encoders and their projectors.
450
+
451
+ **Benchmarks evaluated:** GSM8K, MMLU, HumanEval; ASR against a verbatim transcript; image, video and audio capability probes against ground truth.
452
+
453
+ **Data Collection Method by dataset:** Hybrid: Human, Automated — public academic datasets with automated scoring.
454
+
455
+ **Labeling Method by dataset:** Human.
456
+
457
+ **Properties:** GSM8K sampled from `openai/gsm8k` main/test; MMLU sampled from `cais/mmlu` all/test across all subjects; HumanEval evaluated on all 164 problems. All comparisons paired within a single process against a live endpoint of each model. Each harness was made to fail on purpose before its results were used — the throughput harness against a dead port and a bogus model name, the scorer against correct, malformed, wrong and empty responses, and the HumanEval grader against 20 canonical solutions (requiring 20/20 pass) and the same 20 corrupted (requiring 20/20 fail). Zero completions reached the token cap on HumanEval (1536) or GSM8K (1024); one did on MMLU (512).
458
+
459
+ # Inference:
460
+
461
+ **Acceleration Engine:** vLLM 0.27.1, with DSpark speculative decoding at n=3
462
+
463
+ **Test Hardware:**
464
+ * NVIDIA DGX Spark (GB10)
465
+
466
+ <a id="best-practices"></a>
467
+ # Best Practices
468
+
469
+ These are the settings it was measured at and the ones we would start from.
470
+
471
+ ### Sampling Parameters
472
+
473
+ * Send `frequency_penalty=0.1` on every request, in every mode.
474
+ * Thinking mode for document analysis and multimodal reasoning: `temperature=0.6`, `top_p=0.95`, `frequency_penalty=0.1`
475
+ * Instruct mode (non-thinking) for general tasks: `temperature=0.2`, `top_k=1`, `frequency_penalty=0.1`
476
+ * For ASR: non-thinking mode, `temperature=0.2`, `top_k=1`, `frequency_penalty=0.1`
477
+
478
+ ### Model output length
479
+
480
+ Reasoning and the final answer draw on the same `max_tokens` budget, so a budget sized for the answer alone will truncate before the answer begins — the request returns `finish_reason: length` with a populated reasoning channel and `content` empty.
481
+
482
+ Measured empty-`content` rates at `max_tokens=2048` with thinking on: **0% on short conversational prompts** (p95 reasoning 923 tokens), **12.5% on ordinary factual and short-explanation prompts**, and **37.5% on image prompts**, whose median reasoning was 1984 tokens against the 2048 cap.
483
+
484
+ So: 2048 is sufficient with thinking off, and sufficient with thinking on for short conversational turns. For anything harder, use 4096 or more, or send `enable_thinking: false`. For real-time voice, `enable_thinking: false` is also the latency choice — on a 6.24 s clip it produced a byte-identical transcription in 0.52 s against 11.11 s with thinking on.
485
+
486
+ ## Ethical Considerations:
487
+
488
+ This is a derivative model. Developers should work with their own teams to ensure it meets the requirements of their industry and use case, and should evaluate its safety properties directly rather than relying on evaluations published for the source models.
489
+
490
+ Please make sure you have proper rights and permissions for all input image, audio and video content.
491
+
492
+ For ethical considerations relating to the source models, see NVIDIA's Model Card++ subcards for [Nemotron 3 Nano Omni](https://huggingface.co/nvidia/Nemotron-3-Nano-Omni-30B-A3B-Reasoning-BF16) and Nemotron 3.5 Lightning.
493
+
494
+ <a id="license"></a>
495
+ ## License
496
+
497
+ This model is a derivative work built from NVIDIA checkpoints published under two
498
+ different licenses. **Both apply, to different parts of the model, and both must be
499
+ complied with by anyone redistributing it.**
500
+
501
+ | Component | Source | License |
502
+ |---|---|---|
503
+ | Vision tower, audio tower, projection layers, all modeling/config/processing/tokenizer code | [`nvidia/Nemotron-3-Nano-Omni-30B-A3B-Reasoning-NVFP4`](https://huggingface.co/nvidia/Nemotron-3-Nano-Omni-30B-A3B-Reasoning-NVFP4) | [NVIDIA Open Model Agreement](https://www.nvidia.com/en-us/agreements/enterprise-software/nvidia-open-model-agreement/) |
504
+ | Language-model tower | [`nvidia/NVIDIA-Nemotron-3.5-Lightning-30B-A3B-NVFP4`](https://huggingface.co/nvidia/NVIDIA-Nemotron-3.5-Lightning-30B-A3B-NVFP4) | [OpenMDW-1.1](https://openmdw.ai/license/1-1/) |
505
+ | Speculative drafter (ships separately — see below) | [`nvidia/NVIDIA-Nemotron-3.5-Lightning-30B-A3B-NVFP4-DSpark`](https://huggingface.co/nvidia/NVIDIA-Nemotron-3.5-Lightning-30B-A3B-NVFP4-DSpark) | [OpenMDW-1.1](https://openmdw.ai/license/1-1/) |
506
+
507
+ Full license texts are included in this repository as
508
+ `LICENSE.Omni-NVIDIA-Open-Model-Agreement.pdf` and `LICENSE.Lightning-OpenMDW-1.1`.
509
+ Attribution notices are in `NOTICE`. Tensor-level provenance is in `PROVENANCE.md`.
510
+
511
+ ### Third-party code loaded at runtime
512
+
513
+ This model's `config.json` references [`nvidia/C-RADIOv2-H`](https://huggingface.co/nvidia/C-RADIOv2-H)
514
+ via `auto_map` for the vision-tower implementation. Loading this model with
515
+ `trust_remote_code=True` will fetch that code directly from NVIDIA. **It is
516
+ distributed by NVIDIA under the [NVIDIA Open Model License Agreement (June 14, 2024)](https://developer.download.nvidia.com/licenses/nvidia-open-model-license-agreement-june-2024.pdf),
517
+ a separate and older agreement from the one governing this model.** It is not
518
+ redistributed here; your use of it is governed directly by NVIDIA's terms.
519
+
520
+ ### Attribution
521
+
522
+ This model would not exist without NVIDIA's decision to publish the Nemotron family
523
+ under permissive terms. All pretrained weights are NVIDIA's. No weight in this model
524
+ was trained, fine-tuned, recomputed, or requantized here — the merge is a
525
+ header-level graft of NVIDIA's published tensors, copied byte-for-byte.
526
+
527
+ Redistributed code retains the copyright notices of its original authors, including
528
+ NVIDIA Corporation, AI21 Labs Ltd., the HuggingFace Inc. team, and the Qwen team at
529
+ Alibaba Group. See `NOTICE`.
530
+
531
+ ### Obligations passed downstream
532
+
533
+ If you redistribute this model or a derivative of it, you must:
534
+
535
+ 1. Include a copy of both license texts with your distribution.
536
+ 2. Retain all copyright, patent, trademark, and attribution notices in the source
537
+ form of any derivative you distribute (NVIDIA Open Model Agreement §3(b)).
538
+ 3. Retain all copyright notices and notices of origin (OpenMDW-1.1).
539
+ 4. Comply with all applicable export, import, trade and economic sanctions laws and
540
+ regulations, including the U.S. Export Administration Regulations and Office of
541
+ Foreign Assets Control regulations (NVIDIA Open Model Agreement §10).
542
+
543
+ Note that both licenses terminate your grant if you initiate patent or copyright
544
+ litigation concerning these models.
545
+
546
+ **No warranty.** Both upstream licenses provide these materials "AS IS", without
547
+ warranty of any kind. This derivative is provided on the same basis.
548
+
549
+ <a id="speculative-drafter"></a>
550
+ ## Speculative Drafter
551
+
552
+ Every throughput figure above was measured with the DSpark drafter attached. It ships separately, with the plugin shim that lets it attach:
553
+
554
+ **[`brazley/Brazley-Nemotron-3.5-Lightning-Omni-Drafter`](https://huggingface.co/brazley/Brazley-Nemotron-3.5-Lightning-Omni-Drafter)**
555
+
556
+ # Citation:
557
+
558
+ ```
559
+ @misc{brazley2026lightningomni,
560
+ title={Brazley Nemotron 3.5 Lightning Omni: a multimodal merge of
561
+ NVIDIA Nemotron 3.5 Lightning and NVIDIA Nemotron 3 Nano Omni},
562
+ author={Brazley, Nik},
563
+ year={2026},
564
+ howpublished={\url{https://huggingface.co/brazley/Brazley-Nemotron-3.5-Lightning-Omni}},
565
+ note={Not an NVIDIA release}
566
+ }
567
+ ```