alt.freeweights.nemotron / Nemotron-3-Diarization
From: nvidia <huggingface.co/nvidia>Newsgroups: alt.freeweights.nemotronSubject:

Nemotron-3-Diarization

Date: 2026-11-15Commit: 52a4326Signed: 2DC28CC7B26A283B ✓

Voice activity detection model with 99M parameters. Gguf and safetensors weights, 710 MB in all. Published by nvidia under OpenMDW-1.1.

99M params710MBNemotron-3-Diarizationgguf safetensorscustom terms
FactsParams99MSize710 MBFormatsgguf, safetensorsTaskvoice activity detectionLicenseOpenMDW-1.1From sourcecustom termsread terms
# custom terms: read the license before you download
$ fw get nvidia/Nemotron-3-Diarization
# manifest sha256 adc061edebef… · 710 MB · 16 files
$ fw verify ./Nemotron-3-Diarization nvidia/Nemotron-3-Diarization
From sourceHosted (signed)nvidia/Nemotron-3-DiarizationLast check: 2026-11-15 02:28 UTC

Get help: custom fine-tune or private deploy. We review your setup before we quote.

Works with

Overview

Size
710 MB
Weights
107 MB (GGUF)
Parameters
99M
Formats
gguf, safetensors
Task
voice activity detection
License
OpenMDW-1.1 (custom)
Files
16, each with a sha256
Publisher
nvidia
Added
2026-11-15
Section
alt.freeweights.nemotron
Lineage

Original release from the publisher.

Where these bytes come from
Publisher at the pinned commit→You

Sources are tried in order. A file counts only when its size and sha256 match the manifest. Sources are checked when you ask for them, not on a timer.

Sources
BadgeHostLast checkResult
From sourcehuggingface.co2026-11-15 02:28 UTCpassed

Model card

From the publisher at commit 52a4326. Shown as plain text with links; images open at the publisher.

Nemotron 3 Diarization#

Description#

Nemotron 3 Diarization is an open-weight speaker diarization model designed to determine "who spoke when" in real-world audio. It supports both streaming and offline inference and handles up to eight speakers. Following Sortformer [\[1\]](#ref-1), the model resolves speaker permutation by ordering its output channels according to each speaker's first arrival in the input audio.

For streaming inference, the model adopts the Arrival-Order Speaker Cache (AOSC) and FIFO queue introduced in Streaming Sortformer [\[2\]](#ref-2). The AOSC retains speaker information from earlier chunks to preserve speaker identities over time, while the FIFO queue provides recent frame context for each processing step.

A single checkpoint supports input buffer latency as low as 80 ms for latency-critical applications, although the lowest recommended configuration is 0.32 s; the offline-style configuration uses a 30.4 s input buffer. The output frame resolution is configurable in multiples of 10 ms. With chunked inference, the maximum audio duration is not limited.

This model is ready for commercial or non-commercial use.

Nemotron 3 Diarization HuggingFace Blog

For details on the model architecture, training, and evaluation, see our research paper.

Release Date#

September 23, 2026

Live Action Demo Page#

Hugging Face Spaces Demo: Nemotron-Diarization with Streaming ASR Nemotron-Diarization with Streaming ASR Demo

What does max 8-speaker diarization mean ?#


How to use this model#

Run locally with NeMo-Speech.cpp#

NeMo-Speech.cpp provides a lightweight native C++ runtime for local speaker diarization. After installing the runtime:

nemo-speech diarize meeting.wav

The same model can add word-level speaker tags to a transcription:

nemo-speech transcribe meeting.wav --diarize --json

See the NeMo-Speech.cpp diarization guide for more usage examples.

NVIDIA NeMo Speech#

To train, fine-tune or perform inference with this model, install NVIDIA NeMo Speech after installing Python 3.12 or later, Cython, and a recent PyTorch version.

apt-get update && apt-get install -y libsndfile1 ffmpeg
uv pip install Cython packaging
uv pip install 'nemo-toolkit[asr]'
πŸš€ Quick Start: Run Diarization Now#

Here is a short example script that loads the model, runs diarization on a WAV file, and prints the results:

from nemo.collections.asr.models import SortformerEncLabelModel
diar_model = SortformerEncLabelModel.from_pretrained("nvidia/Nemotron-3-Diarization")
diar_model.eval()

diar_model.sortformer_modules.chunk_len = 340
diar_model.sortformer_modules.chunk_right_context = 40
diar_model.sortformer_modules.fifo_len = 40
diar_model.sortformer_modules.spkcache_update_period = 300
diar_model._check_streaming_parameters()

predicted_segments = diar_model.diarize(audio=["/path/to/your/audio.wav"], batch_size=1)

for segment in predicted_segments[0]:
    print(segment)
Loading the Model#
from nemo.collections.asr.models import SortformerEncLabelModel

# load model from Hugging Face model card directly (You need a Hugging Face token)
diar_model = SortformerEncLabelModel.from_pretrained("nvidia/Nemotron-3-Diarization")

# If you have a downloaded model in "/path/to/Nemotron-3-Diarization.nemo", load model from a downloaded file
diar_model = SortformerEncLabelModel.restore_from(restore_path="/path/to/Nemotron-3-Diarization.nemo", map_location='cuda', strict=False)

# switch to inference mode
diar_model.eval()
Input Format#

Input can be an individual audio file:

audio_input="/path/to/multispeaker_audio1.wav"

or a list of paths to audio files:

audio_input=["/path/to/multispeaker_audio1.wav", "/path/to/multispeaker_audio2.wav"]

or a numpy array (single or list):

import numpy as np
audio_input = np.random.randn(16000 * 10).astype(np.float32)  # 10 sec at 16kHz
# or a list of arrays
audio_input = [audio_array1, audio_array2]
diar_model.diarize(audio=audio_input, batch_size=2, sample_rate=16000)

Note: When using numpy arrays, you MUST specify a correct sample_rate in diar_model.diarize() function. Default sample_rate is 16000.

or a line-delimited JSON manifest file:

audio_input="/path/to/multispeaker_manifest.json"

where each line is a JSON object containing the following fields:

{"audio_filepath": "/path/to/multispeaker_audio1.wav", "offset": 0, "duration": 600}
{"audio_filepath": "/path/to/multispeaker_audio2.wav", "offset": 900, "duration": 580}
Setting up Streaming Configuration#

Streaming configuration is defined by the following parameters, all measured in 80 ms frames:

  • SPKCACHE_LEN: Total number of frames in the speaker cache.
  • FIFO_LEN: Number of previous frames attached before the current chunk from the FIFO queue.
  • CHUNK_LEN: Number of frames in a processing chunk.
  • RIGHT_CONTEXT: Number of future frames attached after the chunk.
  • UPDATE_PERIOD: Number of frames extracted from the FIFO queue to update the speaker cache.

Here are recommended configurations for different scenarios:

ConfigurationLatencySPKCACHE_LENFIFO_LENCHUNK_LENRIGHT_CONTEXTUPDATE_PERIOD
Very high latency (offline)30.4 s2644034040300
Low latency1.04 s26426494222
Very low latency0.64 s26426462222
Ultra-low latency0.32 s26426431222

Note. Latency refers to Input Buffer Latency, calculated as (CHUNK_LEN + RIGHT_CONTEXT) Γ— 80 ms. This value does not include computational processing time.

To set streaming configuration, use:

diar_model.sortformer_modules.spkcache_len = SPKCACHE_LEN
diar_model.sortformer_modules.fifo_len = FIFO_LEN
diar_model.sortformer_modules.chunk_len = CHUNK_LEN
diar_model.sortformer_modules.chunk_right_context = RIGHT_CONTEXT
diar_model.sortformer_modules.spkcache_update_period = UPDATE_PERIOD
diar_model._check_streaming_parameters()
Getting Diarization Results#

To perform speaker diarization and get a list of speaker-marked speech segments in the format 'begin_seconds, end_seconds, speaker_index', simply use:

predicted_segments = diar_model.diarize(audio=audio_input, batch_size=1)

To obtain tensors of speaker activity probabilities, use:

predicted_segments, predicted_probs = diar_model.diarize(audio=audio_input, batch_size=1, include_tensor_outputs=True)

Note that if you are feeding a list of numpy arrays, you MUST provide the sample_rate in integer format.

predicted_segments, predicted_probs = diar_model.diarize(audio=[np_array1, np_array2], batch_size=2, sample_rate=16000)
πŸ”¬ For more detailed evaluations (DER)#

If you need to perform a comprehensive evaluation and calculate the accuracy and speed metrics across different parameter settings, use the NeMo example script e2e_diarize_speech.py. This script allows you to test the streaming behavior of the model by adjusting key parameters like chunk_len, fifo_len, chunk_right_context and spkcache_update_period.

python ${NEMO_ROOT}/examples/speaker_tasks/diarization/neural_diarizer/e2e_diarize_speech.py \
    pretrained_name="nvidia/Nemotron-3-Diarization" \
    dataset_manifest="/path/to/diarization_manifest.json" \
    batch_size=32 \
    collar=0 \
    precision=bf16 \
    compile_encoder=false \
    spkcache_len=264 \
    spkcache_update_period=300 \
    fifo_len=40 \
    chunk_len=340 \
    chunk_right_context=40

More details on the evaluation can be found in the Diarization Evaluation subcard.

πŸ€— Transformers usage#

This model is supported natively in πŸ€— Transformers! Install from source:

pip install git+https://github.com/huggingface/transformers

For more details about usage, please refer to the Transformers documentation.

➑️ Offline diarization

import torch
from transformers import AutoModelForAudioFrameClassification, AutoProcessor
from transformers.audio_utils import load_audio

model_id = "nvidia/Nemotron-3-Diarization"
processor = AutoProcessor.from_pretrained(model_id)
model = AutoModelForAudioFrameClassification.from_pretrained(model_id, device_map="auto")

sampling_rate = processor.feature_extractor.sampling_rate
audio = load_audio(
    "https://huggingface.co/datasets/hf-internal-testing/dummy-audio-samples/resolve/main/diarization_example.mp3",
    sampling_rate=sampling_rate,
)
inputs = processor(audio, sampling_rate=sampling_rate).to(model.device, dtype=model.dtype)

with torch.inference_mode():
    logits = model(**inputs).logits  # (1, num_frames, 8), one frame every 10 ms

segments = processor.extract_speaker_dict(logits, inputs.attention_mask)[0]
for segment in segments:
    print(f"speaker_{segment['Speaker']}: {segment['Start']:.2f}s - {segment['End']:.2f}s")

➑️ Streaming diarization

Audio arrives chunk by chunk, and each forward takes one chunk: the processor cuts it for its streaming_mode and adds num_lookahead_frames, the number of trailing look-ahead frames the model attends to but does not score, since they open the next chunk. The forward returns the speaker_cache to pass to the next call. The last chunk of a session is extracted with is_last_audio_chunk=True: it has no look-ahead, so every remaining frame is scored.

streaming_modeLatencyΒΉ
"low_latency" (default)1.04 s
"very_low_latency"0.64 s
"ultra_low_latency"0.32 s

ΒΉ Audio to wait for before the model runs on a chunk: the chunk plus its look-ahead, excluding compute time.

import torch
from transformers import AutoModelForAudioFrameClassification, AutoProcessor
from transformers.audio_utils import load_audio

model_id = "nvidia/Nemotron-3-Diarization"
processor = AutoProcessor.from_pretrained(model_id)
model = AutoModelForAudioFrameClassification.from_pretrained(model_id, device_map="auto")
processor.set_streaming_mode("low_latency")  # the default, can also be "very_low_latency" and "ultra_low_latency"
print(f"Streaming latency: {processor.streaming_latency_ms} ms")

sampling_rate = processor.feature_extractor.sampling_rate
audio = load_audio(
    "https://huggingface.co/datasets/hf-internal-testing/dummy-audio-samples/resolve/main/diarization_example.mp3",
    sampling_rate=sampling_rate,
)


def inputs_generator():
    """Yields the processor outputs of each chunk."""
    yield processor(
        audio[: processor.num_samples_first_audio_chunk],
        sampling_rate=sampling_rate,
        is_streaming=True,
        is_first_audio_chunk=True,
    )

    mel_frame_idx = processor.num_mel_frames_per_step
    start_idx = processor.audio_chunk_start(mel_frame_idx)
    while (end_idx := start_idx + processor.num_samples_per_audio_chunk) <= audio.shape[0]:
        yield processor(
            audio[start_idx:end_idx],
            sampling_rate=sampling_rate,
            is_streaming=True,
            is_first_audio_chunk=False,
        )
        mel_frame_idx += processor.num_mel_frames_per_step
        start_idx = processor.audio_chunk_start(mel_frame_idx)

    # the audio ended: the frames left in the buffer are the last ones of the session
    yield processor(
        audio[start_idx:],
        sampling_rate=sampling_rate,
        is_streaming=True,
        is_first_audio_chunk=False,
        is_last_audio_chunk=True,
    )


speaker_cache, logits = None, []
with torch.inference_mode():
    for inputs in inputs_generator():
        inputs = inputs.to(model.device, dtype=model.dtype)
        # `inputs` carries `num_lookahead_frames` for every chunk but the last, `speaker_cache` links the chunks
        outputs = model(**inputs, speaker_cache=speaker_cache)
        logits.append(outputs.logits)  # the chunk's frames, without its look-ahead
        speaker_cache = outputs.speaker_cache

logits = torch.cat(logits, dim=1)  # (1, num_frames, 8), one frame every 10 ms
segments = processor.extract_speaker_dict(logits)[0]  # [{"Start": 0.0, "End": 15.43, "Speaker": 0}, ...]
Integration with Streaming ASR#

Please refer to the ASR Integration Guide for the detailed instructions on integration of Nemotron Diarization with Streaming ASR.


Model Architecture#

Architecture Type: Transformer.

Network Architecture:

  • A 31-layer Transformer encoder with Rotary Positional Embeddings (RoPE).
  • 10 ms Mel-spectrogram input features downsampled by a factor of eight through feature stacking, producing an 80 ms encoder frame rate.
  • A Conv1D layer above the encoder that upsamples predictions to the 10 ms input-feature resolution.
  • AOSC and a FIFO queue for streaming inference.

Number of model parameters: 100M (1.0 Γ— 10⁸).

Input#

Input Type: Audio.

Input Format: 16 kHz, single-channel audio in .wav, .flac, .opus, or .mp3 format.

Input Parameters: One-dimensional, 16 kHz, single-channel audio waveform.

Maximum Duration: Not limited when chunked inference is used.

Other Properties Related to Input: Input audio must be sampled at 16 kHz and is converted into 10 ms Mel-spectrogram features. Chunked inference supports recordings without a fixed maximum duration.

Output#

Output Type: Other: Numerical tensor.

Output Format: Float Tensor.

Output Parameters: A two-dimensional tensor with shape [T, 8], where T is the number of output frames and each value is a per-speaker activity probability in the range [0, 1].

Output Frame Resolution: The default frame stride is 10 ms and can be configured to any multiple of 10 ms, such as 30 ms, 80 ms, or 240 ms.

Speaker Ordering: The eight speaker channels are ordered by the speakers' arrival time in the input audio.

Derived Output: Speaker activity probabilities can be converted into start time, end time, and a generic speaker label, for example ["speaker1", 0.51, 12.62].

Other Properties Related to Output: The output frame resolution is configurable in multiples of 10 ms. Speaker channels are ordered by first arrival, and probabilities can be postprocessed into generic speaker labels with start and end timestamps.


Software Integration#

Runtime Engine(s): NeMo Framework v3.0.

Supported Hardware Microarchitecture Compatibility#

Our AI models are designed and/or optimized to run on NVIDIA GPU-accelerated systems.

Ampere NVIDIA GPUs:

  • GeForce RTX 3090 Ti, RTX 3090, RTX 3080 Ti, RTX 3080, RTX 3070 Ti, RTX 3070, RTX 3060 Ti, RTX 3060, and RTX 3050.
  • NVIDIA RTX A6000, RTX A5500, RTX A5000, RTX A4500, RTX A4000, RTX A2000, RTX A1000, and RTX A400.
  • NVIDIA A100 PCIe, A100 SXM, A30, A40, A16, A10, and A2.

Ampere NVIDIA Workstations: NVIDIA DGX Station A100.

Ada Lovelace NVIDIA GPUs:

  • GeForce RTX 4090, RTX 4080, RTX 4070 Ti, RTX 4070, RTX 4060 Ti, RTX 4060, and RTX 4050.
  • NVIDIA RTX 6000 Ada, RTX 5000 Ada, RTX 4500 Ada, RTX 4000 Ada, RTX 4000 SFF Ada, and RTX 2000 Ada.
  • NVIDIA L4, L40, and L40S.

Blackwell NVIDIA GPUs:

  • GeForce RTX 5090, RTX 5080, RTX 5070 Ti, RTX 5070, RTX 5060 Ti, RTX 5060, and RTX 5050.
  • RTX PRO 6000 Blackwell Workstation Edition, RTX PRO 6000 Blackwell Max-Q Workstation Edition, RTX PRO 5000 Blackwell, RTX PRO 4500 Blackwell Workstation Edition, RTX PRO 4000 Blackwell, RTX PRO 4000 Blackwell SFF Edition, and RTX PRO 2000 Blackwell.
  • RTX PRO 6000 Blackwell Server Edition and RTX PRO 4500 Blackwell Server Edition.
  • NVIDIA B200, B300, GB200, and GB300.

Blackwell NVIDIA Workstations: NVIDIA DGX Spark and NVIDIA DGX Station.

Hopper NVIDIA GPUs: NVIDIA H100 PCIe, H100 SXM, H100 NVL, H200 SXM, H200 NVL, and GH200.

Preferred/Supported Operating System(s):

  • Linux

The integration of foundation and fine-tuned models into AI systems requires additional testing using use-case-specific data to ensure safe and effective deployment. Following the V-model methodology, iterative testing and validation at both unit and system levels are essential to mitigate risks, meet technical and functional requirements, and ensure compliance with safety and ethical standards before deployment.


Model Version#

Nemotron 3 Diarization (General Access).

The model can be integrated into conversational AI systems through NeMo Framework inference pipelines to produce per-speaker activity probabilities or postprocessed generic speaker labels and timestamps.

Training and Evaluation Datasets#

Training Datasets#

The model was trained on a combination of real conversations and multi-talker audio mixtures with 1-8 speakers simulated using the FastMSS toolkit [\[3\]](#ref-3).

Real conversations: Total duration is around 10,000 hours.

DatasetLanguageSplit or description
Fisher EnglishEnglishTraining Part 1 and Part 2
AMI Meeting CorpusEnglishTrain and development; force-aligned [\[4\]](#ref-4)
ICSIEnglishFull
VoxConverse v0.3MultilingualDevelopment and test
AISHELL-4MandarinTrain
Third DIHARD ChallengeMultilingualDevelopment
2000 NIST Speaker Recognition EvaluationMultilingualCALLHOME Part 1
AliMeeting Mandarin CorpusMandarinTrain; force-aligned [\[4\]](#ref-4)
DiPCo β€” Dinner Party CorpusEnglishDevelopment
NOTSOFAR1EnglishTrain and development; force-aligned [\[3\]](#ref-3)
DISPLACE 2024English, Hindi, Kannada, Telugu, BengaliDevelopment and evaluation
DISPLACE-M 2026Hindi, KannadaDevelopment 1, 2, and 3
David AI β€” [D2] MultispeakerEnglishLicensed under agreement; 3-4 speakers 1,000 hours
YODAS-v2MultilingualPseudo-labeled 5,000-hour subset

Data used to simulate multi-talker audio mixtures: Total duration of single-speaker audio recordings is around 28,000 hours.

DatasetLanguageSplit or description
LibriSpeechEnglishTrain-960h
AMI Meeting Corpus (individual headsets)EnglishTrain and development
AliMeeting Mandarin Corpus (individual headsets)MandarinTrain
Fisher EnglishEnglishTraining Part 1 and Part 2
David AI β€” [D1] Chit ChatEnglishLicensed under agreement
David AI β€” [D2] MultispeakerEnglishLicensed under agreement
David AI β€” [D6a] PodcastEnglishLicensed under agreement
David AI β€” [D6b] AdviceEnglishLicensed under agreement
David AI β€” [D7] Expert AssistantEnglishLicensed under agreement
David AI β€” [D12] Human Transcripts21 languagesLicensed under agreement
MUSAN noisesNot applicableNoises for augmentation

Multi-talker audio mixtures used in training:

  • Librispeech: 6,694 hours
  • AMI: 6,743 hours
  • AliMeeting: 6,745 hours
  • Fisher English: 6,755 hours
  • David AI English: 36,458 hours
  • David AI Multilingual: 19,216 hours

Properties: Approximately 10,000 hours of real conversations plus 82,611 hours of simulated multi-talker audio mixtures. The data modality is audio and includes conversational speech, telephone calls, meetings, podcasts, noise augmentation, and synthetic mixtures. Languages include English, Mandarin, Hindi, Kannada, Telugu, Bengali, and other languages represented in the multilingual sources. Voice recordings may constitute personal data.

Evaluation Dataset#
DatasetLanguageSpeakersRecordingsDescriptionLabels
DIHARD III EvalMultilingual1–91–4 speakers: 219

5–9 speakers: 40 Total: 259 | 11-domain benchmark | Original | | CALLHOME-Part2 | Multilingual | 2–6 | 2: 148 3: 74 4: 20 5: 5 6: 3 Total: 250 | Telephonic speech | Original |

| AliMeeting Test Near | Mandarin | 2–4 | 20 | Meetings, mix of headset microphones | Forced alignment [\[4\]](#ref-4) |

| AliMeeting Test Far | Mandarin | 2–4 | 20 | Meetings, far-field conditions | Forced alignment [\[4\]](#ref-4) |

| AMI Test MHM | English | 3–4 | 16 | Meetings, mix of headset microphones | Forced alignment [\[4\]](#ref-4) |

| AMI Test SDM | English | 3–4 | 16 | Meetings, far-field single-channel conditions | Forced alignment [\[4\]](#ref-4) |

| NOTSOFAR1 Eval MHM | English | 3–7 | 3–4 speakers: 70 5–7 speakers: 90 Total: 160 | Meetings, mix of headset microphones | Forced alignment [\[3\]](#ref-3) | | NOTSOFAR1 Eval SC | English | 3–7 | 3–4 speakers: 70 5–7 speakers: 90 Total: 160 | Meetings, far-field single-channel conditions | Forced alignment [\[3\]](#ref-3) |

Properties: 901 condition-specific audio recordings comprising real-world multilingual conversational speech captured under telephone, meeting, near-field, far-field, and multi-microphone conditions. The data may contain personal data in the form of voice recordings. Languages include English, Mandarin, and other languages represented in the multilingual benchmarks.


Training#

The model training was initialized with a Transformer-based NEST [\[5\]](#ref-5) SSL checkpoint. Training was performed on 8 nodes of 8Γ—NVIDIA A100-SXM4-80GB GPUs in two stages.

  1. Offline training on simulated data only using the example script and base config.
  2. Streaming fine-tuning on a combination of real conversations and simulated mixtures using the example script and base config.

Performance Evaluation#

Important.

Use the published reference labels to reproduce these results!#

The DER scores reported in this model card were computed using the exact reference annotations identified in the Labels column above. Reference RTTMs are part of the evaluation protocol: changing the reference labels changes the measured result.

We use forced-alignment based reference labels for AMI, AliMeeting and NOTSOFAR1 because the original segment-level annotations were created primarily for transcription rather than frame-accurate diarization evaluation. These annotations may label substantial within-segment silence as speech, thereby overestimating reference speaker activity. When used for DER scoring, they can inflate missed-speech error by penalizing a diarization system for correctly predicting non-speech during those intervals. Forced alignment provides more precise speech boundaries and therefore a more appropriate and interpretable reference for frame-level diarization evaluation. Please refer to [\[4\]](#ref-4) for a detailed discussion of this annotation issue and the forced-alignment methodology.

The Forced alignment links above point to the public repositories containing the reference RTTM files used for evaluation.

Results obtained using different reference labels constitute a different evaluation protocol and are not directly comparable with the numbers reported here. Before reporting a reproduction discrepancy, score the same model outputs using the linked reference RTTMs, the listed dataset split, and the collar and overlap settings specified in the Metrics section.

Baseline#

nvidia/diar_streaming_sortformer_4spk-v2.1

Baseline model's latency configurations:

ConfigurationLatencySPKCACHE_LENFIFO_LENCHUNK_LENRIGHT_CONTEXTUPDATE_PERIOD
Very high latency (offline)30.4 s1884034040300
Low latency1.04 s18818867144
Ultra-low latency0.32 s18818831144
Metrics#

Diarization Error Rate (DER): The primary metric for diarization performance, consisting of false alarm (FA), missed speech (Miss), and speaker confusion (Conf).

  • All evaluations include overlapping speech.
  • Collar tolerance is 0 s for DIHARD III Eval, AliMeeting Test, AMI Test and NOTSOFAR1 Eval.
  • Collar tolerance is 0.25 s for CALLHOME-part2.

Speaker Counting Accuracy (SCA): 1 when the predicted and ground-truth speaker counts are equal; otherwise 0. This metric does not capture the magnitude of a counting error.

Speaker Counting Mean Absolute Error (MAE): |predicted speaker count - ground-truth speaker count|. This metric is more informative than SCA because it reflects magnitude of speaker counting error.

Real-Time Factor Speedup (RTFx): total audio duration / total processing time.

Performance Evaluation Results#

Results reported below were obtained using the NeMo example script e2e_diarize_speech.py.

DIHARD III#

| Model | Latency | DER ↓ (1–4 spk) | DER ↓ (5–9 spk) | DER ↓ (full) | SCA ↑ (full) | MAE ↓ (full) |

| ------------------------------------- | ------- | ------------------ | ------------------ | --------------- | --------------- | --------------- |

| diar_streaming_sortformer_4spk-v2.1 | 30.4 s | 13.98 | 40.21 | 19.09 | 75.29 | 0.5135 |

| diar_streaming_sortformer_4spk-v2.1 | 1.04 s | 14.33 | 41.39 | 19.60 | 69.50 | 0.5483 |

| diar_streaming_sortformer_4spk-v2.1 | 0.32 s | 14.37 | 42.71 | 19.85 | 66.80 | 0.5869 |

| Nemotron-3-Diarization | 30.4 s | 9.13 | 27.58 | 12.73 | 81.47 | 0.2664 |

| Nemotron-3-Diarization | 1.04 s | 9.47 | 28.65 | 13.18 | 76.83 | 0.3243 |

| Nemotron-3-Diarization | 0.64 s | 9.44 | 29.16 | 13.28 | 77.22 | 0.3205 |

| Nemotron-3-Diarization | 0.32 s | 9.69 | 29.49 | 13.55 | 76.45 | 0.3282 |

CALLHOME-Part2#

| Model | Latency | DER ↓ (2 spk) | DER ↓ (3 spk) | DER ↓ (4 spk) | DER ↓ (5 spk) | DER ↓ (6 spk) | DER ↓ (full) | SCA ↑ (full) | MAE ↓ (full) |

| ------------------------------------- | ------- | ---------------- | ---------------- | ---------------- | ---------------- | ---------------- | --------------- | --------------- | --------------- |

| diar_streaming_sortformer_4spk-v2.1 | 30.4 s | 5.68 | 10.41 | 12.36 | 21.00 | 21.15 | 10.32 | 84.40 | 0.1720 |

| diar_streaming_sortformer_4spk-v2.1 | 1.04 s | 6.83 | 11.26 | 13.49 | 21.67 | 23.82 | 11.31 | 82.40 | 0.1880 |

| diar_streaming_sortformer_4spk-v2.1 | 0.32 s | 7.92 | 12.54 | 15.32 | 24.01 | 27.70 | 12.67 | 72.40 | 0.2920 |

| Nemotron-3-Diarization | 30.4 s | 5.98 | 9.26 | 11.03 | 15.82 | 15.80 | 9.10 | 91.60 | 0.0840 |

| Nemotron-3-Diarization | 1.04 s | 6.98 | 10.90 | 11.84 | 18.47 | 16.01 | 10.29 | 89.20 | 0.1080 |

| Nemotron-3-Diarization | 0.64 s | 7.21 | 11.17 | 12.10 | 19.31 | 16.70 | 10.66 | 88.40 | 0.1160 |

| Nemotron-3-Diarization | 0.32 s | 7.75 | 11.84 | 13.02 | 20.65 | 17.30 | 11.32 | 88.40 | 0.1160 |

AliMeeting Test Near#
ModelLatencyDER ↓SCA ↑MAE ↓
diar_streaming_sortformer_4spk-v2.130.4 s11.5780.000.20
diar_streaming_sortformer_4spk-v2.11.04 s12.4770.000.30
diar_streaming_sortformer_4spk-v2.10.32 s13.6870.000.30
Nemotron-3-Diarization30.4 s6.4090.000.10
Nemotron-3-Diarization1.04 s6.5985.000.15
Nemotron-3-Diarization0.64 s6.7485.000.15
Nemotron-3-Diarization0.32 s7.1980.000.20
AliMeeting Test Far#
ModelLatencyDER ↓SCA ↑MAE ↓
diar_streaming_sortformer_4spk-v2.130.4 s13.6995.000.05
diar_streaming_sortformer_4spk-v2.11.04 s15.5875.000.25
diar_streaming_sortformer_4spk-v2.10.32 s16.8565.000.35
Nemotron-3-Diarization30.4 s10.471000
Nemotron-3-Diarization1.04 s10.8095.000.05
Nemotron-3-Diarization0.64 s11.0385.000.15
Nemotron-3-Diarization0.32 s11.6085.000.15
AMI Test MHM#
ModelLatencyDER ↓SCA ↑MAE ↓
diar_streaming_sortformer_4spk-v2.130.4 s15.8193.750.0625
diar_streaming_sortformer_4spk-v2.11.04 s16.3693.750.0625
diar_streaming_sortformer_4spk-v2.10.32 s17.7793.750.0625
Nemotron-3-Diarization30.4 s9.2587.500.1250
Nemotron-3-Diarization1.04 s9.4881.250.1875
Nemotron-3-Diarization0.64 s9.6281.250.1875
Nemotron-3-Diarization0.32 s10.0581.250.1875
AMI Test SDM#
ModelLatencyDER ↓SCA ↑MAE ↓
diar_streaming_sortformer_4spk-v2.130.4 s21.4293.750.0625
diar_streaming_sortformer_4spk-v2.11.04 s21.7393.750.0625
diar_streaming_sortformer_4spk-v2.10.32 s23.8993.750.0625
Nemotron-3-Diarization30.4 s11.1487.500.1250
Nemotron-3-Diarization1.04 s12.8087.500.1250
Nemotron-3-Diarization0.64 s13.0687.500.1250
Nemotron-3-Diarization0.32 s12.9587.500.1250
NOTSOFAR1 MHM#

| Model | Latency | DER ↓ (3–4 spk) | DER ↓ (5–7 spk) | DER ↓ (full) | SCA ↑ (full) | MAE ↓ (full) |

| ------------------------------------- | ------- | ------------------ | ------------------ | --------------- | --------------- | --------------- |

| diar_streaming_sortformer_4spk-v2.1 | 30.4 s | 11.14 | 29.38 | 21.77 | 35.00 | 0.9375 |

| diar_streaming_sortformer_4spk-v2.1 | 1.04 s | 12.03 | 29.49 | 22.12 | 34.38 | 0.9437 |

| diar_streaming_sortformer_4spk-v2.1 | 0.32 s | 12.94 | 30.75 | 23.37 | 32.50 | 0.9625 |

| Nemotron-3-Diarization | 30.4 s | 5.25 | 7.86 | 6.77 | 93.75 | 0.0625 |

| Nemotron-3-Diarization | 1.04 s | 5.85 | 9.02 | 7.70 | 79.37 | 0.2062 |

| Nemotron-3-Diarization | 0.64 s | 6.07 | 9.39 | 7.99 | 79.37 | 0.2062 |

| Nemotron-3-Diarization | 0.32 s | 6.57 | 10.16 | 8.65 | 74.38 | 0.2687 |

NOTSOFAR1 SC#

| Model | Latency | DER ↓ (3–4 spk) | DER ↓ (5–7 spk) | DER ↓ (full) | SCA ↑ (full) | MAE ↓ (full) |

| ------------------------------------- | ------- | ------------------ | ------------------ | --------------- | --------------- | --------------- |

| diar_streaming_sortformer_4spk-v2.1 | 30.4 s | 19.67 | 38.42 | 30.49 | 33.12 | 0.9563 |

| diar_streaming_sortformer_4spk-v2.1 | 1.04 s | 20.58 | 39.84 | 31.81 | 33.12 | 0.9563 |

| diar_streaming_sortformer_4spk-v2.1 | 0.32 s | 22.14 | 40.80 | 32.95 | 31.87 | 0.9688 |

| Nemotron-3-Diarization | 30.4 s | 7.94 | 13.21 | 11.00 | 78.12 | 0.2188 |

| Nemotron-3-Diarization | 1.04 s | 8.96 | 15.44 | 12.77 | 60.62 | 0.4062 |

| Nemotron-3-Diarization | 0.64 s | 9.47 | 16.16 | 13.35 | 55.00 | 0.4625 |

| Nemotron-3-Diarization | 0.32 s | 10.28 | 17.61 | 14.53 | 55.00 | 0.4625 |

Inference Speed Evaluation#
ModelLatencyRTFx ↑ (batch_size=1) eager / compiledRTFx ↑ (batch_size=32) eager / compiled
diar_streaming_sortformer_4spk-v2.130.4 s874 / 14683204 / 2619
diar_streaming_sortformer_4spk-v2.11.04 s16 / 42193 / 136
diar_streaming_sortformer_4spk-v2.10.32 s8 / 21101 / 76
Nemotron-3-Diarization30.4 s1340 / 438512196 / 15113
Nemotron-3-Diarization1.04 s38 / 164581 / 865
Nemotron-3-Diarization0.64 s25 / 113391 / 579
Nemotron-3-Diarization0.32 s12.5 / 54199 / 292

Acceleration Engine: PyTorch backend through the NeMo Framework, with and without torch.compile().

Test Hardware: NVIDIA Blackwell RTX PRO 5000.

Precision: BF16.


License/Terms of Use#

Use of this model is governed by the OpenMDW License Agreement, version 1.1.

Deployment Geography#

Global

Use Case#

Nemotron 3 Diarization is intended for speaker diarization in live or recorded conversational audio, including meetings, calls, podcasts, and speech-recognition pipelines that need generic speaker labels and speaker timestamps.

References#

[1] Sortformer: A Novel Approach for Permutation-Resolved Speaker Supervision in Speech-to-Text Systems

[2] Streaming Sortformer: Speaker Cache-Based Online Speaker Diarization with Arrival-Time Ordering

[3] Mind the Gap: Impact of Synthetic Conversational Data on Multi-Talker ASR and Speaker Diarization

[4] Can We Really Repurpose Multi-Speaker ASR Corpus for Speaker Diarization?

[5] NEST: Self-supervised Fast Conformer as All-purpose Seasoning to Speech Processing Tasks

[6] Nemotron 3 Diarization: Advancing the Accuracy-Efficiency Frontier in Streaming Speaker Diarization

Citation#

If you use this model in your research, please cite:

@misc{medennikov2026nemotron3diarization,
  title={Nemotron 3 Diarization: Advancing the Accuracy-Efficiency Frontier in Streaming Speaker Diarization},
  author={Ivan Medennikov and Taejin Park and Tatiana Timofeeva and He Huang and Alexander Polok and Sofia Kostandian and Weiqing Wang and Dongji Gao and Jagadeesh Balam and Boris Ginsburg},
  year={2026},
  eprint={2611.12246},
  archivePrefix={arXiv},
  primaryClass={eess.AS},
  url={https://arxiv.org/abs/2611.12246}
}

Ethical Considerations#

NVIDIA believes Trustworthy AI is a shared responsibility and has established policies and practices to enable development for a wide array of AI applications. Developers should evaluate the model with use-case-specific data and ensure that the complete system meets the requirements of the relevant industry and deployment context.

For more detailed information, see the Bias, Explainability, Safety & Security, and Privacy subcards.

Please report model quality, risk, security vulnerabilities, or NVIDIA AI concerns through the NVIDIA security reporting portal.

Files

16 files Β· 710 MBWeights 107 MB (GGUF). Sizes and sha256 from the signed manifest.
Hide all 16 files with their sha256
FileSizesha256
.gitattributes1.90 KB070ab8f15b0804f8d8e699bf4f95f7191a30ac9f039115fc0dc42a6496e5211d
ASR_INTEGRATION_GUIDE.md16.3 KB6eb2213b72aac92f9fdecf7481a4ac2d9f5fa4926841248a0f4db79be380f70e
Nemotron-3-Diarization.nemo199 MB867c53f552998f772e5b5e5c082962ae85ee7ca5669c2bc17d7f615133d4e96d
Nemotron-3-Diarization.q8_0.gguf107 MB08456d9e22cd9a323c0364d98375f3746d6e68507ebb705cd46438c534c7a3a1
README.md44.1 KB111370508eeeb0f397b13cef6c0d5c6cfa55a0f7089c8df7dd54dd2e8e597e86
bias.md296 B94a85f2260ab9d825b11ff28c3686af668bfe44f6b3d0e4525f5c0de9d968a17
config.json1.46 KBdd795ec07ffa09acf18d231aa3fa8642aa5c521760953754e02559a7413b6873
diarization_evaluation.md6.90 KB7bfbb965f50360f2fb261a81388448e0d2572aa4f77f1ec04995fed82ee68b71
explainability.md2.33 KBe3a4c7664d0c71cebcbff90ba1776316b37c6e445c20307bd5b8a1a622899d47
model.safetensors397 MBc074d86335b3b794f8fa5edc25594558f128bdb3914d27806a3a5a2e44963cb6
nemotron3_tts_8_open_voices.mp42.45 MB292668a8679eb27f039f7afb0ed938165b399762d2cd3ecef017b600e82457e7
privacy.md1.28 KBce9c4820379a1a1a077c26ea8ae5b380cf1a2c200b121f9c6fc1fd552f49a109
processor_config.json623 B91726746788a024a2f0f2f699a6c3667f0d74e6a0e9288fc44fe3018e23af68e
safety.md489 Bc178dc56b306f33e7981267a8a73ad11dd0ded16336f62e8eb1452398af45cbf
streaming_diarization_demo.gif4.60 MB30eda66150b34e0140a9b92a761362450f8518b575c056211df6208362e2194b
streaming_diarization_demo.png78.3 KB05dd18ddd1068dbfff5195f3a9bd8d8acb2c3002498fe35a9ebad96a45afbe8f
VersionsEach time the pinned upstream commit or file list changed in this repo. Newest first.
Upstream commitDateContents
52a4326727 pinned now2026-11-15 02:28 UTC16 files Β· 710 MB

Use it

# custom terms: read the license before you download
$ fw get nvidia/Nemotron-3-Diarization
# manifest sha256 adc061edebef… · 710 MB · 16 files
$ fw verify ./Nemotron-3-Diarization nvidia/Nemotron-3-Diarization
Terms that come with these files. OpenMDW 1.1: keep the agreement and the copyright notices with the files when you pass them on.
Custom license (custom). Read the license text first. Open this panel to show the commands once you accept its terms.
fw.pyChecks the signature and every sha256, tries each source in order, resumes.
$ python3 fw.py get https://freeweights.allternit.com/manifests/nvidia/Nemotron-3-Diarization.json --dir ./Nemotron-3-Diarization $ python3 fw.py verify ./Nemotron-3-Diarization ./nvidia__Nemotron-3-Diarization.json
hfThe Hugging Face CLI with one setting. Same repo id.
$ HF_ENDPOINT=https://freeweights.allternit.com hf download nvidia/Nemotron-3-Diarization --revision 52a432672732425e4c19765b9fec9b5810e6f4ba --local-dir ./Nemotron-3-Diarization
llama.cppDownload one GGUF variant (Nemotron-3-Diarization.q8_0, 107 MB), then serve it.
$ HF_ENDPOINT=https://freeweights.allternit.com hf download nvidia/Nemotron-3-Diarization --include "Nemotron-3-Diarization.q8_0*" --local-dir ./Nemotron-3-Diarization $ llama-server -m ./Nemotron-3-Diarization/Nemotron-3-Diarization.q8_0.gguf
OllamaMake an Ollama model from the downloaded file.
$ printf 'FROM ./Nemotron-3-Diarization/Nemotron-3-Diarization.q8_0.gguf\n' > Modelfile $ ollama create nemotron-3-diarization -f Modelfile

License

Name
OpenMDW-1.1
Id
OpenMDW-1.1
Class
Custom terms
Redistribution
click-through
Listing
Hosted (signed)
Terms
OpenMDW 1.1: keep the agreement and the copyright notices with the files when you pass them on.
Decided
License as declared by the publisher. No person read it. 2026-11-15
Text in
README.md
Text sha256
111370508eeeb0f397b13cef6c0d5c6cfa55a0f7089c8df7dd54dd2e8e597e86
Terms gate
Yes. The commands stay folded until you open them after reading the license.

Read the license text

Licenses are checked against the license table. A custom license passes only after a person reads it.

Provenance

From: nvidia <huggingface.co/nvidia>Newsgroups: alt.freeweights.nemotronSubject: Nemotron-3-DiarizationDate: 2026-11-15Commit: 52a4326Signed: 2DC28CC7B26A283B ✓
Upstream
nvidia/Nemotron-3-Diarization
Pinned commit
52a432672732425e4c19765b9fec9b5810e6f4ba
Manifest
Nemotron-3-Diarization.json Β· .minisig
Manifest sha256
adc061edebef858777e43271b94ec19081991a64e95e18bb3600717168e06cec
Signature
minisign, Ed25519, key 2DC28CC7B26A283B
Created
2026-11-15 02:28 UTC
Generator
freeweights-manifest/0.1.0
Takedowns
None.

How to verify

$ curl -O https://freeweights.allternit.com/manifests/nvidia/Nemotron-3-Diarization.json $ curl -O https://freeweights.allternit.com/manifests/nvidia/Nemotron-3-Diarization.json.minisig $ minisign -Vm Nemotron-3-Diarization.json -P RWQ7KGqyx4zCLXtUFOqvfv8L3g+8fpKJ1FsuxPyOYMF+4KufbUxKq1Oq $ shasum -a 256 <file> # compare with the Files tab

A manifest whose signature fails must be rejected. A file whose size or sha256 does not match must be discarded. Verify a download

Model tree

3 models in the catalog name this one as their parent.

Fine-tunes
1
Quantizations
2
Get it
Read license, then download
$ HF_ENDPOINT=https://freeweights.allternit.com hf download nvidia/Nemotron-3-Diarization
Open in Freeweights Studio

Pull, verify and run it in the Allternit app on Desktop, web or phone.

Signed manifest
minisign, key 2DC28CC7B26A283B. Nemotron-3-Diarization.json. Provenance. Takedown history: none.

Variants

2 quantized or adapter builds of Nemotron-3-Diarization. Each has its own license check and page.

From: laion <huggingface.co/laion>Subject: a3-rl-laion_nemotron-gym-agent-calendar-80-8B
From: ServiceNow-AI <huggingface.co/ServiceNow-AI>Subject: Apriel-Nemotron-15b-Thinker
From: lmstudio-community <huggingface.co/lmstudio-community>Subject: Apriel-Nemotron-15b-Thinker-GGUF
From: nvidia <huggingface.co/nvidia>Subject: nemotron-3.5-asr-streaming-0.6b
From: bartowski <huggingface.co/bartowski>Subject: nvidia_OpenCodeReasoning-Nemotron-14B-GGUF
From: bartowski <huggingface.co/bartowski>Subject: nvidia_OpenMath-Nemotron-14B-Kaggle-GGUF