一、编译环境之windows10(编译出动态库libmxnet.dll、libmxnet.lib、mxnet_70.lib及include头文件)。
一)环境及依赖
1. Windows10
2. Cuda11.1
3. Cudnn8.1.0.77
4. Cmake 3.18.0
5. Anaconda3
6. Opencv4.5.3
7. MKL-2022.1(当前最新版,强烈建议用这个而不是用OpenBLAS,OpenBLAS本身编译麻烦不说,在使用OpenBLAS编译mxnet时老是报找不到相关符号,不知道是不是OpenBLAS版本不匹配)
8. Vs2019
二)编译步骤
1. 下载源码
GitHub - apache/incubator-mxnet: Lightweight, Portable, Flexible Distributed/Mobile Deep Learning with Dynamic, Mutation-aware Dataflow Dep Scheduler; for Python, R, Julia, Scala, Go, Javascript and more
下载最新的mxnet对应的.tar.gz包(进入release页面下载,具体如下:)
点击进入release页面,再划到最后选择下载
2.准备好依赖库
并配置环境变量path,D:\Program Files\CMake\bin(自己的安装路径所在的bin)
这里注意不要下错了,如图:
mkl网上有安装教程,我就截图下我的配置
3.Cmake-gui生成vs2019的.sln
- 在apache-mxnet-src-1.9.0.rc8-incubating解压后的文件夹中新建一个build文件夹,选择如下图(这个时候下面的选项应该是空白的,由于我configure过,所以下面已经出现了对应的选项):
- 点击configure,就会出现那片红色的选项,具体选择如下:
图片上没出现的选项不选即可,cpp-package不能勾选,因为1.9.0版本删掉了一个文件夹,勾选了会报找不到那个文件夹,具体提示我记不得了,最后点击configure,运行结果如下:
在点击generate,运行结果如下:
对应文件夹生成mxnet.sln这一步就成功了,如下:
4. 编译mxnet.sln
生成libmxnet.dll、libmxnet.lib、mxnet_70.dll、mxnet_70.lib(这个70根据cuda版本不一样生成的版本不一样,如用的11.4版本的cuda,则生成的是mxnet_75)这一步耗时很长
- 配置ALL_BUILD的Windows SDK版本,如下,这里的所有配置都和cuda项目启动的配置一致,建议使用启动cuda自带的例子时自动生成得配置:
这里Code Generation的配置也是从cuda项目那边复制过来的
根据自己电脑情况填写最大进程数,这个我也不了解,就照着别人的+1来的
编译成功如下:
打开文件夹成功生成lib和dll
5. 生成op.h
需将相关dll拷贝到D:\Software\apache-mxnet-src-1.9.0.rc8-incubating\cpp-package\scripts文件夹下,需拷贝的dll如下(具体哪些是哪个第三方包的我记不得了,反正就去mxnet自己和他所依赖的第三方包的文件夹下找):
放好dll之后,进入cmd,进入该文件夹,再执行python OpWrapperGenerator.py libmxnet.dll,执行成功,结果如下:
6. 运行环境配置
就是基本的包目录、库目录、附加依赖项等,如下(我这里截图的配置是之前编译的路径,大家根据自己的根目录来配置就行):
这里还要重点说下可执行文件目录,可以直接在里面配置也可以在环境变量中配置path,我这边是配置的path,如下:
点击编辑,添加如下:
7.问题描述
- 找不到libmxnet.dll,这个就是没有配置path,配置上就好了(有些人会直接将dll放入项目中,这样确实可以找到dll文件了,但是如果依赖了其他dll,直接引入,就会报下面那种莫名其妙的错误)
- 报莫名其妙的错误,如:0xC0000005:执行位置0x0000000000000000时出现访问冲突。也是没有配置path,配置上就好了
- 其他不记得有啥问题了,大家有啥问题可以留言,看看我遇到过没