DL
CUDA 环境配置
说明:高版本的显卡驱动兼容各个低版本的 CUDA 与 CUDNN,但 CUDA 与 CUDNN 之间存在的对应关系。CUDA 的各个版本之间一般不存在兼容性。而CUDNN实际上是一堆头文件和库文件的集合,直接放入CUDA的头文件和库文件中即可。安装顺序为:先安装最新版本的显卡驱动,再安装CUDA,再查询相匹配版本的CUDNN,并将文件复制进CUDA中即可。
(硬件)显卡支持
显卡与CUDA版本的支持对应情况: 参考博客
(系统软件)驱动
安装驱动的方式有几种:
ubuntu下使用命令安装:
此方法的好处是不需要关闭其他可能引起冲突的系统驱动,坏处是apt维护的nvidia-driver可能不是最新的不能满足需求
去官方nvidia驱动下载页面下载安装脚本进行安装
系统级别安装CUDA时,可以将驱动也一并勾选进行安装
(依赖软件) gcc, g++
安装 CUDA 时需要执行安装脚本,可能会涉及到 gcc/g++ 不存在或不兼容的情况,安装多个版本的 gcc/g++(ubuntu): 参考博客
TensorRT
相关下载及文档链接如下:
CUDA Driver: https://developer.nvidia.com/download/indec.aspx
CUDA版本与驱动的支持关系: https://developer.nvidia.com/cuda/cuda-toolkit-release-notes/index.html
CUDA:
下载及文档:https://developer.nvidia.com/cuda-toolkit-archive
cuDNN:
下载:https://developer.nvidia.com/rdp/cudnn-archive
TensorRT:
下载:https://developer.nvidia.com/nvidia-tensorrt-download
文档:https://docs.nvidia.com/deeplearning/tensorrt/archives/index.html
TensorRT 依赖于 CUDA 与 cuDNN, 且特定版本的 TensorRT 依赖于特定版本的 CUDA 与 cuDNN,下面是几个版本的例子:
TensorRT 8.2 GA + cuDNN 8.2.4 + CUDA 11.4
TensorRT 8.2 GA Update 4 for Linux x86_64 and CUDA 11.0, 11.1, 11.2, 11.3, 11.4 and 11.5 TAR Package: TensorRT-8.2.5.1.Linux.x86_64-gnu.cuda-11.4.cudnn8.2.tar.gz
cuDNN v8.2.4 (September 2nd, 2021), for CUDA 11.4, for Linux (x86): cudnn-11.4-linux-x64-v8.2.4.15.tgz
TensorRT 8.2 GA + cuDNN 8.2.4 + CUDA 10.2
TensorRT 8.2 GA Update 4 for Linux x86_64 and CUDA 10.2 TAR Package:TensorRT-8.2.5.1.Linux.x86_64-gnu.cuda-10.2.cudnn8.2.tar.gz
cuDNN v8.2.4 (September 2nd, 2021), for CUDA 10.2, for Linux (x86): cudnn-10.2-linux-x64-v8.2.4.15.tgz
TensorRT 7.2.3 + cuDNN 8.1.1 + CUDA 11.1
TensorRT 7.2.3 for Ubuntu 18.04 and CUDA 11.1, 11.2 TAR package: TensorRT-7.2.3.4.Ubuntu-18.04.x86_64-gnu.cuda-11.1.cudnn8.1.tar.gz
cuDNN v8.1.1 (Feburary 26th, 2021), for CUDA 11.0, 11.1, 11.2, for Linux Ubuntu(x86_64): cudnn-11.2-linux-x64-v8.1.1.33.tgz
TensorRT 7.2.3 + cuDNN 8.1.1 + CUDA 10.2
TensorRT 7.2.3 for Ubuntu 18.04 and CUDA 10.2 TAR package: TensorRT-7.2.3.4.Ubuntu-18.04.x86_64-gnu.cuda-10.2.cudnn8.1.tar.gz
cuDNN v8.1.1 (Feburary 26th, 2021), for CUDA 10.2, for Linux Ubuntu(x86_64): cudnn-10.2-linux-x64-v8.1.1.33.tgz
CUDA Toolkit 10.2.89 (Nov 2019):
cuda_10.2.89_440.33.01_linux.run
patch 1 (Aug 26, 2020): cuda_10.2.1_linux.run
patch 2 (Nov 17, 2020): cuda_10.2.2_linux.run CUDA Toolkit 11.4.4 (Feburary 2022): cuda_11.4.4_470.82.01_linux.run CUDA Toolkit 11.1.1 (October 2020): cuda_11.1.1_455.32.00_linux.run
版本选择的方法【后续仍需补充】:
从下载后的 TensorRT 的安装包文件名可以看出其依赖的 CUDA 与 cuDNN 版本 从下载后的 cuDNN 的安装包文件名可以看出其依赖的 CUDA 版本 从下载后的 CUDA 的安装包文件名可以看出与其相适配的显卡驱动版本号(如果机器本身的显卡驱动足够高,安装时可以选择不安装显卡驱动)
多版本并存安装指南
参考资料
李沐B站课程 主要有两种方式(除去docker的方式):
系统级别安装nvidia驱动+系统级手动安装所需要的版本的cuda 备注:此方法得到的cuda是完整的
系统级别安装nvidia驱动+conda安装cudatoolkit 备注:此方法得到的cuda是不完整的
本节内容仅作宏观指导, 具体细节以官方文档为准
第一步:安装版本足够高的显卡驱动,驱动决定的支持最高的 CUDA 版本,且驱动在宿主机上只能是唯一的版本
CUDA、cuDNN、TensorRT 都可以多版本并存安装,其中 CUDA 需要执行安装脚本、而 cuDNN 和 TensorRT 只需要将下载的安装文件解压并设置好环境变量即可。
下面以这个版本为例介绍安装方法:
TensorRT 7.2.3 + cuDNN 8.1.1 + CUDA 10.2
TensorRT 7.2.3 for Ubuntu 18.04 and CUDA 10.2 TAR package: TensorRT-7.2.3.4.Ubuntu-18.04.x86_64-gnu.cuda-10.2.cudnn8.1.tar.gz
cuDNN v8.1.1 (Feburary 26th, 2021), for CUDA 10.2, for Linux Ubuntu(x86_64): cudnn-10.2-linux-x64-v8.1.1.33.tgz
CUDA Toolkit 10.2.89 (Nov 2019):
cuda_10.2.89_440.33.01_linux.run
patch 1 (Aug 26, 2020): cuda_10.2.1_linux.run
patch 2 (Nov 17, 2020): cuda_10.2.2_linux.run
即假设目录 /home/username/software
下下载好了如下文件
CUDA 安装 参考博客
以上命令会将 CUDA 10.2 安装在 /usr/local/cuda-10.2
目录下
需要修改的环境变量有:
cuDNN 安装
需要修改的环境变量有:
TensorRT 安装
需要修改的环境变量有:
(FAQ) CUDA 的多种安装方式
CUDA 的安装方式在网上各种资料里大略有如下几种,但一般来说只推荐上一节的那种方式,这里对这几种方式做一个说明:
Nvidia 官网安装:
离线安装脚本:例如上面介绍的
cuda_10.2.89_440.33.01_linux.run
,这种安装包含了整个 CUDA 的工具包,最重要的是 nvcc 编译器、头文件、库文件,最全面deb 包:这种安装也是全面的安装,缺点是它会把头文件、库文件、nvcc 分散在系统文件的各处,不方便删除
使用conda安装cuda-toolkit: 阉割版的cuda,且必须激活环境,总的来说不推荐
(FAQ) cuda driver version与runtime version
CUDA 提供了两套 API,一套是 CUDA Driver API,另一套是 CUDA Runtime API,其中 Driver API 更为底层。
一般而言,只需要关注 Runtime API 即可,例如在 Linux 系统中的 ~/.bashrc
中添加这几行(添加到 PATH 与 LD_LIBRARY_PATH 尤为重要)指的是 Runtime API 相关的路径。
(FAQ) Pytorch 相关
如果只希望运行Pytorch代码,可以只安装驱动,其余的CUDA、CUDNN等包含在pip install pytorch
中pytorch问答。具体来说,在官方预编译好pytorch whl包中,例如:torch-1.11.0+cu115-cp38-cp38-linux_x86_64.whl
,将其解压后,可以发现这些文件的存在:
备注:pytorch中带着的cuda以及cudnn头文件及库文件并不是完整的cuda与cudnn库文件。并且即使系统级别安装的是别的版本的cuda与cudnn,使用pip的方式安装时,pytorch在运行时也会将其忽略【设置LD_LIBRARY_PATH会不会影响到?】。
由于pytorch自带(使用pip安装)了一个阉割版的CUDA(可能pytorch为了用户体验,只要求安装驱动其他都自带), 而某些其他的包需要独立安装一个完整的CUDA, 这时候会引发一些冲突,具体解释可以参考参考资料
新版本的 pytorch 安装时,有一些新的变化,例如安装包变小了,CUDA和CUDNN的依赖会去下载别的nvidia的包,参见issue
pytorch 预编译包有两个地方可以下载
PyPi: 对于一个torch版本而言, 对于一个系统类型(例如:windows/linux), 一个python版本(例如:python3.6/python3.7/python3.8), 只能提供一个whl安装包, 因此只能放一个CUDA版本的预编译包
pytorch whl:对于一个torch版本而言, Pytorch 预编译了不同 CUDA 版本的预编译包
注意: 不是所有的 CUDA 版本都有预编译包, 例如 CUDA 11.4 版本就没有预编译包
以下是在Linux环境下不同python、pytorch、cuda版本下对推理过程的测试,比较结果的差异【待测试】
pytorch1.10.2+cuda10.2+python3.7: 一致
pytorch1.10.2+cuda10.2+python3.8
pytorch1.10.2+cuda10.2+python3.9
pytorch1.12.1+cuda10.2+python3.7: 一致
pytorch1.12.1+cuda10.2+python3.8
pytorch1.12.1+cuda10.2+python3.9
pytorch1.12.1+cuda11.3+python3.7: 一致
pytorch1.12.1+cuda11.3+python3.8
pytorch1.12.1+cuda11.3+python3.9
测试方法如下:使用ubuntu镜像预编译好3种python作为3个基础镜像, 之后使用这三个镜像分别安装pytorch whl文件, 最后在huggingface上模型结果是否有差异.
(FAQ) 怎么知道版本号
来源: ColossalAI colossalai check -i
(FAQ) 相关的环境变量解释
PATH
: 可执行文件搜索目录CPATH
: 头文件搜索目录CUDA_HOME
: 这个某些情况下似乎会用到, 不确定是否必须LD_LIBRARY_PATH
,RPATH
,RUNPATH
,DT_RPATH
,DT_RUNPATH
: 动态链接库搜索目录
(FAQ) Nvidia 显卡架构, 型号, CUDA 时间线
参考资料
显卡:
2006: Tesla
2010: Fermi
2012: Kepler
2014: Maxwell
2016: Pascal
2017: Volta, Tesla V100
2018: Turing, GeForce16 系列, RTX20 系列
2020: Ampere, A100, RTX3060
2022: Hopper, H100
CUDA:
2016.9: CUDA 8.0
2017.9: CUDA 9.0
2017.10: CUDA 9.1
2018.5: CUDA 9.2
2018.9: CUDA 10.0
2019.2: CUDA 10.1
2019.10: CUDA 10.2
2020.1: CUDA 11.0.1
2020.9: CUDA 11.1.0
2020.12: CUDA 11.2.0
2021.4: CUDA 11.3.0
2021.6: CUDA 11.4.0
2021.10: CUDA 11.5.0
2022.1: CUDA 11.6.0
2022.5: CUDA 11.7.0
2022.10: CUDA 11.8.0
2022.12: CUDA 12.0.0
2023.2: CUDA 12.1.0
cuDNN:
2017.4: cuDNN 6.0 (CUDA 7.5, 8.0)
2017.10: cuDNN 7.0.1 (CUDA 8.0, 9.0)
2018.3: cuDNN 7.1.2 (CUDA 9.0, 9.1, 9.2)
2018.8: cuDNN 7.2.1 (CUDA 9.2)
2018.9: cuDNN 7.3.0 (CUDA 9.0, 9.2, 10.0)
2018.10: cuDNN 7.4.1 (CUDA 9.0, 9.2, 10.0)
2019.2: cuDNN 7.5.0 (CUDA 9.2, 10.0, 10.1)
2019.5: cuDNN 7.6.0 (CUDA 9.2, 10.0, 10.1, 10.2)
2020.7: cuDNN 8.0.2 (CUDA 10.1, 10.2, 11.0)
2021.1: cuDNN 8.1.0 (CUDA 10.2, 11.0, 11.1, 11.2)
2021.4: cuDNN 8.2.0 (CUDA 10.2, 11.x, 11.4)
2021.10: cuDNN 8.3.0 (CUDA 10.2, 11.5)
2022.4: cuDNN 8.4.0 (CUDA 10.2, 11.x)
2022.8: cuDNN 8.5.0 (CUDA 10.2, 11.x)
2022.10: cuDNN 8.6.0 (CUDA 10.2, 11.x)
2022.11: cuDNN 8.7.0 (CUDA 10.2, 11.x)
2023.2: cuDNN 8.8.0 (CUDA 11.x, 12.0)
2023.4: cuDNN 8.9.0 (CUDA 11.x, 12.x)
TensorRT(不确定时间线在哪找)
GPU利用率/带宽 benchmark
比较可信的工具是
cuda-sample: https://github.com/NVIDIA/cuda-samples, 早期版本 cuda-sample 是在 CUDA toolkit 安装时附带的
其他小工具
带宽
CPU <-> GPU: cuda-sample/bandwidthTest
GPU 内存带宽: cuda-sample/bandwidthTest
P2P带宽(两块GPU之间拷贝): cuda-sample/p2pBandwidthLatencyTest
WSL2
前置条件:最好是 Windows 11
安装步骤:
按微软 官方文档 安装 WSL2
在微软商店中安装 Ubuntu 20.04 以及 Windows Terminal (Windows 10) 已自带
后置事项:
Windows 上安装 VSCode 并安装 Remote-WSL 插件
更换 apt 源:清华源官网
文件目录:
Windows 系统查看 WSL2 文件:在资源浏览器目录中输入:
\\wsl$
,或者类似这种目录C:\Users\{Username}\AppData\Local\Packages\CanonicalGroupLimited.Ubuntu20.04LTS_79rhkp1fndgsc\LocalState
(不推荐)WSL2 命令行(Windows Terminal)中查看 Windows 文件目录:
/mnt/c
表示 C 盘目录在 WSL2 命令行中切换至相应目录执行
code .
即可打开 VSCode,并且打开后 VSCode 的集成终端本身也会是 WSL2 命令行
GPU(不确定):在 Windows 11 本机将 Nvidia 显卡驱动升级至 510 以上版本,那么不做特殊设置,WSL2 中也能访问显卡,在 WSL2 命令行中可以查验:
lspci | grep -i nvidia
Docker:可以参考 Docker 官方文档将 Docker Desktop 在 Windows 本机安装,此时 WSL2 与 Windows 本机均能使用 Docker。也可以在 WSL2 Terminal 中使用命令安装 Docker,这样 Docker 只能在 WSL2 命令行中访问
网络:一般情况下,无需做特殊设置,WSL2 的网络与 Windows 本机的网络一般是互通的。如果使用 VPN 或代理时,可能需要进行特殊设置(不确定)。
磁盘清理:
参考资料1 参考资料2 使用 Windows PowerShell 输入
在弹出的命令行中输入
远程访问WSL
在WSL2的terminal中
在WSL2的Windows宿主机打开powershell以管理员权限设置端口转发
在WSL2的Windows宿主机设置防火墙规则:
控制面板->防火墙->入站规则->新建规则
端口
TCP, 特定本地端口, 3333
允许连接
全选上
名称任意
至此, 从局域网中另一台机器打开终端即可远程连接WSL2
源
pip 源
参考:https://mirrors.tuna.tsinghua.edu.cn/help/pypi/
anaconda 源
参考:https://mirrors.tuna.tsinghua.edu.cn/help/anaconda/
windows 机器先执行
在~/.condarc中写入
apt 源
参考:https://mirrors.tuna.tsinghua.edu.cn/help/ubuntu/
时区
Dockerfile中的写法
virtualenvwrapper
安装
配置
使用
备注:
实际上,
workon
,mkvirtualenv
等命令是 virtualenvwrapper.sh 这个脚本里的函数,因此使用whereis workon
会找不到位置。假设环境名为
test
,则虚拟环境的bin
目录为$WORKON_HOME/test/bin
,此目录底下包含如下可执行命令:
jupyter添加核
ssh-key
~/.ssh
目录结构
为本机生成
id_rsa
与id_rsa.pub
备用将本机的
id_rsa.pub
的内容追加到服务器特定用户的~/.ssh/authorized_keys
文件内,可以实现本机到服务器的远程免密登录本地 Shell 连接服务器无需输入密码。
ssh username@ip_addr
,例如:ssh foo@172.16.83.43
VScode 远程连接无需输入密码
将本机的
id_rsa.pub
的内容在 gitlab 或 github 上添加到 SSH Keys 中,则可以免密使用 ssh 进行仓库克隆、推送等操作,例如:但对 http 的方式无效,如果使用下面的方式进行 clone,在执行 push 的时候,会自动跳出一个弹出框,要求输入 github 的帐号及密码:
备注:要实现远程免密登陆,服务器端 .ssh
文件夹的权限应该为 700
,而 authorized_keys
文件的权限应为 600
日志
nohup 表示关闭终端不受影响
-u
表示输出到nohup.out
时不进行缓存操作2>&1
表示将标准错误与标准输出(即print
函数打印的内容)重定向至nohup.out
&
表示任务在后台进行
对于一个前台运行的程序,可以使用ctrl+z
快捷键暂停,或者新开一个终端,执行如下命令让它暂停
暂停任务再次启动的方法为
或者使用
可视化
tensorboard
参考资料:Pytorch tutorial、Pytorch API
训练时将数据写入
训练结束后怎么从tensorborad保存的数据中读取?
wandb(待研究)
据说这个工具相比 Tensorboard 更有优势,参考视频
有效利用GPU
小工具
numpy 浮点数输出
torch 捕获 NaN
监控 GPU 的使用
或
Last updated