Appearance
第1章 · 环境、隐私与云权益审计
前置要求:无需任何专业算法或深度学习基础。作为全书起点,仅需具备基本的终端命令行使用习惯与常规开发软件安装能力。
工程实战的第一步,是建立确定性与可复现性:把本地系统配置为与全书实验完全对齐的基线状态,并在进入代码之前清晰界定开发者订阅、云端资格与操作授权三者的物理边界。分清这三者,能有效避免云端实验中的意外扣费与进度误报。
本章目标
学完后你能做到:
- 在自己机器上跑通本书全部本地实验的基线环境(Node 20 / pnpm 9 / Python 3.11 / Chrome),并能在全新 checkout 里重来一遍。
- 明确区分“订阅权益、云资格、单次操作授权”的物理边界,不把 Google AI Pro 等订阅误当成免费 GPU 或已开通的云账单。
- 按模板写出一份不含任何个人信息的脱敏能力记录,并通过本地校验器。
阶段一:跑通本地基线
以下命令在仓库根目录执行。前半段装站点和测试环境,后半段装 Python 实验环境:
bash
pnpm install --frozen-lockfile # 按 lockfile 严格安装站点依赖
pnpm test:labs # 跑全部实验测试,任何 skip/xfail 都算失败
pnpm docs:build # 构建课程站点
pnpm docs:preview --host 127.0.0.1 # 本地预览构建产物bash
python3.11 -m venv .venv # 建一个隔离的 Python 环境(避免污染系统 Python)
source .venv/bin/activate # 激活它;Windows 用 .venv\Scripts\activate
python -m pip install --upgrade pip
python -m pip install -r requirements.txt
export PYTHONPATH="$PWD/python" # 让 Python 能找到仓库里的实验代码
python -m pytest python/tests -q --tb=short核心机制解析:
- venv 隔离机制:为本项目建立独立的 Python 包目录,避免不同项目间的依赖版本冲突。新开终端执行实验前,均需先执行
source .venv/bin/activate。 - PYTHONPATH 路径解析:显式指定 Python 解释器在标准库之外优先搜索
python/源码目录,避免测试时因模块定位失败报ModuleNotFoundError: llm_core。
requirements.txt 会自动带上 requirements-py311.lock.txt 里 16 个针对 Python 3.11 的锁定约束,保证你装到的版本和课程验证过的一致。第4–11章默认在 CPU / Apple Silicon MPS 上跑,规范安装会包含 PyTorch——第9章要真实训练 TinyGPT,缺了 PyTorch 的环境会把测试 skipped,跳过不算通过,先修复环境再继续。
预期结果:pnpm test:labs 和 pytest 全部通过、无 skip。如果报错,先翻到本章「常见问题」对照处理。
受限设备运行保障(纯 CPU / 轻薄笔记本友好)
全书所有核心模型与算法代码均经过高保真工程裁剪与微型化设计,确保在标准开发设备上流畅运行:
- 纯本地 CPU 极速跑通:从第 4 章的标量自动微分、第 6 章的字节级 BPE 分词器,到第 8 章的多头注意力与第 9 章的 TinyGPT 预训练,所有网络结构均原生支持纯 CPU 运行。
- 超轻量显存/内存预算:教学版 TinyGPT 参数量精确控制在 10.8 万(约 108K 参数),单批次训练的内存峰值小于 500 MB,轻量可控。
- 分钟级实验反馈:在普通 CPU(如 Intel i5/i7 或 AMD Ryzen 5)上,运行 100 个训练步仅需约 30 秒,1000 个训练步在 3 分钟内即可收敛;在 Apple Silicon(M1/M2/M3 等)上更可通过 MPS 加速在数十秒内完成。
- 完全离线且零成本:本地学习路径直接成本为 0 元,无需任何 API 充值,无需云服务器账单,断网状态下亦可完成模型训练与代码测试。
| 实验模块 | 推荐硬件 | 内存开销 | 典型运行时间(CPU) | 产出成果 |
|---|---|---|---|---|
第4章 标量微分 Value | 任意双核 CPU | < 50 MB | < 1 秒 | 标量反向传播引擎 |
| 第6章 BPE 分词器 | 任意双核 CPU | < 100 MB | < 2 秒 | 完整词表与编解码器 |
| 第8章 Transformer Block | 任意四核 CPU | < 200 MB | < 5 秒 | 多头注意力与前馈块 |
| 第9章 TinyGPT 预训练 | 普通笔记本 CPU | < 500 MB | 1 ~ 3 分钟 | 具备下一个词预测能力的微型模型 |
| 第10章 KV Cache 推理 | 普通笔记本 CPU | < 200 MB | < 3 秒 | 缓存加速自回归文本生成 |
阶段二:分清订阅、资格与授权
全书在后期包含一次受控的云端小模型训练(第21章)。为避免非预期的云端扣费,课程将云端执行拆分为四道互不信任的独立闸门,任何一道未满足均停留在本地路径,不影响主线学习:
| 闸门 | 检查内容 | 不通过时的阻断策略 |
|---|---|---|
| 资格(Eligibility) | 当日在服务商官方控制台核验,账号是否具备对应云资源配额与结算关联 | 状态保持 unverified,停留在本地课程 |
| smoke 授权 | 单次 5–10 分钟的小规模预检试跑,需独立审批确认 | 不创建任何远程计算任务 |
| full run 授权 | 完整模型训练执行,必须再次单独获得明确审批 | smoke 试跑通过不能自动继承权限 |
| service deploy 授权 | 部署私有推理端点服务,必须第三次单独审批 | 不执行任何部署变更 |
工程视角下的权限分层:订阅等级(如 Google AI Pro)仅代表服务商宣传的包含权益;资格(Eligibility)是在云控制台实测确认当前账号已绑定有效结算与可用配额;授权(Authorization)是每一次具体资源调用的运行时审批凭证。即便看到“包含 Cloud credit”说明,在物理上也既不代表账号已完成结算关联,也不代表已获得可用 GPU 配额或训练无需计费。
CLOUD ROUTE · DRY RUN ONLY
Google 资源是可选加速器,不是课程前置条件
Google AI Pro 会员权益、Google Cloud credit、Gemini API 额度和 GPU quota 是不同边界;必须在真实控制台逐项核验。页面不读取账号、不发起云请求。
Cloud Run Jobs · CPU
- 资源形状
- 1 task · 4 vCPU · 16 GiB · 最长 1 h(本地计划)
- 成本边界
- 研究估算示例;不是报价,必须按当日 SKU 重算
- 为什么
- 默认路线:可清理、无需 GPU quota
尚未生成本地计划。选择路线后点按钮,结果只留在本页。
任何 cloud smoke/full run/service deploy 都必须带一次性 approval_id、operation_id、region、资源形状、时限和 gross cost;未核验或未授权时,本地结果不能标记为云端通过。
云操作的真实顺序固定为:本地 dry-run(不联网、不建资源)→ smoke → 单独批准 full run → 单独批准部署 → 生成对拍 → 同日清理 → 48 小时后回读账单确认没有残留费用。credit 不是消费上限,gross 预算门禁为不超过 8 美元等值。
每一次云端执行都必须留下一条可回读的证据链——缺少任何一环,云端训练完成状态均不成立:
这条链每一环在第21章会展开成逐阶段证据表;本章核心在于建立防御性认知:任何一环缺失(例如缺少 execution ID),就意味着该产物不能作为云端训练的有效证据,系统状态必须保持 cloud_training_passed=false。
阶段三:写下你的脱敏审计记录
核验完官方 UI 后,只记录下面这种结构。对照字段逐个理解:
yaml
capability: <capability-name> # 能力名称,如 cloud-training
verified_at: <iso-date> # 你核验的日期
status: eligible|unavailable|unverified # 三态:能用 / 没有 / 未核验
scope: <sanitized-service-or-route> # 脱敏后的服务或路线描述
expires_at: <iso-date-or-null> # 资格失效日期,没有就 null
safe_course_use: yes|no|human-approval-required
evidence_local_only: true # 原始截图只存本地,不进仓库字段的机器合同在 configs/google-gates.template.json;当前仓库的记录是 configs/google-gates-local-v1.json。写完记录后运行校验:
bash
pnpm google:gates
node scripts/validate_google_gates.mjs --file <你的脱敏记录.json>校验器只接受 eligible|unavailable|unverified 三种状态,并且拒绝任何账号 ID、项目号、邮箱、凭据、绝对路径——写进去就会校验失败,这是故意的:脱敏是硬性要求,不是建议。校验通过只说明"记录格式和隐私边界有效",不代表任何云操作已执行。
故障注入与预期信号
| 注入的坑 | 会出现的信号 | 正确处理 |
|---|---|---|
| 把会员名当 GPU 配额 | 计划直接提交云资源 | 资格保持 unverified,停在本地 |
| 只有 smoke 授权却启动 full run | 授权 action 不匹配 | 审批账本拒绝,授权不能继承 |
| 预算、时长或 region 缺失 | 计划无法审计 | 不创建任务 |
| 本地 checkpoint 冒充云 checkpoint | 证据链缺 execution ID | 记 cloud_training_passed=false |
| 发现异常资源或账单 | 继续操作会放大损失 | 立即停止,交由人类处理 |
常见问题
| 现象 | 处理 |
|---|---|
ModuleNotFoundError: llm_core | 激活 venv 并设置 PYTHONPATH="$PWD/python" |
| pytest 找不到 | 检查是否在 Python 3.11 的 venv 里、requirements 是否装完 |
| 页面组件不更新 | 重新 pnpm docs:build 再重启 preview |
云资格是 unverified | 继续本地课程,不打开未授权的已登录控制台 |
| 看到密钥、个人资料或账单原文 | 不复制到任何地方;停止并只做脱敏记录 |
本章验收
不看资料,能回答这两题就算过:
- 为什么
eligible、一次 smoke 授权、一次真实云执行是三件不同的事?每一步缺失时必须停在哪里? - 从本地训练输入画到私有 Service 的证据链,指出哪一个回读能阻止"本地成功"被误报成"云端成功"。
学习者提交模板(待填写,不是当前机器证据)
复制下面模板,填写你当天官方 UI 核验后的脱敏结果。所有 <...> 都是未填写状态,不能当作资格已确认;不要写入账号、项目号、余额截图、cookie、token 或账单原文。
yaml
capability: <capability-name>
verified_at: <iso-date>
status: eligible|unavailable|unverified
scope: <sanitized-service-or-route>
expires_at: <iso-date-or-null>
safe_course_use: yes|no|human-approval-required
evidence_local_only: true模板未填写、资格为 unverified 或授权为 false 时,必须停在本地路径;这些记录不能推出云训练、部署或学习者掌握已经通过。
资源 / 成本 / 隐私
- 资源:本地 Node、Python 3.11、PyTorch、Chrome 与仓库内 fixture 即可完成本章;Google 官方页面只在你主动核验时使用。
- 成本:本地路径直接成本为
$0;Cloud dry-run 固定network_calls=0且不创建资源。真实云操作需要另行人工审批、预算和当天资格核验。 - 隐私:只保存脱敏的布尔/状态/范围字段,不保存账号、项目号、账单、cookie、token、邮箱或个人经历原文。
证据
仓库当前机器证据(只读快照)
evidence/module-manifest-v1.json 中 01.evidence 指向当前文件:evidence/cloud-dry-run-v1.json。这是当前 checkout 的脱敏 dry-run 记录,只证明本地计划的参数、边界和 network_calls=0;它不证明 Google 账号资格、付费云训练或学习者已经完成本章。
隐私历史与产物扫描的补充记录为 evidence/privacy-history-local-v1.json。它只保存类别、路径、计数和脱敏状态;当前树扫描为 0 hit,但历史中的命中与缺少 CI 日志仍保持阻塞。
Google 权益与授权合同的本地补充记录为 evidence/google-gates-local-v1.json;官方 UI 脱敏观察的原始范围索引为 evidence/google-one-ui-readonly-v1.json。这两份记录只证明 UI 观察、脱敏字段、独立 approval 绑定和 fail-closed 校验器范围;不证明 Cloud billing、quota、云 job 或部署。
下一步
默认进入 第2章 · 面向大模型的现代 Python 与张量工程底座:补齐面向对象运算符重载、闭包、venv/pytest 和 NumPy 广播直觉,接着进入 第3章 · 大模型核心数学桥接与符号解码速查 解锁 15 大数学符号。已经具备扎实工程与数学直觉的读者,可以直接进 第4章 · 从导数到自动微分。云资格未核验不挡本地主线。