1. 为什么需要conda虚拟环境

刚接触深度学习的新手经常会遇到这样的问题:昨天还能运行的代码,今天突然报错了;在A电脑上训练好的模型,放到B电脑上就跑不起来。这些问题90%都是环境配置导致的。conda虚拟环境就像给你的项目单独准备了一个"隔离房间",不同项目可以用不同版本的软件包而互不干扰。

我刚开始做深度学习时就踩过这个坑。当时为了跑通一个目标检测项目,折腾了整整两天才发现是TensorFlow和PyTorch版本冲突。后来学会用conda创建虚拟环境后,这类问题再也没出现过。虚拟环境不仅能隔离依赖,还能方便地导出环境配置,让团队协作和项目部署变得简单。

2. 环境准备与CUDA版本确认

2.1 安装Miniconda

我强烈推荐使用Miniconda而不是Anaconda,因为它更轻量(只有50MB左右),只包含conda、Python和必要的依赖。安装命令很简单:

wget https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh
bash Miniconda3-latest-Linux-x86_64.sh

安装完成后记得运行conda init让conda生效,然后新开一个终端窗口。验证安装是否成功:

conda --version

2.2 检查显卡驱动和CUDA版本

深度学习训练离不开GPU加速,首先要确认你的NVIDIA显卡驱动是否正常。运行:

nvidia-smi

这个命令会显示两个重要信息:

  1. 右上角的CUDA Version表示驱动支持的最高CUDA版本
  2. 表格里会显示GPU型号和使用情况

比如我的输出显示"CUDA Version: 11.4",这意味着我可以安装≤11.4的任何CUDA Toolkit版本。这里有个常见误区:很多人以为这里显示的就是已安装的CUDA版本,其实它只是驱动支持的最高版本。

3. 创建并配置虚拟环境

3.1 新建虚拟环境

我习惯用Python 3.8,因为这个版本稳定性好且兼容性强:

conda create -n dl_env python=3.8
conda activate dl_env

给环境起名时建议包含Python版本和主要用途,比如"dl_py38_torch"这样一目了然。激活环境后,命令行前缀会变成(dl_env),表示已经进入虚拟环境。

3.2 安装CUDA Toolkit

在虚拟环境中安装CUDA Toolkit(不是完整CUDA):

conda install cudatoolkit=11.3 -c conda-forge

这里有几个实用技巧:

  1. 使用conda-forge源通常比默认源更新更快
  2. 版本号要≤nvidia-smi显示的版本
  3. 可以先用conda search cudatoolkit查看可用版本

我曾经为了追求新版本装了CUDA 11.6,结果发现很多库还不支持,最后不得不降级。建议选择比驱动支持低1-2个次版本,比如驱动支持11.4就装11.3。

4. 安装cuDNN和PyTorch

4.1 匹配cuDNN版本

cuDNN是NVIDIA的深度学习加速库,必须与CUDA Toolkit版本严格匹配。安装前可以先查兼容性:

conda search cudnn --info | grep "depends.*cudatoolkit"

对于CUDA 11.3,我推荐cuDNN 8.2.1:

conda install cudnn=8.2.1 -c conda-forge

4.2 安装PyTorch

PyTorch的版本选择最复杂,需要同时考虑:

  • CUDA版本
  • Python版本
  • 操作系统

最稳妥的方法是去PyTorch官网查看历史版本:

conda install pytorch==1.11.0 torchvision==0.12.0 torchaudio==0.11.0 cudatoolkit=11.3 -c pytorch

这里有个坑要注意:PyTorch的conda包默认从pytorch渠道安装,而cudatoolkit可能来自conda-forge,混用渠道有时会导致依赖冲突。如果遇到问题,可以全部指定conda-forge:

conda install pytorch torchvision torchaudio cudatoolkit=11.3 -c conda-forge

5. 验证环境配置

安装完成后一定要验证所有组件是否能正常工作:

import torch
print(torch.__version__)  # 应该显示1.11.0
print(torch.version.cuda)  # 应该显示11.3
print(torch.backends.cudnn.version())  # 应该显示8201
print(torch.cuda.is_available())  # 应该显示True

如果最后一步返回False,可能是:

  1. 显卡驱动太旧 - 升级驱动
  2. CUDA版本不匹配 - 检查cudatoolkit版本
  3. PyTorch安装的是CPU版本 - 重新安装GPU版本

6. 常见问题排查

6.1 版本冲突问题

遇到"Could not load library libcudnn_cnn_infer.so.8"这类错误,通常是cuDNN版本不对。解决步骤:

  1. conda list查看已安装版本
  2. 卸载冲突包:conda remove cudnn
  3. 重新安装指定版本

6.2 环境迁移技巧

把环境复制到另一台机器:

conda env export > environment.yml
conda env create -f environment.yml

但要注意两台机器的CUDA驱动版本要一致,否则可能报错。我习惯在yml文件里固定主要包的版本:

dependencies:
  - python=3.8
  - pytorch=1.11.0
  - cudatoolkit=11.3
  - cudnn=8.2.1

6.3 性能优化建议

安装完成后可以做一些优化设置:

  1. 在~/.bashrc添加:
export CUDA_CACHE_PATH=/tmp/.cuda_cache
export TF_FORCE_GPU_ALLOW_GROWTH=true
  1. 定期清理conda缓存:
conda clean --all

7. 进阶配置建议

对于需要多版本CUDA共存的情况,可以考虑:

  1. 使用Docker容器隔离不同环境
  2. 通过conda环境变量切换CUDA路径:
export LD_LIBRARY_PATH=$CONDA_PREFIX/lib:$LD_LIBRARY_PATH

对于团队协作项目,建议在README中明确写明:

  • Python版本
  • CUDA/cuDNN版本
  • PyTorch/TensorFlow版本
  • 其他关键依赖版本

这样能节省大量环境调试时间。我在公司内部维护了一个常用环境配置表,新同事按表配置基本不会出错。

更多推荐