Налаштування CUDA/cuDNN: як уникнути помилок сумісності
Звернувся до нас стартап: три тижні не могли запустити тренування LLaMA на двох A100. Помилка "CUDA error: no kernel image is available" при імпорті PyTorch. Перевстановили оточення, перевірили драйвери, версії — причина виявилася в тому, що PyTorch був зібраний під CUDA 11.8, а в системі стояла CUDA 12.2. Ми підняли контейнер з правильною версією, налаштували Persistence Mode, і продуктивність зросла на 40%. Такі кейси — не рідкість. Налаштовуємо CUDA/cuDNN під ключ: від аудиту поточного оточення до оптимізації під конкретні фреймворки. Економія на хмарних обчисленнях може досягати 50% — це $2000 на місяць для проекту з 4 GPU A100.
Згідно з офіційною матрицею сумісності NVIDIA CUDA Support Matrix, версії драйвера, CUDA, cuDNN та фреймворків жорстко пов'язані. Невідповідність хоча б на один пункт — і GPU простоює.
Проблеми, які ми вирішуємо
Version hell — бібліотеки ML вимагають суворої прив'язки: драйвер → CUDA → cuDNN → PyTorch/TensorFlow. Помилка на один пункт — і GPU простоює. Ми автоматично перевіряємо матрицю сумісності через скрипти, виключаючи ручні помилки.
Низька продуктивність GPU — часто GPU працює в енергозберігаючому режимі (P8) замість продуктивного (P0). Падіння FLOPS на 30–50%. Вмикаємо Persistence Mode (nvidia-smi -pm 1) та налаштовуємо частоти.
Відсутність відтворюваності — налаштували вручну, втратили конфіг при перевстановленні. Ми створюємо Docker-образи з фіксованими версіями, які гарантовано працюють на будь-якій машині з драйвером NVIDIA.
Типові помилки — gpu обчислення без
- no kernel image is available — невідповідність CUDA між PyTorch та системою.
- libcudnn.so.8 not found — відсутній cuDNN або невірна версія.
- GPU utilization < 20% — енергозберігаючий режим.
- Out of memory при batch size 32 — нестача VRAM.
Як ми це робимо
Приклад налаштування для команди, яка використовує PyTorch та TensorFlow.
-
Аудит — перевіряємо поточні драйвери (
nvidia-smi), версіїnvcc, встановлені CUDA Toolkit, cuDNN, фреймворки. -
Вибір стратегії — для гнучкості Conda-оточення з
pytorch-cuda=12.1. Для production — Docker-образ на основіnvidia/cuda:12.1.1-cudnn8-runtime-ubuntu22.04. -
Встановлення — використовуємо Dockerfile:
FROM nvidia/cuda:12.1.1-cudnn8-runtime-ubuntu22.04 RUN conda create -n ml python=3.11 pytorch torchvision torchaudio pytorch-cuda=12.1 -c pytorch -c nvidia CMD ["python", "-c", "import torch; print(torch.cuda.is_available())"]Валідація — запускаємо тест на матричне множення 8192x8192 (FP16), перевіряємо latency p99, GPU utilization через
nvidia-smi dmon.Оптимізація — вмикаємо
torch.backends.cudnn.benchmark=True, встановлюємоNVIDIA_TF32_OVERRIDE=0для максимальної точності.Порівняння способів встановлення
Критерій Conda Docker Ручне встановлення Простота Висока Середня Низька Ізоляція Часткова Повна Відсутня Відтворюваність Середня Висока Низька Контроль версій Обмежений Повний Повний Час налаштування 15 хв 30 хв 2 години Docker кращий за ручне встановлення за відтворюваністю та ізоляцією, порівнянний за продуктивністю при правильному налаштуванні контейнера. Docker у 3 рази швидше розгортається, ніж ручне встановлення. Рекомендуємо Docker для production, Conda — для швидких експериментів.
Таблиця сумісності версій для популярних фреймворків
Фреймворк Рекомендована CUDA Рекомендований cuDNN PyTorch 2.1 12.1 8.9 TensorFlow 2.13 11.8 8.6 JAX 0.4.14 12.1 8.9 Чому Docker — кращий вибір для production?
Docker гарантує однакове оточення на всіх етапах: розробка, тестування, продакшен. Немає проблем з "на моїй машині працює". Фіксуємо CUDA, cuDNN, Python, фреймворки в одному Dockerfile. Документація по NVIDIA CUDA Toolkit та офіційному сайту cuDNN доступна на порталі NVIDIA.
Conda підходить для дослідницьких проектів, де важлива швидкість розгортання та гнучкість. Conda автоматично встановлює сумісні CUDA та cuDNN для PyTorch та TensorFlow, але не забезпечує повної ізоляції. Економія бюджету на тестування гіпотез — до 50% за рахунок швидкої переконфігурації.
Чек-лист: що перевірити перед налаштуванням
- Версія драйвера NVIDIA: не нижче R525
- Доступні CUDA Toolkit:
nvcc --version - Встановлені бібліотеки cuDNN
- Наявність Docker-демона (якщо планується контейнеризація)
- Доступ до реєстру образів (Docker Hub, NVIDIA NGC)
Процес роботи
- Discovery (1–2 дні) — аналіз поточного стеку, версій, вимог фреймворків, цілей щодо продуктивності.
- Проектування (1 день) — вибір версій CUDA/cuDNN/драйвера, підготовка скриптів встановлення або Dockerfile.
- Реалізація (2–3 дні) — встановлення на вашій інфраструктурі (bare metal, VM, Kubernetes).
- Тестування (1–2 дні) — unit-тести фреймворків, навантажувальний тест на вашій моделі, порівняння з еталоном.
- Деплой та документація (1 день) — передача оточення, README з точними версіями, опис процедури оновлення.
Терміни та вартість
Термін налаштування: від 2 до 5 днів залежно від складності інфраструктури. Вартість розраховується індивідуально після аудиту. Отримайте консультацію — зв'яжіться з нами для оцінки вашого проекту. За 7+ років ми налаштували GPU-оточення для більш ніж 50 компаній.
Що входить в роботу та наші гарантії
- Повний аудит поточного оточення зі звітом про версії та вузькі місця.
- Вибір оптимальної стратегії (Docker/Conda/manual) під ваш проект.
- Встановлення та налаштування драйверів, CUDA Toolkit, cuDNN, фреймворків.
- Створення Docker-образів або Conda-оточень з фіксацією версій.
- Навантажувальне тестування з метриками продуктивності.
- Документація: README, інструкція з оновлення, скрипти для CI/CD.
- Підтримка при розгортанні на production-серверах.
Досвід: більше 7 років роботи з ML-інфраструктурою. Більше 50 успішних проектів з налаштування GPU-оточень (від одиночних RTX до кластерів A100). Сертифіковані інженери NVIDIA. Гарантуємо сумісність всіх версій та прискорення обчислень щонайменше на 20%. Замовте налаштування з гарантією сумісності — отримайте робоче оточення за 3 дні.
Чи можна налаштувати CUDA за 1 годину?
Так, використовуючи готові Docker-образи, налаштування займає до 1 години. Ручне встановлення — від 2 годин. Docker у 3 рази швидше.
Як Docker порівнюється з Conda за продуктивністю?
Docker забезпечує ізоляцію та відтворюваність, але при правильному налаштуванні продуктивність практично однакова. Втрати в Docker менше 1%.







