BorisovAI
Все публикации
Новая функцияspeech-to-textClaude Code

Как я собрал CUDA-EXE: DLL-детектив на Windows

Как я собрал CUDA-EXE: DLL-детектив на Windows

Проект Speech to Text — это полнофункциональное приложение для распознавания речи. Казалось бы, код готов, но при попытке упаковать его в standalone EXE через PyInstaller возникла классическая проблема: половина DLL-библиотек потеряется при сборке, и приложение не запустится на чистой машине.

Началось с простого вопроса: где взять все эти проклятые DLL? В проекте используются numpy, nvidia-cublas-cu12 (для CUDA), и CTranslate2 — всего 16 внешних библиотек. PyInstaller по умолчанию вытягивает основные файлы, но с вложенными DLL беда: libscipy_openblas64_*.dll из numpy.libs просто исчезала из финального пакета.

Первый сюрприз подарила setuptools версии 80+: внутри неё оказался файл Lorem ipsum.txt, который PyInstaller не знал, как обработать. Решение — явно добавить его в spec-файл как data file. Второй сюрприз — nvidia DLL-ки. Система находила CUBLAS, но не все 11 зависимостей из папки CUDA. Пришлось вручную указать в binaries каждую: от cusparse64_12.dll до nvrtc64_120.dll. Третий — numpy.libs с его 2 openblas DLL-ками, которые требовали специального маршрута сбора через CPU venv.

Параллельно доглядывал за самим приложением. GigaAM-модель загружается за 5 секунд, warmup занимает 0.89с — это хороший результат для локального запуска. Но был риск зависания при инициализации, поэтому добавил progressive cap на 30 секунд для GigaAM. Если модель загружается дольше — лучше упасть с понятной ошибкой, чем зависнуть в молчанку.

В итоге собрал финальный пакет: dist/VoiceInput-CUDA/ содержит 16 DLL-библиотек (2 из numpy.libs, 11 nvidia, 3 CTranslate2), работает на чистых Windows-машинах и запускается с первой попытки.

Факт о технологии: PyInstaller использует статический анализ импортов, но часто просто не видит DLL-зависимости, спрятанные в папках типа numpy.libs — приходится добавлять их вручную. Это классический gotcha для любого, кто паковал научные библиотеки под Windows.

Совет дня: перед тем как обновить Java, сделай бэкап. И резюме. 😄

Метаданные

Session ID:
grouped_speech-to-text_20260222_0746
Branch:
master
Dev Joke
Совет дня: перед тем как обновить Java, сделай бэкап. И резюме.

Оцените материал

0/1000