Google Colab не видит файлы .so - PullRequest
0 голосов
/ 27 мая 2020

Я пытаюсь создать расширение CUDA, чтобы использовать его в Python в Google Colab.

Это setup.py

sources = [os.path.join(path_to_cpp, 'interface.cpp'),
            os.path.join(path_to_cpp, 'box_encoder_cuda.cu'),
            os.path.join(path_to_cpp, 'random_horiz_flip.cu')]

setup(
    name='SSD',
    ext_modules=[
        CUDAExtension(
            'SSD._C', 
            sources)
    ],
    cmdclass={
        'build_ext': BuildExtension
    })

Когда я его создаю, я ясно могу посмотрите, что libc10.so присутствовал в сборке

x86_64-linux-gnu-g++ -pthread -shared -Wl,-O1 -Wl,-Bsymbolic-functions -Wl,-Bsymbolic-functions -Wl,- 
z,relro -Wl,-Bsymbolic-functions -Wl,-z,relro -g -fstack-protector-strong -Wformat -Werror=format- 
security -Wdate-time -D_FORTIFY_SOURCE=2 build/temp.linux-x86_64-3.6/content/drive/My  
Drive/SSD/csrc/interface.o build/temp.linux-x86_64-3.6/content/drive/My Drive/SSD/csrc/box_encoder_cuda.o build/temp.linux-x86_64-3.6/content/drive/My  
Drive/SSD/csrc/random_horiz_flip.o -L/usr/local/lib/python3.6/dist-packages/torch/lib - 
L/usr/local/cuda/lib64 -lc10 -ltorch -ltorch_cpu -ltorch_python -lcudart -lc10_cuda -ltorch_cuda -o  
build/lib.linux-x86_64-3.6/SSD/_C.cpython-36m-x86_64-linux-gnu.so  

Однако, если я попытаюсь использовать его в Colab:

%%writefile test.py
import SSD._C

print("All ok")
!python test.py

, я увижу следующее сообщение об ошибке:

Traceback (most recent call last):
  File "test.py", line 1, in <module>
    import SSD._C
ImportError: libc10.so: cannot open shared object file: No such file or directory

Может быть, это происходит из-за того, что библиотеки не были объявлены во время выполнения Python, и мне нужно как-то их объявить? Заранее спасибо!

PS Когда я пытаюсь использовать его прямо в ячейке, без записи в файл .py:

import SSD._C

print("All ok")

, получается

ModuleNotFoundError: No module named 'SSD'

1 Ответ

0 голосов
/ 27 мая 2020

Проблема решена путем импорта torch перед импортом расширения:

%%writefile test.py
import torch
import SSD._C

print("All ok")

Согласно документации"это разрешит некоторые символы, которые должен видеть компоновщик Dynami c".

Однако, почему это расширение не может использоваться непосредственно в ячейке .ipynb, все еще остается открытым.

Изменить: Если вы устанавливаете новое расширение в .ipynb, сделайте обязательно перезапустите среду выполнения перед ее использованием. После перезапуска вы сможете использовать новое расширение в ячейках .ipynb

...