SRU:ModuleNotFoundError: No module named ‘cuda_functional‘和OSError: libnvrtc.so: cannot open shared

本文针对SRU(Simple Recurrent Units)在特定环境下安装及使用过程中出现的两个常见错误进行了详细解析,并给出了有效的解决方案。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  最近为了尝试解决LSTM开销大的问题,在查找一些改进工作,首先是找到了Simple Recurrent Units for Highly Parallelizable Recurrence(SRU)这篇工作,但是在使用的过程中一直遇到两个错(如题),看了作者Github(https://github.com/asappresearch/sru)上Issue中的帖子,别没有发现好的解决办法,今天下午就尝试着自己去分析了这两个问题的根源。
实验环境
OS:Linux
Cuda:10.0.130
pytorch:1.2.0
sru:2.1.6

安装SRU

  1. pip install sru(默认最新版)
  2. 通过源码python setup.py install or pip install .
  3. 如果要指定版本,例如我的环境不支持目前最新的2.5.1所以我选择了2.1.6
    a) pip install sru==2.16
    b)下载相应版本的源码,通过python setup.py install or pip install .安装
    c)下载方式:点击tags标签就会看到所有的版本,可以选择合适的进行下载
    在这里插入图片描述
    d)安装前一定要先安装好requirements.txt中所需要的库

为了验证是否会遇到该帖子的问题,建议先运行GitHub仓库中给定的样例代码(我们在最后添加一行打印输出)

import torch
from sru import SRU, SRUCell

# input has length 20, batch size 32 and dimension 128
x = torch.FloatTensor(20, 32, 128).cuda()

input_size, hidden_size = 128, 128

rnn = SRU(input_size, hidden_size,
    num_layers = 2,          # number of stacking RNN layers
    dropout = 0.0,           # dropout applied between RNN layers
    bidirectional = False,   # bidirectional RNN
    layer_norm = False,      # apply layer normalization on the output of each layer
    highway_bias = 0,        # initial bias of highway gate (<= 0)
    rescale = True,          # whether to use scaling correction
)
rnn.cuda()

output_states, c_states = rnn(x)      # forward pass
print(output_states.shape)

# output_states is (length, batch size, number of directions * hidden size)
# c_states is (layers, batch size, number of directions * hidden size)

问题一:ModuleNotFoundError: No module named 'cuda_functional’
在这里插入图片描述
解决思路:
  既然问题是找不到module,那我们就直接去源码分析,首先通过上图可以看到问题出在sru库,那我们直接到这个库看一下,通过命令 ls /home/***/anaconda3/lib/python3.6/site-packages/sru/实际中根据自己的环境路径来更改,我们发现,sru下有这个模块
在这里插入图片描述
既然有这个模块依然找不到,那么第一反应就应该是查看__init__.py文件,我们发现其中确实没有导入这个模块,那么我们就自己加入这个引用from .cuda_functional import *,问题得到根本解决
在这里插入图片描述
问题二:OSError: libnvrtc.so: cannot open shared object file: No such file or directory
  解决了问题一,这是接下来的报错
在这里插入图片描述
  GitHub Issue中有人提到libnvrtc.so.10.0的问题,可能是cuda版本不匹配,自己可以去尝试,我的是匹配的,而且服务器不是自己的也无法更改cuda版本,检测方式如下图:
在这里插入图片描述
   第一步:还是从报错内容上分析,找不到这个.so文件,就先去查一下这到底是是个什么(https://www.cnpython.com/pypi/pynvrtc),通过下图可知,我们是可以自己传这个.so文件的参数的
在这里插入图片描述
  第二步:分析源码是在什么位置,是在如下文件的49行,这个lib_name就是关键点,我们再去找这个参数如何传递过去,是在红色箭头上一行的文件中的444行
在这里插入图片描述
在这里插入图片描述

  第三步:那么这里就可以有两种改法
方式一:通过命令ls /usr/local/cuda-10.0/lib64/我们可以看到这里有两个libnvrtc.so文件,不过后边带了版本号,那么我们可以复制一份,命名为libnvrtc.so(需要权限,所以没有采用该方式)在这里插入图片描述
方式二:更改源码:
我们可以到刚才的文件的444行去,添加一个参数**lib_name=‘libnvrtc.so.10.0’**即可
在这里插入图片描述
样例代码输出为:
在这里插入图片描述
至此,在2.1.6版本上这两个问题得以解决,其他版本未做使用,具体的版本差异在哪也未做深入研究,所以不过多保证其他版本也会遇到该问题。

Error occurred while processing J1/imported/013934202642920762420_388-nd_0015_Jun26.tif Traceback (most recent call last): File "cryosparc_master/cryosparc_compute/jobs/motioncorrection/run_patch.py", line 222, in cryosparc_master.cryosparc_compute.jobs.motioncorrection.run_patch.run_patch_motion_correction_multi.motionworker.process File "cryosparc_master/cryosparc_compute/jobs/motioncorrection/patchmotion.py", line 292, in cryosparc_master.cryosparc_compute.jobs.motioncorrection.patchmotion.unbend_motion_correction File "cryosparc_master/cryosparc_compute/jobs/motioncorrection/patchmotion.py", line 294, in cryosparc_master.cryosparc_compute.jobs.motioncorrection.patchmotion.unbend_motion_correction File "cryosparc_master/cryosparc_compute/gpu/gpucore.py", line 319, in cryosparc_master.cryosparc_compute.gpu.gpucore.EngineBaseThread.__init__ File "/opt/cryosparc/cryosparc_worker/deps/anaconda/envs/cryosparc_worker_env/lib/python3.10/site-packages/numba/cuda/cudadrv/devices.py", line 232, in _require_cuda_context return fn(*args, **kws) File "/opt/cryosparc/cryosparc_worker/deps/anaconda/envs/cryosparc_worker_env/lib/python3.10/site-packages/numba/cuda/api.py", line 330, in stream return current_context().create_stream() File "/opt/cryosparc/cryosparc_worker/deps/anaconda/envs/cryosparc_worker_env/lib/python3.10/site-packages/numba/cuda/cudadrv/driver.py", line 1480, in create_stream handle = driver.cuStreamCreate(flags) File "/opt/cryosparc/cryosparc_worker/deps/anaconda/envs/cryosparc_worker_env/lib/python3.10/site-packages/numba/cuda/cudadrv/driver.py", line 348, in safe_cuda_api_call return self._check_cuda_python_error(fname, libfn(*args)) File "/opt/cryosparc/cryosparc_worker/deps/anaconda/envs/cryosparc_worker_env/lib/python3.10/site-packages/numba/cuda/cudadrv/driver.py", line 408, in _check_cuda_python_error raise CudaAPIError(retcode, msg) numba.cuda.cudadrv.driver.CudaAPIError: [CUresult.CUDA_ERROR_LAUNCH_FAILED] Call to cuStreamCreate results in CUDA_ERROR_LAUNCH_FAILED During handling of the above exception, another exception occurred: Traceback (most recent call last): File "/opt/cryosparc/cryosparc_worker/cryosparc_compute/jobs/pipeline.py", line 59, in exec return self.process(item) File "cryosparc_master/cryosparc_compute/jobs/motioncorrection/run_patch.py", line 213, in cryosparc_master.cryosparc_compute.jobs.motioncorrection.run_patch.run_patch_motion_correction_multi.motionworker.process File "cryosparc_master/cryosparc_compute/jobs/motioncorrection/run_patch.py", line 216, in cryosparc_master.cryosparc_compute.jobs.motioncorrection.run_patch.run_patch_motion_correction_multi.motionworker.process File "cryosparc_master/cryosparc_compute/jobs/motioncorrection/run_patch.py", line 240, in cryosparc_master.cryosparc_compute.jobs.motioncorrection.run_patch.run_patch_motion_correction_multi.motionworker.process AttributeError: 'NoneType' object has no attribute 'dtype' Marking J1/imported/013934202642920762420_388-nd_0015_Jun26.tif as incomplete and continuing...
最新发布
06-13
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值