第4章:环境搭建与工具链

说实话,环境搭建这事儿,看着简单,但坑是真不少。我带过不少新人,十有八九第一周都卡在配环境上。今天我就把这几年的经验捋一捋,帮你把 Python、PyTorch、Hugging Face 和 GPU 这些家伙一次性搞定。

4.1 Python 环境管理

我个人习惯用 Conda 来管理环境。为什么?因为省心。你想想看,项目一多,依赖冲突是常有的事。Conda 能帮你隔离得干干净净。

核心原则:每个项目一个独立环境,别偷懒。

先装 Miniconda,别装 Anaconda——太臃肿了。装好后,创建环境:

conda create -n multimodal python=3.10
conda activate multimodal

嗯,这里要注意。Python 版本别选太新,3.10 目前最稳。我去年用 3.11 踩过坑,有些库还没适配。

装包的时候,我建议用 conda install 优先,找不到再用 pip。混着用容易出问题,尤其是 PyTorch 这种底层库。

小技巧:把常用包写进 requirements.txt,换环境时一行命令搞定。

4.2 PyTorch 还是 TensorFlow?

这个问题我经常被问到。我的答案是:做多模态,首选 PyTorch

为什么?因为 Hugging Face 生态几乎全在 PyTorch 上。我在项目中试过用 TensorFlow 跑 BLIP,结果文档少得可怜,折腾了两天才跑通。换成 PyTorch,半小时搞定。

安装 PyTorch 很简单,去官网选你的配置:

# CPU 版本
pip install torch torchvision torchaudio

# CUDA 11.8 版本
pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu118

警告:千万别用 pip install torch 直接装,默认是 CPU 版。你想想看,花了几千块买的显卡,结果跑在 CPU 上,多冤。

验证安装:

import torch
print(torch.__version__)
print(torch.cuda.is_available())  # 应该返回 True

我曾经遇到过一个问题——装完 PyTorch 后 cuda.is_available() 返回 False。查了半天,发现是 CUDA 驱动版本和 PyTorch 不匹配。后来我学乖了,装之前先查驱动版本:

nvidia-smi  # 看右上角的 CUDA Version

4.3 Hugging Face Transformers

这个库简直是多模态开发的瑞士军刀。你想想看,以前要自己写 ViT、CLIP 的代码,现在一行就搞定。

安装:

pip install transformers datasets accelerate

我建议再加几个常用库:

pip install pillow  # 图像处理
pip install sentencepiece  # 分词器
pip install evaluate  # 评估指标

跑个例子试试:

from transformers import pipeline

# 图像描述生成
captioner = pipeline("image-to-text", model="nlpconnect/vit-gpt2-image-captioning")
result = captioner("cat.jpg")
print(result[0]['generated_text'])

你看,就这么几行代码,一个多模态模型就跑起来了。我第一次跑通的时候,还挺激动的。

提示:第一次运行会下载模型,大概几百 MB。建议提前准备好网络,或者用镜像源加速。

4.4 GPU 配置与调试

GPU 配置是重头戏。我见过太多人卡在这一步了。

首先,确认你的显卡:

nvidia-smi

这个命令会显示 GPU 型号、显存、驱动版本。显存很重要——多模态模型通常吃显存。我用的 RTX 3090 有 24GB,跑 BLIP-2 刚好够。

如果 nvidia-smi 报错,说明驱动没装好。去 NVIDIA 官网下载对应驱动,别用系统自带的。

装 CUDA Toolkit:

# Ubuntu
wget https://developer.download.nvidia.com/compute/cuda/11.8.0/local_installers/cuda_11.8.0_520.61.05_linux.run
sudo sh cuda_11.8.0_520.61.05_linux.run

装 cuDNN:

# 下载后解压
tar -xvf cudnn-linux-x86_64-8.9.0.131_cuda11-archive.tar.xz
sudo cp cudnn-*-archive/include/cudnn*.h /usr/local/cuda/include
sudo cp -P cudnn-*-archive/lib/libcudnn* /usr/local/cuda/lib64

注意:CUDA 版本要和 PyTorch 匹配。比如 PyTorch 2.0 对应 CUDA 11.8,别搞混了。

调试 GPU 的常用命令:

# 查看 GPU 使用情况
watch -n 1 nvidia-smi

# 查看 PyTorch 是否识别 GPU
python -c "import torch; print(torch.cuda.device_count()); print(torch.cuda.get_device_name(0))"

我曾经遇到一个诡异的问题——训练时 GPU 利用率只有 10%。查了半天,发现是数据加载太慢,GPU 一直在等 CPU。后来用 DataLoader 的 num_workers 参数解决了。

from torch.utils.data import DataLoader

dataloader = DataLoader(dataset, batch_size=32, num_workers=4, pin_memory=True)

num_workers 一般设为 CPU 核心数的一半。pin_memory=True 能加速数据传输。

4.5 完整环境检查清单

每次搭建新环境,我都会跑一遍这个脚本:

import torch
import transformers
import sys

print(f"Python 版本: {sys.version}")
print(f"PyTorch 版本: {torch.__version__}")
print(f"CUDA 可用: {torch.cuda.is_available()}")
if torch.cuda.is_available():
    print(f"GPU 数量: {torch.cuda.device_count()}")
    print(f"GPU 名称: {torch.cuda.get_device_name(0)}")
    print(f"显存: {torch.cuda.get_device_properties(0).total_memory / 1e9:.2f} GB")
print(f"Transformers 版本: {transformers.__version__}")

输出应该类似这样:

Python 版本: 3.10.12
PyTorch 版本: 2.0.1
CUDA 可用: True
GPU 数量: 1
GPU 名称: NVIDIA GeForce RTX 3090
显存: 24.00 GB
Transformers 版本: 4.30.0

记住:环境搭好了,后面的事就顺了。别急着跑模型,先把基础打牢。

好了,环境搭建就这些。下一章我们开始动手写第一个多模态应用——用 CLIP 做图文匹配。到时候你就知道,前面这些功夫没白花。