3. 环境与工具
学习目标
- 创建隔离环境
- 确认实际计算设备
- 记录可复现所需的版本、seed 与数据哈希
前置知识
- Python 3.12
- 终端与文件路径基础
本章产物一份环境验收报告,以及可运行的全部核心依赖。
3.1 个人设备的能力边界
以 M4 Pro 48GB 为例,适合:
- 从零训练 TinyGPT。
- 运行和调试 0.6B~8B 模型。
- 对 0.6B 进行 Transformers + PEFT LoRA。
- 用 MLX-LM 对量化模型做 LoRA/QLoRA 实验。
- 研究 llama.cpp/MLX 的量化、KV Cache 和推理服务。
- 运行 14B、32B 的 4-bit 推理压力实验。
不适合:
- 从零预训练数十亿参数模型。
- 学习 CUDA kernel、Tensor Core、NCCL 多卡通信的实操部分。
- 依赖 CUDA 的 bitsandbytes 训练路线。
- 在单机上复现实验室级 RLHF 或大规模分布式训练。
3.2 建立项目
mkdir -p "$PWD/llm-learning-lab"
cd "$PWD/llm-learning-lab"
python3.12 -m venv .venv
source .venv/bin/activate
python -m pip install --upgrade pip wheel从实验资料页下载完整压缩包并解压。资料包包含 notebooks、code、data 和 requirements 文件。
安装核心依赖:
python -m pip install -r requirements-core.txt进入微调章节再安装:
python -m pip install -r requirements-finetune.txt3.3 工具分工
| 工具 | 主要用途 | 何时学习 |
|---|---|---|
| Python | 数据、训练脚本与实验编排 | 立即 |
| NumPy | 数组和基础数值计算 | 第 1 周 |
| PyTorch | 张量、自动微分、模型训练 | 第 1~2 周 |
| Tokenizers | 训练 BPE/WordPiece tokenizer | 第 3 周 |
| Transformers | 加载真实预训练模型 | 第 7 周 |
| Datasets | 数据加载、映射、流式处理 | 第 6~7 周 |
| PEFT | LoRA 等参数高效微调 | 第 10 周 |
| TRL | SFT、DPO、奖励与强化学习训练 | 第 10~12 周 |
| MLX-LM | Apple Silicon 推理与 LoRA/QLoRA | 第 9~10 周 |
| llama.cpp | GGUF、量化、本地服务与 benchmark | 第 9 周 |
| lm-eval | 标准任务评估 | 第 13 周 |
| vLLM | NVIDIA/服务器推理、连续批处理 | 后续 CUDA 阶段 |
3.4 版本与可复现性
每个正式实验保存:
python --version
python -m pip freeze > artifacts/requirements-lock.txt
git rev-parse HEAD还应记录:
- 模型仓库和具体 revision/commit。
- 数据集版本或文件哈希。
- 随机种子。
- 训练参数。
- 硬件、操作系统与框架版本。
- 是否启用量化、混合精度、gradient checkpointing。
3.5 动手:十分钟完成环境验收
实验 00|环境自检 资源:CPU 即可;时间:约 2 分钟;产物:artifacts/reports/00-environment.md。
在解压后的实验资料根目录执行:
mkdir -p artifacts/reports artifacts/checkpoints artifacts/evaluations artifacts/benchmarks
python --version
python -c "import torch; print('torch', torch.__version__); print('mps', torch.backends.mps.is_available()); print('cuda', torch.cuda.is_available())"
python code/01_tensor_autograd.py或者打开环境自检 Notebook,执行 Restart Kernel and Run All Cells。
正确结果不是必须出现 MPS 或 CUDA,而是:
- Python 能导入
torch和numpy。 - 自动微分脚本的手算梯度与 PyTorch 梯度在浮点容差内一致。
- 设备选择被明确记录;CPU 路线依然有效,只是训练更慢。
- 同一随机种子重复运行,关键数值一致或只存在可解释的设备浮点差异。
常见故障:
| 现象 | 先检查什么 | 处理方式 |
|---|---|---|
python 指向系统旧版本 | which python、python --version | 重新激活 .venv |
No module named torch | python -m pip --version | 确认 pip 与当前解释器属于同一虚拟环境 |
| MPS 不可用 | macOS、芯片、PyTorch 构建 | 先用 CPU 完成基础实验,不把设备问题混入模型调试 |
| loss 为 NaN | 输入、dtype、学习率 | 从环境 Notebook 的最小张量开始缩小问题 |
验收问题:为什么“能 import PyTorch”不足以证明训练环境正常?答案至少应包含张量设备、梯度、参数更新和可复现性四项。