深度学习配置环境详细步骤及相关问题

茴香豆 Lv5

记录自己在配置深度学习环境时遇到的问题以及解决方法。仅以Ubuntu为例。

注意:没有必要一定按照项目文档中的CUDA、Pytorch版本进行配置,因为Pytorch版本的每次更新改变都在github有详细的记录,可以根据运行项目后的报错信息,参照Pytorch版本更新修改的代码进行相应修改。

1.安装电脑gpu对应版本的显卡驱动

  • 获取可用驱动信息
1
ubuntu-drivers devices
  • 查看driver分项的推荐NVIDIA驱动

注意:显卡为RTX-3090,虽然该图中推荐为nvidia-driver-525-open,但是经过实验后发现,nvidia-driver-525-open并不能正常工作,要安装nvidia-driver-525才可以。

  • 安装驱动
1
sudo apt install nvidia-driver-xxx
  • 重启,并更新驱动
1
reboot
1
2
sudo apt update
sudo apt upgrade
  • 运行指令查看系统(报错可能是驱动版本错误或者需要重启计算机)
1
nvidia-smi

正常输出如图所示:

2.安装对应版本CUDA

CUDACompute Unified Device Architecture,统一计算架构)是由英伟达NVIDIA所推出的一种集成技术,是该公司对于GPGPU的正式名称。透过这个技术,用户可利用NVIDIA的GPU进行图像处理之外的运算,亦是首次可以利用GPU作为C-编译器的开发环境。CUDA 开发包(CUDA Toolkit )只能将自家的CUDA C-语言,也就是执行于GPU的部分编译成PTX中间语言或是特定NVIDIA GPU架构的机器代码(NVIDIA 官方称为 “device code”);而执行于中央处理器部分的C / C++代码(NVIDIA 官方称为 “host code”)仍依赖于外部的编译器,如Microsoft Windows下需要Microsoft Visual Studio;Linux下则主要依赖于GCC。 ——CUDA - 维基百科

注意:不要安装最新版本的CUDA,因为Pytorch的版本更新相对较慢,大概率新的CUDA都没有对应版本的Pytorch。

  1. 可以访问Previous PyTorch Versions | PyTorch ,查看其中Pytorch对应的最新的CUDA版本(如果使用的是清华源,推荐主要关注Wheel中存在的版本。因为一方面清华源可能会下载cpu版本的Pytorch,另一方面第一次很大概率会出现环境问题,离线安装可以节省每次下载的等待时间。
  2. 访问CUDA Toolkit Archive | NVIDIA Developer 下载在第2步中查找到的CUDA版本进行下载
  3. 安装
1
2
chmod +x cuda_xx.x.xxx_xxx.xx_linux.run
./cuda_xx.x.xxx_xxx.xx_linux.run

​ 安装之后需要阅读说明(以CUDA10.0为例):

​ [Ubuntu安装和卸载CUDA和CUDNN](https://cloud.tencent.com/developer/article/1623816#:~:text=卸载CUDA很简单,一条命令就可以了,主要执行的是CUDA自带的卸载脚本,读者要根据自己的cuda版本找到卸载脚本: sudo,%2Fusr%2Flocal%2Fcuda-8.0%2Fbin%2Funinstall_cuda_8.0.pl 卸载之后,还有一些残留的文件夹,之前安装的是CUDA 8.0。)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
(是否同意条款,必须同意才能继续安装)
accept/decline/quit: accept

(这里不要安装驱动,因为已经安装最新的驱动了,否则可能会安装旧版本的显卡驱动,导致重复登录的情况)
Install NVIDIA Accelerated Graphics Driver for Linux-x86_64 410.48?
(y)es/(n)o/(q)uit: n

Install the CUDA 10.0 Toolkit?(是否安装CUDA 10 ,这里必须要安装)
(y)es/(n)o/(q)uit: y

Enter Toolkit Location(安装路径,使用默认,直接回车就行)
[ default is /usr/local/cuda-10.0 ]:

Do you want to install a symbolic link at /usr/local/cuda?(同意创建软链接)
(y)es/(n)o/(q)uit: y

Install the CUDA 10.0 Samples?(不用安装测试,本身就有了)
(y)es/(n)o/(q)uit: n

Installing the CUDA Toolkit in /usr/local/cuda-10.0 ...(开始安装)
  1. 安装完成后需要配置环境变量,在vim ~/.bashrc末尾添加以下信息:
1
2
3
export CUDA_HOME=/usr/local/cuda-10.0
export LD_LIBRARY_PATH=${CUDA_HOME}/lib64
export PATH= {CUDA_HOME}/bin: {PATH}
  1. 使用source ~/.bashrc是配置文件生效。
  2. 使用nvcc -V查看安装的版本信息。(此处的版本信息可能与nvidia-smi面板中的版本不同,实测没有实际影响)
1
2
3
4
5
test@test:~$ nvcc -V
nvcc: NVIDIA (R) Cuda compiler driver
Copyright (c) 2005-2018 NVIDIA Corporation
Built on Sat_Aug_25_21:08:01_CDT_2018
Cuda compilation tools, release 10.0, V10.0.130

3.安装CUDNN

参考【保姆级教程】个人深度学习工作站配置指南 - 知乎 (zhihu.com)

登录NVIDIA Developer Program Membership Required | NVIDIA Developer 并下载与之前安装CUDA所对应的CUDNN版本。

选择最新发布的版本就可以。

下载后将其解压:ubuntu 各压缩文件解压命令大全

使用以下两条命令复制到CUDA目录下:

1
2
sudo cp cuda/lib64/* /usr/local/cuda-11.0/lib64/
sudo cp cuda/include/* /usr/local/cuda-11.0/include/

拷贝完成之后,可以使用以下命令查看CUDNN的版本信息:

1
cat /usr/local/cuda/include/cudnn_version.h | grep CUDNN_MAJOR -A 2

4.安装Conda环境

  1. Anaconda官网下载Linux安装包Anaconda | Anaconda Distribution

  1. 运行以下命令安装:
1
2
chmod +x Anaconda3-xxxx.xx-Linux-x86_64.sh
./Anaconda3-xxxx.xx-Linux-x86_64.sh

​ 一路按ENTER确认,然后根据提示输入yes,最后会询问你是否要初始化conda,输入yes确认(注意这里不小心按到回车默认是no)。重开终端窗口,就可以看到conda环境。如果重开后无conda环境(可能是前面选了no),卸载conda(直接运行anaconda安装目录下的Uninstall-Anaconda3.exe即可)重装即可。

  1. conda、pip等相关命令参照Python学习之路(15)查看及修改pip源和conda源及创建环境 - 顺利毕业企划 (hxiangdou.github.io)

5.安装Pytorch

如果是国内环境,推荐使用离线安装或者**pip安装**,一方面conda官方源的网络环境很差,一方面清华源可能会给你下载cpu版本的Pytorch。(第一次环境配置很容易出错,为了节省反复下载的时间,离线安装也是更好的选择)

  1. 访问Previous PyTorch Versions | PyTorch 查找安装的CUDA版本对应的Pytorch,以CUDA11.6为例:

  1. 访问https://download.pytorch.org/whl/torch_stable.html找到需要的版本(torch、torchvision、torchaudio都要对应好版本进行安装,这里只展示torch)

​ 如图所示,黄色部分表示torch版本,cuxxx表示对应``CUDA xx.x版本,cpxx表示对应的python`版本,最后表示操作系统是linux还是windows。

  1. 下载完成后,进行安装
1
pip install package.whl

6.关于THC/THC.h: No such file or directory解决方法

THC.h文件在Pytorch1.10版之后被移除了,所以需要对项目中的.cu文件中的代码进行修改。参考remove THC.h by zyddnys · Pull Request #37 · CoinCheung/pytorch-loss (github.com)

  1. 将文件中的#include <THC/THC.h>注释掉
  2. THCudaCheck函数报错。将所有该函数替换为AT_CUDA_CHECK
  3. THCCeilDiv函数报错。在文件头部添加该函数:
1
2
3
4
template <typename T>
__host__ __device__ __forceinline__ T THCCeilDiv(T a, T b) {
return (a + b - 1) / b;
}

7.GCC版本不匹配问题

参考Ubuntu安装GCC5/7/9/10/11_nudt_qxx的博客

以安装GCC-10.0为例:

1
2
3
4
sudo add-apt-repository ppa:ubuntu-toolchain-r/ppa
sudo apt update
sudo apt install gcc-10 g++-10
sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-10 60 --slave /usr/bin/g++ g++ /usr/bin/g++-10

GCC卸载:

1
2
sudo apt-get remove gcc gcc-xx   #可能有多个版本,都要删掉
sudo apt-get remove g++

查看自己当前的GCC版本

1
gcc -v

8.from . import _C导入报错

from . import xx 语句表示从同级目录中引用包,from .. import xx 语句表示从上级目录中引用包。出现这个报错往往是因为setup.pypython setup.py build develop操作出现了问题。需要重新进行操作。

  1. 移除已经进行的操作。在执行python setup.py build develop操作的文件夹下,执行rm -r build
  2. 重新执行python setup.py build develop

9.subprocess.CalledProcessError: Command ‘[‘which’, ‘c++’]’ returned non-zero exit status 1.报错

安装build-essential包即可解决,该包用来编译c/c++

1
sudo apt-get install build-essential

10.预训练模型版本过老导致无法加载的问题

.pt模型后缀改为.zip之后,不要解压缩,直接在压缩状态打开,就可以对打包好的代码进行修改,之后再将后缀改回.pt重新加载即可。

11.Ubuntu重启后进入initramfs中

这个问题往往是不正常的关机导致磁盘文件受损所引起的。

解决思路参考(Linux 系统启动后出现(initramfs) 处理办法_天翔MAC的博客

1
fsck -t ext4 /dev/损坏磁盘名

如果提示没有fsck指令,就再强制重启,知道有fsck指令。

其他没能涉及到的问题,试试重装解决把!

  • Title: 深度学习配置环境详细步骤及相关问题
  • Author: 茴香豆
  • Created at : 2023-03-04 12:14:09
  • Updated at : 2023-06-19 08:19:10
  • Link: https://hxiangdou.github.io/2023/03/04/DL-env/
  • License: This work is licensed under CC BY-NC-SA 4.0.
Comments