kaldi win10 visual studio2019 CPU和GPU下遇到的问题
1 需要组件
请按照顺序安装。
1.1 nvidia driver
nvidia win10 显卡型号和驱动下载地址直接双击exe安装
cuda_10.2.89_441.22_win10.exe下载地址直接双击exe安装
cudnn-10.2-windows10-x64-v7.6.5.32.zip下载地址
请将cudnn解压的库复制到C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v10.2
下即可。
【配置PATH环境变量】
C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v10.2\bin
C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v10.2\libnvvp
C:\Program Files\NVIDIA Corporation\NVSMI
1.2 vs2019社区版
vs2019_community__1503913078.1588313013.exe vs社区版
C++桌面版全选即可
1.3 cmake
cmake-3.17.3-win64-x64.zip,解压到C:\ProgramFiles下
【或者】不用下载了,vs2019内置了make,将其添加到PATH中即可
【配置PATH环境变量】
C:\ProgramFiles\cmake-3.7.0-win64-x64\bin
# 或者
C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\Common7\IDE\CommonExtensions\Microsoft\CMake\CMake\bin
1.4 git和TortoiseGit
请安装Git_V2.5.1_64_bit_setup.1441791170.exe
和TortoiseGit-1.8.15.0-64bit.msi
以及TortoiseGit-LanguagePack-1.8.15.0-64bit-zh_CN.msi中文语言包
【因为所有相关操作都在git bash上操作,windos命令行不支持mv cp等命令】
2 kaldi vs工程配置
2.1 kaldi
在这里可以看一下kaldi/windows
文件夹的Reda
git clone https://github.com/kaldi-asr/kaldi.git C:\anjos\vs\kaldi-win
2.2 拷贝变量文件
在C:\anjos\vs\kaldi-win\windows下操作:
(1) 【复制 variables.props.dev 一份为 variables.props】
(2) 【复制 kaldiwin_openblas.props 一份为 kaldiwin.props】
(3) 【复制 cuda_7.0.props 为 cuda_10.2.props】
(4) 【复制portaudio.props 为 portaudio.props.dev】
2.3 支持cuda GPU
因为安装了cudav10.2,所以发现cuda7.0已经过时,同时发现C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\MSBuild\Microsoft\VC\v160\BuildCustomizations
下是**CUDA 10.2.props
**。因此做如下变更:
在C:\anjos\vs\kaldi-win\windows下操作:
(1) 【将 generate_solution.pl 文件中的所有cuda 7.0替换为cuda 10.2】
(2) 【将 generate_solution.pl 文件中的所有cuda_7.0替换为cuda_10.2】
(3) 【在 variables.props 的<PropertyGroup Label="UserMacros">中增加】
<CUDADIR>C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v10.2</CUDADIR>
<NVTOOLSDIR>C:\Program FIles\NVIDIA Corporation\NvToolsExt\</NVTOOLSDIR>
(4) 【在variables.props的<ItemGroup>中修改】
<BuildMacro Include="NVTOOLSDIR">
<Value>$(NVTOOLSDIR)</Value>
<EnvironmentVariable>true</EnvironmentVariable>
</BuildMacro>
<BuildMacro Include="CUDADIR">
<Value>$(CUDADIR)</Value>
<EnvironmentVariable>true</EnvironmentVariable>
</BuildMacro>
(5)【在 cuda_10.2.props <AdditionalIncludeDirectories> 子项下添加修改 cuda的include文件夹】
<AdditionalIncludeDirectories>$(CUDADIR)\include;$(NVTOOLSDIR)\include;$(CUBDIR);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
(6)【在 cuda_10.2.props <AdditionalLibraryDirectories> 子项下添加修改 cuda的lib文件夹】
<AdditionalLibraryDirectories>$(CUDADIR)\lib\x64;$(NVTOOLSDIR)\lib\x64;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
(7)【在 cuda_10.2.props <AdditionalDependencies> 子项下添加修改 cuda的依赖库】
<AdditionalDependencies>cublas.lib;cuda.lib;cudart.lib;nvToolsExt64_1.lib;%(AdditionalDependencies)</AdditionalDependencies>
最后样子:
<ItemDefinitionGroup>
<ClCompile>
<AdditionalIncludeDirectories>$(CUDADIR)\include;$(NVTOOLSDIR)\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<PreprocessorDefinitions>HAVE_CUDA;%(PreprocessorDefinitions)</PreprocessorDefinitions>
</ClCompile>
<Link>
<AdditionalLibraryDirectories>$(CUDADIR)\lib\x64;$(NVTOOLSDIR)\lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
<AdditionalDependencies>cublas.lib;cusparse.lib;cudart.lib;curand.lib;cufft.lib;nvToolsExt64_1.lib;cusolver.lib;%(AdditionalDependencies)</AdditionalDependencies>
</Link>
</ItemDefinitionGroup>
2.4 支持vs 2019
在C:\anjos\vs\kaldi-win\windows下操作,将generate_solution.pl文件中增加vs2019相关:
my %TOOLS=( default=> "14.1",
vs2015 => "14.0",
vs2017 => "14.1",
vs2019 => "v14.2"
);
my %FORMAT=( default=> "14.10",
vs2015 => "14.00",
vs2017 => "14.10",
vs2019 => "v14.20"
);
my %TOOLSET=( default=> "v141",
vs2015 => "v140",
vs2017 => "v141",
vs2019 => "v142"
);
2.5 openfst
这时候配置openfst发现直接用源码其实是不ok的,kaldi用的openfst版本是1.6.2,不能直接拉openfst GitHub最新版。这里openfst官网有提供一个版本:
wget http://www.openfst.org/twiki/pub/FST/FstDownload/openfst-1.6.2.tar.gz
wget https://pan.baidu.com/s/1o8SghqM
tar -xvf openfst-1.6.2.tar.gz
patch -b -p1 < openfst-1.6.2.patch
以vs201