Bandit-v2 - Инференс: различия между версиями
Владимир (обсуждение | вклад) Новая страница: « = Запуск инференса модели Bandit-v2 для аудио сепарации = == Суть задачи == В данной статье описывается процесс настройки и запуска инференса нейросетевой модели '''Bandit-v2''' из репозитория [https://github.com/kwatcharasupat/bandit-v2 kwatcharasupat/bandit-v2] для задачи '''Cinematic Audio Source Separation'''...» |
Владимир (обсуждение | вклад) |
||
| Строка 1: | Строка 1: | ||
= Запуск инференса модели Bandit-v2 для аудио сепарации = | = Запуск инференса модели Bandit-v2 для аудио сепарации = | ||
== Суть задачи == | == Суть задачи == | ||
В данной статье описывается процесс настройки и запуска инференса нейросетевой модели '''Bandit-v2''' из репозитория [https://github.com/kwatcharasupat/bandit-v2 kwatcharasupat/bandit-v2] для задачи '''Cinematic Audio Source Separation''' — разделения аудиодорожки на составляющие: речь (speech), музыку (music) и звуковые эффекты (sfx). | В данной статье описывается процесс настройки и запуска инференса нейросетевой модели '''Bandit-v2''' из репозитория [https://github.com/kwatcharasupat/bandit-v2 kwatcharasupat/bandit-v2] для задачи '''Cinematic Audio Source Separation''' — разделения аудиодорожки на составляющие: речь (speech), музыку (music) и звуковые эффекты (sfx). | ||
| Строка 48: | Строка 47: | ||
== Процесс формирования рабочего решения == | == Процесс формирования рабочего решения == | ||
=== Проблема 1: Netflix-специфичные зависимости === | === Проблема 1: Netflix-специфичные зависимости === | ||
Файл <code>requirements.txt</code> содержит ссылки на приватный PyPI сервер Netflix:<pre> | Файл <code>requirements.txt</code> содержит ссылки на приватный PyPI сервер Netflix:<pre> | ||
| Строка 87: | Строка 85: | ||
== Исходный код == | == Исходный код == | ||
{ | {| class="mw-collapsible mw-collapsed wikitable" | ||
!simple_inference.py | |||
|- | |||
|<syntaxhighlight lang="python"> | |||
# ВСТАВЬТЕ КОД ЗДЕСЬ | # ВСТАВЬТЕ КОД ЗДЕСЬ | ||
</syntaxhighlight> | </syntaxhighlight> | ||
|} | |||
== Описание simple_inference.py == | == Описание simple_inference.py == | ||
| Строка 127: | Строка 129: | ||
== Инструкция по установке == | == Инструкция по установке == | ||
=== Требования === | === Требования === | ||
| Строка 142: | Строка 143: | ||
=== Шаг 2: Установка PyTorch с CUDA 11.8 === | === Шаг 2: Установка PyTorch с CUDA 11.8 === | ||
'''Внимание:''' Версия PyTorch 2.0.0 из оригинального requirements.txt больше недоступна. Используйте 2.5.0 или новее.<pre> | |||
pip install torch==2.5.0+cu118 torchaudio==2.5.0+cu118 --extra-index-url https://download.pytorch.org/whl/cu118 | pip install torch==2.5.0+cu118 torchaudio==2.5.0+cu118 --extra-index-url https://download.pytorch.org/whl/cu118 | ||
</pre> | </pre> | ||
=== Шаг 3: Установка зависимостей === | === Шаг 3: Установка зависимостей === | ||
'''Внимание:''' Пакет <code>asteroid</code> требует сборки <code>pesq</code> с Visual C++ Build Tools. Для инференса он не нужен, поэтому не устанавливаем.<pre> | |||
pip install "pytorch_lightning>=2.3.0" hydra-core omegaconf librosa soundfile einops tqdm julius huggingface-hub pyyaml scipy pandas | pip install "pytorch_lightning>=2.3.0" hydra-core omegaconf librosa soundfile einops tqdm julius huggingface-hub pyyaml scipy pandas | ||
</pre> | </pre> | ||
| Строка 164: | Строка 165: | ||
== Инструкция по запуску == | == Инструкция по запуску == | ||
=== Активация окружения === | === Активация окружения === | ||
<pre> | <pre> | ||
Версия от 07:39, 16 января 2026
Запуск инференса модели Bandit-v2 для аудио сепарации
Суть задачи
В данной статье описывается процесс настройки и запуска инференса нейросетевой модели Bandit-v2 из репозитория kwatcharasupat/bandit-v2 для задачи Cinematic Audio Source Separation — разделения аудиодорожки на составляющие: речь (speech), музыку (music) и звуковые эффекты (sfx).
Проект изначально разработан для внутренней инфраструктуры Netflix и содержит зависимости от закрытых пакетов, что делает прямой запуск невозможным. В статье представлено рабочее решение для запуска инференса на локальной машине с GPU.
Результат работы: скрипт simple_inference.py, позволяющий обрабатывать аудиофайлы любой длительности со скоростью ~17x realtime на RTX 4090.
О проекте Bandit-v2
Bandit (Band-Split RNN) — архитектура нейросети для разделения аудио на источники. Основные особенности:
- Band-Split подход — спектрограмма делится на 64 частотных диапазона (bands), каждый обрабатывается отдельно
- Dual-path RNN — последовательная обработка по временной и частотной осям с использованием GRU
- Mask Estimation — для каждого stem (речь/музыка/sfx) предсказывается комплексная маска
Технические характеристики модели:
| Параметр | Значение |
|---|---|
| Sample rate | 48000 Hz |
| n_bands | 64 |
| n_fft | 2048 |
| hop_length | 512 |
| emb_dim | 128 |
| rnn_dim | 256 |
| rnn_type | GRU (bidirectional) |
| n_sqm_modules | 8 |
Веса модели доступны на Zenodo: checkpoint-multi.ckpt
Процесс формирования рабочего решения
Проблема 1: Netflix-специфичные зависимости
Файл requirements.txt содержит ссылки на приватный PyPI сервер Netflix:
--index-url https://pypi.netflix.net/simple
И пакеты: nflx-manta, nflx-metaflow, jasper, storage, metatron и др.
Решение: Установка только минимально необходимых публичных пакетов для инференса.
Проблема 2: Ray зависимость
Модуль src/system/utils.py импортирует Ray (распределённые вычисления), который не нужен для локального инференса.
Решение: Создан отдельный скрипт simple_inference.py, который напрямую импортирует модель без системных обёрток.
Проблема 3: Устаревший PyTorch
В requirements указан torch==2.0.0+cu118, который больше недоступен в PyPI.
Решение: Установлен torch==2.5.0+cu118.
Проблема 4: Ошибка сборки pesq
Пакет asteroid тянет зависимость pesq, требующую компиляции C++.
Решение: Пакет asteroid не устанавливается — он нужен только для метрик обучения, не для инференса.
Проблема 5: Чрезмерное потребление VRAM
Оригинальный StandardTensorChunkedInferenceHandler с batch_size=32 и overlap 7 секунд (8с chunk, 1с hop) создаёт буфер на ~50GB.
Решение: Реализован простой chunked подход с последовательной обработкой чанков (30с chunk, 2с overlap), потребление VRAM снижено до ~2GB.
Проблема 6: Stereo обработка
Модель обучена с in_channels=1 (mono). При подаче stereo возникает ошибка LayerNorm.
Решение: Каждый канал stereo обрабатывается отдельно, результаты объединяются.
Проблема 7: Half precision (FP16)
Прямая конвертация модели в .half() вызывает ошибку типов в LayerNorm.
Решение: Используется torch.cuda.amp.autocast() для автоматического mixed precision.
Исходный код
| simple_inference.py |
|---|
# ВСТАВЬТЕ КОД ЗДЕСЬ
|
Описание simple_inference.py
Скрипт состоит из трёх основных функций:
create_model()
Создаёт экземпляр модели Bandit с параметрами, соответствующими checkpoint:
in_channels=1— mono (stereo обрабатывается поканально)n_bands=64,n_sqm_modules=8n_fft=2048,hop_length=512fs=48000
simple_chunked_inference()
Обрабатывает аудио чанками с crossfade:
- Аудио делится на чанки (по умолчанию 30 секунд)
- Соседние чанки перекрываются (по умолчанию 2 секунды)
- В зоне перекрытия применяется линейный crossfade
- Каждый чанк обрабатывается отдельно, результат сразу переносится на CPU
- GPU кэш очищается после каждого чанка
run_inference()
Основная функция:
- Загружает модель и веса из checkpoint
- Загружает аудио (с ресемплингом если нужно)
- Для stereo — обрабатывает каждый канал отдельно
- Сохраняет результаты в отдельные WAV файлы для каждого stem
Особенности реализации:
- Autocast mixed precision для ускорения без проблем с типами
- Минимальное потребление VRAM (~2GB на 30-секундный чанк)
- Поддержка произвольной длительности аудио
- Сохранение stereo (не конвертируется в mono)
Инструкция по установке
Требования
- Windows 10/11 или Linux
- NVIDIA GPU с поддержкой CUDA 11.8
- Anaconda или Miniconda
- ~3GB свободного места для PyTorch
Шаг 1: Создание conda окружения
conda create -n bandit-v2 python=3.10 -y conda activate bandit-v2
Шаг 2: Установка PyTorch с CUDA 11.8
Внимание: Версия PyTorch 2.0.0 из оригинального requirements.txt больше недоступна. Используйте 2.5.0 или новее.
pip install torch==2.5.0+cu118 torchaudio==2.5.0+cu118 --extra-index-url https://download.pytorch.org/whl/cu118
Шаг 3: Установка зависимостей
Внимание: Пакет asteroid требует сборки pesq с Visual C++ Build Tools. Для инференса он не нужен, поэтому не устанавливаем.
pip install "pytorch_lightning>=2.3.0" hydra-core omegaconf librosa soundfile einops tqdm julius huggingface-hub pyyaml scipy pandas
Шаг 4: Клонирование репозитория
git clone https://github.com/kwatcharasupat/bandit-v2.git cd bandit-v2
Шаг 5: Скачивание весов модели
Скачайте checkpoint-multi.ckpt с Zenodo и поместите в удобное место.
Шаг 6: Добавление simple_inference.py
Скопируйте скрипт simple_inference.py (см. раздел "Исходный код") в корень репозитория bandit-v2/.
Инструкция по запуску
Активация окружения
conda activate bandit-v2 cd путь/к/bandit-v2
Базовый запуск
python simple_inference.py -c "путь/к/checkpoint-multi.ckpt" -a "путь/к/аудио.wav"
Полный синтаксис
python simple_inference.py \
--checkpoint "путь/к/checkpoint-multi.ckpt" \
--audio "путь/к/аудио.wav" \
--output "путь/к/выходной/папке" \
--chunk 30 \
--overlap 2 \
--stems speech music sfx
| Параметр | По умолчанию | Описание |
|---|---|---|
-c, --checkpoint
|
(обязательный) | Путь к файлу весов .ckpt |
-a, --audio
|
(обязательный) | Путь к входному аудиофайлу |
-o, --output
|
./estimates/ | Папка для выходных файлов |
--chunk
|
30.0 | Размер чанка в секундах |
--overlap
|
2.0 | Размер перекрытия в секундах |
--stems
|
speech music sfx | Список stem для разделения |
--fs
|
48000 | Sample rate (менять не рекомендуется) |
--no-half
|
False | Отключить mixed precision |
Пример вывода
GPU: NVIDIA GeForce RTX 4090 VRAM: 22.5 GB === Config === Chunk: 30.0s, Overlap: 2.0s Half precision: True === Loading Model === Model loaded === Loading Audio === Duration: 420.5s, Channels: 2, SR: 48000 === Inference === Processing channel 1/2... Processing: 100%|████████████████| 15/15 [00:12<00:00, 1.20it/s] Processing channel 2/2... Processing: 100%|████████████████| 15/15 [00:12<00:00, 1.21it/s] Done in 24.9s (16.9x realtime) Peak VRAM: 1.99 GB === Saving === speech_estimate.wav music_estimate.wav sfx_estimate.wav Complete!
Выходные файлы
В указанной папке создаются три файла:
speech_estimate.wav— речь/диалогиmusic_estimate.wav— музыкаsfx_estimate.wav— звуковые эффекты
Все файлы сохраняются с тем же sample rate (48000 Hz) и количеством каналов, что и входной файл.