Appearance
Google Cloud:小模型预训练 dry-run
⚠️ 本页内容仍有效,但不在顶级导航。
/cloud/不再是独立入口;本页是 第1章 环境审计 与 第18章 eval 与安全 中云门禁(eligibility 核验、smoke/full-run/service-deploy 三次独立授权、artifact chain)的配套说明,通常从这两章或 环境准备 进入。
这页只描述可以在本地真实生成的计划,不会访问 Google Cloud,也不会读取环境变量或凭据。它解决的是“怎样把本地已验证的 TinyGPT 重放成一个可审计的云 job”,不是“有会员就自动启动资源”。
先区分三件事
- Google AI Pro 计划权益:官方计划页面、地区、产品映射和额度会随时间变化;本页不把任何固定额度写成当前资格。必须把同一账号关联到 Google Developer Profile,并由本人在当天 UI 确认激活、适用产品、地区和有效期。
- Google Cloud billing / quota:credit、billing account、GPU quota 和 API 付费层是不同状态。任何一项不清楚,都只保留
unverified。 - 课程授权:即使资格为
eligible,smoke、full run、service deploy 仍是三次独立的一次性人工批准。
每个 approval 还绑定 action、route、region、资源形状、最大时长、gross 预算、operation_id 和计划资源名;任一计划字段被修改,ledger 都会拒绝消费原 approval。
本地计划
bash
export PYTHONPATH="$PWD/python"
python -m cloud_adapter \
--route cloud_run_job_cpu \
--region us-central1 \
--parameters 10000000 \
--tokens 5000000 \
--sequence-length 128 \
--steps 500 \
--max-hours 1 \
--eligibility unverified输出应包含 authorized=false、network_calls=0、operation_id、资源形状、步骤/Token/时长限制和研究估算。页面上的 operation_id 只是本地计划标识,不是 provider operation;研究估算不是报价,真正请求前必须重新读取官方 SKU、区域价格、quota 和个人 Cloud Billing UI。
Cloud Run 的官方价格按实际资源使用计费,Jobs 的实例生命周期也计费;免费量按 billing account 聚合,Cloud Build 与 Artifact Registry 另有计费表。dry-run 的训练数字不包含这些尾部成本,审批前必须把构建、存储、日志、网络和清理失败风险纳入 gross budget。
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;未核验或未授权时,本地结果不能标记为云端通过。
两条路线
| 路线 | 教学范围 | 默认决策 |
|---|---|---|
| Cloud Run Jobs CPU | 5–20M 参数、2–10M tokens、单 task、最多 12h | 默认;真实 forward/backward、checkpoint、清理 |
| Vertex AI T4 | 20–80M 参数、20–80M tokens、单 worker、最多 10h | 只有 quota、价格和批准都通过才用 |
两条路线都必须先在本地用同一 train_config_hash dry-run,并设置 steps、tokens、wall-clock 三重 deadline。服务验证只部署训练 job 产出的 checkpoint,不能用 hello-world 或第三方预训练权重替代。
Artifact chain
text
dataset hash + tokenizer hash + config hash
→ job execution ID
→ checkpoint hash + validation metrics hash
→ image digest
→ private service revision
→ authenticated /generate token comparisonpython/cloud_adapter/artifacts.py 会拒绝缺少真实 hash、execution ID、metrics hash、镜像 digest 或 revision 的链路;Service 还会回读 dataset/tokenizer descriptor、metrics 文件和 checkpoint 文件的 hash。ArtifactChain 是本地值对象,不会上传任何文件。
本地可以先跑与云 Job 相同的训练入口和私有服务契约(不需要 Docker,也不会联网):
bash
export PYTHONPATH="$PWD/python"
JOB_DIR="$(mktemp -d /tmp/learn-llm-job.XXXXXX)"
python - <<'PY' "$JOB_DIR/text.txt"
from pathlib import Path
import sys
Path(sys.argv[1]).write_text('abcabcabcabcabcabcabcabc' * 20, encoding='utf-8')
PY
python cloud/train_job/entrypoint.py \
--config configs/tiny-cpu.json \
--text "$JOB_DIR/text.txt" \
--output-dir "$JOB_DIR/artifacts" \
--job-execution-id exec-local-001 \
--max-seconds 30训练入口会真实执行随机初始化、backward、AdamW、checkpoint 和验证 loss, 并写出 metadata.json、metrics.json。它不会自动填入 image digest 或 service revision;这两个字段只有构建/部署后才能由真实 artifact read-back 绑定。cloud/service/app.py 在启动时拒绝缺少这条完整链路的 manifest,服务 smoke 还要求 SERVICE_AUTH_TOKEN,因此本地 fixture 不能伪装成已部署服务。
价格工具也故意要求调用者提供当天官方 SKU 读数:
bash
python cloud/scripts/estimate_cost.py \
--route cloud_run_job_cpu --region us-central1 --hours 1 \
--price-per-hour <official-readback> \
--price-as-of <YYYY-MM-DD> --price-source official-sku-readback
python cloud/scripts/cleanup_check.py --local-fixture缺少价格、价格日期或资源清单读回时,命令停止;研究估算和本地 fixture 都不构成 Google Cloud 资格、实际账单或清理通过证据。
通过与停止
eligibility=unverified|unavailable:计划可以生成,但任何真实云动作都必须停止。eligibility=eligible:只表示 UI 资格成立;仍需为当前 action 发行 approval。- 估算 gross 超过 8 美元、需要提高 quota、需要打开 auto-reload、资源不满足单 task/单 worker:停止并转人工。
- smoke 成功不能推出 full run;训练成功不能推出 Service 部署。
- 清理后要回读资源和 48 小时账单;站点只接收脱敏 manifest,不接收账号、项目号、token 或账单截图。
官方入口以本人当天核验时打开的 Google 官方页面(Developer Program、Google One、Gemini API、Colab、Cloud Run、Vertex AI 等定价/配额页面)为准;页面抓取日期和个人 UI 结论写入本地 evidence,不能直接写进公开站点。