ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

Ubuntu 22.04深度学习环境搭建:从驱动到PyTorch的完整指南

Ubuntu 22.04深度学习环境搭建:从驱动到PyTorch的完整指南 我从一个很常见的实际场景切入刚拿到一台装了 Ubuntu 22.04 的机器或者刚在虚拟机、双系统里装好想跑深度学习却不知道下一步该干嘛。网上教程一大堆但大多各讲各的要么只讲驱动不提 CUDA要么装完框架一跑就报错连错在哪都看不明白。这篇内容就是把我自己从裸机开始搭环境的过程完整回放一遍——装驱动、配 CUDA、建 Python 虚拟环境、装 PyTorch、跑通验证代码一条龙走下来顺便把踩过的坑和排查思路也一并交代清楚。无论你是第一次接触的新手还是想换系统重建环境的老手按这套流程走基本不会翻车。1. 动手前先把这几件事想明白1.1 为什么多数深度学习项目都优先选 Ubuntu这个问题几乎每一次线下交流都会被问到。Windows 不是不能做深度学习但在实际工程场景里Ubuntu 的兼容性和环境可控性确实更省心。拿 NVIDIA 驱动来说Ubuntu 下通过runfile方式安装可以精确锁定驱动版本不受系统更新干扰。深度学习框架的官方文档从 PyTorch、TensorFlow 到各种 CV 库给的安装命令默认也都是 Linux 系。更重要的是生产环境的服务器几乎全是 Ubuntu Server 或 CentOS本地用 Ubuntu 可以最大程度避免“本地能跑、服务器跑不了”的环境差异问题。选 Ubuntu 22.04 而不是 20.04 或 24.04也是有讲究的。22.04 属于长期支持版本软件仓库里 Python 3.10、GCC 11 等基础工具链都很齐全NVIDIA 驱动和 CUDA 的兼容性经过大量验证踩坑资料网上最多。24.04 虽然也发布了但部分深度学习工具链还在适配期没必要当小白鼠。20.04 确实稳定但 Python 3.8 对现在一些新框架版本支持不够好还要额外折腾 Python 版本管理。所以综合来看22.04 是当前平衡性最好的选择。1.2 装机前先确认硬件底子环境搭建之前一定要先摸清机器的硬件情况这里面最关键的就是显卡。深度学习训练对显卡型号、显存大小有硬性要求。如果你手里是 NVIDIA 显卡那基本可以顺畅走完整个流程如果是 AMD 或 Intel 核显那 CUDA 相关的所有步骤都跳过直接用 CPU 版本的框架入门学习也完全够用。判断显卡型号很简单终端里跑一行命令lspci | grep -i nvidia lspci | grep -i vga如果机器已经装了显卡驱动直接用nvidia-smi就能看到完整的 GPU 信息包括驱动版本、显存大小、当前占用率。另外别忘了看一眼内存和磁盘。深度学习跑起来吃内存也吃磁盘尤其是数据集解压和预训练模型下载随便一个模型就是几个 GB。建议磁盘剩余空间不低于 50GB内存至少 16GB当然这只是我的建议基线如果只是跑入门级代码8GB 内存也能转就是别开太多后台进程。1.3 三种安装场景怎么选双系统、WSL2 还是虚拟机不同人的情况不一样安装 Ubuntu 的方式也分好几种我的建议是按性能需求来选。如果你有一台配置尚可的 Windows 电脑且电脑可以重启那我强烈建议直接装双系统。深度学习训练时显卡性能必须全部释放双系统让 Ubuntu 独占硬件资源驱动和 CUDA 也好配。网上那些“双系统安装 ubuntu22.04”的教程很多核心就是分区时留出/根分区和/home再留一部分空间做交换分区就行。这个过程只要按教程走失败率其实不高。如果你不想破坏现有 Windows 系统或者公司电脑不能随便重装那 WSL2 是很好的折中方案。WSL2 里的 Ubuntu 22.04 可以直接调用 Windows 上的 NVIDIA 显卡性能损耗基本可以忽略安装也比双系统快得多。唯一麻烦的是需要在 Windows 侧装好 NVIDIA 驱动Windows 版然后在 WSL 里再装 Linux 版的 CUDA toolkit两者要配套。虚拟机就纯粹是学习用途了。VMware 或 VirtualBox 里跑 Ubuntu 22.04能用来练习环境搭建流程和跑 CPU 版本代码GPU 透传配置极其麻烦不推荐在虚拟机里做正经训练。我的习惯是新学一个工具链时先在虚拟机里玩明白再决定要不要在物理机上部署。2. 显卡驱动与 CUDA深度学习环境的硬门槛2.1 NVIDIA 驱动安装的两种方式与避坑要点驱动是深度学习环境的第一道关卡很多新手在这里就被卡住了。安装 NVIDIA 驱动主要有两种方式命令行 apt 安装和 runfile 安装。先讲 apt 方式适合追求简单稳定的人。Ubuntu 有个叫ubuntu-drivers的工具可以自动检测推荐驱动版本sudo apt update sudo apt install ubuntu-drivers-common ubuntu-drivers devices命令输出里会列出可用的驱动版本一般会标注recommended字样。直接安装推荐版本就行sudo apt install nvidia-driver-550装完之后重启跑nvidia-smi能看到类似这样的输出就说明驱动装好了----------------------------------------------------------------------------- | NVIDIA-SMI 550.54.15 Driver Version: 550.54.15 CUDA Version: 12.4 | -----------------------------------------------------------------------------再讲 runfile 方式。这种方式适合需要精确指定驱动版本的场景比如 CUDA 某个版本对驱动版本有最低要求或者你的显卡比较新apt 仓库里的旧驱动不识别。runfile 安装的步骤是先去 NVIDIA 官网下载对应驱动文件然后chmod x NVIDIA-Linux-x86_64-550.54.15.run sudo ./NVIDIA-Linux-x86_64-550.54.15.run安装过程中会提示一些问题一路默认即可。需要注意runfile 安装前最好先把系统自带的 nouveau 驱动禁用掉否则经常会冲突导致黑屏或循环登录。禁用方法是在/etc/modprobe.d/blacklist-nvidia-nouveau.conf里写入blacklist nouveau options nouveau modeset0然后在终端执行sudo update-initramfs -u并重启。无论哪一种安装方式成功标志都是nvidia-smi能正常输出信息。如果出现NVIDIA-SMI has failed because it couldnt communicate with the NVIDIA driver大概率是驱动没装好或 Secure Boot 没关。这是新手最容易遇到的一个坑后面第五部分会细说。2.2 CUDA Toolkit 与 cuDNN 安装逻辑驱动装好只算完成了一半严格来说只解决了“显卡能用”的问题但深度学习框架还需要调用 CUDA 库来进行计算所以还要装 CUDA Toolkit 和 cuDNN。这里我要特别强调一个容易理解错的地方nvidia-smi输出的“CUDA Version: 12.4”指的是驱动支持的最高的 CUDA 版本它并不代表你已经装了 CUDA Toolkit。你的 PyTorch 是独立于系统的 CUDA 来编译和运行自己的 CUDA runtime 的两者不需要版本完全一致只要系统驱动支持的 CUDA 版本不低于 PyTorch 所需的 CUDA 版本就行。安装 CUDA Toolkit 最稳妥的方式是去 NVIDIA 官网选对应版本官网会给出一段命令照着执行即可。比如安装 CUDA 12.1wget https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2204/x86_64/cuda-keyring_1.1-1_all.deb sudo dpkg -i cuda-keyring_1.1-1_all.deb sudo apt-get update sudo apt-get -y install cuda-12-1注意这里的cuda-12-1是指定大版本号apt 会自动安装该系列的最新小版本。装完后需要配置环境变量编辑~/.bashrc加入export PATH/usr/local/cuda-12.1/bin:$PATH export LD_LIBRARY_PATH/usr/local/cuda-12.1/lib64:$LD_LIBRARY_PATH然后source ~/.bashrc运行nvcc --version确认版本。cuDNN 是 NVIDIA 专门为深度学习做的加速库卷积、池化、归一化这些操作都有深度优化。安装方式先下载对应 CUDA 版本的 cuDNN 包然后解压拷贝到 CUDA 目录下tar -xvf cudnn-linux-x86_64-8.9.7.29_cuda12-archive.tar.xz sudo cp cudnn-*-archive/include/cudnn*.h /usr/local/cuda-12.1/include/ sudo cp -P cudnn-*-archive/lib/libcudnn* /usr/local/cuda-12.1/lib64/ sudo chmod ar /usr/local/cuda-12.1/include/cudnn*.h /usr/local/cuda-12.1/lib64/libcudnn*为什么装完 CUDA 还要单独装 cuDNN很多人在这里犯迷糊。简单说CUDA 是语言和通用的计算平台cuDNN 是建立在这个平台之上的深度学习加速库。两者是递进关系不是替代关系。2.3 驱动和 CUDA 装完怎么确认没装错安装这一步最容易出现的错觉就是命令没报错重启之后就不对劲了。所以每一步都要有一行“验证命令”来兜底验证驱动nvidia-smi显示 GPU 型号和驱动版本验证 CUDA Toolkitnvcc --version显示 CUDA 编译版本验证 cuDNN在 CUDA 的 samples 目录编译mnistCUDNN示例或者直接跑下面的 Python 代码import torch print(torch.__version__) print(torch.cuda.is_available()) print(torch.cuda.get_device_name(0))如果torch.cuda.is_available()返回False先别急着怀疑驱动。最常见的原因是 PyTorch 装成了 CPU 版本其次是环境变量没配好导致 PyTorch 找不到 CUDA 库。当然这些都是环境搭建完成之后再验证的内容了但提前把它作为“验收标准”放心里后面排错时思路会清晰很多。3. Python 环境与 PyTorch 框架安装3.1 Miniconda比 Anaconda 更轻量的虚拟环境方案很多新手一上来问我Anaconda 和 Miniconda 到底选哪个我个人的习惯是直接用 Miniconda。Anaconda 自带了上百个用不上的包安装文件好几个 GB启动还慢。Miniconda 只是一个精简的包管理器和 Python 运行时需要什么装什么干净利落。安装 Miniconda 也很简单去清华镜像站或者官网下载安装脚本wget https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh bash Miniconda3-latest-Linux-x86_64.sh安装过程中一路 yes 就行最后一步会询问是否初始化 conda建议选 yes。装完重启终端命令行会多出一个(base)前缀。接下来给 conda 换国内源这一步在国内环境几乎是必须的否则创建环境时下载依赖能慢到让你怀疑人生conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main/ conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/ conda config --set show_channel_urls yes创建独立的深度学习虚拟环境这一步极其关键。很多人图省事直接在 base 环境下装框架结果项目依赖互相冲突升级一个包就把另一个搞崩了。合理的做法是每个项目或每个框架版本建一个独立环境conda create -n dl python3.10 -y conda activate dl这里的dl是环境名可以随便取但建议一看就知道用途比如pytorch、tf、cv。3.2 PyTorch 安装的版本选型与安装命令装 PyTorch 是整个流程中最简单的一步但也是最容易出岔子的一步。最容易出的问题直接从官网首页复制安装命令结果默认装的是 CUDA 12.1 甚至更高的版本而你的驱动根本不支持那么高的 CUDA。合理的操作是先看nvidia-smi显示的 CUDA 版本确保要装的 PyTorch CUDA 版本小于等于这个数字。假设驱动支持的 CUDA 是 12.4那装 CUDA 12.1 或 12.4 版本的 PyTorch 都可以pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu121如果不想用官方源国内直连经常很慢也可以用国内镜像装 CPU 版本pip install torch torchvision torchaudio -i https://pypi.tuna.tsinghua.edu.cn/simple注意上面这句是 CPU 版本只适合没有 NVIDIA 显卡的机器。安装完成后不要急着写训练代码先跑一次加载测试import torch x torch.rand(3, 3) print(x.device) print(torch.cuda.is_available())如果输出是cpu且cuda.is_available()为False那就是 PyTorch 装成 CPU 版了需要卸掉重装 GPU 版pip uninstall torch torchvision torchaudio pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu1213.3 TensorFlow 以及其他框架的补充说明虽然很多新项目都转向了 PyTorch但 TensorFlow 依然有大量存量代码和研究工作流尤其是在实际工业落地、模型部署和 TF Serving 等场景里很常见。如果需要在同一台机器上同时维护 PyTorch 和 TensorFlow强烈建议在建两个不同的 conda 环境一个dl-torch一个dl-tf互不干扰。TensorFlow 的安装同样要选 GPU 版本对应的命令conda create -n tf python3.10 -y conda activate tf pip install tensorflow如果机器是 ARM 架构或者没有 NVIDIA 显卡TensorFlow 官方还有专门针对 ARM 的版本安装方式也有差异。在动手之前一定要先查清对应 CPU 架构和操作系统版本否则装上了也会在 import 时直接报找不到libcudart.so之类的错误。另外深度学习环境里还有一个经常被忽略的环节其他 Python 库的版本兼容性。比如 PyTorch 和 NumPy 在某些版本组合下会有兼容性问题虽然大部分时间会自动适配但一旦遇到怪异的报错首先检查的就是这几个基础库的版本。我的习惯是在每个项目目录里维护requirements.txt把核心依赖固定下来这样重建环境的时候不会因为版本漂移而踩坑。4. 环境验证与日常开发配置4.1 快速跑通一个视觉分类模型验证环境可用环境全部配好后最好用一个真实的训练任务来验证整个链路是否通畅。我用得最多的验证代码是手写数字识别 MNIST数据量小、跑一轮也快刚好能覆盖数据加载、GPU 计算、反向传播这几个关键环节。下面这段代码我反复用过新环境能不能用一测便知import torch import torch.nn as nn import torch.optim as optim from torchvision import datasets, transforms from torch.utils.data import DataLoader transform transforms.Compose([ transforms.ToTensor(), transforms.Normalize((0.1307,), (0.3081,)) ]) train_data datasets.MNIST(root./data, trainTrue, downloadTrue, transformtransform) train_loader DataLoader(train_data, batch_size64, shuffleTrue) model nn.Sequential( nn.Flatten(), nn.Linear(28 * 28, 128), nn.ReLU(), nn.Linear(128, 10) ) device torch.device(cuda if torch.cuda.is_available() else cpu) model model.to(device) optimizer optim.Adam(model.parameters(), lr0.001) loss_fn nn.CrossEntropyLoss() for epoch in range(3): for batch_idx, (data, target) in enumerate(train_loader): data, target data.to(device), target.to(device) optimizer.zero_grad() output model(data) loss loss_fn(output, target) loss.backward() optimizer.step() if batch_idx % 200 0: print(fEpoch {epoch1} [{batch_idx * len(data)}/{len(train_loader.dataset)}] Loss: {loss.item():.6f})跑这个代码时如果能看到Loss值在下降而且nvidia-smi里能看到 Python 进程占用 GPU就说明整个环境已经健康了。如果只能看到 CPU 在跑回第 3 部分检查 PyTorch 的安装版本。4.2 Jupyter Lab 和 VSCode 的远程开发配置深度学习不是只跑一个文件日常开发要频繁调试、看中间结果、画训练曲线所以一个顺手的开发环境很重要。我的习惯是服务器或本机装 Jupyter Lab开发时用浏览器访问代码编辑用 VSCode通过 SSH 连到 Ubuntu 上直接在本地写代码、远程跑训练。Jupyter Lab 装起来很简单pip install jupyterlab jupyter lab --ip0.0.0.0 --port8888指定--ip0.0.0.0是为了让局域网内其它机器也能访问如果只是本机用可以不加。首次访问需要 token终端启动时会有提示也可以用--NotebookApp.token临时去掉密码但局域网环境下建议保留。VSCode 连远程的话装一个 Remote-SSH 插件配置好 SSH config 就能像本地开发一样写代码。需要注意的是VSCode 远程连接时会自动在服务器侧下载一个 server 端国内网络下偶尔会卡在下载环节如果遇到这种情况手动下载对应版本的 server 压缩包扔到指定目录即可。4.3 常用工具补充OCR 部署、标注工具、模型可视化环境搭好之后你大概率会需要一些配套工具。我把自己常用的一组工具列出来也是很多教学流程里不会细说的部分文字识别OCR想快速体验纯 CPU 也能跑的 OCR 工具可以试试 RapidOCR安装简单、模型也不大直接在本地启动一个 Web 服务就能通过浏览器上传图片识别文字。部署方式网上有很多现成教程核心命令基本就是pip install rapidocr_onnxruntime加几行启动代码。数据标注做目标检测、分割任务时LabelImg 和 Labelme 是经典选择。一个做矩形框标注一个做多边形分割标注都很轻量。模型可视化PyTorch 生态里可以用torchinfo查看模型结构和参数量一条命令就能把每层的形状和参数数打出来。做论文里那种结构图的话可以用 Netron 直接把模型文件拖进去看。训练监控tensorboard可以无缝嵌入到 PyTorch 里记录 loss、准确率曲线以及中间层的特征图做调试和分析非常方便。这些工具不是必须的但装上之后开发效率会明显提升。特别是一边调试模型、一边看训练曲线的体验比只用 print 打日志舒服得多。5. 常见问题与排查技巧实录5.1 安装驱动后进入系统黑屏或循环登录这个是在新手群里被问得最多的问题没有之一。无论你的电脑是 5060 这种较新的显卡还是老款 GTX 系列只要装完驱动重启后卡在登录界面或者直接黑屏基本都和 nouveau 驱动没禁用干净或者 Secure Boot 没关有关系。排查顺序是这样的先强制重启进 recovery mode也就是开机时按 Esc 或 Shift 进入 GRUB 菜单选 advanced options再选 recovery。然后在 recovery 菜单里选 root shell执行nvidia-smi如果提示找不到显卡说明驱动根本没装上重新走一遍安装流程。如果是 Secure Boot 开启导致的内核模块签名问题执行mokutil --sb-state返回SecureBoot enabled的话需要在 BIOS 里把它关掉或者在安装 runfile 驱动过程中按提示完成签名流程。这一步很多人会忽略其实绝大多数驱动加载失败都跟它有关。5.2 PyTorch 能 import 但 cuda.is_available() 为 False这个问题的排查难度不高但出错率和前一个问题不相上下。先按顺序测终端运行python输入import torch; print(torch.__version__)如果版本号后面没有cu121之类的后缀那很可能装的是 CPU 版卸载重装 GPU 版。运行nvidia-smi确认驱动正常如果这条命令都报错回第 2 部分重装驱动。如果驱动没问题、PyTorch 也确实是 GPU 版检查一下 CUDA 环境变量echo $LD_LIBRARY_PATH如果输出为空或者没有包含 CUDA 的 lib64 路径在~/.bashrc里补上那段环境变量再source一次。还有一种特殊情况多用户共用一台服务器时其他人改了/etc/environment或者全局的LD_LIBRARY_PATH导致用户自己的 CUDA 路径被覆盖。这种问题一般表现为之前能用、第二天莫名就不行了检查全局环境变量基本能定位。5.3 conda 创建环境慢、pip 下载包慢怎么处理国内网络环境下conda 创建环境和 pip 下载包都会遭遇速度瓶颈这不是你一个人的问题。先说 conda前面配了清华镜像之后创建环境的速度会好很多但如果只是下载某个包慢也可以用-c https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/pytorch/单独指定源。pip 的解决方案是改全局配置mkdir -p ~/.pip cat ~/.pip/pip.conf EOF [global] index-url https://pypi.tuna.tsinghua.edu.cn/simple [install] trusted-host pypi.tuna.tsinghua.edu.cn EOF之后所有 pip 安装默认走清华源速度起飞。不过要注意PyTorch 官方提供的--index-url https://download.pytorch.org/whl/cu121这种命令会忽略 pip.conf 里的源因为它显式指定了下载地址这是正常的不用担心。5.4 用一张速查表收拢整个排错思路老实说环境搭建的问题翻来覆去就那几类我把高频问题的关键字、现象和处理方法总结成一张速查表建议收藏备用现象可能原因排查/解决nvidia-smi提示无法通信驱动未装好或 nouveau 冲突重装驱动禁用 nouveau关闭 Secure BootGPU 显存报错但显存没满存在僵尸进程占显存nvidia-smi查 PIDkill -9清理import torch报 CUDA 相关库缺失CUDA 路径没配好检查LD_LIBRARY_PATH确认nvcc --versioncuda.is_available()为 FalsePyTorch 是 CPU 版或驱动版本过低重装 GPU 版 PyTorch升级驱动conda 创建环境卡住conda 源太慢换清华镜像源更新.condarcpip 下载总是超时网络波动配 pip.conf 走国内镜像训练速度远低于预期代码没把 tensor 放 GPU检查是否调用.to(device)用nvidia-smi监控利用率开机自动重启内核与驱动兼容性问题进入 recovery mode 查看日志重装匹配驱动版本这张表基本覆盖了我这几年反复被问到的问题绝大多数环境问题在里面都能找到对应解法。真遇到了表里没有的情况也别慌围绕“驱动—CUDA—PyTorch—Python 环境”这条链路逐层排查大多数问题都能定位到具体环节。最后再唠叨一句很多人第一次搭环境时总喜欢复制别人的命令不带任何思考出了问题就懵。实际上每个环节都有对应的验证命令按顺序跑一遍基本能知道问题出在哪一层。环境这东西就是一个熟练活搭过两三次之后就会觉得也就那么回事。如果这篇文章能帮你少走一次弯路那花费的这几个小时就值了。
返回列表