内网环境下ubuntu 20 搭建深度学习环境
·
内网环境下 Ubuntu 20.04 搭建深度学习环境指南
一、准备工作
1.1 系统基本配置
- 确保系统已安装必要的依赖:
sudo apt update
sudo apt install -y build-essential cmake git wget unzip
- 配置国内镜像源(如有需要):
sudo cp /etc/apt/sources.list /etc/apt/sources.list.bak
sudo sed -i 's/archive.ubuntu.com/mirrors.aliyun.com/g' /etc/apt/sources.list
1.2 显卡驱动安装
- 查看显卡型号:
lspci | grep -i nvidia
-
下载对应版本的NVIDIA驱动(.run文件)并传输到内网环境
-
禁用nouveau驱动:
sudo bash -c "echo blacklist nouveau > /etc/modprobe.d/blacklist-nouveau.conf"
sudo bash -c "echo options nouveau modeset=0 >> /etc/modprobe.d/blacklist-nouveau.conf"
sudo update-initramfs -u
- 安装驱动:
chmod +x NVIDIA-Linux-x86_64-*.run
sudo ./NVIDIA-Linux-x86_64-*.run --no-opengl-files
二、Python环境配置
2.1 Miniconda安装
- 下载Miniconda安装包并传输到内网环境:
wget https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh
- 安装Miniconda:
bash Miniconda3-latest-Linux-x86_64.sh
- 配置conda环境变量:
echo 'export PATH=~/miniconda3/bin:$PATH' >> ~/.bashrc
source ~/.bashrc
2.2 创建虚拟环境
- 创建深度学习专用环境:
conda create -n dl python=3.8
conda activate dl
三、CUDA和cuDNN安装
3.1 CUDA Toolkit安装
-
下载对应版本的CUDA安装包(.run文件)并传输到内网
-
安装CUDA:
chmod +x cuda_*.run
sudo ./cuda_*.run
- 配置环境变量:
echo 'export PATH=/usr/local/cuda/bin:$PATH' >> ~/.bashrc
echo 'export LD_LIBRARY_PATH=/usr/local/cuda/lib64:$LD_LIBRARY_PATH' >> ~/.bashrc
source ~/.bashrc
3.2 cuDNN安装
-
下载对应版本的cuDNN压缩包并传输到内网
-
解压并安装:
tar -xzvf cudnn-*.tgz
sudo cp cuda/include/cudnn*.h /usr/local/cuda/include
sudo cp cuda/lib64/libcudnn* /usr/local/cuda/lib64
sudo chmod a+r /usr/local/cuda/include/cudnn*.h /usr/local/cuda/lib64/libcudnn*
四、深度学习框架安装
4.1 PyTorch安装
-
下载对应版本的PyTorch wheel文件并传输到内网
-
安装PyTorch:
pip install torch-*.whl
- 验证安装:
python -c "import torch; print(torch.__version__); print(torch.cuda.is_available())"
4.2 TensorFlow安装
-
下载对应版本的TensorFlow wheel文件
-
安装TensorFlow:
pip install tensorflow-*.whl
- 验证安装:
python -c "import tensorflow as tf; print(tf.__version__); print(tf.config.list_physical_devices('GPU'))"
五、常用工具安装
5.1 Jupyter Notebook配置
- 安装Jupyter:
pip install jupyter
- 生成配置文件:
jupyter notebook --generate-config
- 设置密码:
jupyter notebook password
5.2 OpenCV安装
-
下载OpenCV源码包并传输到内网
-
编译安装:
unzip opencv-*.zip
cd opencv-*
mkdir build && cd build
cmake -D CMAKE_BUILD_TYPE=RELEASE -D CMAKE_INSTALL_PREFIX=/usr/local ..
make -j$(nproc)
sudo make install
六、环境验证
- 综合验证脚本:
import torch
import tensorflow as tf
import cv2
print("PyTorch版本:", torch.__version__)
print("PyTorch CUDA可用:", torch.cuda.is_available())
print("TensorFlow版本:", tf.__version__)
print("TensorFlow GPU设备:", tf.config.list_physical_devices('GPU'))
print("OpenCV版本:", cv2.__version__)
七、常见问题解决
7.1 显卡驱动问题
详细症状:
- 执行
nvidia-smi命令时提示"command not found"或"NVIDIA-SMI has failed" - 系统无法识别NVIDIA显卡
- 深度学习框架报告"CUDA driver version is insufficient"
解决方案步骤:
- 完全卸载现有驱动:
sudo apt purge nvidia* sudo apt autoremove sudo rm /etc/X11/xorg.conf - 重启系统:
sudo reboot - 重新安装驱动(推荐方式):
- 方法1:使用官方推荐驱动
sudo ubuntu-drivers autoinstall - 方法2:指定版本安装(如470版)
sudo apt install nvidia-driver-470
- 方法1:使用官方推荐驱动
- 验证安装:
nvidia-smi # 应显示显卡状态
常见问题:
- 若遇到"Secure Boot"问题,需进入BIOS禁用Secure Boot
- 双显卡笔记本可能需要额外配置Prime-select
7.2 CUDA版本不匹配
详细症状:
- PyTorch/TensorFlow报错"CUDA runtime version is X but Y is required"
torch.cuda.is_available()返回Falsenvcc --version与nvidia-smi显示的CUDA版本不一致
解决方案:
- 确认当前环境CUDA版本:
conda list | grep cudatoolkit - 安装匹配版本(以PyTorch 1.12需要CUDA 11.3为例):
conda install cudatoolkit=11.3 -c conda-forge - 验证安装:
import torch print(torch.version.cuda) # 应与安装版本一致
版本对照表:
| 框架版本 | 推荐CUDA版本 |
|---|---|
| PyTorch 2.0 | 11.7/11.8 |
| TensorFlow 2.10 | 11.2 |
7.3 内存不足问题
详细症状:
- 报错"CUDA out of memory"
nvidia-smi显示显存占满- 训练过程中突然中断
解决方案:
-
立即缓解措施:
# 减小batch size(如从32降到16) train_loader = DataLoader(..., batch_size=16) -
高级优化方案:
- 梯度累积(模拟更大batch):
for i, data in enumerate(train_loader): with torch.cuda.amp.autocast(): loss = model(data) loss = loss / 4 # 假设累积4次 scaler.scale(loss).backward() if i % 4 == 0: scaler.step(optimizer) scaler.update() optimizer.zero_grad() - 混合精度训练:
from torch.cuda.amp import autocast, GradScaler scaler = GradScaler() with autocast(): outputs = model(inputs) loss = criterion(outputs, targets) scaler.scale(loss).backward() scaler.step(optimizer) scaler.update()
- 梯度累积(模拟更大batch):
-
其他优化手段:
- 使用
torch.utils.checkpoint进行内存换计算 - 启用
pin_memory加速数据传输:DataLoader(..., pin_memory=True)
- 使用
八、性能优化建议
8.1 CUDA加速配置
最佳实践:
# 自动选择设备(支持多GPU情况)
device = torch.device("cuda:0" if torch.cuda.is_available() else "cpu")
# 模型转移(确保所有组件都在GPU)
model = Model().to(device)
for tensor in [inputs, targets]:
tensor = tensor.to(device, non_blocking=True) # 异步传输
# 释放缓存(长期运行脚本时使用)
torch.cuda.empty_cache()
8.2 混合精度训练进阶
完整实现示例:
scaler = torch.cuda.amp.GradScaler()
for epoch in range(epochs):
for inputs, targets in train_loader:
inputs, targets = inputs.to(device), targets.to(device)
optimizer.zero_grad()
# Forward pass
with torch.cuda.amp.autocast(dtype=torch.float16):
outputs = model(inputs)
loss = criterion(outputs, targets)
# Backward pass
scaler.scale(loss).backward()
scaler.step(optimizer)
scaler.update()
注意事项:
- 某些操作(如softmax)需要float32精度,会自动转换
- 梯度缩放可防止float16下溢
8.3 数据加载优化
高级配置:
train_loader = torch.utils.data.DataLoader(
dataset,
batch_size=64,
shuffle=True,
num_workers=min(16, os.cpu_count()-1), # 根据CPU核心数调整
pin_memory=True, # 配合CUDA使用
persistent_workers=True, # 保持worker进程
prefetch_factor=2, # 预取批次
drop_last=True # 丢弃不完整批次
)
性能对比:
| 配置项 | 默认值 | 优化值 | 速度提升 |
|---|---|---|---|
| num_workers | 0 | 8 | 3-5x |
| pin_memory | False | True | 20-30% |
| prefetch_factor | 2 | 4 | 10-15% |
DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。
更多推荐




所有评论(0)