Зачем мучить общую модель, если можно сделать свою?
Вы взяли 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.24xlarge | 8 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.0 | ZeRO-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-smi2Готовим данные: чем кормить модель
У вас должно быть аудио в формате 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
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 ошибок, которые убьют ваше обучение
- Несоответствие формата аудио. Модель ожидает 16 кГц, моно. Если дадите стерео или 44.1 кГц, она либо сломается, либо точность упадет. Конвертируйте все аудио заранее.
- Пропуск нормализации текста. Тексты должны быть в нижнем регистре, без пунктуации (кроме апострофов). Удалите все скобки, тире. Иначе токенизатор запутается.
- Слишком большой learning rate. Для дообучения используйте lr 1e-5 или меньше. Если поставить 1e-3, модель забудет предыдущие знания.
- Игнорирование overfitting. Если валидационный WER растет, а тренировочный падает - это overfitting. Добавьте аугментацию, dropout, или увеличьте датасет.
- Нехватка памяти 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 - это шаг к тому, чтобы пользователь не выбросил ваш продукт в окно.