Как понизить CUDA с 11.4 до 10.2 и добавить ошибку sm_35 — CUDA: образ ядра недоступен для выполнения на устройстве

#pytorch #gpu

Вопрос:

Я пытаюсь запустить фрагмент кода на Pytorch, но получаю ошибку:

 RuntimeError: CUDA error: no kernel image is available for execution on the device
 

Я сузил круг вопросов, чтобы избежать совпадения версий CUDA. На моей машине 2 графических процессора:
GeForce GTX 650 (вычислительные возможности 3.0) и Tesla K40c (вычислительные возможности 3.5). Я проверил вычислительные возможности здесь: https://developer.nvidia.com/cuda-gpus.
Моя nvidia-smi команда дает следующее:

вывод nvidia-smi (Версия драйвера: 470.57.02 и версия CUDA: 11.4)

В то время как моя nvcc -V команда дает следующее:

 nvcc: NVIDIA (R) Cuda compiler driver
Copyright (c) 2005-2019 NVIDIA Corporation
Built on Sun_Jul_28_19:07:16_PDT_2019
Cuda compilation tools, release 10.1, V10.1.243
 

Версия 10.1 существует, потому что я пытался установить эту версию CUDA, в частности, следуя инструкциям в другом месте (например: https://medium.com/@anarmammadli/how-to-install-cuda-10-2-cudnn-7-6-5-and-samples-on-ubuntu-18-04-2493124478ca)

Кроме того, я установил cudatoolkit с conda , и так далее, У conda list меня есть следующая запись:

 ...
cudatoolkit               10.1.243             h6bb024c_0
...
 

В соответствии с https://github.com/moi90/pytorch_compute_capabilities/blob/main/table.md Я также установил версию 1.8.0 PyTorch.

Однако в Python 3.7.11:

 Python 3.7.11 (default, Jul 27 2021, 14:32:16)
[GCC 7.5.0] :: Anaconda, Inc. on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import torch
>>> torch.__version__
'1.8.1'
>>> torch.version.cuda
'10.1'
>>> torch.cuda.get_arch_list()
['sm_37', 'sm_50', 'sm_60', 'sm_61', 'sm_70', 'sm_75', 'compute_37']
>>> torch.cuda.is_available()
True
 

У меня нет sm_35 в наличии, что мне нужно для использования Tesla K40. Я считаю, что именно по этой причине я продолжаю получать CUDA error: no kernel image is available for execution on the device ошибку. Я также попробовал все вышеперечисленное для версии 10.2 CUDA, тот же результат.

Комментарии:

1. Вам нужно будет найти и установить версию PyTorch, созданную с поддержкой cc3.5 . Драйвер, который вы уже установили, в порядке.

2. Так что, похоже, мне требуется Pytorch с версией до 1.5 ?

3. То, какая двоичная поддержка имеется в данной версии Pytorch, не является функцией набора инструментов CUDA или Pytorch (в пределах поддержки), это то, какую двоичную поддержку разработчики Pytorch выбирают для распространения. Они предпочитают жертвовать более старой аппаратной поддержкой для меньшего размера двоичного пакета. Вероятно, вы можете самостоятельно создать более современную версию Pytorch с помощью инструментария CUDA 10.x. Если нет, вам придется брать то, что они дают, и это будет очень старо

Ответ №1:

Я решил свою проблему. Как указано в комментариях, мне требовалась версия PyTorch, поддерживающая sm_35 вычислительные возможности. Это имело мало общего с текущей версией CUDA. В конце концов, я нашел эти двоичные файлы:

https://blog.nelsonliu.me/2020/10/13/newer-pytorch-binaries-for-older-gpus/

Я, наконец, исправил проблему, создав новую среду и запустив:

 pip install torch==1.3.1 cu92 -f https://nelsonliu.me/files/pytorch/whl/torch_stable.html