warpctc 遇到的问题

抱着吃水不忘挖井人的想法,写一篇安装warpctc时候遇到的坑,pytorch 2.0的+Ubuntu16.04

养成一个习惯,不要所有方法都试,先找一个你看起来最信得过的试,不行再换,如何信得过,看评论,如果有it works for me。 it worked like a charm. 等等,或者直接就是readme 里面安装。https://github.com/SeanNaren/warp-ctc

首先配置环境要搞清楚,环境出错原因,这里讲几个问题

ImportError: libwarpctc.so: cannot open shared object file: No such file or directory in develop branch 

1.这个是一个很大的原因,大概就是说,你没有安装好这个warpctc的库,

分为一个是没安装好。

没安装好的原因又有安装的时候是系统环境,你不可写

像这个,就是error: could not create '/usr/local/lib/python2.7/dist-packages/': Permission denied

root权限下的python环境你不可以在里面写,这个时候最好就是重新找一个环境安装,因为你的环境你自己安装,最好也不用在root的公共环境下安装。

你可以打开bashrc:

看一下你的环境:因为它读入安装路径的话,安装的是其中一个,在这里你可以修改setup.py,这里面有博主试过,https://blog.csdn.net/qq_29133371/article/details/80407985,具体我没这么做,

no module named __warp

因为我的环境变量乱七八糟,我直接全删了,保留了一个系统变量cuda-8.0的,另外就是anaconda的 ,其实就是因为环境变量乱七八糟,他试到了系统目录下的路径,所以才会显示not permited。

如果仅保留我自己可以动的目录就不存在这种情况,所以断舍离,删掉它。

这一个算是解决了。

还有setup.py 发现

一个是安装好了找不到,gcc,就是说,在退出状态下,无法使用gcc 编译。

THC_API cudaError_t THCudaMalloc(THCState *state, void **ptr, size_t size);
error: command 'x86_64-linux-gnu-gcc' failed with exit status 1。

这个时候修改一下 文件,具体看github 下的issue里面的讨论,养成看github issue的习惯,因为你的坑,别人也遇到过,尤其是有人点亮的,十有八九都要试一试。
i only modify a little at "pytorch_binding/src/binding.cpp" ,it compile success:
1 at 92 line
int probs_size = THCudaTensor_size(state, probs, 2);
2 at l05 lines
void* gpu_workspace;
THCudaMalloc(state, &gpu_workspace, gpu_size_bytes);
good luck to you!

注意上面的92行是THCudaTensor_size,仔细不要敲错

另外装完这个你可能会遇到最操蛋的ctcloss 等于zero的问题,这个是因为ctcloss 不能加载到GPU上,如果只在cpu上是没问题的。可以测试这个问题用这一段代码

import torch
import ipdb
from torch.autograd import Variable
from warpctc_pytorch import CTCLoss
ctc_loss = CTCLoss()
# expected shape of seqLength x batchSize x alphabet_size
probs = torch.FloatTensor([[[0.1, 0.6, 0.1, 0.1, 0.1], [0.1, 0.1, 0.6, 0.1, 0.1]]]).transpose(0, 1).contiguous()
labels = Variable(torch.IntTensor([1, 2]))
label_sizes = Variable(torch.IntTensor([2]))
probs_sizes = Variable(torch.IntTensor([2]))
ipdb.set_trace()
probs = Variable(probs.cuda(), requires_grad=True) # tells autograd to compute gradients for probs
cost = ctc_loss(probs, labels, probs_sizes, label_sizes)
cost.backward()
print("pytorch bindings for Warp-ctc")

你会发现如果去掉.cuda()可以正常使用,不去掉就会loss zero

另外遇到cost.backward() out of memory的问题,

这个问题解决时在warp-ctc/pytorch_binding/warpctc_pytorch/__init__.py  22行修改 with torch.autograd.Variable(ctx.grads).

I’m also affected with my own autograd functions.

这个解决了的结果也是loss是zero

我没找到办法解决,因为我的框架是torch2.0 python2.7 的,看issue 中有人提到这个问题没办法解决,换成torch 4.0的了,楼主横下一条心,就4.0了,其实readme中也很清楚说最先安装torch4.0

另外还遇到了一些其他问题,设置cuda 环境问题,针对于cuda不是默认的usr/local/cuda的

This repo support GPU. When compiling you have to set the CUDA_TOOLKIT_ROOT_DIR to cmake (as I specified in another issue):cmake -D CUDA_TOOLKIT_ROOT_DIR=/path/to/cuda-x.x.x ..修改成你的cuda路径。例如我的/usr/local/cuda-8.0

最后我把

libwarpctc.so 复制到我的anaconda路径下的lib中,其实这个.dylib和.so 是针对于不同版本的linux生成对应的库。下面是截的一张图

cd ../build
cp libwarpctc.dylib /Users/$WHOAMI/anaconda3/lib

这个复制到anaconda里面。

评论 11
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值