Сделать CUDA необязательной и включаемой явно на Linux/WSL и Windows #2

Closed
opened 2026-08-11 17:04:02 +03:00 by ddmitry · 1 comment
Owner

Решение и проблема

Обычная установка Linux/WSL x86_64 скачивает обязательную cuBLAS даже для ONNX/CPU. Наличие nvidia-smi переключает auto на CUDA, хотя драйвер может стоять на несовместимом старом GPU. Дополнительная установка библиотек такую несовместимость не исправляет.

На Windows x64 CUDA Toolkit обычно не установлен; текущая инструкция требует его системной установки. Цель — единый способ подключения CUDA на Linux/WSL x86_64 и Windows x64: совместимый драйвер NVIDIA, установка extra cuda, явный выбор CUDA через CLI или TOML. Полный системный CUDA Toolkit для этого сценария не требуется; драйвер устанавливается отдельно и не входит в extra.

Владелец выбрал optional CUDA и явное включение. Исследовательский вопрос этой задачи решён; задача переведена в реализацию. Первоначально выделена из #1.

Согласованная спецификация — разделы «Выбор исполнения и ошибки» и «Документация и прежние решения». Эта задача дополняет спецификацию согласованным расширением установки extra на Windows x64.

Объём

  • Перенести nvidia-cublas-cu12 из обязательных зависимостей в extra cuda для Linux/WSL x86_64 и Windows x64 с соответствующими platform markers. Обновить lock-файл; FasterWhisper CPU и Linux bootstrap сохранить.
  • Проверить фактические runtime-зависимости используемого Windows wheel CTranslate2 и включить в extra необходимые поставляемые через Python-пакеты CUDA-библиотеки. Достаточность одной cuBLAS и отсутствие необходимости в cuDNN не выводить из прежней проверки Linux-библиотеки.
  • Добавить обнаружение и загрузку DLL из окружения приложения на Windows. Установка extra должна обеспечивать явную CUDA без системного CUDA Toolkit и ручной правки системного PATH. Простого расширения platform marker недостаточно; bootstrap должен быть безопасен без optional-пакетов.
  • auto выбирает ONNX CPU независимо от драйвера, nvidia-smi и установки extra. CUDA выбирается только через явный CLI-аргумент или TOML. Загрузка библиотек сама по себе не включает CUDA.
  • Для ASR и VAD ONNX явно закрепить CPU provider: defaults сторонней библиотеки не должны случайно включать CoreML или другой непроверенный provider.
  • Различать отсутствие библиотек CUDA и обнаруженную несовместимость GPU/runtime. Для явной CUDA не подменять выбранный путь молчаливым fallback; сохранять исходную причину ошибки и давать подходящую подсказку.
  • Обновить README: обычная установка и подключение одного extra cuda на Linux/WSL x86_64 и Windows x64 из клона, через uv tool, для локальной разработки; явный запуск и TOML; обновление существующей установки. Различать драйвер NVIDIA, runtime-библиотеки в extra и полный системный CUDA Toolkit. Указать проверенные внешние требования Windows, включая Visual C++ runtime, если он необходим. Инструкция не должна обещать, что extra устанавливает драйвер или исправляет старое железо. Убрать безусловный совет установить Toolkit при любой CUDA-ошибке Windows.
  • Отразить решение в ADR-001, правилах auto ADR-003/006, относящихся разделах docs/gpu.md и спецификации выполнения транскрипции. Исправить утверждение ADR-001 о недоступности Windows wheel cuBLAS; выводы о runtime-зависимостях привязать к проверенной платформе и версии.

Критерии приёмки

  • Метаданные построенного wheel и разрешение обычной установки не требуют NVIDIA-библиотек на Linux/WSL x86_64 и Windows x64; extra добавляет необходимые CUDA-библиотеки на обеих платформах и не тянет их на неподдерживаемые платформы. Проверены platform markers и lock-файл.
  • На Linux/WSL и Windows присутствие nvidia-smi при обычном запуске не загружает CUDA и не приводит через её ошибку к FasterWhisper CPU; установка extra также не меняет auto.
  • ASR и VAD получают явный CPU provider даже при доступном CoreML/другом provider.
  • Явный выбор CUDA из CLI и TOML сохраняется; ожидаемые ошибки отсутствующих библиотек и несовместимого GPU различаются в тестах, включая пользовательский вывод.
  • Bootstrap безопасен без optional-пакетов на обеих платформах; явные CPU/OpenVINO-пути работают по прежнему контракту. Тестами покрыты обнаружение DLL из extra на Windows и отсутствие библиотек.
  • Состав runtime-зависимостей Windows wheel проверен и зафиксирован. На Windows x64 отдельно проверяется реальная транскрипция с совместимым NVIDIA GPU, драйвером и extra, без системного CUDA Toolkit и ручной правки системного PATH. Результат и окружение прогона записаны; если подходящая машина недоступна, проверка остаётся явно невыполненной и тесты с подменами не считаются её заменой.
  • Документированные команды установки сверены с uv; выполнены относящиеся тесты и uv run pytest. Проверки packaging не требуют скачивания ASR-моделей. Отсутствующий реальный GPU-прогон не выдаётся за выполненный.

Границы

Поддерживаемые CUDA-платформы этой задачи — Linux/WSL x86_64 и Windows x64. Без автоматической установки драйвера, поддержки CUDA на Windows ARM64, рефакторинга владения моделью, настройки бюджета потоков, внедрения CoreML/Windows ML и изменений диаризации. Основная задача рефакторинга использует правила, принятые здесь. Задача готова к работе независимо от неё.

Основания для Windows

  • NVIDIA cuBLAS 12.9.1.4 на PyPI: Windows x64 wheel существует для версии, закреплённой в текущем lock-файле.
  • Инициализация CTranslate2 4.8.1: каталог nvidia.cublas не добавляется в поиск DLL автоматически. Наличие wheel само по себе не подтверждает работоспособность полного Windows CUDA-пути.
## Решение и проблема Обычная установка Linux/WSL x86_64 скачивает обязательную cuBLAS даже для ONNX/CPU. Наличие `nvidia-smi` переключает `auto` на CUDA, хотя драйвер может стоять на несовместимом старом GPU. Дополнительная установка библиотек такую несовместимость не исправляет. На Windows x64 CUDA Toolkit обычно не установлен; текущая инструкция требует его системной установки. Цель — единый способ подключения CUDA на Linux/WSL x86_64 и Windows x64: совместимый драйвер NVIDIA, установка extra `cuda`, явный выбор CUDA через CLI или TOML. Полный системный CUDA Toolkit для этого сценария не требуется; драйвер устанавливается отдельно и не входит в extra. Владелец выбрал optional CUDA и явное включение. Исследовательский вопрос этой задачи решён; задача переведена в реализацию. Первоначально выделена из #1. [Согласованная спецификация](https://git.dementev.space/ddmitry/local-transcriber/src/commit/2b54f5bc9ea71ea5056cb32534330e0295c51f9b/docs/specs/2026-09-21-transcription-execution.md) — разделы «Выбор исполнения и ошибки» и «Документация и прежние решения». Эта задача дополняет спецификацию согласованным расширением установки extra на Windows x64. ## Объём - Перенести `nvidia-cublas-cu12` из обязательных зависимостей в extra `cuda` для Linux/WSL x86_64 и Windows x64 с соответствующими platform markers. Обновить lock-файл; FasterWhisper CPU и Linux bootstrap сохранить. - Проверить фактические runtime-зависимости используемого Windows wheel CTranslate2 и включить в extra необходимые поставляемые через Python-пакеты CUDA-библиотеки. Достаточность одной cuBLAS и отсутствие необходимости в cuDNN не выводить из прежней проверки Linux-библиотеки. - Добавить обнаружение и загрузку DLL из окружения приложения на Windows. Установка extra должна обеспечивать явную CUDA без системного CUDA Toolkit и ручной правки системного PATH. Простого расширения platform marker недостаточно; bootstrap должен быть безопасен без optional-пакетов. - `auto` выбирает ONNX CPU независимо от драйвера, `nvidia-smi` и установки extra. CUDA выбирается только через явный CLI-аргумент или TOML. Загрузка библиотек сама по себе не включает CUDA. - Для ASR и VAD ONNX явно закрепить CPU provider: defaults сторонней библиотеки не должны случайно включать CoreML или другой непроверенный provider. - Различать отсутствие библиотек CUDA и обнаруженную несовместимость GPU/runtime. Для явной CUDA не подменять выбранный путь молчаливым fallback; сохранять исходную причину ошибки и давать подходящую подсказку. - Обновить README: обычная установка и подключение одного extra `cuda` на Linux/WSL x86_64 и Windows x64 из клона, через `uv tool`, для локальной разработки; явный запуск и TOML; обновление существующей установки. Различать драйвер NVIDIA, runtime-библиотеки в extra и полный системный CUDA Toolkit. Указать проверенные внешние требования Windows, включая Visual C++ runtime, если он необходим. Инструкция не должна обещать, что extra устанавливает драйвер или исправляет старое железо. Убрать безусловный совет установить Toolkit при любой CUDA-ошибке Windows. - Отразить решение в ADR-001, правилах `auto` ADR-003/006, относящихся разделах docs/gpu.md и спецификации выполнения транскрипции. Исправить утверждение ADR-001 о недоступности Windows wheel cuBLAS; выводы о runtime-зависимостях привязать к проверенной платформе и версии. ## Критерии приёмки - [x] Метаданные построенного wheel и разрешение обычной установки не требуют NVIDIA-библиотек на Linux/WSL x86_64 и Windows x64; extra добавляет необходимые CUDA-библиотеки на обеих платформах и не тянет их на неподдерживаемые платформы. Проверены platform markers и lock-файл. - [x] На Linux/WSL и Windows присутствие `nvidia-smi` при обычном запуске не загружает CUDA и не приводит через её ошибку к FasterWhisper CPU; установка extra также не меняет `auto`. - [x] ASR и VAD получают явный CPU provider даже при доступном CoreML/другом provider. - [x] Явный выбор CUDA из CLI и TOML сохраняется; ожидаемые ошибки отсутствующих библиотек и несовместимого GPU различаются в тестах, включая пользовательский вывод. - [x] Bootstrap безопасен без optional-пакетов на обеих платформах; явные CPU/OpenVINO-пути работают по прежнему контракту. Тестами покрыты обнаружение DLL из extra на Windows и отсутствие библиотек. - [ ] Состав runtime-зависимостей Windows wheel проверен и зафиксирован. На Windows x64 отдельно проверяется реальная транскрипция с совместимым NVIDIA GPU, драйвером и extra, без системного CUDA Toolkit и ручной правки системного PATH. Результат и окружение прогона записаны; если подходящая машина недоступна, проверка остаётся явно невыполненной и тесты с подменами не считаются её заменой. - [x] Документированные команды установки сверены с uv; выполнены относящиеся тесты и `uv run pytest`. Проверки packaging не требуют скачивания ASR-моделей. Отсутствующий реальный GPU-прогон не выдаётся за выполненный. ## Границы Поддерживаемые CUDA-платформы этой задачи — Linux/WSL x86_64 и Windows x64. Без автоматической установки драйвера, поддержки CUDA на Windows ARM64, рефакторинга владения моделью, настройки бюджета потоков, внедрения CoreML/Windows ML и изменений диаризации. Основная задача рефакторинга использует правила, принятые здесь. Задача готова к работе независимо от неё. ## Основания для Windows - [NVIDIA cuBLAS 12.9.1.4 на PyPI](https://pypi.org/project/nvidia-cublas-cu12/12.9.1.4/#files): Windows x64 wheel существует для версии, закреплённой в текущем lock-файле. - [Инициализация CTranslate2 4.8.1](https://github.com/OpenNMT/CTranslate2/blob/v4.8.1/python/ctranslate2/__init__.py): каталог `nvidia.cublas` не добавляется в поиск DLL автоматически. Наличие wheel само по себе не подтверждает работоспособность полного Windows CUDA-пути.
ddmitry added the needs-triage label 2026-08-11 17:04:02 +03:00
ddmitry changed title from Исследовать опциональную установку CUDA runtime в Linux и WSL to Сделать CUDA необязательной и включаемой явно 2026-09-21 21:58:24 +03:00
ddmitry added ready-for-agent and removed needs-triage labels 2026-09-21 21:58:25 +03:00
ddmitry changed title from Сделать CUDA необязательной и включаемой явно to Сделать CUDA необязательной и включаемой явно на Linux/WSL и Windows 2026-09-21 22:16:15 +03:00
Author
Owner

Реализация влита в master через PR #57 (merge-коммит 343a31b35b321f03c6dd75eb5183270d47ec19ba). Задача закрыта по решению владельца; аппаратная проверка Windows остаётся явно невыполненной.

Итог:

  • Базовая установка не тянет NVIDIA-библиотеки. Extra cuda доступен на Linux/WSL x86_64 и Windows x64; auto всегда выбирает ONNX CPU независимо от драйвера и extra.
  • Явное включение CUDA: установить local-transcriber[cuda], затем передать --device cuda либо сохранить device = "cuda" в .transcriber.toml. Полные команды установки и обновления: README — Подключение CUDA.
  • 524 теста прошли, 2 пропущены. Проверены wheel metadata, platform markers, разрешение base/extra и установка через uv tool. Серверных CI-статусов для этой версии нет.
  • Независимое ревью Opus: APPROVED после исправления двух замечаний (диагностика неподдерживаемого compute type и недостоверная проверка bootstrap в CLI-тесте). Полные отчёты и перепроверка.

Оставшаяся проверка: реальная транскрипция на Windows x64 с совместимым NVIDIA GPU, драйвером, Visual C++ Runtime и extra, без системного Toolkit и ручного изменения PATH. Зафиксировать версии драйвера/GPU, команду запуска и результат; отдельно проверить, возникает ли требование NVRTC из cuBLAS Lt. Статический аудит DLL и тесты с подменами не заменяют этот прогон; соответствующий пункт приёмки оставлен неотмеченным. Подробности — ADR-001.

Реализация влита в master через PR #57 (merge-коммит `343a31b35b321f03c6dd75eb5183270d47ec19ba`). Задача закрыта по решению владельца; аппаратная проверка Windows остаётся явно невыполненной. Итог: - Базовая установка не тянет NVIDIA-библиотеки. Extra `cuda` доступен на Linux/WSL x86_64 и Windows x64; `auto` всегда выбирает ONNX CPU независимо от драйвера и extra. - Явное включение CUDA: установить `local-transcriber[cuda]`, затем передать `--device cuda` либо сохранить `device = "cuda"` в `.transcriber.toml`. Полные команды установки и обновления: [README — Подключение CUDA](https://git.dementev.space/ddmitry/local-transcriber/src/branch/master/README.md#подключение-cuda). - 524 теста прошли, 2 пропущены. Проверены wheel metadata, platform markers, разрешение base/extra и установка через uv tool. Серверных CI-статусов для этой версии нет. - Независимое ревью Opus: APPROVED после исправления двух замечаний (диагностика неподдерживаемого compute type и недостоверная проверка bootstrap в CLI-тесте). [Полные отчёты и перепроверка](https://git.dementev.space/ddmitry/local-transcriber/pulls/57#issuecomment-3048). Оставшаяся проверка: реальная транскрипция на Windows x64 с совместимым NVIDIA GPU, драйвером, Visual C++ Runtime и extra, без системного Toolkit и ручного изменения PATH. Зафиксировать версии драйвера/GPU, команду запуска и результат; отдельно проверить, возникает ли требование NVRTC из cuBLAS Lt. Статический аудит DLL и тесты с подменами не заменяют этот прогон; соответствующий пункт приёмки оставлен неотмеченным. Подробности — ADR-001.
Sign in to join this conversation.