Viva La vida684 2023-11-09 21:45 采纳率: 0%
浏览 12

python导入自己写的.pyd报错DLL load failed

我自己使用cuda编写了一个tensor类,放在tensor.h的头文件中,然后使⽤Pytorch中的CUDAExtension实现对pybind的编译,通过python setup.py develop生成了一个mytensor.pyd文件,现在在同一个文件夹中的py文件尝试导入mytensor,导入时已经有代码提示,但是运行时显示ImportError: DLL load failed while importing mytensor,猜想可能是cuda代码有一定特殊性在,不知道如何处理,希望能得到指点!

img

img

  • 写回答

1条回答 默认 最新

  • CSDN-Ada助手 CSDN-AI 官方账号 2023-11-10 10:18
    关注

    【以下回答由 GPT 生成】

    回答:

    首先,确保你正在使用的Python版本与PyTorch版本兼容,并且已经正确安装了CUDA驱动程序和PyTorch。

    接下来,我将提供一些可能的解决方案来解决"DLL load failed"错误。

    1. 检查CUDA运行时环境路径

    您需要确保CUDA运行时库(例如cudart64_101.dll)的路径位于系统环境变量PATH中。这可以通过以下步骤完成:

    1. 打开文件资源管理器并导航至CUDA安装目录(例如:C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v10.1\bin)。

    2. 复制此路径。

    3. 在开始菜单中搜索"环境变量",并选择"编辑系统环境变量"。

    4. 在"系统变量"部分中,找到名为"Path"的变量,并双击打开它。

    5. 在"变量值"文本框中,将路径粘贴到最后,确保路径之间用分号分隔(例如:"原来的路径;C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v10.1\bin")。

    6. 点击"确定"保存更改。

    7. 重新启动您的计算机。

    2. 检查CUDA架构匹配

    您需要确保您的编写的CUDA代码与您的GPU架构兼容。某些版本的PyTorch只支持特定的CUDA架构。

    1. 首先,使用以下Python代码验证您的GPU架构:
    import torch
    print(torch.cuda.get_device_capability(0))
    
    1. 然后,查看您运行的PyTorch版本的文档,确保它支持您的GPU架构。
    2. 您可以在PyTorch官方文档中找到以前版本的文档。
    3. 搜索您的PyTorch版本的兼容性要求。

    如果您的GPU架构与PyTorch版本不兼容,您可以尝试升级或降级PyTorch版本,或者重新编写您的CUDA代码以与兼容的GPU架构工作。

    3. 使用conda虚拟环境

    如果您使用的是conda虚拟环境,请确保在该虚拟环境中正确配置CUDA和PyTorch。

    首先,激活您的conda虚拟环境:

    conda activate [虚拟环境名]
    

    然后,使用conda安装正确版本的PyTorch和CUDA驱动程序:

    conda install pytorch=[PyTorch版本] cudatoolkit=[CUDA版本] -c pytorch
    

    确保将[PyTorch版本]和[CUDA版本]替换为您要使用的版本。

    4. 检查编译选项

    在编译PyTorch的CUDA扩展时,您需要确保在setup.py文件中使用正确的编译选项来与CUDA库链接。尤其是需要指定extra_compile_argsextra_link_args参数来包含正确的CUDA库路径和链接器选项。

    以下是一个示例setup.py文件的片段,包含了可以用于PyTorch的CUDA扩展的编译选项:

    import torch
    from setuptools import setup
    from torch.utils.cpp_extension import CUDAExtension, BuildExtension
    
    extra_compile_args = ['-std=c++11', '-DTORCH_API_INCLUDE_EXTENSION_H']
    extra_link_args = ['-L/path/to/cuda/lib', '-lcudart']
    
    setup(
        name='my_tensor',
        ext_modules=[
            CUDAExtension('my_tensor', [
                'my_tensor.cpp',
                'my_tensor_kernel.cu',
            ], extra_compile_args=extra_compile_args, extra_link_args=extra_link_args),
        ],
        cmdclass={
            'build_ext': BuildExtension
        }
    )
    

    确保将/path/to/cuda替换为您的CUDA安装目录。

    5. 检查依赖项

    您还需要确保您的环境中已正确安装了所需的依赖项。使用以下命令检查并安装缺失的依赖项:

    pip install -r requirements.txt
    

    确保将requirements.txt替换为您项目目录中的依赖项文件。

    如果您还没有设置requirements.txt文件,请手动pip安装缺失的依赖项。

    如果这些解决方案都没有帮助,那么可能存在其他问题导致无法加载您的.pyd文件。这时,请重新审查您的环境设置、编译选项以及CUDA代码和PyTorch版本之间的兼容性。如果需要,请查阅官方文档或寻求专业CUDA开发者的帮助来解决问题。


    如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^
    评论

报告相同问题?

问题事件

  • 创建了问题 11月9日

悬赏问题

  • ¥40 微信小程序 使用vant组件ActionSheet 下拉面板,内容区域滚动会触发。scroll-view自定义下拉刷!即使设置停止下拉刷新也不行。
  • ¥15 专业问题提问,7月5号2点之前
  • ¥25 使用cube ai 导入onnx模型时报错
  • ¥15 关于#微信小程序#的问题:用一个网页显示所有关联的微信小程序数据,包括每个小程序的用户访问量
  • ¥15 root的安卓12系统上,如何使apk获得root或者高级别的系统权限?
  • ¥20 关于#matlab#的问题:如果用MATLAB函数delayseq可以对分数延时,但是延时后波形较原波形有幅度上的改变
  • ¥15 使用华为ENSP软件模拟实现该实验拓扑
  • ¥15 通过程序读取主板上报税口的数据
  • ¥15 matlab修改为并行
  • ¥15 尝试访问%1服务的windows注册表时遇到问题。必须先解决此问题,然后才能运行安装过程。(请确认您正在使用管理员权限运行)373