Como Rodar o Nemotron 3.5 Transcribe Localmente: Uma GPU, Arquivos de 1 Hora e Sem Custos de API
Você pode executar o novo Nemotron 3.5 Transcribe da NVIDIA em uma única GPU e transcrever gravações de uma hora em 40 idiomas sem pagar por minuto ou enviar áudio para ninguém. É o principal modelo de pesos abertos no Hugging Face Open ASR Leaderboard, é distribuído sob a licença OpenMDW-1.1, amigável para uso comercial, e a NVIDIA publicou os pesos BF16, FP8 e NVFP4 no dia do lançamento, 28 de outubro de 2026.
Este guia aborda o hardware necessário, as três formas de executá-lo (vLLM, SGLang-Omni e Transformers), os comandos exatos do model card oficial e as configurações que costumam causar problemas. Todos os comandos foram copiados do card em 29 de outubro de 2026.
Novo no modelo? Nosso guia gratuito explica o que ele faz e como ele se classifica. Não tem uma GPU? A API hospedada custa US$ 0,002 por minuto.
Por que executá-lo localmente
- Sem cobrança por minuto. A US$ 0,002 por minuto da DeepInfra, 10.000 horas custam US$ 1.200. Na sua própria GPU, custa eletricidade.
- Privacidade. Chamadas de clientes, ditados médicos e gravações jurídicas nunca saem da sua rede.
- Conjunto completo de recursos. O caminho via vLLM oferece timestamps por palavra, diarização de locutores, tradução e prompts de contexto. Alguns endpoints hospedados expõem apenas parte disso.
- Ajuste fino. O post de lançamento da NVIDIA mostra um ajuste fino médico reduzindo o WER de 30,8% para 11,8%. Você só pode fazer isso com os pesos.
Hardware: o que o executa
O modelo tem 34B parâmetros no total e cerca de 4,3B ativos, então os pesos são grandes mesmo que o cálculo por token seja pequeno. O alvo de referência da NVIDIA é uma H100 80 GB em BF16. A tabela de compatibilidade do model card:
| GPU | Precisões | Runtimes |
|---|---|---|
| H100, H200 | BF16, FP8 | vLLM 0.32.0, Transformers, SGLang-Omni 0.2.0 (H100) |
| A100 80 GB | BF16 | vLLM 0.32.0, Transformers |
| L40S 48 GB | FP8 | vLLM 0.32.0, Transformers |
| B200, GB200, GB300 DGX Station | BF16, FP8, NVFP4 | vLLM 0.32.0, Transformers |
| DGX Spark (GB10), Jetson Thor | BF16, FP8, NVFP4 | vLLM 0.32.0, Transformers |
| RTX PRO 6000 Blackwell Server | BF16, FP8, NVFP4 | vLLM, Transformers, SGLang-Omni, GGML |
| RTX 5090 (32 GB) | Apenas NVFP4 | vLLM 0.32.0, Transformers, GGML |
Escolha o checkpoint para a sua placa:
-
nvidia/NVIDIA-Nemotron-3.5-Transcribe-30B-A4B(BF16) nvidia/NVIDIA-Nemotron-3.5-Transcribe-30B-A4B-FP8nvidia/NVIDIA-Nemotron-3.5-Transcribe-30B-A4B-NVFP4
Uma placa de 24 GB como a RTX 4090 não está na lista, e o Apple Silicon não é suportado. Os sistemas operacionais são Linux, ou Windows por meio do WSL2. O GGML também roda no Windows nativo, mas o post de lançamento da NVIDIA diz que a compilação local do NeMo-Speech.cpp ainda está “em breve”.
Opção 1: servidor vLLM (recomendado)
O vLLM oferece um endpoint compatível com OpenAI com batching, arquivos de uma hora, decodificação especulativa e timestamps por palavra. Ele precisa do vLLM 0.32.0 mais a branch main mais recente do NeMo Speech, que fornece o plugin vLLM do modelo.
Instalação
O card usa uv e Python 3.13:
git clone https://github.com/NVIDIA-NeMo/Speech.git nemo-speech
cd nemo-speech
uv venv --python 3.13 .venv
UV_PROJECT_ENVIRONMENT=$PWD/.venv uv sync --extra asr --extra vllm --locked --no-install-project
uv pip install --python .venv/bin/python --no-deps -e .
uv pip install --python .venv/bin/python --no-deps av==19.0.2
uv pip install --python .venv/bin/python --no-deps opencv-python-headless==5.0.0.93
source .venv/bin/activate
hf download nvidia/NVIDIA-Nemotron-3.5-Transcribe-30B-A4B --local-dir ./NVIDIA-Nemotron-3.5-Transcribe-30B-A4B
O PyAV (av) permite decodificar M4A e outros formatos comprimidos sem um FFmpeg do sistema. O OpenCV está lá porque o vLLM precisa dele e as configurações de dependências do NeMo o deixam de fora.
Inicie o servidor
export VLLM_PLUGINS=nemo_speechlm
export VLLM_MAX_AUDIO_DECODE_DURATION_S=3600
export VLLM_MAX_AUDIO_CLIP_FILESIZE_MB=180
export VLLM_USE_V2_MODEL_RUNNER=0
vllm serve ./NVIDIA-Nemotron-3.5-Transcribe-30B-A4B \
--served-model-name nvidia/NVIDIA-Nemotron-3.5-Transcribe-30B-A4B \
--trust-remote-code --dtype bfloat16 --gpu-memory-utilization 0.94 \
--max-model-len 65536 --max-num-batched-tokens 4096 --max-num-seqs 192 \
--enable-chunked-prefill --no-enable-prefix-caching \
--use-replayssm --mamba-backend flashinfer --mamba-cache-mode none \
--mm-processor-cache-gb 0 --no-async-scheduling \
--limit-mm-per-prompt '{"audio":{"count":6,"length":120000000}}' \
--speculative-config '{"method":"mtp","num_speculative_tokens":8}' \
--reasoning-parser nemotron_v3 \
--trust-request-mm-kwargs \
--middleware nemo.collections.speechlm2.vllm.salm.ctc_serving.ctc_timestamp_middleware
As flags que vale a pena entender:
-
VLLM_MAX_AUDIO_DECODE_DURATION_S=3600eleva o limite de áudio do vLLM de 600 segundos para uma hora. Esqueça isso e arquivos longos falham. -
VLLM_USE_V2_MODEL_RUNNER=0mantém o runner V1, do qual os timestamps por palavra precisam. -
--speculative-configativa a previsão de múltiplos tokens com oito tokens de rascunho (MTP8). Em uma H100, a NVIDIA mediu RTFx em lote para inglês de 270 com MTP8 e 410 com MTP2, então tente"num_speculative_tokens":2se você se importa mais com throughput do que com latência. -
--middleware ... ctc_timestamp_middlewaree--trust-request-mm-kwargspermitem que as requisições peçam timestamps por palavra. - As configurações têm como alvo uma H100 de 80 GB. Em outras placas, reduza
--gpu-memory-utilization,--max-model-lenou--max-num-seqs.
O servidor escuta em 127.0.0.1:8000. Adicione --host 0.0.0.0 para acessá-lo de outras máquinas na sua rede.
Envie um arquivo
import base64
from openai import OpenAI
client = OpenAI(base_url="http://127.0.0.1:8000/v1", [REDACTED CREDENTIAL])
audio = base64.b64encode(open("standup.wav", "rb").read()).decode()
response = client.chat.completions.create(
model="nvidia/NVIDIA-Nemotron-3.5-Transcribe-30B-A4B",
messages=[{"role": "user", "content": [
{"type": "text", "text": "Transcribe the following audio."},
{"type": "audio_url", "audio_url": {"url": f"data:audio/wav;base64,{audio}"}},
]}],
temperature=0,
extra_body={"chat_template_kwargs": {"enable_thinking": False}, "skip_special_tokens": False},
)
print(response.choices[0].message.content)
Substitua a instrução de texto por qualquer prompt de tarefa. Para uma reunião com várias vozes:
Transcribe verbatim, including fillers. Write numbers as spoken, without punctuation or capitalization. Start every speaker turn with <spk:0>, <spk:1>, etc. Keep one stable tag per speaker. Output only the speaker-tagged transcript.
As requisições de timestamp por palavra têm regras: uma gravação por requisição, stream=false e n=1. A resposta então inclui um objeto ctc_timestamps com palavras, tempos de início e fim em segundos e tags de locutor.
Opção 2: SGLang-Omni para transcrição simples
Se você só precisa de texto a partir de arquivos inteiros, o SGLang-Omni 0.2.0 é mais simples e não precisa do NeMo. Ele é validado em uma H100 80 GB e uma RTX PRO 6000 Blackwell com o checkpoint BF16 ou FP8.
sgl-omni serve \
--model-path nvidia/NVIDIA-Nemotron-3.5-Transcribe-30B-A4B \
--model-name nemotron-transcribe \
--mem-fraction-static 0.85 \
--port 8000
curl http://localhost:8000/v1/audio/transcriptions \
-F model=nemotron-transcribe \
-F file=@audio.wav
Essa rota /v1/audio/transcriptions corresponde ao formato que a API Whisper da OpenAI usa, então o código de cliente Whisper existente muitas vezes precisa apenas de uma nova URL base. A contrapartida: sem timestamps por palavra, rótulos de locutor, tradução ou decodificação especulativa nesta integração.
Opção 3: Transformers em um script
Para notebooks e tarefas pontuais, execute-o em processo com o Hugging Face Transformers instalado a partir do código-fonte:
pip install git+https://github.com/huggingface/transformers
from transformers import AutoModelForMultimodalLM, AutoProcessor
model_id = "nvidia/NVIDIA-Nemotron-3.5-Transcribe-30B-A4B"
processor = AutoProcessor.from_pretrained(model_id)
model = AutoModelForMultimodalLM.from_pretrained(model_id, device_map="auto")
[REDACTED PROMPT]
"and verbal fillers. Put speaker tags <spk:0> <spk:1> <spk:2> <spk:3> on the transcription.")
inputs = processor.apply_transcription_request(["podcast.mp3"], [REDACTED PROMPT]
outputs = model.generate(**inputs, max_new_tokens=4096)
print(processor.decode(outputs[:, inputs.input_ids.shape[1]:], skip_special_tokens=False))
É a forma mais fácil de começar e a mais lenta de executar em escala. Aumente max_new_tokens para arquivos longos: uma hora densa pode produzir cerca de 20.000 tokens.
Quão rápido é na sua própria GPU?
O número de destaque da NVIDIA é de 2.238 segundos de áudio por segundo em uma RTX PRO 6000 Blackwell, com pesos NVFP4 e decodificação especulativa DFlash2, e 0,13 segundos para retornar um clipe de 30 segundos. Leia a nota de rodapé: esses números vêm do NIM otimizado, cujas mudanças de serving ainda não são de código aberto. O card diz que a integração aberta com vLLM deve ser cerca de duas vezes mais lenta.
Para transcrição em inglês em lote na H100 em BF16, o card lista estes números de RTFx (segundos de áudio por segundo de computação):
| Decodificação especulativa | RTFx |
|---|---|
| MTP2 | 410 |
| DFlash2, K=7 | 340 |
| MTP8 | 270 |
| DFlash2, K=15 | 260 |
Até a linha mais lenta processa uma hora de áudio em menos de 15 segundos de tempo de GPU em trabalho em lote. Se você quiser o modelo de rascunho DFlash2, note que o vLLM 0.32.0 precisa de um pequeno patch do card, o DFlash2 desativa os timestamps por palavra, e você não deve combiná-lo com MTP.
Problemas comuns e correções
-
Arquivos longos cortados em 10 minutos. Você pulou
VLLM_MAX_AUDIO_DECODE_DURATION_S=3600. -
Sem timestamps na resposta. Verifique
VLLM_USE_V2_MODEL_RUNNER=0, a flag--middlewaree se a requisição temstream=falsee uma única gravação. -
Sem memória em placas menores. Mude para o checkpoint FP8 ou NVFP4 e reduza
--max-num-seqs. -
Frases repetidas no final de uma transcrição. O card recomenda uma proteção contra loops de geração nas saídas finais. Limite
max_tokense corte as repetições. -
Grafia errada de nomes. Adicione
Context terms: <names>ao prompt. - Vozes de fundo na transcrição. Tente o prompt experimental de campo próximo do card, que reduziu o WER em áudio misto de 27,32% para 4,78% no teste da NVIDIA.
Se você é novo no próprio vLLM, nosso explicador sobre vLLM aborda como ele faz batching de requisições e gerencia a memória da GPU.
Deixe seu agente de programação testar o servidor local com o Apidog CLI
Um modelo local só é útil se seu endpoint permanecer correto ao longo de atualizações do vLLM, ajustes de prompt e trocas de checkpoint. Deixe seu agente de programação cuidar disso com o Apidog CLI, executando verificações contra http://127.0.0.1:8000 na mesma máquina.
npm install -g apidog-cli@latest
apidog login --with-token <YOUR_TOKEN>
npx -y skills add https://apidog.com # pick your agent when prompted
Então dê ao seu agente um [REDACTED PROMPT]
In Apidog project , add POST {{baseUrl}}/v1/chat/completions for my local
Nemotron 3.5 Transcribe server. Create test cases that send samples/en.wav and
samples/two-speakers.wav as base64 audio_url content with temperature 0, and assert
status 200, a non-empty choices[0].message.content, and at least two distinct spk:N
tags for the two-speaker file. Run them against the local environment and report failures.
O agente lê o schema, valida seu payload, escreve os casos e os executa:
bash
apidog cli-schema get test-case-create
apidog cli-schema validate test-case-create --file case.json
apidog test-case create --project --file case.json
apidog run --test-case --project -e -r cli,json
Execute-o após cada atualização do servidor, ou integre `apidog run ... -r junit` no CI como mostrado em [Apidog CLI em um pipeline de CI/CD](https://apidog.com/pt/blog/apidog-cli-ci-cd-pipeline?utm_source=dev.to&utm_medium=wanda&utm_content=n8n-post-automation). Para configuração de agente, veja [Apidog CLI no Claude Code](https://apidog.com/pt/blog/apidog-cli-in-claude-code?utm_source=dev.to&utm_medium=wanda&utm_content=n8n-post-automation).
## Perguntas frequentes
**Posso executar o Nemotron 3.5 Transcribe em uma RTX 4090?** Ela não está na lista de compatibilidade da NVIDIA. A menor placa de consumo listada é a RTX 5090 com o checkpoint NVFP4.
**Ele roda em um Mac?** Nenhum runtime oficial suporta Apple Silicon até 29 de outubro de 2026.
**O uso local é gratuito para produtos comerciais?** A licença OpenMDW-1.1 permite uso comercial e não comercial. Leia o texto da licença para os termos de atribuição antes de lançar.
**Ele pode transcrever áudio ao vivo?** Não. É um modelo offline para arquivos gravados. A NVIDIA oferece um modelo separado, o Nemotron 3.5 ASR Streaming, para uso ao vivo.
**Qual é mais rápido, vLLM ou SGLang-Omni?** A NVIDIA não publica uma comparação direta. Use o vLLM quando precisar de timestamps, locutores ou tradução, e o SGLang-Omni para o servidor mais simples, apenas de texto.
**Como ele se classifica em relação a outros modelos locais?** Ele lidera todos os modelos de pesos abertos no Open ASR Leaderboard de 28 de outubro. Nossa lista dos [melhores modelos de fala para texto de código aberto](https://apidog.com/pt/blog/best-open-source-speech-to-text-models?utm_source=dev.to&utm_medium=wanda&utm_content=n8n-post-automation) o compara com Qwen3-ASR, Granite Speech, Canary-Qwen, Voxtral e Whisper.
## Execute-o
Baixe o checkpoint que se encaixa na sua GPU, inicie o vLLM com o limite de áudio de uma hora e o middleware de timestamp, e envie um arquivo WAV pelo cliente OpenAI. Depois deixe seu agente executar verificações do [Apidog](https://apidog.com/?utm_source=dev.to&utm_medium=wanda&utm_content=n8n-post-automation) contra o endpoint local para que cada atualização prove que ele ainda transcreve antes de você confiar nele com gravações reais.


Top comments (0)