主题
第 0 章 学习环境与工具
本章目标:搭建一套可复用的大模型学习环境,理解 GPU 与显存的基本概念,并跑通第一个大模型推理程序。
预计用时:1 周(每天 1~2 小时)
学完你将能够:
- 熟练使用 Linux 命令行与 Python 虚拟环境
- 说清显存(VRAM)与内存(RAM)的区别,会用
nvidia-smi观察 GPU- 从 Hugging Face 下载模型并用 Transformers 完成一次推理
- 掌握本书所有实验代码的运行方式
0.1 为什么先学这一章
大模型学习的第一个拦路虎往往不是数学,而是环境。无数初学者卡在"CUDA 版本不对""显存爆了""模型下载不下来"这类问题上,还没看到模型长什么样就放弃了。
这一章我们用最短路径搭建环境,并建立一个核心认知:环境配置不是一次性杂活,而是大模型工程师的日常技能。到了本书第四阶段(底层优化),你会发现判断"显存够不够""算力能不能跑满"就是最基础的工作。
0.2 Linux 命令行:20 个命令打天下
本书假设你使用 Linux(物理机、云服务器或 Windows 的 WSL2 均可)。如果你完全没有命令行经验,先掌握这 20 个命令即可覆盖 95% 的日常操作:
bash
# ---- 文件与目录 ----
pwd # 我在哪(打印当前目录)
ls -lh # 列出当前目录内容(-h 让人类可读地显示大小)
cd /path/to/dir # 进入目录
mkdir -p a/b/c # 递归创建目录
cp -r src dst # 复制文件/目录
mv old new # 移动/重命名
rm -rf dir # 删除(危险!三思而后行)
# ---- 查看文件 ----
cat file.txt # 全部打印
head -n 50 file # 看前 50 行
tail -f log.txt # 实时追踪日志(调试训练时最常用)
less file.txt # 分页查看(按 q 退出)
wc -l file # 统计行数
# ---- 系统与进程 ----
ps aux | grep python # 找 Python 进程
kill -9 <PID> # 强制结束进程
df -h # 磁盘剩余空间
free -h # 内存使用情况
top # 实时资源占用(按 q 退出)
# ---- 网络 ----
curl -O <url> # 下载文件
ping baidu.com # 测试网络连通性📝 练习 0.1:创建目录
~/llm-lab/ch00,在其中创建一个文件hello.txt写入任意内容,然后用tail -f在一个终端窗口跟踪它,在另一个窗口用echo "new line" >> hello.txt追加内容,观察变化。
这个练习看似 trivial,但 tail -f 是你日后盯训练日志的看家本领。
0.3 Python 虚拟环境:每个项目一个"隔离舱"
0.3.1 为什么需要虚拟环境
Python 包之间经常存在版本冲突:项目 A 需要 transformers==4.45,项目 B 需要 transformers==4.50。如果全部装到系统 Python 里,必然互相污染。虚拟环境给每个项目一个独立的包目录,互不干扰。
0.3.2 使用 venv(标准方案)
bash
# 创建虚拟环境(在项目目录下执行)
python3 -m venv .venv
# 激活(每次开新终端都要执行)
source .venv/bin/activate
# 激活后命令行提示符前会出现 (.venv),此后 pip 安装的包都只存在于这个环境
pip install torch transformers
# 退出环境
deactivate0.3.3 使用 uv(推荐,更快)
uv 是近年流行的 Python 包管理器,安装速度比 pip 快 10~100 倍:
bash
# 安装 uv
curl -LsSf https://astral.sh/uv/install.sh | sh
# 创建项目与环境
uv init llm-lab && cd llm-lab
uv venv
source .venv/bin/activate
# 安装依赖(快得惊人)
uv pip install torch transformers accelerate💡 经验法则:无论用哪个工具,永远不要在系统 Python 里直接
pip install。本书所有代码都假设你在虚拟环境中运行。
0.4 GPU 与显存:大模型世界的"硬通货"
0.4.1 CPU vs GPU
用一个类比理解:
- CPU 像几个博学的教授:核心少(8~64 个),但每个核心能力全面、擅长复杂的串行逻辑。
- GPU 像上万个小学生:核心极多(上万个),每个只会简单算术,但一起做矩阵乘法这种"简单但海量"的计算时,速度碾压 CPU。
神经网络的本质是海量矩阵乘法,所以大模型训练和推理几乎都在 GPU 上进行。
0.4.2 显存(VRAM):最重要的资源指标
GPU 有自己的专用内存,叫显存。模型要跑在 GPU 上,必须先把参数加载进显存。显存不够 = 模型跑不起来,这是大模型时代最常见的报错(CUDA out of memory)。
记住一个最重要的估算公式(本书会反复使用):
模型权重显存 ≈ 参数量 × 每参数占用字节数
| 精度格式 | 每参数字节数 | 7B(70 亿参数)模型显存 | 说明 |
|---|---|---|---|
| FP32 | 4 字节 | 28 GB | 训练时的主权重 |
| FP16/BF16 | 2 字节 | 14 GB | 推理最常用的精度 |
| INT8 | 1 字节 | 7 GB | 量化后 |
| INT4 | 0.5 字节 | 3.5 GB | 激进量化,消费级显卡也能跑 |
注意:这只是"模型权重"的显存。推理时还有 KV Cache、激活值等额外开销;训练时还要加上梯度、优化器状态(可达权重的 4~8 倍)。这些会在第 5 章(推理)和后续章节详细展开。
0.4.3 nvidia-smi:你的 GPU 仪表盘
bash
nvidia-smi典型输出解读:
+-----------------------------------------------------------------+
| GPU Name Persistence-M | Bus-Id | Memory-Usage |
| 0 NVIDIA A100-SXM4-40GB On | 00000000:... | 12896MiB / 40960MiB |
+-----------------------------------------------------------------+
| Processes: |
| GPU PID Type Process name GPU Memory |
| 0 12345 C python 12780MiB |
+-----------------------------------------------------------------+关键字段:
- Memory-Usage:已用显存 / 总显存。跑模型前后各看一次,差值就是模型占用的显存。
- GPU-Util:算力利用率。推理时如果只有 10~20%,说明 GPU 大部分时间在等数据搬运(访存瓶颈,第四阶段的核心议题)。
- Processes:哪些进程在占用显存。进程僵尸残留显存时,用
kill -9 <PID>清理。
📝 练习 0.2:运行
nvidia-smi,记录你机器的 GPU 型号与总显存。根据上面的表格,估算你的显卡能放下多大的 FP16 模型?INT4 呢?
如果没有 GPU:可以使用云服务商按小时租用(如 AutoDL、各大云厂商),或使用 Google Colab 的免费 GPU。本书前期章节的实验用 CPU 也能勉强跑(只是慢),从第 5 章开始强烈建议有至少 8GB 显存的 GPU。
0.5 Hugging Face:大模型的"中央仓库"
Hugging Face(HF)是全球最大的模型与数据集托管平台。注册账号后,绝大多数开源模型(Qwen、Llama、DeepSeek 蒸馏版等)都可以直接下载。
bash
# 安装 CLI 并登录(某些模型需要登录同意协议)
pip install huggingface_hub
huggingface-cli login # 粘贴你的 token(在 HF 网站 Settings -> Access Tokens 生成)
# 下载一个模型(0.6B 小模型,约 1.2GB,适合第一次实验)
huggingface-cli download Qwen/Qwen3-0.6B --local-dir ./models/Qwen3-0.6B下载完成后,目录结构如下:
models/Qwen3-0.6B/
├── config.json # 模型架构配置(层数、隐藏维度等,第 4 章详解)
├── generation_config.json # 默认生成参数
├── model.safetensors # 模型权重(safetensors 是安全的权重格式)
├── tokenizer.json # 分词器
└── tokenizer_config.json💡 国内网络提示:如果 HF 访问缓慢,可以使用镜像
export HF_ENDPOINT=https://hf-mirror.com,或使用 ModelScope(阿里)下载。
0.6 里程碑:你的第一次大模型推理
万事俱备,现在完成本章的里程碑——加载模型并生成文本。创建 first_inference.py:
python
"""第 0 章里程碑:第一次大模型推理"""
import torch
from transformers import AutoModelForCausalLM, AutoTokenizer
model_path = "./models/Qwen3-0.6B"
# 1. 加载分词器:负责 文本 <-> 数字 的转换
tokenizer = AutoTokenizer.from_pretrained(model_path)
# 2. 加载模型:把权重读进内存/显存
# device_map="auto" 表示有 GPU 就用 GPU
# torch_dtype="auto" 表示按模型自带的精度加载(通常是 BF16)
model = AutoModelForCausalLM.from_pretrained(
model_path,
torch_dtype="auto",
device_map="auto",
)
# 3. 构造对话输入(聊天模型有固定的消息格式)
messages = [
{"role": "system", "content": "你是一个简洁的助手。"},
{"role": "user", "content": "用一句话解释什么是大语言模型。"},
]
# 4. 套用聊天模板并转为模型能理解的数字(token id)
text = tokenizer.apply_chat_template(
messages, tokenize=False, add_generation_prompt=True
)
inputs = tokenizer(text, return_tensors="pt").to(model.device)
# 5. 生成:模型逐个预测下一个 token
outputs = model.generate(**inputs, max_new_tokens=128)
# 6. 解码:把生成的数字转回文字(只取新生成的部分)
new_tokens = outputs[0][inputs["input_ids"].shape[1]:]
print(tokenizer.decode(new_tokens, skip_special_tokens=True))运行:
bash
python first_inference.py如果顺利,你会看到模型对"大语言模型"的解释。恭喜你,完成了从零到大模型的第一步。
逐行拆解(这六步是全书的地基)
整个流程可以概括为一张图:
人类文字 --[tokenizer]--> token id 序列 --[model]--> 新 token id --[tokenizer]--> 人类文字- 分词器(Tokenizer):模型不认识文字,只认识数字。分词器把文字切成一个个 token 并映射为 id(第 4 章详解)。
- 模型(Model):本质上是一个巨大的函数,输入一串数字,输出"下一个数字最可能是什么"的概率分布。
- 生成(generate):循环执行"预测下一个 → 拼到末尾 → 再预测下一个",这就是自回归生成(第 5 章详解)。
- 解码(decode):把数字变回文字。
📝 练习 0.3:
- 在推理前后分别运行
nvidia-smi,记录显存差值,用 0.4.2 的公式估算理论值并对比。- 把
max_new_tokens改成 512,观察生成时间的变化。- 修改 system prompt,观察模型行为的变化(这是第 7 章提示工程的雏形)。
0.7 Jupyter Notebook:探索式学习的利器
本书的大量实验适合在 Notebook 中交互式进行:
bash
pip install jupyter
jupyter notebook # 浏览器中打开,逐格执行代码💡 经验法则:探索、调试、画图用 Notebook;成形的训练脚本、部署服务用
.py文件。
0.8 Git:给你的学习过程存档
学习过程中你会写大量实验代码,用 Git 管理它们:
bash
git init # 初始化仓库
git add first_inference.py # 暂存文件
git commit -m "ch00: first inference" # 提交存档
git log --oneline # 查看历史养成"每完成一个实验就提交一次"的习惯,三个月后你会感谢自己。
本章小结
| 知识点 | 一句话总结 |
|---|---|
| Linux 命令 | 掌握 20 个核心命令,重点是 tail -f 看日志 |
| 虚拟环境 | 每个项目一个环境,永不污染系统 Python |
| GPU vs CPU | GPU 擅长海量并行矩阵运算,是大模型的载体 |
| 显存公式 | 权重显存 ≈ 参数量 × 每参数字节数(FP16=2,INT4=0.5) |
| nvidia-smi | 看显存占用和算力利用率的仪表盘 |
| Hugging Face | 模型中央仓库,huggingface-cli download 下载 |
| 推理六步 | 加载分词器 → 加载模型 → 构造输入 → 编码 → generate → 解码 |
本章实战验收
- [ ] 创建好虚拟环境,安装 torch + transformers
- [ ] 下载 Qwen3-0.6B 并成功运行
first_inference.py - [ ] 用 nvidia-smi 记录并解释推理前后的显存变化
- [ ] 估算自己显卡能容纳的最大 FP16 / INT4 模型尺寸
拓展阅读
- Hugging Face 官方课程(免费):LLM Course —— 环境部分的更多细节
uv官方文档 —— 现代 Python 包管理- 《The Linux Command Line》(免费电子版)—— 想系统补命令行的话