第 9 章 选择部署选项 选择部署选项
本作品已使用人工智能进行翻译。欢迎您提供反馈和意见:translation-feedback@oreilly.com
前几章介绍了从产品构思到 ML 实现的过程,以及在准备部署之前迭代此应用程序的方法。
本章将介绍不同的部署方案以及每种方案之间的权衡。不同的部署方法适合不同的需求。在考虑选择哪一种时,你需要考虑多种因素,如延迟、硬件和网络要求,以及隐私、成本和复杂性等问题。
部署模型的目的是让用户与之交互。我们将介绍实现这一目标的常用方法,以及在部署模型时决定不同方法的技巧。
我们将从部署模型和启动网络服务器提供预测服务的最简单方法开始。
服务器端部署
服务器端部署 包括设置一个网络服务器,该服务器可以接受客户端的请求,通过推理管道运行请求并返回结果。这种解决方案符合网络开发模式,因为它将模型视为应用程序中的另一个端点。用户向这个端点发送请求,并期待结果。
服务器端模型有两种常见的工作负载:流式和批处理。流式工作流在收到请求时立即进行处理。批处理工作流的运行频率较低,会一次性处理大量请求。我们先来看看流式工作流。
流媒体应用程序或应用程序接口
流方法将模型视为用户可以发送请求的端点。在这种情况下,用户可以是应用程序的终端用户,也可以是依赖于模型预测的内部服务。例如,预测网站流量的模型可用于内部服务,该内部服务负责调整服务器数量,以满足预测的用户量。
在流应用程序中,请求的代码路径会经过一系列步骤,这些步骤与我们在"从简单管道开始 "中介绍的推理管道相同。作为提示,这些步骤是
-
验证请求。验证传递的参数值,并检查用户是否拥有运行该模型的正确权限。
-
收集其他数据。查询其他数据源,以获取我们可能需要的其他数据,例如与用户相关的信息。
-
预处理数据。
-
运行模型。
-
对结果进行后处理。验证结果是否在可接受范围内。添加上下文,使用户能够理解,例如解释模型的置信度。
-
返回结果。
图 9-1 展示了这一系列步骤。
图 9-1. 流 API 工作流程
端点方法实施迅速,但需要基础设施与当前用户数量成线性扩展,因为每个用户都会导致单独的推理调用。如果流量的增加超出了服务器处理请求的能力,请求就会开始延迟甚至失败。因此,要使这种管道适应流量模式,就必须能够轻松启动和关闭新的服务器,这就需要一定程度的自动化。
不过,对于像 ML 编辑器这样一次只有少数用户访问的简单演示,流式方法通常是个不错的选择。为了部署 ML Editor,我们使用了Flask 等轻量级 Python 网络应用程序,只需几行代码,就能轻松设置 API,为模型提供服务。
您可以在本书的GitHub 代码库中找到原型的部署代码,但我在这里将给出一个高层次的概述。Flask 应用程序由两部分组成,一个是接收请求并将其发送到模型中使用 Flask 进行处理的 API,另一个是用 HTML 构建的简单网站,供用户输入文本并显示结果。定义这样一个应用程序接口不需要太多代码。在这里,您可以看到两个函数,它们处理了 ML 编辑器 v3 的大部分工作:
fromflaskimportFlask,render_template,request@app.route("/v3",methods=["POST","GET"])defv3 ...