环境搭建:Python虚拟环境配置、PyTorch/TensorFlow安装、CUDA与cuDNN版本匹配、Docker镜像构建
说实话,环境搭建这件事,看着简单,但坑是真不少。我见过太多同学花了两天装环境,最后发现CUDA版本对不上,或者PyTorch和TensorFlow打架。嗯,这一章我们就来把这些事理清楚。
核心原则:环境隔离 + 版本匹配 = 省心省力。别想着一个环境跑所有模型,那是在给自己挖坑。
1. Python虚拟环境配置
我个人习惯,每个项目都开一个独立的虚拟环境。为什么?你想想看,项目A要PyTorch 1.13,项目B要2.0,混在一起迟早出问题。
1.1 使用conda创建虚拟环境
conda是我最推荐的方式,尤其当你需要管理不同Python版本时。我在项目中遇到过好几次,某个老模型只支持Python 3.8,新模型又要3.10,conda一键切换,真香。
# 创建环境,指定Python版本
conda create -n vla_env python=3.10
# 激活环境
conda activate vla_env
# 退出环境
conda deactivate
# 查看所有环境
conda env list
# 删除环境
conda env remove -n vla_env
小技巧:环境名最好带上项目名或版本号,比如 vla_torch2.1,这样一眼就能看出来是干什么的。
1.2 使用venv(轻量级方案)
如果你不想装Anaconda,Python自带的venv也够用。不过要注意,venv不管理Python版本,你得自己装好对应版本的Python。
# 创建虚拟环境
python -m venv vla_env
# 激活(Windows)
vla_env\Scripts\activate
# 激活(Linux/Mac)
source vla_env/bin/activate
# 退出
deactivate
1.3 依赖管理
环境搭好后,记得把依赖导出。我曾经有一次重装系统,忘了导出依赖列表,结果花了整整一天回忆装过哪些包……
# 导出当前环境的依赖
pip freeze > requirements.txt
# 从文件安装依赖
pip install -r requirements.txt
2. PyTorch / TensorFlow 安装
这两个框架的安装,说白了就是一句话:去官网找对应的命令,别自己瞎猜版本号。
2.1 PyTorch 安装
PyTorch的安装命令会根据你的CUDA版本自动生成。我个人更推荐PyTorch,因为它的调试体验更好,尤其适合做研究。
# CPU版本
pip install torch torchvision torchaudio
# CUDA 11.8版本
pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu118
# CUDA 12.1版本
pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu121
注意:不要用 pip install torch 默认安装,它会装CPU版本。一定要指定CUDA版本!
2.2 TensorFlow 安装
TensorFlow 2.x 的安装相对简单,但要注意它和CUDA版本的对应关系比PyTorch更严格。
# TensorFlow 2.13(支持CUDA 11.8)
pip install tensorflow==2.13.0
# TensorFlow 2.15(支持CUDA 12.2)
pip install tensorflow==2.15.0
# 验证安装
python -c "import tensorflow as tf; print(tf.__version__)"
2.3 验证安装是否成功
装完之后,一定要验证GPU是否可用。我见过有人装了半天,结果一直在用CPU跑……
# PyTorch验证
python -c "import torch; print(torch.cuda.is_available()); print(torch.version.cuda)"
# TensorFlow验证
python -c "import tensorflow as tf; print(tf.config.list_physical_devices('GPU'))"
3. CUDA 与 cuDNN 版本匹配
这是环境搭建里最容易出问题的地方。说白了,CUDA是NVIDIA的并行计算平台,cuDNN是深度学习加速库。PyTorch和TensorFlow都依赖它们。
3.1 版本对应关系
我整理了一份常用的版本对应表,建议收藏:
| PyTorch版本 | CUDA版本 | cuDNN版本 | TensorFlow版本 |
|---|---|---|---|
| 2.1.x | 12.1 | 8.9 | 2.15.x |
| 2.0.x | 11.8 | 8.7 | 2.13.x |
| 1.13.x | 11.7 | 8.5 | 2.11.x |
| 1.12.x | 11.6 | 8.3 | 2.10.x |
3.2 查看当前CUDA版本
# 查看CUDA版本
nvidia-smi
# 或者
nvcc --version
# 查看cuDNN版本
cat /usr/local/cuda/include/cudnn_version.h | grep CUDNN_MAJOR -A 2
避坑指南:我曾经在服务器上同时装了CUDA 11.7和12.1,结果PyTorch死活找不到GPU。后来发现是环境变量 LD_LIBRARY_PATH 指向了错误的CUDA路径。解决办法:用 conda install cudatoolkit 来管理CUDA,别手动装。
3.3 使用conda管理CUDA
conda可以帮你自动匹配CUDA和cuDNN版本,省心很多:
# 安装指定CUDA版本的PyTorch
conda install pytorch torchvision torchaudio cudatoolkit=11.8 -c pytorch
# 或者直接安装cudatoolkit
conda install cudatoolkit=11.8 cudnn=8.7
4. Docker镜像构建
如果你要在多台机器上部署,或者想让环境完全可复现,Docker是最好的选择。我个人习惯把环境打包成Docker镜像,这样换机器时直接拉镜像就行,不用重新装。
4.1 基础Dockerfile
下面是一个VLA模型训练环境的Dockerfile示例:
# 使用NVIDIA官方PyTorch镜像作为基础
FROM nvcr.io/nvidia/pytorch:23.10-py3
# 设置工作目录
WORKDIR /workspace
# 安装系统依赖
RUN apt-get update && apt-get install -y \
git \
vim \
wget \
&& rm -rf /var/lib/apt/lists/*
# 安装Python依赖
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt
# 复制项目代码
COPY . .
# 设置环境变量
ENV CUDA_VISIBLE_DEVICES=0
# 默认命令
CMD ["python", "train.py"]
4.2 构建和运行
# 构建镜像
docker build -t vla_env:latest .
# 运行容器(挂载GPU)
docker run --gpus all -it --rm \
-v /path/to/data:/workspace/data \
vla_env:latest
# 查看GPU是否可用
docker run --gpus all --rm nvidia/cuda:12.1.0-base nvidia-smi
注意:运行Docker容器时,一定要加 --gpus all 参数,否则容器内看不到GPU。我刚开始用Docker时就踩过这个坑,折腾了半天才发现是忘了加这个参数。
4.3 使用Docker Compose管理多容器
如果你的项目需要多个服务(比如训练服务 + 推理服务),可以用Docker Compose来管理:
version: '3.8'
services:
train:
build: .
image: vla_env:latest
runtime: nvidia
environment:
- CUDA_VISIBLE_DEVICES=0
volumes:
- ./data:/workspace/data
command: python train.py
inference:
build: .
image: vla_env:latest
runtime: nvidia
ports:
- "8000:8000"
environment:
- CUDA_VISIBLE_DEVICES=1
command: python serve.py
5. 知识体系总览
下面这张图帮你理清整个环境搭建的脉络:
6. 常见问题与避坑指南
- 问题1:安装PyTorch后,
torch.cuda.is_available()返回False。解决办法:检查CUDA版本是否匹配,或者用conda install重装。 - 问题2:Docker容器内看不到GPU。解决办法:确保加了
--gpus all参数,并且安装了NVIDIA Container Toolkit。 - 问题3:多个项目依赖冲突。解决办法:每个项目用独立的虚拟环境或Docker容器。
我的建议:如果你是新手,先用conda搭环境,等熟悉了再上Docker。别一上来就搞Docker,容易把自己绕晕。
好了,环境搭建这部分就讲到这里。记住一句话:环境搭得好,训练没烦恼。下一章我们会正式开始VLA模型的数据准备,到时候见。