2 заметки с тегом

CUDA

Ошибка при работе с библиотекой implicit на GPU

Работаю тут с библиотекой implicit для питона, настроил всю инфраструктуру CUDA, прописал все пути, но все равно ловил странное исключение, при попытке использования ALS на GPU:

No CUDA extension has been built, can't train on GPU

Чтож, идем читать исходники als.py:


if not implicit.gpu.HAS_CUDA:
    raise ValueError("No CUDA extension has been built, can't train on GPU.")

Очевидно, HAS_CUDA == False, но с чего это вдруг? Находим инициализацию этой переменной в __init__.py:


try:
    import cupy  # noqa

    from ._cuda import *  # noqa

    HAS_CUDA = True
except ImportError:
    HAS_CUDA = False

Файл _cuda — локальный, значит остается только проверить наличие cupy на рабочей машине. И правда, все дело было именно в её отсутствии. Ну хоть сообщить то об этом нормально можно было? :(

Устанавливаем по  инструкции, запускаем fit на ALS и вуаля, все работает. На RTX 3090 прирост скорости обучения, по сравнению с Xeon W-2265, у меня был примерно в 20 раз, на разреженной матрице размерности 300000х100000.

 Нет комментариев    540   2021   CUDA   GPU   Python

Unknown option «-​-enable-cuda-sdk».

Забавная опечатка в официальной инструкции Nvidia по сборке ffmpeg для работы с CUDA.

Пишут, что для конфигурации надо сделать:

./configure --enable-nonfree -–enable-cuda-sdk –enable-libnpp --extra-cflags=-I/usr/local/cuda/include --extra-ldflags=-L/usr/local/cuda/lib64

Если это нагло скопипастить и выполнить, то получим такую вот ошибку:

Unknown option "-–enable-cuda-sdk".

Молодцы они эдакие, в своем копипастном примере взяли и поменяли знак минуса на дефис. Я почти уверен, что текст верстали под macOS, она любит такие автозамены проворачивать.

Надо вот так:

./configure --enable-nonfree --enable-cuda-sdk --enable-libnpp --extra-cflags=-I/usr/local/cuda/include --extra-ldflags=-L/usr/local/cuda/lib64

А если получим варнинг:

WARNING: Option --enable-cuda-sdk is deprecated. Use --enable-cuda-nvcc instead.

То вообще вот так:

./configure --enable-nonfree --enable-cuda-nvcc --enable-libnpp --extra-cflags=-I/usr/local/cuda/include --extra-ldflags=-L/usr/local/cuda/lib64

Ну все, теперь можно компилить и пользоваться.

P.S. Забавно, движок блога Эгея тоже сливает два минуса в дефис, если они находятся вне тэга «код», поэтому в заголовке я их разделил пробелом нулевой длины.