0Pricing
Learn AI with Python · 课时

加载和提供机器学习模型

启动时加载 joblib/keras 模型、线程安全的推理,以及批量预测端点。

加载和提供机器学习模型 是 CoddyKit 上的免费 Learn AI with Python 课时。 这是第 3 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 Learn AI with Python 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 Learn AI with Python 课程共包含 4 节课。

加载问题

从磁盘加载模型很慢。如果每个请求都重新加载模型,延迟会急剧上升。解决方法是:在启动时只加载一次模型,并让所有请求重复使用它。

启动事件

@app.on_event("startup") 钩子会在服务器启动时运行一次,非常适合在任何请求到达前加载模型。

from fastapi import FastAPI
import joblib

app = FastAPI()

@app.on_event("startup")
def load_model():
    app.state.model = joblib.load("model.joblib")

使用 app.state 进行线程安全存储

app.state 是存放模型等共享对象的推荐位置。对象在启动时存储一次,并且只在请求期间读取,从而避免可变模块级全局变量带来的问题。

from fastapi import Request

@app.post("/predict")
def predict(req: PredictRequest, request: Request):
    model = request.app.state.model
    return {"prediction": model.predict([req.features])[0]}

为什么不使用全局变量?

直接使用模块级全局变量虽然可行,但会将加载操作与导入时机耦合起来,也更难测试或替换。app.state 将对象的生命周期与应用绑定起来,更清晰,也是 FastAPI 推荐的模式。

现代 lifespan 方法

新版 FastAPI 使用 lifespan 上下文管理器取代 on_event,在同一个位置处理启动和关闭。

from contextlib import asynccontextmanager

@asynccontextmanager
async def lifespan(app):
    app.state.model = joblib.load("model.joblib")  # startup
    yield
    app.state.model = None                          # shutdown

app = FastAPI(lifespan=lifespan)

模型预热

第一次预测通常较慢,因为框架会在首次调用时延迟初始化。请在启动时使用一次虚拟预测来预热模型,这样第一个真实用户请求就能快速完成。

@app.on_event("startup")
def load_and_warm():
    app.state.model = joblib.load("model.joblib")
    app.state.model.predict([[0.0, 0.0, 0.0, 0.0]])  # warm-up

为什么预热很重要

没有预热时,部署后的第一个请求可能会慢许多倍,损害尾部延迟,甚至导致健康检查失败。在启动时执行一次虚拟推理,就能将这项开销移出关键路径。

批量预测端点

一次调用预测多行数据,比多次单独调用高效得多,因为模型可以对批次进行向量化处理。请接收特征向量列表,并返回预测结果列表。

class BatchRequest(BaseModel):
    items: list[list[float]]

@app.post("/predict/batch")
def predict_batch(req: BatchRequest, request: Request):
    model = request.app.state.model
    preds = model.predict(req.items)
    return {"predictions": preds.tolist()}

单条与批量

  • 单条:每次调用只处理一个输入,单次延迟最低,客户端也更简单。
  • 批量:一次处理多个输入,吞吐量高得多,适合离线评分。

同时提供两种方式,就能覆盖实时和批量处理场景。

在端点中读取状态

每个端点都通过 request.app.state.model 读取共享模型,绝不重复加载,因此所有请求共享同一个内存实例。

整合起来

生产就绪的设置方式是:在 lifespan/启动阶段加载并预热模型,将其存储在 app.state 中,并提供从状态中读取模型的单条和批量预测端点。这样可以最大限度降低延迟并提高吞吐量。

快速检查

请检验您对模型服务的掌握情况。

回顾

您已经通过 启动阶段/lifespan 只加载一次模型,将其存储在 app.state 中以便线程安全地重复使用,添加了一个预热虚拟预测,并提供了用于提高吞吐量的批量端点。下一步:将 API 容器化。

常见问题解答

「加载和提供机器学习模型」课时是免费的吗?

是的 — 「加载和提供机器学习模型」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 Learn AI with Python 课程的其余内容,请升级到 CoddyKit PRO。 Learn AI with Python 课程共包含 4 节课。

「加载和提供机器学习模型」这节课中我会学到什么?

启动时加载 joblib/keras 模型、线程安全的推理,以及批量预测端点。 你通过在浏览器中直接运行的动手代码来练习 Learn AI with Python,全天候 AI 导师会在你学习这节课的过程中回答你的问题。

学习 Learn AI with Python 需要有经验吗?

无需任何先前经验。CoddyKit 上的 Learn AI with Python 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 3 节课,共 4 节。

「加载和提供机器学习模型」课时需要多长时间?

大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。

我能在这节 Learn AI with Python 课中编写并运行代码吗?

能。每节 Learn AI with Python 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。

此课程中的所有课时

  1. 面向机器学习工程师的 FastAPI 基础
  2. 用于请求与响应的 Pydantic 模式
  3. 加载和提供机器学习模型
  4. 将模型 API 容器化
← 返回 Learn AI with Python