warp-ctc是可以在CPU和GPU上实现并行计算CTCLoss的开源库,现在支持pytroch和tensorflow的调用。安装过程和wrap-transducer相似,下面记录下过程和错误解决方法。
本文是在ubuntu18.04的系统上进行的。
首先获取warp-ctc的代码:
git clone https://github.com/espnet/warp-ctc.git
cd warp-ctc
创建一个build文件夹:
mkdir build
cd build
编译:
cmake -DCUDA_TOOLKIT_ROOT_DIR=$CUDA_HOME ..
make
如果你的cuda不是标准安装,那么需要用-DCUDA_TOOLKIT_ROOT_DIR=
cuda的安装路径
,使cmake能够发现CUDA
如果有以下logs:
-- cuda found TRUE
-- Building shared library with no GPU support
请运行rm CMakeCache.txt
,然后重新cmake
如果在make的时候出现这个错误:
/home/Liangcd/neural_sp/tools/warp-ctc/src/ctc_entrypoint.cu(1): error: this declaration has no storage class or type specifier
/home/Liangcd/neural_sp/tools/warp-ctc/src/ctc_entrypoint.cu(1): error: expected a ";"
2 errors detected in the compilation of "/tmp/tmpxft_000110ed_00000000-12_ctc_entrypoint.compute_62.cpp1.ii".
CMake Error at warpctc_generated_ctc_entrypoint.cu.o.cmake:279 (message):
Error generating file
/home/Liangcd/neural_sp/tools/warp-ctc/build/CMakeFiles/warpctc.dir/src/./warpctc_generated_ctc_entrypoint.cu.o
CMakeFiles/warpctc.dir/build.make:380: recipe for target 'CMakeFiles/warpctc.dir/src/warpctc_generated_ctc_entrypoint.cu.o' failed
make[2]: *** [CMakeFiles/warpctc.dir/src/warpctc_generated_ctc_entrypoint.cu.o] Error 1
CMakeFiles/Makefile2:104: recipe for target 'CMakeFiles/warpctc.dir/all' failed
make[1]: *** [CMakeFiles/warpctc.dir/all] Error 2
Makefile:129: recipe for target 'all' failed
make: *** [all] Error 2
解决方法:
找到warp-ctc/src/ctc_entrypoint.cu
文件,打开文件你会发现,只有一行代码:ctc_entrypoint.cpp
。删除这行代码,将wrap-ctc/src/ctc_entrypoint.cpp
中的内容复制到warp-ctc/src/ctc_entrypoint.cu
中,然后重新make
就可以通过了。
首先编译通过warp-ctc,然后需要安装pytorch环境。网上有许多安装pytorch的教程,这里就不做说明了。
如果你有一个GPU,需要确保CUDA_HOME
被设置了,如下:
export CUDA_HOME="/usr/local/cuda"
"/usr/local/cuda"
是CUDA的路径,请替换自己的路径
现在开始安装:(推荐在pytorch环境下安装,推荐使用anaconda创建pytorch环境)
cd pytorch_binding
pip install numpy cffi
python setup.py install
然后终端会输出安装成功的信息。(我是在anaconda创建的pytorch环境下安装的,系统会直接把包输出anaconda3/envs/pyEnv/lib/python3.7/site-packages
下,就可以直接使用了)
如果提示cuda.h
、cuda_runtime.h
等找不到,首先确保CUDA_HOME
已经设置了。如果已经设置了,但是还是有下面的错误,请运行下面的指令:
vim ~/.bashrc
在bashrc中写入:
export CPLUS_INCLUDE_PATH=$CPLUS_INCLUDE_PATH:/opt/software/cuda/cuda-10.0/include
export C_INCLUDE_PATH=$C_INCLUDE_PATH:/opt/software/cuda/cuda-10.0/include
/opt/software/cuda/cuda-10.0/include
是cuda.h
所在的路径,请改为自己的。
保存退出,执行
source ~/.bashrc
使更改生效,重新install就可以通过了。