Выпуск ZLUDA 5, универсальной открытой реализации технологии CUDA

Анджей Яник (Andrzej Janik) представил выпуск ZLUDA 5, открытой реализации технологии CUDA. Целью проекта является предоставление возможности запуска немодифицированных приложений CUDA на системах с GPU, отличными от GPU NVIDIA, с производительностью, близкой к производительности приложений, выполняемых без прослоек. Код проекта написан на языке Rust и распространяется под лицензиями MIT и Apache 2.0.

ZLUDA 5 стал вторым значительным выпуском проекта, сформированным после чистки кодовой базы от кода, разработанного во время работы Анджея в компании AMD. С 2022 года Анджей работал в AMD над созданием слоя для совместимости GPU AMD с CUDA, но в 2024 году проект был свернут. В соответствии с условиями контракта и после получения разрешения на публикацию от представителя AMD, Анджей открыл код наработок, созданных во время работы в AMD и позволяющих выполнять CUDA-приложения поверх стека ROCm и runtime HIP (Heterogeneous-computing Interface for Portability).

В прошлом году Анджей был вынужден убрать код из открытого доступа после письма от юристов, давших понять, что разрешение, данное в ходе переписки по email, не имеет юридической силы. После этого Анджей начал работу над новой редакцией ZLUDA, сформированной на основе кодовой базы, существовавшей до начала работы Анджея в AMD. В текущем виде разработка сосредоточена на выполнении приложений, использующих CUDA для ускорения задач, связанных с машинным обучением. Проект пока ограничивается работой на GPU AMD, но в дальнейшем будет адаптирован для GPU Intel.

Ключевые улучшения в новом выпуске:

  • Добавлена начальная поддержка запуска поверх ZLUDA фреймворков llm.c, Llama.cpp и PyTorch для выполнения больших языковых моделей с задействованием CUDA-оптимизаций, применяемых для GPU NVIDIA.
  • Реализована начальная поддержка запуска приложений, использующих для повышения производительности библиотеки cuBLAS, cuBLASLt и nvml.
  • Добавлена прослойка zluda_trace для трассировки приложений, использующих CUDA. При помощи zluda_trace можно диагностировать проблемы и выявлять недоработки в ZLUDA, мешающие нормальному выполнению приложения.
  • Представлена утилита командной строки zoc (ZLUDA offline compiler), позволяющая компилировать файлы с инструкциями NVIDIA PTX в промежуточное представление AMD RDNA (ранее данная функциональность была доступна в форме библиотечных функций).
  • В загрузчике модулей PTX реализован механизм кэширования выполняемых на GPU ядер. Кэширование позволяет избежать повторного выполнения ресурсоёмких операций компиляции инструкций PTX (Parallel Thread Execution) в машинный код для заданного GPU.
Release. Ссылка here.