环境搭建与工具链准备
说实话,我见过太多人在模型训练上栽跟头,不是因为算法不行,而是环境没搭好。你想想看,花了两周调好的代码,换个机器跑不起来,这种痛苦我太熟悉了。所以这一章,咱们就把地基打牢。
Python 虚拟环境:隔离是美德
每个项目都应该有自己的 Python 环境。这不是洁癖,是生存法则。我曾经在一个项目里同时维护三个模型,依赖冲突搞得我差点重装系统。
核心原则: 一个项目,一个环境,互不干扰。
我个人习惯用 conda,但 venv 也完全够用。区别在于:
| 工具 | 适用场景 | 优点 | 缺点 |
|---|---|---|---|
| conda | 数据科学、深度学习 | 包管理+环境管理一体,非 Python 依赖也能管 | 体积大,源有时慢 |
| venv | 纯 Python 项目 | 轻量,Python 内置 | 只管 Python 包 |
创建环境很简单:
# conda 方式
conda create -n myenv python=3.10
conda activate myenv
# venv 方式
python -m venv myenv
source myenv/bin/activate # Linux/Mac
myenv\Scripts\activate # Windows
小技巧: 环境名用项目名+Python版本,比如
llm_finetune_py310。半年后你想不起来这个环境是干嘛的。
CUDA/cuDNN 安装:GPU 的油门
没有 CUDA,你的 GPU 就是个昂贵的显示器。我见过有人装了 PyTorch 但没装 CUDA,跑起来 CPU 满载,GPU 占用 0%。嗯,那个人就是我。
安装前先确认三件事:
- 显卡型号 —
nvidia-smi查看 - 驱动版本 — 驱动必须支持目标 CUDA 版本
- 框架兼容性 — PyTorch/TensorFlow 对 CUDA 版本有要求
CUDA 和 cuDNN 的版本对应关系:
| CUDA 版本 | 推荐 cuDNN 版本 | PyTorch 兼容版本 | TensorFlow 兼容版本 |
|---|---|---|---|
| 11.8 | 8.9.x | 2.0.x - 2.1.x | 2.12 - 2.13 |
| 12.1 | 8.9.x | 2.2.x - 2.3.x | 2.15+ |
| 12.4 | 9.0.x | 2.4.x+ | 2.16+ |
避坑指南: 我曾经直接装最新版 CUDA 12.5,结果 PyTorch 还没支持,折腾了两天。建议先查 PyTorch 官网的安装命令,它会告诉你该装哪个 CUDA。
安装步骤:
- 从 NVIDIA 官网下载 CUDA Toolkit(选 .run 或 .exe 本地安装)
- 安装后设置环境变量
PATH和LD_LIBRARY_PATH - 下载 cuDNN,解压后把文件复制到 CUDA 目录下
- 验证:
nvcc --version和编译 sample 程序
PyTorch vs TensorFlow:怎么选?
这个问题我每次讲课都会被问到。我的回答是:看场景。
| 维度 | PyTorch | TensorFlow |
|---|---|---|
| 调试体验 | Pythonic,pdb 直接断点 | Graph 模式调试较麻烦 |
| 研究社区 | 学术界主流,HuggingFace 原生支持 | 工业部署强,TFLite/Serving 成熟 |
| 动态图 | 默认 eager 模式 | 2.x 后默认 eager,但历史包袱重 |
| 分布式训练 | DDP/FSDP 简洁 | MirroredStrategy 功能全但配置多 |
我个人习惯:做研究、调模型用 PyTorch;做生产、上服务用 TensorFlow。但说实话,现在 PyTorch 通过 TorchServe 也能部署,差距在缩小。
安装命令:
# PyTorch(CUDA 12.1)
pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu121
# TensorFlow(CUDA 12.1)
pip install tensorflow==2.16.1
# 验证 GPU 可用
python -c "import torch; print(torch.cuda.is_available())"
python -c "import tensorflow as tf; print(tf.config.list_physical_devices('GPU'))"
验证技巧: 跑一个简单矩阵乘法,对比 CPU 和 GPU 耗时。如果 GPU 比 CPU 慢,大概率是数据没放到 GPU 上。
实验管理工具:别让你的努力白费
你想想看,调了 50 组参数,结果忘了哪组效果最好。这种事我干过不止一次。后来我学乖了,用实验管理工具。
MLflow:轻量级,适合个人和小团队
MLflow 的核心概念就四个:
- Tracking — 记录参数、指标、模型文件
- Projects — 打包代码和环境
- Models — 模型格式化和部署
- Registry — 模型版本管理
快速上手:
import mlflow
mlflow.set_experiment("bert_finetune")
with mlflow.start_run():
# 记录参数
mlflow.log_param("learning_rate", 2e-5)
mlflow.log_param("batch_size", 32)
# 训练...
accuracy = 0.923
# 记录指标
mlflow.log_metric("accuracy", accuracy)
# 保存模型
mlflow.pytorch.log_model(model, "model")
WandB:可视化更强,适合团队协作
WandB 的仪表盘是我见过最直观的。你可以实时看 loss 曲线,对比不同实验,甚至看 GPU 利用率。
import wandb
wandb.init(project="my_project", config={
"learning_rate": 2e-5,
"batch_size": 32,
"epochs": 5
})
# 训练循环中
for epoch in range(epochs):
loss = train_one_epoch()
wandb.log({"loss": loss, "epoch": epoch})
wandb.finish()
我的建议: 小项目用 MLflow,轻量无依赖。团队项目用 WandB,协作和可视化体验更好。两个都试试,选你顺手的。
知识体系总览
下面这张图把本章的核心逻辑串起来了。从底层硬件到上层工具,每一层都有讲究。
环境验证清单
搭建完成后,我建议你跑一遍这个清单:
- GPU 可见 —
nvidia-smi显示你的显卡 - CUDA 可用 —
nvcc --version输出版本号 - cuDNN 版本 — 编译 sample 或
python -c "import torch; print(torch.backends.cudnn.version())" - 框架识别 GPU — PyTorch 的
torch.cuda.is_available()返回 True - 实验管理连通 — 跑一个最小示例,确认能记录数据
最后提醒: 环境搭建别图快。我曾经为了省时间跳过验证步骤,结果训练到一半才发现 GPU 没跑起来,白白浪费了三天。每一步验证都做一遍,后面会省很多事。