第二章:环境准备——Python、CUDA、Docker与Git
各位同学好,我是你们的老朋友。今天咱们来聊聊部署自动标注模型前,最基础也最容易踩坑的一步——环境准备。
说实话,我见过太多人模型写得漂亮,结果卡在环境配置上。有一次我在客户现场,对方工程师折腾了两天装不上CUDA,最后发现是显卡驱动版本不对。嗯,这种事儿咱们今天必须避免。
2.1 Python环境:你的第一把瑞士军刀
Python版本怎么选?我个人习惯用3.8或3.10。为什么?3.8稳定,兼容性好;3.10新特性多,性能也有提升。但千万别用3.12——很多标注库还没适配。
核心原则:项目用什么版本,你就用什么版本。别追求最新。
我建议用conda管理环境。为什么?你想想看,一个项目要PyTorch 1.13,另一个要2.0,用conda可以轻松隔离。
# 创建环境
conda create -n auto_label python=3.10
# 激活环境
conda activate auto_label
# 安装基础包
pip install numpy opencv-python pillow matplotlib
小技巧:我习惯在项目根目录放一个requirements.txt,记录所有依赖。这样换机器时一行命令就能复现环境。
2.2 CUDA与cuDNN:让显卡真正干活
CUDA是什么?说白了就是NVIDIA给显卡写的“翻译官”。你的代码说人话,显卡听不懂,CUDA负责翻译成显卡能执行的指令。
cuDNN呢?它是CUDA的加速包,专门优化深度学习里的卷积、池化这些操作。没有它,训练速度能慢3-5倍。
版本匹配是个大坑。我曾经在项目里用了CUDA 11.8,结果PyTorch只支持到11.7,折腾了半天才发现。所以记住:
| PyTorch版本 | 推荐CUDA版本 | 推荐cuDNN版本 |
|---|---|---|
| 1.13.x | 11.7 / 11.8 | 8.5 / 8.6 |
| 2.0.x | 11.8 / 12.1 | 8.7 / 8.9 |
| 2.1.x | 12.1 | 8.9 |
避坑指南:我曾经在服务器上装了CUDA 12.0,结果发现某些标注库只支持到11.8。最后只能重装系统。所以——先查项目文档,再装CUDA。
安装步骤其实很简单:
- 去NVIDIA官网下载对应版本的CUDA Toolkit
- 运行安装程序,选择自定义安装
- 只勾选CUDA核心组件,别装驱动(除非你确定需要)
- 下载cuDNN,解压后把文件复制到CUDA安装目录
# 验证CUDA安装
nvcc --version
# 验证cuDNN
cat /usr/local/cuda/include/cudnn_version.h | grep CUDNN_MAJOR -A 2
2.3 Docker基础:一次构建,到处运行
Docker这东西,说白了就是个轻量级虚拟机。但它比虚拟机快得多,因为它共享宿主机的内核。
我为什么推荐用Docker?因为环境一致性。你在本地跑得好好的,部署到服务器上就报错——这种事儿我遇到过不下十次。用Docker,打包整个环境,到哪都能跑。
基础命令其实就几个:
# 拉取镜像
docker pull nvidia/cuda:11.8.0-cudnn8-devel-ubuntu20.04
# 查看本地镜像
docker images
# 运行容器
docker run -it --gpus all -v /path/to/data:/data nvidia/cuda:11.8.0-cudnn8-devel-ubuntu20.04 /bin/bash
# 退出容器
exit
个人经验:我习惯把Dockerfile放在项目根目录,这样团队其他人拉下来就能直接构建。记得加--gpus all参数,不然容器里用不了显卡。
写一个简单的Dockerfile:
FROM nvidia/cuda:11.8.0-cudnn8-devel-ubuntu20.04
RUN apt-get update && apt-get install -y \
python3.10 \
python3-pip \
git
WORKDIR /app
COPY requirements.txt .
RUN pip install -r requirements.txt
COPY . .
CMD ["python3", "run.py"]
2.4 Git与代码仓库管理
Git这东西,说实话,刚开始用的时候我也觉得麻烦。但后来发现,没有它,项目根本没法协作。
我建议的流程是这样的:
- 在GitHub/GitLab上创建仓库
- 本地初始化并关联远程仓库
- 每次修改前先pull,避免冲突
- 提交时写清楚commit message
# 初始化
git init
git remote add origin https://github.com/yourname/auto-label.git
# 日常操作
git pull origin main
git add .
git commit -m "feat: 添加数据预处理模块"
git push origin main
重要:千万别把数据集、模型权重这些大文件提交到Git仓库。用.gitignore排除它们。
我习惯用分支管理:main分支放稳定版本,dev分支放开发中的代码,feature分支放新功能。这样出了问题也不会影响主线。
# 创建分支
git checkout -b feature/data-augmentation
# 合并分支
git checkout dev
git merge feature/data-augmentation
避坑指南:我曾经在合并分支时没注意冲突,结果把别人的代码覆盖了。从那以后,我每次合并前都会先git diff看看改了啥。
知识体系总览
下面这张图,是我自己画的。它把本章的知识点串起来了,你一看就明白它们之间的关系。
好了,环境准备这块儿就聊到这儿。记住:别急着跑模型,先把地基打牢。下一章咱们开始动手搭建标注系统。