如何在Ubuntu中配置基于显卡加速的强化学习环境?

本文记录了2023年春季如何在全新的Ubuntu系统中配置基于显卡加速的强化学习环境,以便未来进行相似配置时有所参考。相关参数为CPU:Intel Core i7-10700,GPU:Nvidia Quadro P1000,OS:Ubuntu 20.04.6。

【2024.04.09注:随着CUDA 12.4和cuDNN 9的推出,对于RTX 4090显卡使用下述的Local Repo的方式安装CUDA 12.0、12.1、12.2均会报错,12.3未尝试,12.4成功,因此推荐使用Network Repo的方式来安装CUDA和cuDNN,此方法下CUDA甚至可以选择11.8版本。具体安装方式请参考官方手册:
https://docs.nvidia.com/cuda/cuda-installation-guide-linux/index.html,
https://docs.nvidia.com/deeplearning/cudnn/installation/linux.html。】

1. NVIDIA CUDA
1.1. CUDA是一个用来调用NVIDIA GPU进行加速计算的软件架构,安装手册的官方网址为:
https://docs.nvidia.com/cuda/cuda-installation-guide-linux/index.html。
如果不是想要安装最新版本的CUDA,可以点击页面右上角的Archive选择历史版本。在Archive页面,可以选择某一版本的CUDA Toolkit按照指定步骤进行下载,并根据对应版本的在线文档一步一步进行安装。
1.2. 最初编写本记录时最新版本PyTorch依赖的CUDA为11.8,本文选择了CUDA Toolkit 11.8.0,安装类型为deb(local),安装后自动得到的显卡驱动版本为520.61.05。
1.3. 安装
安装必备程序包:
$sudo apt update
$sudo apt install gcc
删除过期的签名密钥:
$sudo apt-key del 7fa2af80
在软件下载页面,选择Linux - x86_64 - Ubuntu - 20.04 - deb(local),然后在命令行依次执行所提示命令如下:
$wget https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2004/x86_64/cuda-ubuntu2004.pin
$sudo mv cuda-ubuntu2004.pin /etc/apt/preferences.d/cuda-repository-pin-600
$wget https://developer.download.nvidia.com/compute/cuda/11.8.0/local_installers/cuda-repo-ubuntu2004-11-8-local_11.8.0-520.61.05-1_amd64.deb
$sudo dpkg -i cuda-repo-ubuntu2004-11-8-local_11.8.0-520.61.05-1_amd64.deb
$sudo cp /var/cuda-repo-ubuntu2004-11-8-local/cuda-*-keyring.gpg /usr/share/keyrings/
$sudo apt update
$sudo apt install cuda
完毕后,设置环境变量,打开目录/home/wei/下的.bashrc文件,将下面代码复制到文件末尾独自成行:
export PATH=/usr/local/cuda-11.8/bin${PATH:+:${PATH}}
保存文件并退出,该文件会在每次系统载入新的终端时自动运行,即把对应路径加到环境变量PATH中。在命令行中可以通过如下指令来查看环境变量PATH的内容:
$echo $PATH
最后如下安装第三方程序包,完成后即可重启系统进行测试:
$sudo apt install g++ freeglut3-dev build-essential libx11-dev libxmu-dev libxi-dev libglu1-mesa libglu1-mesa-dev libfreeimage-dev
1.4. 测试
在命令行中执行如下命令即可查看GPU和CUDA版本信息
$nvidia-smi
还可从以下网址下载测试代码:
https://github.com/nvidia/cuda-samples
解压后在命令行中进入文件夹cuda-samples-master/Samples/1_Utilities/deviceQuery/,运行命令
$make SMS="61"
其中赋值给SMS的数字表示GPU的Compute Capability,与显卡型号有关,61为Quadro P1000的数值,其它型号显卡的对应数值可通过以下网址查询:
https://developer.nvidia.com/cuda-gpus
编译完成后,进入cuda-samples-master/bin/x86_64/linux/release/文件夹下可以看到编译生成的deviceQuery程序,在命令行如下命令即可查看运行结果:
$./deviceQuery

2. NVIDIA cuDNN
2.1. cuDNN是一个依赖于CUDA对深度神经网络计算进行加速的库,安装手册的官方网址为:
https://docs.nvidia.com/deeplearning/cudnn/install-guide/index.html#install-linux。
2.2. 根据安装手册,使用英伟达账号登录开发者计划,下载cuDNN的安装包,需根据CUDA的版本选择对应cuDNN版本。本文选择了cuDNN v8.9.2 for CUDA 11.x下拉列表中的Local Installer for Ubuntu 20.04 x86_64 (Deb)。
2.3. 安装
按照官方安装手册的1.3.2章节进行,在命令行环境进入cuDNN安装包所在位置,执行如下命令:(注意下列命令中cuDNN的版本号未必为实际安装时的最新版本号,实际执行时需要将libcudnn的版本号需要替换成所安装的cuDNN版本号)
$sudo dpkg -i cudnn-local-repo-ubuntu2004-8.9.2.26_1.0-1_amd64.deb
$sudo cp /var/cudnn-local-repo-ubuntu2004-8.9.2.26/cudnn-local-6D0A7AE1-keyring.gpg /usr/share/keyrings/
$sudo apt update
$sudo apt install libcudnn8=8.9.2.26-1+cuda11.8
$sudo apt install libcudnn8-dev=8.9.2.26-1+cuda11.8
$sudo apt install libcudnn8-samples=8.9.2.26-1+cuda11.8
2.4. 测试
将/usr/src/路径下的cudnn_samples_v8文件夹拷贝到系统~/Downloads/路径下,从命令行进入cudnn_samples_v8/mnistCUDNN/,执行如下命令进行编译:
$make SMS="61"
编译完成后,执行如下命令查看测试结果:
$./mnistCUDNN

3. nvtop
3.1. 通过Ubuntu Software或snap安装nvtop,用于监测CPU和GPU的使用情况:
$sudo snap refresh
$sudo snap install nvtop
3.2. 在命令行输入如下指令打开nvtop:
$nvtop
3.3. 可能存在热键冲突,导致无法通过F10键退出nvtop。在Terminal的preference中将General选项卡下的Enable the menu accelerator key (F10 by default)取消勾选即可。

4. pip
4.1. 用于安装和管理Python程序包。
4.2. 安装
在命令行输入如下命令:
$sudo apt install python3-pip
4.3. 测试
在命令行输入如下命令:
$pip3 --version

5. PyCharm
5.1. 用于调试Python代码的IDE。
5.2. 通过Ubuntu Software或snap安装pycharm-community:
$sudo snap install pycharm-community

6. MuJoCo
6.1. 用于进行动力学仿真。
6.2. 安装
访问https://github.com/deepmind/mujoco,可以
1)从Releases里面下载最新的发行版压缩包,解压后使用C/C++ API进行仿真;
2)在命令行环境通过如下命令安装含有Python API的版本:
$pip3 install mujoco。
安装完成后可能会提示添加环境变量,按需操作即可。
6.3. 测试Python API
创建一个新的{filename}.py文件,输入如下代码:
import mujoco
import mujoco.viewer
mujoco.viewer.launch()
保存文件后通过如下代码运行该文件:
$python3 {filename}.py

7. PyTorch
7.1. 用于进行机器学习的应用框架。
7.2. 安装
从官网https://pytorch.org/get-started/locally获得安装PyTorch的命令行指令进行安装,需在页面上依次选择:
Stable - Linux - Pip - Python - CUDA 11.8
最后生成的命令行指令为:
$pip3 install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu118
7.3. 测试
通过同一页面上提供的代码进行安装测试,需创建一个新的{filename}.py文件,输入如下代码:
import torch
x = torch.rand(5, 3)
print(x)
if torch.cuda.is_available():
  print(torch.cuda.get_device_name())
print(torch.__version__)
保存文件后通过如下代码运行该文件:
$python3 {filename}.py

8. Stable Baselines3
8.1. 基于PyTorch的强化学习算法应用框架
8.2. 安装
$pip3 install stable-baselines3[extra]
默认版本是基于Gym的1.8版本,如果想要安装基于Gymnasium的2.X版本,需要使用如下命令:
$pip3 install "stable_baselines3[extra]>=2.0.0a9"
8.3. 测试
创建一个新的{filename}.py文件,输入如下基于Gymnasium的代码:
import gymnasium as gym
from stable_baselines3 import PPO
env = gym.make("CartPole-v1", render_mode="rbg_array")
model = PPO("MlpPolicy", env, verbose=1, device="cuda")
model.learn(total_timesteps=10_000)
vec_env = model.get_env()
obs = vec_env.reset()
for i in range(1000):
  action, _states = model.predict(obs, deterministic=True)
  obs, reward, done, info = vec_env.step(action)
  vec_env.render("human")
env.close()
保存文件后通过如下代码运行该文件:
$python3 {filename}.py

9. Tianshou
9.1. 基于PyTorch的强化学习算法应用框架。
9.2. 安装
$pip3 install tianshou
9.3. 测试
创建一个新的{filename}.py文件,输入如下代码:
import tianshou
print(tianshou.__version__)
保存文件后通过如下代码运行该文件:
$python3 {filename}.py