【问题标题】:Google Colab does not see .so filesGoogle Colab 看不到 .so 文件
【发布时间】:2020-05-27 18:31:55
【问题描述】:

我正在尝试制作一个 CUDA 扩展,以便在 Google Colab 的 Python 中使用它。

这是 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 运行时声明,我必须以某种方式声明它们?提前谢谢!

附: 当我尝试直接在单元格中使用它而不写入 .py 文件时:

import SSD._C

print("All ok")

它产生

ModuleNotFoundError: No module named 'SSD'

【问题讨论】:

    标签: python c++ shared-libraries google-colaboratory


    【解决方案1】:

    在导入扩展之前导入torch解决了问题:

    %%writefile test.py
    import torch
    import SSD._C
    
    print("All ok")
    

    根据documentation“这将解析动态链接器必须看到的一些符号”。

    但是,为什么这个扩展不能直接在 .ipynb 单元格中使用仍然是一个开放点。

    编辑:如果您在 .ipynb 中安装新扩展,请确保在使用前重新启动运行时。重新启动后,您将能够在 .ipynb 单元格中使用新的扩展名

    【讨论】: