mxnet1.9.1+cuda11.8+rtx4090+vs2022+win11源码编译安装

官方文档:https://mxnet.apache.org/versions/1.9.1/get_started/windows_setup#build-from-source

1.简介

最近在学习 mxnet,虽然它过气了,但是还是一个很好的学习平台,毕竟教程搞得好,大家都来搞。
既然搞了深度学习那必须用gpu啦,但是mxnet的预编译包最多只支持 cuda11.7,而且好像还不支持windows平台
看这张图片,前面说了支持 Linux 和 Windows 平台,后面又说 Windows 是其他平台,需要从源码构建
pC6gQhT.png

还可以查找下这个链接:https://dist.mxnet.io/python,反正我是没找到1.9.1且适配cuda117的windows的.whl文件

官方文档呢,给出的是 vs2017 + cuda9.2 的编译,cuda9.2 是不能支持 rtx4090 显卡的最大计算能力8.9的
所以还是有坑,而且官方文档你不一定能编译的出来…

而且找遍了全网好像也没有最新的编译流程,只好自己搞一遍了,果然是过气了啊。

2.准备

最基础的cmake和vs2022就不说了

2.1 cuda

首先我们要选择合适的 cuda 版本,官方已经给出了cuda11.7的构建包,虽然是Linux上的,也说明了兼容11.7 ,十有八九不兼容12
所以我们的选择范围就是cuda11.x

nvidia显卡还有一个特性叫计算能力,或者叫做架构,每一代的显卡有不同的架构,在编译时会自动选择当前显卡支持的最新架构
所以需要使用可以兼容当前显卡最新架构的cuda版本,首先查看显卡信息
pC6ho0H.png

由于使用的是4090显卡,需要查看显卡支持的最大计算能力:https://developer.nvidia.com/cuda-gpus
下图可以看到30系显卡支持8.6的计算能力,40系支持到8.9
pC6hzng.png

而cuda本身对计算能力有一个支持列表,实际上,cuda11.7不支持8.9,只有cuda11.8才支持8.6
尽管我们可以编译较低等级的架构,也可以在高等级架构的gpu上运行,但是这可能会产生其他问题
所以最好直接编译当前gpu支持的最高架构的代码
pC646KS.png

最后我们选择了cuda11.8,也就是官方没有提供的最近的一个版本
尽管系统里安装了11.8和12.2两个版本,但是它们是可以互不影响的,只需要设置CUDA_PATH为使用的版本,且将其加入PATH

2.2 cudnn

下载支持cuda11.8的cudnn版本:https://developer.nvidia.com/cudnn

2.3 OpenBLAS

首先下载 OpenBLAS https://github.com/xianyi/OpenBLAS/releases
然后配置OpenBLAS_HOME指向其内部的build目录,下面包含了bin和include目录

2.4 OpenCV

使用Chocolatey安装OpenCV,实际上就是从github下载 https://github.com/opencv/opencv/releases
pC65VPI.png
然后配置OpenCV_DIR指向 opencv/build 目录

2.5 mxnet

下载源码 https://github.com/apache/mxnet ,且到1.9.1分支

3.生成

使用cmake生成编译工具链

cmake -DUSE_CUDA=1 -DUSE_CUDNN=1 -DUSE_OPENCV=1 -DUSE_OPENMP=1 -DUSE_BLAS=open -DUSE_LAPACK=1 -DUSE_DIST_KVSTORE=0 -DCUDA_ARCH_LIST=Common -DCUDNN_LIBRARY='D:\dev\IDE\nvidia\cudnn-8.9.1.23_cuda11\lib\x64\cudnn.lib' -DCUDNN_INCLUDE='D:\dev\IDE\nvidia\cudnn-8.9.1.23_cuda11\include' .

CUDNN_LIBRARY:指向cudnn.lib文件
CUDNN_INCLUDE:指向cudnn的include目录

生成完毕后可以看到mxnet.sln文件

但是还有一个小问题,每个cuda版本安装时都会在vs的目录下安装一些文件,我们生成的工具链里使用了12.2版本的文件
因为实际上使用的是cuda11.8,所以需要更改这些文件为11.8
pC65hee.png

4.编译

打开 native x64 command line , 运行编译,大概一个半小时

msbuild mxnet.sln /p:Configuration=Release;Platform=x64 /maxcpucount

pC65xoj.png

编译完成后会在Release目录下生成 mxnet.dll 和 mxnet_89.dll

5.安装

安装的一个前置工作是,必须保证所有的dll在PATH中可用:

  • cudart64_110.dll:来自cuda
  • libopenblas.dll:来自openblas
  • libgcc_s_seh-1.dll:来自mingw64
  • libgfortran-5.dll:来自mingw64
  • libquadmath-0.dll:来自mingw64
  • libwinpthread-1.dll:来自mingw64
  • opencv_world470.dll:来自opencv
  • cudnn64_8.dll:来自cudnn

配置MXNET_LIBRARY_PATH 环境变量指向 libmxnet.dll
然后执行安装 pip install ./python

6.测试

import mxnet as mx
print(1)
a = mx.nd.ones((2, 3), mx.gpu(0))
print(a)
b = a * 2 + 1
print(b)
print(b.asnumpy())

得到在gpu 上分配的结果

1

[[1. 1. 1.]
 [1. 1. 1.]]
<NDArray 2x3 @gpu(0)>

[[3. 3. 3.]
 [3. 3. 3.]]
<NDArray 2x3 @gpu(0)>
[[3. 3. 3.]
 [3. 3. 3.]]

到此为止,使用cuda11.8 编译的兼容8.9架构的mxnet就可以使用了

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

afan_coding

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值