GPU版本pytorch和tensorflow部署(cuda、cudnn)

2023-05-16

概述

部署前建议简单了解显卡、显卡驱动、cuda、cudnn。
部署GPU版本pytorch和tensorflow的可用流程如下:
在这里插入图片描述
当前软硬件环境:aarch64架构麒麟V10系统,两块NVIDIA-A100系列显卡。
经过多次不同方案的尝试,最终选择适合当前需求的部署方案:
1、 宿主机安装显卡驱动;
2、 使用nvidia/cuda官方docker镜像;
3、 下载pytorch源码离线安装,下载tensorflow源码在线安装。
选择部署方案的一些建议:
1、 安装cuda和cudnn:
选择下载官方镜像,在容器中进行后续操作的优势:
a) 安装方便,docker pull即可。
b) 后续容器移植到别的机器也较为方便
选择nvidia官网下载安装包在宿主机安装的优势:
a) 安装在宿主机上,无需依赖docker容器。
2、 安装pytorch和tensorflow:
x86架构的win和linux,以及arm64架构的win建议使用pip/conda/whl包安装,方便省力,但是要注意安装gpu版本。
arm64架构的linux建议使用源码安装,因为网上找到的arm64-linux的whl包都是cpu版本!
选择源码安装pytorch和tensorflow不挑pytorch和tensorflow的版本,任何版本都可以编译安装出gpu版本库,还可以定制选择支持的功能。缺点:较为复杂,pytorch还好,主要是tensorflow。tensorflow对网络还有要求,网络不好下载三方库会失败,需要手动下载然后修改bazel配置文件。
附上aarch64-麒麟V10系统,A100系列显卡的机器,部署nvidia/cuda:11.7.1-cudnn8-devel-ubuntu22.04容器+torch-gpu-1.12+tensorflow-gpu2.12过程。

1 安装显卡驱动

1.1 禁用系统默认驱动nouveau

首先输入lsmod | grep nouveau检查是否已经禁用了,如果没内容输出,则无需禁用,否则需要禁用。如果lsmod提示“command not found”,则需要安装module-init-tools,例如ubuntu使用apt-get install module-init-tools安装。
禁用系统默认驱动nouveau,网上教程很多,搜索对应系统的禁用nouveau教程操作即可,这里不多介绍。
最后再使用lsmod | grep nouveau测试是否输出为空,禁用成功。

1.2 安装显卡驱动

首先在nvidia官网驱动程序下载页面输入自己的显卡型号搜索,官网会推荐给你驱动版本,然后下载。网址:https://www.nvidia.cn/Download/index.aspx?lang=cn
在这里插入图片描述
在这里插入图片描述
linux下载完的文件如下:
在这里插入图片描述
给该文件执行权限:

chmod 744 NVIDIA-Linux-aarch64-515.65.01.run

执行安装:

sh NVIDIA-Linux-aarch64-515.65.01.run

1.3 显卡驱动测试

输入“nvidia-smi”命令,输出如下内容即为显卡驱动安装成功。
在这里插入图片描述
其中右上角的Cuda Version版本有人说是支持的cuda最大版本,也有说是支持的cuda版本。建议安装Cuda Version显示的cuda版本。

2 安装cuda和cudnn

2.1 方法1:使用nvidia/cuda的docker镜像

2.1.1 部署docker环境

部署docker方法1(不建议):
docker版本小于19.03时,需要额外使用nvidia-docker2软件包,配置方案较为繁琐,可自行搜索,例如:https://www.cnblogs.com/ytwang/p/14809112.html。建议直接升级docker,使用以下方案2。
部署docker方法2(建议):
Docker 19.03的发布,不赞成使用nvidia-docker2软件包,因为Docker运行时已将NVIDIA GPU作为设备本地支持,所以安装(或升级)docker版本>=19.03,再安装nvidia-container-toolkit。
安装(或升级)docker教程参考:
https://www.cnblogs.com/haolb123/p/16553001.html。
安装nvidia-container-toolkit:
yum install -y nvidia-container-toolkit,安装即可,可以看到依赖关系如下:
在这里插入图片描述

2.1.2 拉取nvidia/cuda镜像

根据nvidia-smi输出的内容,确定自己想安装的cuda版本,在网址:https://gitlab.com/nvidia/container-images/cuda/blob/master/doc/supported-tags.md中找到对应的镜像标签,然后输入命令docker pull nvidia/cuda:tagID即可。
例如:
在这里插入图片描述
“devel” 涵盖了开发所需的所有工具,比“runtime”齐全,优先安装devel。
查到我想下载的镜像标签为“11.7.1-cudnn8-devel-ubuntu22.04”,在终端输入:

docker pull nvidia/cuda:11.7.1-cudnn8-devel-ubuntu22.04

将镜像下载下来。

2.1.3 启动容器

用上一步下载的镜像启动容器,初次启动需要使用–gpus选项指定GPU设备,例如–gpus all,或者–gpus '"device=1,2"'。我将容器启动并后台运行容器,完整命令如下:

docker run --gpus all --name "test" -itd nvidia/cuda:11.7.1-cudnn8-devel-ubuntu22.04 /bin/bash

启动后,docker ps可以看到运行中的容器,刚刚启动的容器被命名为了“test”。
后续使用docker exec命令进容器。例如:

docker exec -it test /bin/bash

进入容器后输入nvidia-smi可以看到有显卡信息输出,说明容器中可以使用显卡和显卡驱动。
输入nvcc -V可以看到有cuda版本信息输出,说明已经安装了cuda,cuda安装目录在/usr/local/cuda下。
cudnn的头文件和库文件分别在/usr/include和/usr/lib/aarch64-linux-gnu/目录下,可以看到也是安装好的。
至此我们已经有了一个配好cuda和cudnn的镜像、容器。
按ctrl+D返回宿主机终端。

2.2 方法2:nvidia官网下载cuda和cudnn安装

由于本文最终选择了使用nvidia/cuda的docker镜像,所以宿主机安装只简单介绍一些注意事项,网上详细安装教程很多。
在nvidia官网https://developer.nvidia.com/cuda-downloads下载对应cuda版本,下载“.run”文件。首页是最新的cuda,如果想下载历史cuda点击这里:
在这里插入图片描述
安装cuda需要有gcc环境。
安装cdua时可以选择是否安装显卡驱动,如果已经安装了则无需安装显卡驱动。
cudnn下载地址https://developer.nvidia.cn/zh-cn/cudnn,下载cudnn需要有nvidia账户,没有注册一个即可。
cudnn优先下载tar或者zip包,解压后对应文件放到cuda安装目录的bin、include、lib64下即可。
较新的cudnn-arm64-linux版本可能没有压缩包,需要下载deb或rpm安装包安装。
deb版本cudnn安装顺序如下:
在这里插入图片描述
安装完后测试cudnn方法:
进入/usr/src/cudnn_samples_v8目录,使用如下方法测试:
https://zhuanlan.zhihu.com/p/126997172

make clean
make

这一步可能会提示fatal error: FreeImage.h: No such file or directory,安装apt-get install libfreeimage3 libfreeimage-dev重新make即可。
运行./mnistCUDNN,出现 Test passed!代表 cudnn 正常使用。

3 安装pytorch和tensorflow

3.1 方法1:pip/conda/whl包安装

x86的机器以及arm64的win机器推荐使用该方式安装,需注意使用gpu版本。
安装教程网上也比较多,自行搜索即可。

3.2 方法2:源码安装

arm64的linux机器,网上的whl包基本都是cpu版本的,所以在此使用了源码安装。

3.2.1 源码安装pytorch

下载pytorch源码及三方库源码

首先下载源码,并且下载所需所有三方库!
源码网址:https://github.com/pytorch/pytorch/
git下载命令:

git clone pytorch
git submodules update --init –recursive

如果不使用git命令而在网页下载,较为繁琐,操作步骤如下(本文就是这么下载的):
网页选择对应tag的pytorch源码,右上角点击下载zip包,解压,此时下载的源码没有三方库。
然后网页点击进入“third-party”,进去一个一个下载,解压到刚才下载的源码包的third-party对应目录下,部分third-party还会再有一层自己的third-party,要把里面的三方库都下全。

安装pytorch

安装时进入pytorch目录输入python setup.py install即可。

测试pytorch

pytorch安装完后的测试命令如下:
在这里插入图片描述

3.2.1源码装tensorflow

部署bazel

tensorflow需要使用bazel编译,所以首先部署bazel。bazel部署方式有多种,这里选择了最简单的方式:直接下载别人编译好的Bazel,其他部署bazel方式可以自行搜索部署。
国内镜像源下载地址https://mirrors.huaweicloud.com/bazel/
选择下面三个文件下载:
在这里插入图片描述
下载完成后,创建软连接:ln -s /bazel的目录/bazel-5.3.2-linux-arm64 /usr/bin/bazel
此时bazel即可使用,输入bazel –help测试。

下载tensorflow源码

接下来下载tensorflow源码,下载地址:
https://github.com/tensorflow/tensorflow ,或者
https://gitee.com/patterson/tensorflow

编译安装tensorflow

tensorflow安装官网指南如下:
https://tensorflow.google.cn/install
配置 build:
执行tensorflow源码目录下的./configure
执行过程中会有一些选项供选择,其中cuda是否使用选择了“Y”,其他内容按照自己需求选择,本文其他内容选择了“N”。
编译构建支持GPU的tensorflow软件包,输入如下命令:

bazel build --config=cuda [--config=option] //tensorflow/tools/pip_package:build_pip_package

编译过程需要联网并能访问git上的仓库,否则下载三方库失败。下载失败建议再次尝试。如果网络不通在后文介绍两个解决思路。
此处编译时间较长,产生的缓存文件在/~/.cache/bazel下,其中包括下载的三方库。从源代码构建 TensorFlow 会消耗大量 RAM。如果您的系统受内存限制,请将 Bazel 的 RAM 使用量限制为:–local_ram_resources=2048

构建whl包并安装

bazel build 命令会创建一个名为 build_pip_package 的可执行文件,此文件是用于构建 pip 软件包的程序。如下所示运行该可执行文件,在 /tmp/tensorflow_pkg 目录中构建 .whl 软件包:
如需从某个版本分支构建,请使用如下命令:

./bazel-bin/tensorflow/tools/pip_package/build_pip_package /tmp/tensorflow_pkg

如需从 master 分支构建,请使用 --nightly_flag 获取合适的依赖项:

./bazel-bin/tensorflow/tools/pip_package/build_pip_package --nightly_flag /tmp/tensorflow_pkg

本文是从master分支构建的。
生成的whl包在/tmp/tensorflow_pkg下,如下:
在这里插入图片描述
安装该whl包:

pip install /tmp/tensorflow_pkg/tensorflow-version-tags.whl

此时,TensorFlow 已安装完毕。

测试tensorflow

测试TensorFlow命令如下:
在这里插入图片描述

tensorflow三方库下载总是失败的两种解决思路

思路1:
复制网址到浏览器手动下载三方库压缩包,然后修改tensorflow中的.bazel文件,改为本地路径,这样做较为耗时耗力。具体操作参考:https://zhuanlan.zhihu.com/p/134019025
在这里插入图片描述
思路2:
通过一些软件配置网络,将国外git、google等仓库替换(或者说映射?)为国内镜像源,下载时候将转到国内镜像源下载,这样不一定能下载全。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

GPU版本pytorch和tensorflow部署(cuda、cudnn) 的相关文章

随机推荐

  • Hbase(一)入门

    Hbase xff08 一 xff09 一 Hbase概述1 简介2 Hbase数据模型3 Hbase简化架构4 写数据5 MemStore Flush6 读数据7 StoreFile Compaction 二 Hbase安装1 Hbase
  • 解决properties文件读取中文乱码

    版权声明 xff1a 本文为博主原创文章 xff0c 遵循 CC 4 0 BY SA 版权协议 xff0c 转载请附上原文出处链接和本声明 本文链接 xff1a https blog csdn net qq 39237513 article
  • gcc下载地址(Linux/windows安装)

    gcc官网 xff1a http gcc gnu org gcc镜像站点 xff1a https gcc gnu org mirrors html 各版本下载地址 ftp ftp mirrorservice org sites source
  • 树莓派系统镜像备份

    SD卡系统镜像备份 引言1 下载镜像备份脚本2 查看sd卡设备名称3 复制镜像4 压缩镜像 引言 SD卡系统镜像备份有多种方式 xff0c 最简单粗暴的是使用Win32diskImager工具 xff0c 将SD卡的镜像直接读取 xff0c
  • 不同版本mysql-connector-java的jar包下载地址

    jar包下载方式 官网地址 xff1a MySQL Download Connector J xff0c 如果你打不开官网 xff0c 在下面我为你准备了直接下载jar包的链接地址 在选择操作系统时 xff0c 此处选择platform i
  • 需要来自administrators的权限才能对此文件夹进行更改

    1 右键文件夹 xff0c 选择 属性 2 选择 安全 3 选择 高级 4 选择 更改 5 选择 高级 6 选择 立即查找 7 选择 Administrators xff0c 然后点击确定 8 再次点击 确定 9 选择 替换子容器和对象的所
  • 远程计算机或设备不接受连接解决方法

    当你的电脑浏览器不能正常上网时 xff0c 显示 点击网络诊断 xff0c 显示远程计算机或设备将不接受连接 解决办法 xff1a 1 点击左下角开始 xff0c 点击运行 xff0c 输入inetcpl cpl xff0c 点击确定 xf
  • Navicat 右键刷新没用

    Navicat 右键刷新没用 xff0c 点下方刷新图标才有用 右键刷新应该是刷新表结构 xff0c 下方刷新图标是刷新这张表的数据
  • leetcode 150. 逆波兰表达式求值

    题目描述 xff1a 给你一个字符串数组 tokens xff0c 表示一个根据 逆波兰表示法 表示的算术表达式 请你计算该表达式 返回一个表示表达式值的整数 注意 xff1a 有效的算符为 39 43 39 39 39 39 39 和 3
  • leetcode 239. 滑动窗口最大值

    题目描述 xff1a 给你一个整数数组 nums xff0c 有一个大小为 k 的滑动窗口从数组的最左侧移动到数组的最右侧 你只可以看到在滑动窗口内的 k 个数字 滑动窗口每次只向右移动一位 返回 滑动窗口中的最大值 样例 xff1a 示例
  • leetcode 347. 前 K 个高频元素

    题目描述 xff1a 给你一个整数数组 nums 和一个整数 k xff0c 请你返回其中出现频率前 k 高的元素 你可以按 任意顺序 返回答案 样例 xff1a 示例 1 输入 nums 61 1 1 1 2 2 3 k 61 2 输出
  • com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Unknown column 解决方案

    com mysql jdbc exceptions jdbc4 MySQLSyntaxErrorException Unknown column 39 39 in 严重 Servlet service for servlet jsp thr
  • Windbg使用说明书

    Windbg使用说明书 Windbg使用说明书 简书 jianshu com 术语 缩略语 windbg windows平台下 xff0c 强大的用户态和内核态调试工具 dmp 内存映像文件 xff0c 一般是系统错误产生的文件 Pdb 程
  • Kube-OVN源码解析 | pod IP地址管理

    作者介绍 xff1a Kube OVN社区贡献者 Mr Li 作者说 xff1a 上文 kube ovn源码解析 xff08 一 xff09 kube ovn controller 中我们提到kube ovn controller组件有一个
  • kartoslam找bug之行

    文章目录 那么之前测试不好的解释有以下几点编写launch测试bug猜测 激光数据和MIT的不一样 xff0c MIT的激光原数据好 xff0c 我们的差 不跑karto只录制信息终于找到问题根源啦 又出问题拉 xff0c 出大问题 WAR
  • sqlyog复制所有列名

    sqlyog不像navicat可以选中所有列名直接复制 需要 gt 点击表 gt 信息 gt 文本 gt 按住alt然后选中 在idea中也一样 xff0c 先按住alt 从第一个属性前开始往下拉 xff0c 多行编辑 idea格式化快捷键
  • Ubuntu安装proxychains4

    Ubuntu安装proxychains4 安装配置 安装 通过apt进行安装 sudo apt install proxychains4 配置 对 etc proxychains4 conf文件进行修改 sudo gedit etc pro
  • 解决依赖无法下载 (http://dl.bintray.com/spark-packages/maven/commons-codec/commons-codec/maven-metadata.xml)

    问题 xff1a maven 打包时 xff0c 有个依赖无法下载 xff0c 提示是 Forbidden xff08 http dl bintray com spark packages maven commons codec commo
  • ADB常用命令及其用法大全

    前言 xff1a 本文主要记述ADB的常用命令 xff0c 关于ADB用法大全 xff0c 可参考文末链接 ADB简介 xff1a ADB xff0c 即 Android Debug Bridge xff0c 它是 Android 开发 测
  • GPU版本pytorch和tensorflow部署(cuda、cudnn)

    概述 部署前建议简单了解显卡 显卡驱动 cuda cudnn 部署GPU版本pytorch和tensorflow的可用流程如下 xff1a 当前软硬件环境 xff1a aarch64架构麒麟V10系统 xff0c 两块NVIDIA A100