44
27 августа 2025
ZLUDA: что это, как устроена и когда имеет смысл
ZLUDA — «drop‑in» замена драйвера CUDA: позволяет запускать неизменённые CUDA‑приложения на GPU от AMD (и других).
Что такое ZLUDA
ZLUDA — «drop‑in» замена драйвера CUDA: позволяет запускать неизменённые CUDA‑приложения на не‑NVIDIA GPU, прежде всего на AMD Radeon. По сути это подмена libcuda.so/nvcuda.dll с дальнейшей трансляцией PTX в код под AMD через ROCm. Цель — приблизиться к нативной производительности, но проект остаётся R&D и не закрывает все сценарии.
Ключевые свойства:
- Совместимость на уровне драйвера: приложения продолжают думать, что работают с CUDA.
- Трансляция PTX → LLVM IR → AMD: компиляция происходит «на лету» через HIP/ROCm toolchain. PTX — это промежуточный «ассемблероподобный» язык NVIDIA для CUDA.
- Цель — почти нативная производительность: на части микробенчмарков уже достижимо, в реальных пайплайнах зависит от библиотек и особенностей нагрузок.
Статус проекта. Были различные судебные разбирательства между AMD и основателем проекта. Сейчас репозиторий активно развивается, однако вне демонстраций совместимость ограничена. Команда регулярно публикует обновления (фиксирует проблемы в ROCm/компиляторе, улучшает логирование, расширяет покрытие отдельных кейсов).
Поддержка платформ и железа:
- GPU: AMD Radeon RX 5000+ (включая некоторые iGPU RDNA); фактическое покрытие уточняйте по релизам.
- ОС: Linux и Windows; macOS не поддерживается.
- Драйверы/ROCm: целевые версии — ROCm 6.1+ (критична совместимость по версиям).
Установка и запуск (в общих чертах):
1) Поместите libcuda.so/nvcuda.dll из сборки ZLUDA рядом с приложением или настройте LD_LIBRARY_PATH (Linux).
2) Для сборки из исходников — cargo xtask --release.
3) Начинайте с небольших «канареечных» задач (см. ниже рекомендации).
Как это работает внутри (упрощённо):
1) Приложение обращается к CUDA API; ZLUDA перехватывает вызовы как «прокси».
2) PTX-код преобразуется в LLVM IR.
3) Через ROCm/HIP формируется бинарь под конкретный AMD GPU.
4) Исполнение идёт на устройстве AMD, для приложения это выглядит как обычная CUDA.
Базовые вещи о библиотечной экосистеме на 2025
CUDA‑библиотеки. Покрытие API частичное. В проекте есть обвязки под cuBLAS, cuDNN, cuFFT и др., но до уровня производственной зрелости далеко. Специфичные и новейшие функции часто не поддержаны.
Диагностика. Nsight Compute/Systems не предназначены для работы через «прокси». Делайте ставку на логи ZLUDA и собственные метрики.
Версии ROCm. Интерфейсы меняются; встречаются регрессии (например, вокруг comgr). Держите согласованные версии ZLUDA/драйверов/ROCm.
PTX обязателен. Если в «fatbinary» нет PTX (только CUBIN/SASS), JIT‑путь ZLUDA, как правило, не сработает.
Важные ZLUDA-нюансы
Переварив множество специализированных чатов, я выделил бы следующие вещи.
1) Лицензия CUDA и «translation layers». С CUDA 11.6 EULA запрещает такие слои для запуска CUDA на не‑NVIDIA GPU. Это прямой юридический риск для коммерческого использования и облаков. Перед пилотом согласуйте позицию с юристами.
2) SIMT различия: warp (NVIDIA) vs wavefront (AMD). В CUDA базовый «warp» — 32 потока; у AMD чаще «wavefront» — 64 (RDNA поддерживает 32/64). Это влияет на:
- корректность примитивов синхронизации/баллотировки/шифлов;
- расчёт оккупации и регистров;
- чувствительность к дивергенции.
Если ядра «заточены» под поведение warp=32, возможны расхождения и регрессии производительности.
3) Модель памяти, атомики, денормалы. Семантики CUDA и HIP/AMD ISA не совпадают полностью. В краевых случаях возможны расхождения. Для бит‑точных задач — отдельная валидация.
4) Про производительность. «Почти нативно» достижимо на части синтетики и простых кернелов. В реальных ML/3D‑пайплайнах упирается в неполные библиотеки, разницу в wavefront, кэши/расписание и издержки JIT. Делайте A/B‑замеры против эталонов NVIDIA и нативного HIP.
5) Отбор рабочих нагрузок для пилота. Начинайте с задач, где:
- в поставке присутствует PTX и нет жёсткой привязки к версии CUDA‑рантайма;
- не требуются новейшие фичи cuDNN/cuBLASLt;
- минимальна зависимость от warp‑специфики (например, «shuffle»/«ballot» с предположением 32).
Требовательные библиотеки и «экзотика» — во вторую волну.
6) Практика эксплуатации.
- Держите матрицу совместимости: модели → версии CUDA → наличие PTX → зависимости от библиотек.
- Закрепите версии ROCm/драйверов/ZLUDA на период эксперимента.
- Добавьте регрессионные тесты корректности (бит‑точность/сходимость) в CI.
- Планируйте время на профилирование и дополнительное логирование.
7) Стратегический контекст. Помимо ZLUDA есть альтернативы: портирование под HIP, Spectral SCALE и др. С учётом ограничений лицензии и покрытия библиотек рассматривайте ZLUDA как R&D‑инструмент, а не прямую замену продакшн‑стека.
Ситуация со ZLUDA на 2025
С учётом текущего состояния рынка и экосистемы необходимо трезво оценивать ожидания от ZLUDA. Большая часть научных вычислений и офлайн GPU‑рендера исторически оптимизирована и стандартизована под CUDA. Практический опыт разработки GPU‑солверов показывает: OpenCL, несмотря на официальную поддержку NVIDIA, уступает по зрелости и производительности; решения класса переводческих слоёв (например, ZLUDA) неизбежно имеют отставание по эффективности и совместимости относительно нативных реализаций. На уровне закупок и эксплуатации многие годы преобладал выбор NVIDIA, поэтому накоплены миллионы единиц их видеокарт, и просто так от них никто не откажется. Так что, поддержка AMD ещё многие годы будет вторична.
Плюс, кратко по острым вопросам:
- Работает ли на macOS? — Нет, поддерживаются только Linux и Windows.
- Нужен ли PTX? — Да, так как без PTX совместимость сильно падает.
- Можно ли ждать «как CUDA» совместимость библиотек? — Нет, покрытие частичное.
- Подойдёт ли для LLM‑инференса «из коробки»? — Для простых сценариев (llm.c/llama.cpp‑класс) — возможно. Для продвинутых стеков с
cuDNN/cuBLASLt— закладывайте риски.
ZLUDA закрывает понятную инженерную нишу: запуск CUDA‑кода на AMD без переписывания. Для исследований и аккуратных пилотов этого уже достаточно. Для широкого продакшн‑использования пока мешают лицензия CUDA, неполное покрытие библиотек и различия архитектур. Если решитесь на пилот — фиксируйте версии ROCm/драйверов/ZLUDA, проверяйте корректность и перфоманс на своих задачах, а нативный HIP держите как план Б.
Рекомендуем прочесть: