Ubuntu下深度学习环境配置历程和经验总结

Ubuntu下深度学习环境配置历程和经验总结

一、CUDA安装和配置

1.1 检查现有CUDA版本
1
nvcc -V

在我的系统中显示是CUDA 12.4,而最新版本是12.6,因此想要更新。

1.2 CUDA安装选项

安装CUDA 12.6时遇到两个选项:

  1. Open Kernel Module (nvidia-open):

    • NVIDIA最近推出的开源驱动模块
    • 适合较新的显卡(Ampere及以后架构)
    • 对开发人员友好,与新Linux内核兼容性好
  2. Legacy Kernel Module (cuda-drivers):

    • NVIDIA传统的闭源驱动
    • 更加稳定和成熟
    • 与深度学习框架兼容性更好

选择建议:对于深度学习应用,建议选择Legacy Kernel Module,因为兼容性更好。

1.3 CUDA路径问题

安装完成后发现系统中存在多个CUDA相关目录:

1
2
3
/usr/local/cuda -> /etc/alternatives/cuda
/usr/local/cuda-12 -> /etc/alternatives/cuda-12
/usr/local/cuda-12.6

每个目录占用约5.3G空间,通过检查发现这些是符号链接,都指向了alternatives系统。虽然链接正确指向了CUDA 12.6,但nvcc -V仍显示12.4版本,这是因为cuda的默认启动被设置成了conda的相关目录,需要移除并像下文中重新添加系统路径。

1.4 环境变量配置

~/.bashrc中添加CUDA路径:

1
2
export PATH=/usr/local/cuda-12.6/bin:$PATH
export LD_LIBRARY_PATH=/usr/local/cuda-12.6/lib64:$LD_LIBRARY_PATH

二、PyTorch配置问题

2.1 初始问题

安装PyTorch后,GPU检测失败:

1
torch.cuda.is_available()  # 返回False

错误信息:

1
2
UserWarning: CUDA initialization: Unexpected error from cudaGetDeviceCount()
Error 804: forward compatibility was attempted on non supported HW

这表明CUDA和GPU驱动存在兼容性问题。

2.2 验证PyTorch CUDA支持
1
2
3
import torch
print(torch.cuda.is_available())
print(torch.version.cuda)

三、TensorFlow配置问题

3.1 NumPy版本冲突

安装PyTorch成功后,安装TensorFlow后遇到NumPy版本冲突:

1
ImportError: A module that was compiled using NumPy 1.x cannot be run in NumPy 2.0

尝试降级NumPy时又遇到新问题:

1
2
pip install numpy==1.22.4  # 失败
### 错误:AttributeError: module pkgutil has no attribute 'ImpImporter'
3.2 验证TensorFlow GPU支持

两种验证方法:

1
2
3
4
5
6
7
8
9
10
11
### 方法1:检查GPU设备
import tensorflow as tf
print(tf.config.list_physical_devices('GPU'))

### 方法2:实际运行GPU计算(更可靠)
import tensorflow as tf
with tf.device('/GPU:0'):
a = tf.constant([[1.0, 2.0, 3.0], [4.0, 5.0, 6.0]])
b = tf.constant([[1.0, 2.0], [3.0, 4.0], [5.0, 6.0]])
c = tf.matmul(a, b)
print(c)

四、环境清理

4.1 遇到的问题
  1. base环境中的包依赖关系复杂
  2. Python 3.12版本过新,很多包不支持
  3. 多个conda环境占用大量空间
4.2 清理步骤
  1. 删除conda环境:

    1
    conda remove --name env_name --all
  2. 清理conda缓存:

    1
    conda clean --all
  3. 对于无法识别的环境,需要手动删除:

    1
    rm -rf /path/to/env

五、经验教训

5.1 版本选择
  1. Python版本:

    • 深度学习环境建议使用Python 3.10-3.11
    • 避免使用最新的Python版本(如3.12)
  2. CUDA版本:

    • 确保CUDA版本与GPU驱动兼容
    • 注意检查深度学习框架对CUDA版本的要求
5.2 最佳实践
  1. 使用独立的conda环境:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    ### 创建新环境
    conda create -n dl_env python=3.10

    ### 激活环境
    conda activate dl_env

    ### 安装框架
    pip install torch torchvision torchaudio
    pip install tensorflow
  2. 环境检查流程:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    ### 1. 检查CUDA版本
    nvcc -V

    ### 2. 检查GPU驱动
    nvidia-smi

    ### 3. 检查深度学习框架
    #### PyTorch
    import torch
    print(torch.cuda.is_available())

    #### TensorFlow
    import tensorflow as tf
    with tf.device('/GPU:0'):
    ## # 运行测试计算
    ...
5.3 关键教训
  1. 不要在base环境中安装深度学习框架
  2. 安装前先检查各组件的版本兼容性
  3. 遇到环境问题时,创建新环境比修复旧环境更高效
  4. 保持良好的环境管理习惯,定期清理不用的环境和缓存

六、有用的命令汇总

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
### CUDA和驱动相关
nvidia-smi # 检查GPU状态和驱动版本
nvcc -V # 检查CUDA版本
ls -l /usr/local/cuda # 检查CUDA符号链接

### Conda环境管理
conda env list # 列出所有环境
conda create -n env_name python=3.10 # 创建新环境
conda activate env_name # 激活环境
conda remove --name env_name --all # 删除环境
conda clean --all # 清理缓存

### 系统检查
du -sh ~/anaconda3/ # 检查Anaconda占用空间
which nvcc # 查找nvcc位置

七、特殊情况:ESP-IDF环境清理

8.1 问题发现和清理尝试

检查发现遗留的ESP-IDF环境:

1
2
3
### 发现两个位置
/home/dahao/anaconda3/envs/esp-idf-env # conda环境
/home/dahao/esp/esp-idf # ESP-IDF主程序

尝试使用conda删除但失败:

1
2
conda remove --name esp-idf-env --all
### 错误:EnvironmentLocationNotFound: Not a conda environment: /home/dahao/anaconda3/envs/esp-idf-env
8.2 解决方案

直接手动删除相关目录:

1
2
3
4
5
6
7
8
### 删除conda环境
rm -rf /home/dahao/anaconda3/envs/esp-idf-env

### 删除ESP-IDF主程序
rm -rf /home/dahao/esp/esp-idf

### 删除工具链目录(如果存在)
rm -rf ~/.espressif
8.3 额外清理

检查并清理.bashrc中的ESP-IDF相关配置:

1
2
3
4
5
vim ~/.bashrc

### 找到并删除类似的配置行
### export IDF_PATH="/home/dahao/esp/esp-idf"
### export PATH="$IDF_PATH/tools:$PATH"

结论

配置深度学习环境是一个复杂的过程,需要注意多个组件之间的版本兼容性。通过合理的环境管理和版本选择,可以避免很多不必要的问题。建议在开始配置之前先做好规划,使用独立的conda环境,并保持良好的环境管理习惯。


Ubuntu下深度学习环境配置历程和经验总结
https://blakehansen130.github.io/2024/11/19/Summarizing AI Assistant Conversation for Notes and Troubleshooting_2024-11-19T08-38-12/
发布于
2024年11月19日
许可协议