(十三)把训练结果变成可解释的服务输入
上一章已经练过损失、梯度、批次和恢复训练。这次继续使用其中的 reading.csv:240 条自拟记录,输入为阅读分钟数和次数,目标为完成页数。数据按“分钟数乘二、次数乘三,再加五和小幅扰动”生成,便于核对整条流程。
训练结束后的交付物需要能回答:输入的两列分别是什么;使用哪一组均值和标准差;权重属于哪种结构;这次数据是哪一份;接口实际加载了哪一版。只有一个 weights.pt,还不能回答这些问题。
| 环节 | 输入 | 输出或保留状态 |
|---|---|---|
| NumPy 准备数据 | CSV 与随机种子 | float32 数组、分组下标、训练统计量 |
| PyTorch 训练 | 处理后的数组 | 验证选中的权重、历史和最终评估 |
| 发布版本 | 本次权重与配套参数 | 完整版本目录及文件摘要 |
| 启动服务 | 版本目录 | 已装载的 Predictor 对象 |
| 预测请求 | minutes、sessions |
pages 与实际加载的 version |
进入 model_project,先安装,再运行训练与命令行预测。
# 在 model_project 中使用独立的 Python 3.12 环境。
uv sync --locked
uv run model-lab train --version v1
# 预测命令重新读取已发布的 v1,而不是复用训练函数中的对象。
uv run model-lab predict --minutes 35 --sessions 3
# 项目文件:model_project/pyproject.toml
# NumPy 准备数据,PyTorch 训练,FastAPI 读取已发布版本。
[build-system]
requires = ["setuptools>=80,<83"]
build-backend = "setuptools.build_meta"
[project]
name = "reading-model-delivery"
version = "0.1.0"
requires-python = ">=3.12,<3.13"
dependencies = ["numpy>=2.2,<3", "torch>=2.6,<3", "fastapi>=0.115,<1", "uvicorn>=0.34,<1", "httpx>=0.28,<1"]
[project.scripts]
model-lab = "modeldelivery.cli:main"
[dependency-groups]
dev = ["pytest>=9.1,<10"]
[tool.setuptools.packages.find]
where = ["src"]
[tool.pytest.ini_options]
testpaths = ["tests"]
addopts = "-ra --import-mode=importlib"
[[tool.uv.index]]
name = "pytorch-cpu"
url = "https://download.pytorch.org/whl/cpu"
explicit = true
[tool.uv.sources]
torch = { index = "pytorch-cpu" }CPU 版 PyTorch 的来源沿用上一章的配置;uv.lock 固定这一项目实际解析到的版本。命令入口见 cli.py,原始输入见 reading.csv。