Python 现代开发学习笔记

(十三)把训练结果变成可解释的服务输入

上一章已经练过损失、梯度、批次和恢复训练。这次继续使用其中的 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。

笔记正文与全部题解 · Ctrl / ⌘ K