第2章:环境搭建——Python环境、PyTorch安装、CUDA配置、项目结构初始化

好,咱们正式开始动手了。

写Transformer之前,先把“厨房”收拾利索。环境搭不好,后面全是坑。我见过太多同学卡在环境上,代码写完了跑不起来,一查是CUDA版本不对——这种冤枉时间,咱们不花。

2.1 Python环境管理:我为什么推荐Miniconda

Python版本管理,我个人习惯用Miniconda。为什么不是Anaconda?因为Anaconda预装了一堆你用不到的包,占空间还容易冲突。Miniconda轻量,需要什么装什么,清爽。

安装步骤很简单:

  1. 去官网下载Miniconda(Python 3.9+版本)
  2. 一路默认安装,记得勾选“Add to PATH”
  3. 打开终端,验证一下:conda --version

然后创建一个独立的环境,专门给这个项目用:

conda create -n transformer_env python=3.9
conda activate transformer_env
一个小建议:每个项目都建独立环境。我以前图省事,所有项目共用base环境,结果某天一个项目要升级PyTorch,另一个项目死活不兼容……嗯,从那以后我再也不偷懒了。

2.2 PyTorch安装:GPU版本还是CPU版本?

说白了,你写Transformer练手,CPU也能跑。但如果你想训练稍微大一点的模型,或者想体验GPU加速的快感,那就装CUDA版本。

我个人建议:直接装CUDA版本。哪怕你现在没显卡,PyTorch会自动fallback到CPU,以后插上显卡就能用,不用重装。

安装命令(以CUDA 11.8为例):

pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu118

如果你没有NVIDIA显卡,或者不想折腾CUDA:

pip install torch torchvision torchaudio

验证安装是否成功:

python -c "import torch; print(torch.__version__); print(torch.cuda.is_available())"

如果输出 True,恭喜你,GPU就绪。如果是 False,也别慌——CPU模式照样能学完整个课程。

2.3 CUDA配置:避坑指南

CUDA配置是新手最容易翻车的地方。我总结几个常见问题:

问题 原因 解决办法
torch.cuda.is_available() 返回 False CUDA版本与PyTorch不匹配 nvidia-smi 查看驱动支持的CUDA版本,去PyTorch官网选对应版本
安装时网络超时 PyTorch包较大,国内下载慢 加国内镜像源:-i https://pypi.tuna.tsinghua.edu.cn/simple
conda安装卡住 conda在解析依赖 换成pip安装,快很多
我曾经踩过的坑:有一次我装完PyTorch,发现cuda.is_available()是False。查了半天,原来是我装了CPU-only版本……嗯,命令里少了个cu118后缀。所以装完一定要验证。

2.4 项目结构初始化:一个工程化习惯

很多教程直接让你在Jupyter Notebook里写代码。但咱们要做的是工程,不是实验。我建议从一开始就建立清晰的项目结构。

这是我个人习惯的Transformer项目结构:

transformer_from_scratch/
├── config/              # 配置文件
│   └── config.py
├── data/                # 数据加载与预处理
│   └── dataset.py
├── models/              # 模型定义
│   ├── attention.py     # 注意力机制
│   ├── transformer.py   # 主模型
│   └── layers.py        # 公共层
├── utils/               # 工具函数
│   └── helpers.py
├── train.py             # 训练脚本
├── inference.py         # 推理脚本
└── requirements.txt     # 依赖清单

创建这些文件夹和文件,一行命令搞定:

mkdir -p transformer_from_scratch/{config,data,models,utils}
touch transformer_from_scratch/{train.py,inference.py,requirements.txt}
touch transformer_from_scratch/{config,data,models,utils}/__init__.py
为什么要有 __init__.py? 因为Python要把文件夹当作包来导入,必须有这个文件。空文件也行。我刚开始写项目时经常忘记加,结果import报错,找了半天才发现是少了这个。

2.5 验证环境:跑一个最小测试

环境搭好了,项目结构也有了。咱们跑个最小测试,确保一切正常:

# test_env.py
import torch

# 检查PyTorch版本
print(f"PyTorch版本: {torch.__version__}")

# 检查GPU
if torch.cuda.is_available():
    print(f"GPU型号: {torch.cuda.get_device_name(0)}")
    print(f"显存大小: {torch.cuda.get_device_properties(0).total_memory / 1e9:.2f} GB")
else:
    print("当前使用CPU模式")

# 跑一个简单的张量运算
x = torch.randn(3, 4)
y = torch.randn(4, 5)
z = torch.mm(x, y)
print(f"矩阵乘法测试通过,结果形状: {z.shape}")

保存为 test_env.py,然后运行:

python test_env.py

如果看到输出没有报错,恭喜——你的Transformer开发环境已经就绪。

2.6 关于编辑器的一点建议

我个人推荐VS Code,配上Python插件和Jupyter插件。为什么?

  • 代码补全好用
  • 内置终端,不用切窗口
  • 支持直接在.py文件里写# %%跑单元格,跟Jupyter一样方便

当然,PyCharm、Vim、甚至记事本都行。工具是次要的,关键是代码本身。

好,环境搭完了。下一章咱们开始写Transformer的第一个核心组件——注意力机制。到时候你会发现,环境搭建其实是最简单的一步。