KickWithReverb: разработчик обучил ИИ-модель бас-бочки на GPU с 6 ГБ VRAM
Разработчик под ником zhinit опубликовал на HN разбор своего проекта KickWithReverb, веб-приложения для сборки звука бас-бочки (kick drum) под техно и хаус: пользователь выбирает бочку, слой шума и импульсную характеристику для конволюционной реверберации, крутит ручки и получает готовый звук. Ядро проекта, генеративная латентная диффузионная модель, обученная с нуля на более чем 13 000 сэмплов бас-бочки из личной библиотеки автора (15 лет опыта в продюсировании хаус-музыки). Ключевая деталь: всё обучение прошло на старом Linux-десктопе с семилетней видеокартой NVIDIA GeForce GTX 1660 SUPER и всего 6 ГБ видеопамяти, без аренды облачных GPU уровня A100.
Пайплайн состоит из трёх отдельно обученных моделей. Сначала вариационный автокодировщик (VAE) сжимает лог-мел спектрограмму бочки размером 128×173 (22 144 числа) в латентный тензор размером 4×8×11 (352 числа), это сжатие примерно в 63 раза относительно спектрограммы и примерно в 250 раз относительно исходного двухсекундного аудиофайла (88 200 сэмплов при 44,1 кГц). Затем диффузионная модель на архитектуре U-Net учится превращать случайный шум в латентном пространстве в латентный тензор бочки за 1000 шагов зашумления/очистки во время обучения (при генерации используется 50 шагов); модель можно направлять текстовыми ключевыми словами через технику classifier-free guidance с коэффициентом 3.0. Наконец, вокодер на архитектуре HiFi-GAN (единственная из трёх моделей, обученная в полной точности fp32, из-за нестабильности состязательного обучения GAN) превращает мел-спектрограмму обратно в звуковую волну. Каждая из трёх моделей обучалась около суток на одной и той же видеокарте.
Данные готовились так: поиск по личной библиотеке сэмплов дал 15 082 файла со словом kick в имени, после фильтрации петель (loop, BPM) и файлов нетипичного размера осталось 13 615 сэмплов. Все файлы переименовали с добавлением 6-символьного хеш-префикса во избежание коллизий имён, а ключевые слова для текстового управления извлекли прямо из имён файлов (kick, clean, tape, warm, hard, punchy, house, hit, techno и другие). Текстовое управление сработало плохо: слов с малой частотой (например, techno, всего 39 упоминаний из 13 615) не хватило моделям для обучения, и они выдавали резкий металлический звук. В итоге вместо текстового поля автор захардкодил фиксированный промпт "hit house", который стабильно давал приятный звук.
Для инференса автор развернул модель на платформе Modal (serverless GPU с поминутной тарификацией): воркер оформлен как класс, который загружает все три модели (суммарно чуть больше 300 МБ весов) в память GPU один раз при старте контейнера и переиспользует их для всех запросов в течение 5 минут простоя. Тёплый инференс занимает около 2,5 секунды, холодный старт, около 10 секунд. Бэкенд на Django проверяет лимиты (10 генераций в день и 30 сохранённых бочек на пользователя), сохраняет готовый WAV-файл в Supabase Storage и запись в PostgreSQL. Среди артефактов генерации, гранулярность звука при сильной компрессии (следствие 63-кратного сжатия латента и апсемплинга вокодера) и щелчок на обрыве волны, который автор устранил экспоненциальным затуханием в конце дорожки. Код проекта выложен на GitHub, веса моделей, на HuggingFace, приложение доступно как живой сервис.
Ключевые факты
- Разработчик zhinit с нуля обучил генеративную латентную диффузионную модель звука бас-бочки на 13 615 сэмплах из личной библиотеки, целиком на домашнем ПК с семилетней GPU GTX 1660 SUPER (6 ГБ VRAM), без облачных мощностей
- Пайплайн, три отдельные модели: VAE сжимает лог-мел спектрограмму (128×173, 22 144 числа) в латентный тензор 4×8×11 (352 числа, сжатие ~63x/250x), диффузионный U-Net генерирует латент за 1000 шагов обучения (50 при генерации) с classifier-free guidance (коэффициент 3.0), вокодер HiFi-GAN превращает спектрограмму обратно в звук
- Каждая из трёх моделей обучалась около суток на одной видеокарте; текстовое управление ключевыми словами (например, "techno", всего 39 примеров) часто давало плохой звук, поэтому вместо свободного текстового поля используется зафиксированный промпт "hit house"
- Инференс развёрнут на serverless GPU-платформе Modal с прогревом моделей в памяти контейнера: тёплая генерация ~2,5 с, холодный старт ~10 с, лимит 10 генераций в день и 30 сохранённых бочек на пользователя
- Код проекта открыт на GitHub, веса моделей выложены на HuggingFace, приложение доступно как живой сервис; на Hacker News пост набрал 111 очков и 55 комментариев, читатели указали на похожий существующий продукт Emergent Drums 2
Почему это важно
Пост показывает на конкретном примере, что полноценный пайплайн генеративного аудио, сжатие в латентное пространство, диффузионная генерация, восстановление звука через вокодер, можно обучить не на арендованном облачном кластере, а на потребительской видеокарте многолетней давности с 6 ГБ видеопамяти. Это работающая иллюстрация того, что латентная диффузия (та же техника, что лежит в основе генерации изображений вроде DALL-E) переносится на аудио и остаётся посильной энтузиасту-одиночке при разумном выборе гиперпараметров сжатия.
Кому это важно
Инженерам и энтузиастам, работающим с аудио-ML и генеративными моделями на слабом железе; музыкальным продюсерам и разработчикам творческих инструментов, которые хотят видеть весь путь от идеи до работающего сервиса; тем, кто изучает диффузионные модели и вариационные автокодировщики и ищет доведённый до продакшена учебный пример вне сферы генерации изображений.
Как это применить
Автор подробно описывает воспроизводимый рецепт: собрать датасет из уже имеющихся файлов (простой grep по личной библиотеке сэмплов дал 13 615 бочек), привести их к единому формату (44,1 кГц, 2 секунды, нормализация громкости, затухание), перевести в лог-мел спектрограммы, затем обучить по отдельности VAE, диффузионный U-Net и вокодер HiFi-GAN, каждый на той же видеокарте, около суток на модель. Для развёртывания, serverless GPU (Modal) с воркером-классом, который держит веса моделей в памяти GPU между запросами, и жёсткие лимиты на пользователя для контроля расходов на инференс.
Можно ли доверять
Автор, реальный практикующий разработчик с 15-летним опытом продюсирования хаус-музыки, публикует не только текст, но и код проекта на GitHub, веса моделей на HuggingFace и работающее живое приложение, а также аудиопримеры сгенерированных бочек. Пост собрал на Hacker News 111 очков и 55 комментариев; сообщество оценило техническую глубину положительно, указало на близкий по духу существующий продукт Emergent Drums 2 (автор согласился, что подход отличается диффузионной архитектурой) и обсудило корректность формулировки "старый десктоп", сам компьютер старше 10 лет, хотя видеокарта в нём была заменена на более свежую GTX 1660 SUPER.
Риски и подводные камни
Свободное текстовое управление ключевыми словами получилось ненадёжным: словам с малым числом примеров в датасете (скажем, "techno", 39 упоминаний) не хватило данных, и модель выдавала резкий металлический звук вместо ожидаемого; в результате автору пришлось отказаться от текстового поля и захардкодить единственный рабочий промпт. При сильной компрессии сгенерированного звука проявляется гранулярный артефакт, следствие 63-кратного сжатия латентного пространства и апсемплинга вокодера, который автор описывает скорее как приемлемую особенность, чем баг. Каждый эксперимент с гиперпараметрами стоил 1, 3 дня из-за длительности обучения на единственной слабой видеокарте, что ограничило полноценный перебор настроек.
«Я вечно говорю друзьям, которые слушают техно, что это просто бас-бочка с реверберацией.»
— zhinit, разработчик KickWithReverb