Debian 基础环境配置
深度学习的基础环境为显卡驱动、CUDA和cudnn.
其中显卡驱动是正常调用显卡设备所必须的, CUDA是用来将代码编译成显卡能执行程序的编译器, cudnn是针对深度学习卷积等操作优化的库
显卡驱动安装
显卡驱动最好安装最新版本
停止内核更新
为防止内核升级导致环境全崩, 需要先禁用内核更新
# 查看系统内核版本
sudo dpkg --get-selections | grep linux
## ...
## linux-headers-6.1.0-29-amd64 hold
## linux-headers-6.1.0-29-common hold
## ...
## linux-image-6.1.0-29-amd64 hold
## ...
# 保持内核版本, 不更新, 需要根据上条结果修改为指定版本
sudo apt-mark hold linux-headers-6.1.0-29-amd64 \
linux-headers-6.1.0-29-common \
linux-image-6.1.0-29-amd64 显卡驱动安装程序
前往官网下载显卡驱动安装程序 (需要根据自己的显卡型号及系统和架构选择对应显卡驱动安装程序)
# 我的显卡为 GeForce RTX 3070 Laptop, 下载的驱动名称可能不一样
## 给予安装程序运行权限
chmod u+x NVIDIA-Linux-x86_64-550.144.03.run
## 以管理员身份运行安装程序
sudo NVIDIA-Linux-x86_64-550.144.03.run
# 在解决下述问题安装完毕后重启系统, 再次运行驱动安装程序
sudo NVIDIA-Linux-x86_64-550.144.03.run安装过程中出现的问题
Check that you have pkg-config and the libglvnd development libraries installed,
# 安装相关包
sudo apt install build-essential libglvnd-dev pkg-configUnable to find a suitable destination to install 32-bit compatibility
# 添加i386架构进库
sudo dpkg --add-architecture i386
# 更新库
sudo apt update
# 安装libglvnd库
sudo apt install libc6:i386ERROR: Failed to rebuild the initramfs!
# 我使用的是Debian12, initramfs已安装在/sbin下, 但/sbin未加入PATH中
# 将/sbin加入PATH中即可解决问题
sudo echo 'export PATH="/sbin:$PATH"' >> /etc/bash.bashrc测试安装是否成功
命令行中进行测试, 能正常输出显卡信息即为成功
nvidia-smiCUDA与cudnn安装
CUDA类似于编译器一样, 可以视为一个程序, 所以不一定非要用root权限安装在全局下, 完全可以每个用户安装自己对应的CUDA版本, 甚至可以将显卡映射给Docker, 然后直接调用别人安装好一切基础环境的镜像
根据nvidia-smi命令获取到驱动版本, 前往官网根据系统及驱动版本下载CUDA, 如果是非root用户安装需要选择
runfile, 我就直接装deb版算了官方给的我驱动对应命令
# Base Installer
# Installation Instructions:
wget https://developer.download.nvidia.com/compute/cuda/12.4.0/local_installers/cuda-repo-debian12-12-4-local_12.4.0-550.54.14-1_amd64.deb
sudo dpkg -i cuda-repo-debian12-12-4-local_12.4.0-550.54.14-1_amd64.deb
sudo cp /var/cuda-repo-debian12-12-4-local/cuda-*-keyring.gpg /usr/share/keyrings/
sudo add-apt-repository contrib
sudo apt-get update
sudo apt-get -y install cuda-toolkit-12-4CUDA安装默认位置在/usr/local/cuda-12.4/下, 同时会创建软链接(类似快捷方式), 将/usr/local/cuda/链接向/usr/local/cuda-12.4/
将下面内容加入~/.bashrc中, 注意, 如果runfile安装的要替换下面路径为对应的安装目录
# cuda env
export CUDA_HOME=$CUDA_HOME:/usr/local/cuda-12.4
export PATH=$PATH:/usr/local/cuda-12.4/bin
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/cuda-12.4/lib64前往官网, 根据CUDA版本选择对应的cuDNN库下载
选择Local Installer for Linux x86_64 (Tar)
# 解压cuDNN文件
tar -xvf cudnn-linux-x86_64-8.9.7.29_cuda12-archive.tar.xz
# 将cuDNN下的部分文件替换至CUDA安装目录中, 注意, 此处使用的是deb安装, 如果runfile装的要解压到对应的安装目录
cd cudnn-linux-x86_64-8.9.7.29_cuda12-archive
sudo cp lib/* /usr/local/cuda-12.4/lib64/
sudo cp include/* /usr/local/cuda-12.4/include/
sudo chmod a+r /usr/local/cuda-12.4/lib64/*
sudo chmod a+r /usr/local/cuda-12.4/*测试安装是否成功
# CUDA
nvcc -V
# cuDNN
cat /usr/local/cuda/include/cudnn_version.h | grep CUDNN_MAJOR -A 2参考:
在 Debian 12 上安装 Nvidia 显卡驱动程序
Debian 12安装Nvidia显卡驱动
英伟达的
Docker相关仓库# ubuntu一键安装, 连arm版的都编译了, 直接狠狠省心
sudo docker pull nvidia/cuda:12.4.1-cudnn-devel-ubuntu20.04
# 调用镜像的时候记得给gpu, 然后就完事了
sudo docker run --gpu=all --name cuda-env测试安装是否成功
# CUDA
sudo docker exec -it cuda-env nvcc -V
# cudnn不会测, 还得摸摸DockerPython环境管理
环境管理大多数都用的anaconda和mamba两种, 当然, 如果是用Docker里边的环境就爱莫能助了, 暂时还没发现能管理镜像里边深度学习环境的
# 下载文件
wget https://repo.anaconda.com/archive/Anaconda3-2024.10-1-Linux-x86_64.sh
# 给予运行权限
chmod u+x Anaconda3-2024.10-1-Linux-x86_64.sh
# 运行
./Anaconda3-2024.10-1-Linux-x86_64.shAnaconda基础命令
# 查询环境
## 查看所有环境
conda info -e
conda env list
## 查看环境目录
conda config --show envs_dirs
## 查看环境中包的安装记录
conda list --revision
# 进入&退出 环境
## 进入虚拟环境
conda activate ENV_NAME
## 退出虚拟环境, 返回base
conda deactivate
# 新建 环境
## 新建虚拟环境
conda create -n ENV_NAME python=版本 -y
## 指定创建环境位置
conda create --prefix=/usr/local/anaconda3/envs/ENV_NAME python=版本 -y
## 复制环境
conda create --clone 被复制环境 --name 新复制环境
## 添加新的环境目录
conda config --append envs_dirs NEW_ENV_PATH
# 删除 环境
## 删除虚拟环境
conda remove -n ENV_NAME --all
## 删除环境中的某个包
conda remove -n ENV_NAME PACKAGE_NAME
## 删除环境路径
conda config --remove envs_dirs OLD_ENV_PATH
## 滚回之前版本?
conda install --revision N
## conda env update -p /home/user/anaconda_envs/myenv --name myenv当然, 我使用的是
Micromamba, 类似于miniconda# 一键安装
"${SHELL}" <(curl -L micro.mamba.pm/install.sh)mamba和anaconda支持的命令大多都是相同格式, 所以在~/.bashrc里边直接加上alias conda=micromamba, 记得修改完后source ~/.bashrc!
测试发现conda里边的复制环境貌似在mamba里边不起作用?也可能是命令格式改了
conda基础命令
# 查询环境
## 查看所有环境
conda info -e
conda env list
## 查看环境目录
conda config --show envs_dirs
## 查看环境中包的安装记录
conda list --revision
# 进入&退出 环境
## 进入虚拟环境
conda activate ENV_NAME
## 退出虚拟环境, 返回base
conda deactivate
# 新建 环境
## 新建虚拟环境
conda create -n ENV_NAME python=版本 -y
## 指定创建环境位置
conda create --prefix=/usr/local/anaconda3/envs/ENV_NAME python=版本 -y
## 复制环境
conda create --clone 被复制环境 --name 新复制环境
## 添加新的环境目录
conda config --append envs_dirs NEW_ENV_PATH
# 删除 环境
## 删除虚拟环境
conda remove -n ENV_NAME --all
## 删除环境中的某个包
conda remove -n ENV_NAME PACKAGE_NAME
## 删除环境路径
conda config --remove envs_dirs OLD_ENV_PATH
## 滚回之前版本?
conda install --revision N
## conda env update -p /home/user/anaconda_envs/myenv --name myenv代码编辑器配置
无非就是写代码的工具, vscode好在能个性化配置但配置麻烦且访问方式较为繁琐, jupyter好在浏览器访问, 无论什么设备只要有浏览器均能快速访问, 但个性化配置较少, 需要自己手动去安装插件
其实还有code-server解决方案, vscode的web版, 一次配置完就能一直到处用了
注意!!!, .ipynb文件不支持子进程创建貌似, 多进程会出问题
jupyter有jupyter lab和jupyter notebook两个项目, 其中lab是对notebook的升级, 兼容了notebook的所有功能, 所以优先推荐lab安装, 至于notebook也会放在下面, 毕竟每一代人都有自己的win7是吧Jupyter-Lab
Jupyter-Lab安装
pip install jupyterlabJupyter-Lab配置
# 生成配置文件, 配置文件默认存放在~/.jupyter/jupyter_server_config.py下
jupyter server --generate-config
# 修改配置文件
vim ~/.jupyter/jupyter_server_config.py
## 向文件末尾添加以下配置
c.ServerApp.ip = '*' # 允许登录jupyter的ip范围
c.ServerApp.port = 10000 # jupyter监听的端口
c.ServerApp.browser = 'True' # 是否自动打开浏览器
c.ServerApp.password = '' # 设置jupyter的密码, 不起作用
c.ServerApp.root_dir = '' # 指定jupyter的工作目录,
# 若不写绝对路径的话, 会将其与当前路径拼接
# 设置jupyter访问密码
jupyter server passwordJupyter-Lab启动
# linux下, 如果不是root用户的话不用加上后面那句
jupyter lab --allow-rootJupyter-Lab 插件
# 中文支持
pip install jupyterlab-language-pack-zh-CN # -i https://pypi.tuna.tsinghua.edu.cn/simple
# gpu监控, 但貌似没用??? https://github.com/run-ai/jupyterlab_genv
pip install jupyterlab_genv
# drawio
pip install jupyterlab-drawio
# 代码折叠
## 进入 设置 -> 高级设置编辑器 -> 笔记本 -> Code Folding勾选Jupyter-Notebook
Jupyter-Notebook安装
# 安装jupyter notebook
conda install jupyter notebook -y
# 更新jupyter notebook(未做尝试)
conda update jupyter notebookJupyter-Notebook配置
# 生成jupyter notebook配置文件
jupyter notebook --generate-config
# 导入notebook包来设置密码设置密码
python
from notebook.auth import passwd
passwd()
# input: jetson_nx_1
# output: 'argon2:$argon2id$v=19$m=10240,t=10,p=8$Qw4Hct7y+9XCaH/YrZ8iWA$dPMdMqB5UDpeLB61a08RqE5TMEbAJX9b6J24DiMp7Cg'
# 设置密码
jupyter notebook password
# 修改文件
vim ~/.jupyter/jupyter_notebook_config.py
c.NotebookApp.ip='*'
c.NotebookApp.password='刚刚python中的输入密码返回的argon一长串'
c.NotebookApp.open_browser=False
c.NotebookApp.port=随便写一个能用的端口Jupyter-Notebook 插件
# 忘了, 好像是官方的插件库
pip install jupyter_contrib_nbextensions -i https://pypi.tuna.tsinghua.edu.cn/simple
jupyter contrib nbextension install --user
pip install jupyter_nbextensions_configurator -i https://pypi.tuna.tsinghua.edu.cn/simple
# Scratchpad: 窗口分面
# Highlighter: Markdown文本高亮
# Highlight selected word: 选中文本高亮
# Codefolding: 代码折叠
# Code Font Size: 字体大小调整
# Code prettify: 代码格式标准化
# Select CodeMirror Keymap: 选择代码编辑模式
# Variable Inspector: 变量可视化
# Toggle all line numbers: 标出行数Jupyter内核管理
# 查找当前环境是否有jupyter内核包
python -m ipykernel --version
# 安装jupyter内核包
python -m pip install ipykernel #-i https://pypi.tuna.tsinghua.edu.cn/simple
# 添加kernel
python -m ipykernel install --user --name Env-name --display-name "Show-name"
# 查看已有kernel
jupyter kernelspec list
# 删除不想要的kernel:
jupyter kernelspec uninstall unwanted-kernel部分环境安装踩坑
NCCL安装
NCCL(NVIDA Collective Communications Library)是由 NVIDIA 开发的一种高性能的多 GPU 通信库, 用于在多个 NVIDIA GPU 之间实现快速的数据传输和协同计算, 目的是为了实现Multi-GPU或Multi-node之间的通信, 说白了就是多机多卡并行, 不支持Windows
有两种安装方式, 一是具有root权限的安装, 二是不具有root权限的安装配置
其实还可以直接拉人家构建好的Docker镜像用, 具体自行去Docker Hub上找吧
非root用户安装配置NCCL
多数情况下都不具有root权限, 最好将NCCL配置在个人账号下, 方法就是从源码进行编译安装
# 拉取NCCL源码, 也可去相关链接查看官方文档
git clone https://github.com/NVIDIA/nccl.git
# 进行编译
cd nccl
make -j12 src.build BUILDDIR=/home/why/.nccl CUDA_HOME=/usr/local/cuda-12.4 NVCC_GENCODE="-gencode=arch=compute_35,code=sm_35"
## -j12表示使用12个核心, nproc查看总核心数
## BUILDDIR表示编译后,文件的存储路径, 默认是nccl/build
## CUDA_HOME表示CUDA的目录, 默认是/usr/local/cuda
## NVCC_GENCODE, 如果不添加该字段, 默认会编译支持所有架构, 为了加速编译以及降低二进制文件大小, 添加该字段
## 具体comute_35,sm_35是应该是和显卡算力相匹配,具体见:https://developer.nvidia.com/cuda-gpus最后将其添加到环境变量中
vim ~/.bashrc
# 记得替换为自己的安装路径
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/home/why/.nccl/lib
export PATH=$PATH:/home/why/.nccl/bin
source~/.bashrc检验是否安装成功
git clone https://github.com/NVIDIA/nccl-tests.git
cd nccl-tests
make -j12 CUDA_HOME=/usr/local/cuda-12.4 NCCL_HOME=/home/why/.nccl
# 需要指定CUDA_HOME和NCCL_HOME, 否则编译中找不到CUDA和NCCL会报错
./build/all_reduce_perf -b 8 -e 256M -f 2 -g <ngpus>
# 需要用机器GPU的个数替换ngpusHorovod安装
安装Horovod需要安装NCCL和OpenMPI, 虽然这两个依赖都装好了, 但Horovod编译死活出问题, 那就Docker, 启动!
# Horovod提供的镜像, 有点老了, 不建议用这个
sudo docker run -it --gpus all --network=host -v /mnt/share/ssh:/root/.ssh --name horovod-latest horovod/horovod:latest
# 带pytorch的Hovorod镜像, 是的兄弟, 就用这个
sudo docker run -it --gpus all --name horovod-pythorch pytorchignite/hvd-base:latest
## 有个问题, 镜像为了精简甚至没装ssh, 即使下载了deb包离线安装也会发现缺库, apt也不管用
## 所以我的解决方法是映射一个端口, 然后安装Jupyter-Lab, 虽然抽象但能跑, 待我研究明白Hovorod该怎么玩后再补充吧安装OpenMPI
OpenMPI是用作进程自建通信的库, 前往官网下载安装包
# 也可以wget下载
wget https://download.open-mpi.org/release/open-mpi/v5.0/openmpi-5.0.7.tar.gz
# 解压安装包
gunzip -c openmpi-5.0.7.tar.gz | tar xf -
# 进入目录
cd openmpi-5.0.7
# 配置
./configure --prefix=/usr/local
# 安装
sudo make all install
# 编写环境变量
vim /etc/profile
export LD_LIBRARY_PATH="$LD_LIBRARY_PATH:/usr/local/lib"
# 运行测试
cd examples
make
mpirun -np 4 hello_c其他问题
Debian KDE + 英伟达闭源驱动 + HDMI外接显示屏无法显示
# 创建文件
/etc/modprobe.d/nvidia.conf
# 将该内容写入文件中,
options nvidia_drm modeset=1 fbdev=1
# 安装内核编译? 重新编译内核?
sudo apt install initramfs-tools
sudo update-initramfs -u
# 重启
sudo reboot
# 若输出Y, 则代表已完成
sudo cat /sys/module/nvidia_drm/parameters/modeset参考: archlinux KDE6 HDMI外接显示器在Wayland下无法显示