环境搭建与工具链准备

说实话,我见过太多人在模型训练上栽跟头,不是因为算法不行,而是环境没搭好。你想想看,花了两周调好的代码,换个机器跑不起来,这种痛苦我太熟悉了。所以这一章,咱们就把地基打牢。

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%。嗯,那个人就是我。

安装前先确认三件事:

  1. 显卡型号 — nvidia-smi 查看
  2. 驱动版本 — 驱动必须支持目标 CUDA 版本
  3. 框架兼容性 — 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。

安装步骤:

  1. 从 NVIDIA 官网下载 CUDA Toolkit(选 .run 或 .exe 本地安装)
  2. 安装后设置环境变量 PATH 和 LD_LIBRARY_PATH
  3. 下载 cuDNN,解压后把文件复制到 CUDA 目录下
  4. 验证: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 + 驱动 CUDA / cuDNN Python 虚拟环境 PyTorch TensorFlow MLflow WandB 每一层都依赖下层正确配置,从硬件到工具链,缺一不可

环境验证清单

搭建完成后,我建议你跑一遍这个清单:

  1. GPU 可见 — nvidia-smi 显示你的显卡
  2. CUDA 可用 — nvcc --version 输出版本号
  3. cuDNN 版本 — 编译 sample 或 python -c "import torch; print(torch.backends.cudnn.version())"
  4. 框架识别 GPU — PyTorch 的 torch.cuda.is_available() 返回 True
  5. 实验管理连通 — 跑一个最小示例,确认能记录数据
最后提醒: 环境搭建别图快。我曾经为了省时间跳过验证步骤,结果训练到一半才发现 GPU 没跑起来,白白浪费了三天。每一步验证都做一遍,后面会省很多事。