Ошибка времени выполнения: ошибка CUDA: недопустимый аргумент.tensor. cuda() вызывает ошибку после выполнения скомпилированной функции C cuda

#pytorch #shared-libraries

Вопрос:

Все мои операторы являются:

  1. Запишите функцию в .cu файл.
  2. Компиляция .cu с использованием nvcc xxx.cu -o xxx.so -shared -Xcompiler -fPIC
  3. Загрузите его с помощью ctypes.cdll

Ошибка произошла во время:

 lib = ctypes.cdll.load('xxx.so')

tmp = torch.ones((1, 1)).cuda()

a = np.ones((1, 1))
b = lib.xxx(a)

tmp = torch.ones((1, 1)).cuda()
 

Ошибка при выполнении второго tensor.cuda()

RuntimeError: CUDA error: invalid argument

Но даже если ошибка произошла, torch.cuda.is_available() это все равно Правда.

Ошибка исчезнет, если я никогда не загружу тензор на графический процессор, то есть:

 lib = ctypes.cdll.load('xxx.so')

tmp = torch.ones((1, 1))

a = np.ones((1, 1))
b = lib.xxx(a)

tmp = torch.ones((1, 1)).cuda()
 

выполняется без ошибок.

Я хочу найти метод для выполнения функции в .so любом месте.