Дообучение NVIDIA Nemotron ASR на Amazon EC2: гайд | AiManual
AiManual Logo Ai / Manual.
12 Мар 2026 Гайд

Как дообучить NVIDIA Nemotron Speech ASR на Amazon EC2: полный гайд по адаптации под домен

Пошаговое руководство по тонкой настройке NVIDIA Nemotron Speech ASR на Amazon EC2 p4d с DeepSpeed. Адаптация модели под доменные данные.

Зачем мучить общую модель, если можно сделать свою?

Вы взяли NVIDIA Nemotron Speech ASR, запустили на своих аудиозаписях с медицинскими терминами, и она выдала "аспирин" как "а спирт и н". Классика. Модели общего назначения обучены на YouTube-подкастах и телефонных разговорах, но как только вы попадаете в домен со специфической лексикой, все летит в тартарары.

Дообучение - это не роскошь, а необходимость, если вам нужна точность выше 95% в вашей области. И делать это на ноутбуке - самоубийство. Amazon EC2 p4d с восемью A100 GPU - вот ваш полигон.

На 12 марта 2026, NVIDIA обновила Nemotron Speech ASR до версии 4.1, добавив поддержку 120 языков и улучшив точность на низкокачественном аудио. NeMo Toolkit перешел на версию 2.0, полностью переписав API для распределенного обучения.

Стек технологий: что берем и зачем

Собрать конфигурацию для дообучения ASR - это как выбрать компоненты для гоночного болида. Можно сэкономить на шинах, но вы проиграете на первом же повороте.

КомпонентЧто беремПочемуАльтернативы (хуже)
ИнстансAmazon EC2 p4d.24xlarge8 x NVIDIA A100 40GB GPU, 96 vCPU, 1152 ГБ RAM. Достаточно для параллельного обучения на больших батчах.p3.16xlarge (V100) - медленнее, или p5.48xlarge (H100) - дороже, но быстрее. Для Nemotron ASR хватает A100.
ФреймворкNVIDIA NeMo Toolkit 2.0Специализирован для ASR, встроенная поддержка DeepSpeed, готовые конфиги для Nemotron.Hugging Face Transformers - нужно больше кодить, нет оптимизаций под ASR.
ОптимизаторDeepSpeed 0.15.0ZeRO-3 для распределения оптимизатора, градиентов и параметров по GPU. Экономит память, ускоряет обучение.PyTorch DDP - жрет память, не масштабируется.
ДанныеСобственные размеченные аудио + синтетика от TTSДоменные термины требуют доменных данных. Если своих мало - генерируем через NeuTTS Nano или Soprano-Factory.Только открытые датасеты - не покрывают вашу специфику.

Если вы думаете, что можно взять Qwen3-ASR и дообучить ее - можете, но Nemotron заточена под NVIDIA железо и даст лучшую производительность на A100. Это как сравнить Mercedes и Toyota: обе ездят, но на треке разница ощутима.

1Поднимаем инстанс на AWS: не накосячьте с настройками

Зайдите в AWS Console, выберите EC2. Запустите инстанс p4d.24xlarge. При создании:

  • AMI: Deep Learning AMI GPU PyTorch 2.4 (Ubuntu 24.04) - предустановлены CUDA 12.4, драйверы NVIDIA, PyTorch. На 12 марта 2026 это актуальная версия.
  • Размер: обязательно добавьте корневой EBS объемом минимум 500 ГБ (модели и данные весят много).
  • Security Group: откройте порты 22 (SSH) и 8888 (для Jupyter, если нужно). Лучше использовать AWS Systems Manager Session Manager, чтобы не открывать SSH.

Внимание: Инстанс p4d.24xlarge стоит около $32 в час (цены на март 2026). Запускайте его только на время обучения. Используйте Spot Instances, чтобы сэкономить до 70%, но будьте готовы к прерываниям. Для обучения ASR, которое длится 10-20 часов, Spot может быть выгоден.

После запуска, подключитесь по SSH. Обновите пакеты:

sudo apt update
sudo apt upgrade -y

Установите Docker и NVIDIA Container Toolkit:

sudo apt install docker.io -y
sudo systemctl start docker
sudo systemctl enable docker
sudo usermod -aG docker $USER
# Перелогиньтесь или выполните newgrp docker

# NVIDIA Container Toolkit
curl -fsSL https://nvidia.github.io/libnvidia-container/gpgkey | sudo gpg --dearmor -o /usr/share/keyrings/nvidia-container-toolkit-keyring.gpg
curl -s -L https://nvidia.github.io/libnvidia-container/stable/deb/nvidia-container-toolkit.list | sudo tee /etc/apt/sources.list.d/nvidia-container-toolkit.list
sudo apt update
sudo apt install nvidia-container-toolkit -y
sudo nvidia-ctk runtime configure --runtime=docker
sudo systemctl restart docker

Проверьте, что GPU видны в Docker:

docker run --rm --gpus all nvidia/cuda:12.4.0-base-ubuntu24.04 nvidia-smi

2Готовим данные: чем кормить модель

У вас должно быть аудио в формате WAV (16 кГц, моно) и текстовые транскрипты. NeMo ожидает манифест в JSON-формате:

{"audio_filepath": "/data/audio1.wav", "duration": 5.67, "text": "привет мир"}
{"audio_filepath": "/data/audio2.wav", "duration": 10.45, "text": "закажите анализ крови"}

Разделите данные на train, validation и test. Рекомендую минимум 100 часов аудио для дообучения. Если меньше, используйте аугментацию: добавление шума, изменение темпа, pitch shift.

Синтетические данные: если у вас есть тексты доменных терминов, но нет аудио, сгенерируйте их через TTS. Например, с помощью NeuTTS Nano или проекта «Прометей». Но помните: синтетика никогда не заменит реальные записи, особенно по интонациям и фоновым шумам.

Разместите данные на S3, чтобы не хранить на инстансе. Смонтируйте S3 бакет через s3fs или используйте AWS DataSync.

3Устанавливаем NeMo и настраиваем конфиг

Лучше использовать Docker-контейнер от NVIDIA. Создайте Dockerfile:

FROM nvcr.io/nvidia/nemo:2.0.0-py3
WORKDIR /workspace
RUN pip install deepspeed==0.15.0
COPY . .

Или просто запустите контейнер:

docker run -it --rm --gpus all -v $(pwd):/workspace -v /path/to/data:/data nvcr.io/nvidia/nemo:2.0.0-py3

Внутри контейнера, скачайте предобученную модель Nemotron Speech ASR (версия 4.1, 1.2B параметров) с NVIDIA NGC:

nemo_asr download --model_name="stt_en_nemotron_4.1_1.2b" --save_dir="./models"

Создайте конфиг для тонкой настройки. NeMo использует YAML-конфиги. Скопируйте базовый конфиг и измените:

# config_finetune.yaml
model:
  train_ds:
    manifest_filepath: "/data/train_manifest.json"
    batch_size: 16
    num_workers: 8
  validation_ds:
    manifest_filepath: "/data/val_manifest.json"
    batch_size: 16
  test_ds:
    manifest_filepath: "/data/test_manifest.json"
    batch_size: 16
  optimizer:
    name: "adamw"
    lr: 1e-5
    weight_decay: 0.01
  scheduler:
    name: "CosineAnnealing"
    warmup_steps: 1000
  tokenizer:
    dir: "./models/stt_en_nemotron_4.1_1.2b/tokenizer"  # путь к токенизатору исходной модели

trainer:
  devices: 8  # количество GPU
  accelerator: "gpu"
  strategy: "ddp"
  max_epochs: 10
  precision: "bf16"  # A100 поддерживает bfloat16, ускоряет обучение

exp_manager:
  exp_dir: "./experiments"
  name: "nemotron_finetune"
  create_checkpoint_callback: true
💡
Если вы дообучаете модель на другом языке, поменяйте токенизатор. Nemotron 4.1 поддерживает мультиязычность, но для русского, например, нужен другой токенизатор. Скачайте модель для русского или обучите свой.

4Запускаем обучение с DeepSpeed

Чтобы использовать DeepSpeed, создайте конфиг ds_config.json:

{
  "train_batch_size": 128,
  "train_micro_batch_size_per_gpu": 16,
  "gradient_accumulation_steps": 1,
  "zero_optimization": {
    "stage": 3,
    "overlap_comm": true,
    "contiguous_gradients": true,
    "sub_group_size": 1e9,
    "reduce_bucket_size": "auto",
    "stage3_prefetch_bucket_size": "auto",
    "stage3_param_persistence_threshold": "auto",
    "stage3_max_live_parameters": 1e9,
    "stage3_max_reuse_distance": 1e9,
    "stage3_gather_16bit_weights_on_model_save": true
  },
  "bf16": {
    "enabled": true
  },
  "gradient_clipping": 1.0,
  "steps_per_print": 50,
  "wall_clock_breakdown": false
}

Запустите обучение:

python -m torch.distributed.run --nproc_per_node=8 finetune_speech.py \
    --config-path="./configs" \
    --config-name="config_finetune" \
    trainer.strategy="deepspeed" \
    trainer.devices=8 \
    +trainer.strategy.config=./ds_config.json \
    model.train_ds.manifest_filepath="/data/train_manifest.json" \
    model.validation_ds.manifest_filepath="/data/val_manifest.json" \
    model.test_ds.manifest_filepath="/data/test_manifest.json" \
    exp_manager.exp_dir="./experiments"

Где finetune_speech.py - ваш скрипт для тонкой настройки. Пример скрипта:

import pytorch_lightning as pl
from nemo.collections.asr.models import ASRModel
from nemo.core.config import hydra_runner
from omegaconf import DictConfig

@hydra_runner(config_path="./configs", config_name="config_finetune")
def main(cfg: DictConfig) -> None:
    model = ASRModel.from_pretrained(cfg.model.pretrained_model, strict=False)
    trainer = pl.Trainer(**cfg.trainer)
    trainer.fit(model)
    trainer.test(model)

if __name__ == "__main__":
    main()

Обучение займет от 5 до 20 часов в зависимости от объема данных. Следите за логами: значение WER (Word Error Rate) должно снижаться на валидации.

5Оценка и экспорт: не верьте на слово

После обучения, оцените модель на тестовом наборе. NeMo автоматически вычислит WER. Если WER выше 10%, возможно, данных мало или они шумные.

Экспортируйте модель в формат ONNX для продакшн-деплоя:

model.export("nemotron_finetuned.onnx")

Или сохраните как NeMo-модель:

model.save_to("nemotron_finetuned.nemo")

Теперь можно развернуть модель на RTX 3090 или в облаке. Для реального времени используйте NVIDIA Triton Inference Server.

Где спрятаны грабли: 5 ошибок, которые убьют ваше обучение

  1. Несоответствие формата аудио. Модель ожидает 16 кГц, моно. Если дадите стерео или 44.1 кГц, она либо сломается, либо точность упадет. Конвертируйте все аудио заранее.
  2. Пропуск нормализации текста. Тексты должны быть в нижнем регистре, без пунктуации (кроме апострофов). Удалите все скобки, тире. Иначе токенизатор запутается.
  3. Слишком большой learning rate. Для дообучения используйте lr 1e-5 или меньше. Если поставить 1e-3, модель забудет предыдущие знания.
  4. Игнорирование overfitting. Если валидационный WER растет, а тренировочный падает - это overfitting. Добавьте аугментацию, dropout, или увеличьте датасет.
  5. Нехватка памяти GPU. A100 40GB хватает для батча 16-32. Если память переполняется, уменьшите batch_size или включите gradient checkpointing.

Совет: Используйте MLflow для отслеживания экспериментов. Логируйте гиперпараметры, метрики, артефакты. На AWS разверните SageMaker MLflow (партнерская ссылка) - интеграция в один клик.

FAQ: коротко о главном

Сколько нужно данных для дообучения?

Минимум 50 часов аудио, лучше 100-200 часов. Для узкого домена (например, названия лекарств) может хватить 20 часов, если данные репрезентативные.

Можно ли дообучить на одном GPU?

Да, на RTX 4090 или A100 80GB. Но batch_size будет маленьким, обучение займет в 8 раз дольше. Лучше использовать несколько GPU.

Как выбрать гиперпараметры?

Начните с lr=1e-5, batch_size=16, epochs=10. Используйте random search или optuna для оптимизации.

Nemotron или Amazon Nova Sonic?

Nemotron - для NVIDIA железа, Nova Sonic - для AWS инфраструктуры. Если вы уже в экосистеме AWS, попробуйте Nova Sonic. Но Nemotron дает больше контроля.

Как ускорить обучение?

Используйте DeepSpeed ZeRO-3, смешанную точность bfloat16, и увеличение batch_size через gradient accumulation.

Теперь у вас есть модель, которая понимает "гипергликемия" вместо "гипер гли кемия". Осталось интегрировать ее в голосового агента или в корпоративную систему. И да, не забудьте остановить инстанс на AWS, чтобы не получить счет на $1000.

Если вы хотите готовую инфраструктуру, посмотрите NVIDIA Nemotron 3 Nano 30B MoE для LLM и построение AI-монстра для полного пайплайна.

Удачи. И помните: каждая сэкономленная миллисекунда в ASR - это шаг к тому, чтобы пользователь не выбросил ваш продукт в окно.

Подписаться на канал