管理推理服务

推理服务功能的核心定义是将训练好的机器学习或深度学习模型部署为可在线调用的服务,使用 HTTP API 或 gRPC 等协议,使应用能够实时或批量使用模型的预测、分类、生成等能力。该功能主要解决模型训练完成后,如何高效、稳定、便捷地将模型部署到生产环境,并提供可扩展的在线服务。

优势

  • 简化模型部署流程,降低部署复杂度。
  • 提供高可用、高性能的在线和批量推理服务。
  • 支持动态模型更新和版本管理。
  • 实现模型推理服务的自动化运维与监控。

核心特性

推理服务的直接模型部署

  • 允许用户从 Model repository 中选择模型文件的特定版本,或直接从 PVC 挂载模型,并指定推理运行时镜像,以快速部署在线推理服务。系统会自动下载、缓存并加载模型,启动推理服务。这样可以简化模型部署流程,降低部署门槛。

推理服务应用

  • 将 Kubernetes 应用作为推理服务使用。该方式提供了更高的灵活性,允许用户根据自身需求自定义推理环境。

推理服务模板管理

  • 支持创建、管理和删除推理服务模板,允许用户基于预定义模板快速部署推理服务。

推理服务批量操作

  • 支持对多个推理服务执行批量操作,例如批量启动、停止、更新和删除。
  • 支持创建、监控和导出批量推理任务结果。
  • 提供批量资源管理,可批量分配和调整推理服务资源。

推理体验

  • 提供交互式界面,方便用户测试和体验推理服务。
  • 支持多种输入和输出格式,以满足不同应用场景的需求。
  • 提供模型性能评估工具,帮助用户优化模型部署。

推理运行时支持

  • 集成多种主流推理框架,例如 vLLM、Seldon MLServer 等,并支持用户自定义推理运行时。
TIP
  • vLLM:针对 DeepSeek/Qwen 等大语言模型(LLMs)进行了优化,具备高并发处理能力,并通过更优的资源利用率提升吞吐量。
  • MLServer:面向传统 ML 模型(XGBoost/图像分类)设计,提供多框架兼容性和更简化的调试体验。

访问方式、日志、Swagger、监控等

  • 提供多种访问方式,例如 HTTP API 和 gRPC。
  • 支持详细的日志记录和分析,便于用户排查问题。
  • 自动生成 Swagger 文档,便于用户集成和调用推理服务。
  • 提供实时监控和告警能力,确保服务稳定运行。

创建推理服务

步骤 1:进入推理服务创建页面

启动推理服务发布流程有两种方式:

  1. 从 Model Repository 进入:在左侧导航栏中,点击 Model Repository。点击目标模型名称进入模型详情页,然后点击右上角的 发布推理服务
  2. 从推理服务进入:在左侧导航栏中,点击 推理服务,然后点击 创建推理服务
TIP

自定义发布推理服务需要手动设置参数。你也可以通过组合输入参数创建一个“模板”,以便快速发布推理服务。

步骤 2:配置模型元数据(如需要)

如果你从 Model Repository 进入,并且 “发布推理服务” 按钮不可点击,请进入 “文件管理” 选项卡,点击“编辑元数据”,并根据实际模型信息选择 “任务类型”“框架”。(必须编辑默认分支的元数据后才会生效。)

步骤 3:选择发布模式并进行配置

进入 发布模式选择 页面。AML 提供 自定义发布模板发布 两种选项。

  1. 模板发布:

    • 选择模型并点击 模板名称
    • 进入模板发布表单,此时模板中的参数会预先加载,但也可以手动编辑
    • 点击 发布 以部署推理服务
  2. 自定义发布:

    • 点击 自定义发布
    • 进入自定义发布表单并配置参数,包括 模型位置(Model repository 或 PVC)。
    • 点击 发布 以部署推理服务

步骤 4:监控和管理推理服务

你可以在左侧导航栏的推理服务中查看已发布推理服务的状态、日志和其他详细信息。如果推理服务启动失败或运行资源不足,你可能需要更新或重新发布推理服务,并修改可能导致启动失败的配置。

注意: 推理服务会根据请求流量在“最小副本数”和“最大副本数”之间自动扩缩容。如果“最小副本数”设置为 0,当一段时间内没有请求时,推理服务会自动暂停并释放资源。此时如果有请求到来,推理服务可以自动启动并加载缓存于 PVC 中的模型。

AML 基于 kserve 的 InferenceService CRD 完成云原生推理服务的发布和运行。如果你熟悉 kserve 的使用,也可以在“直接从模型发布推理服务”时点击右上角的 “YAML” 按钮,直接修改 YAML 文件以完成更高级的发布操作。

模型发布参数说明

参数说明
名称必填,推理 API 的名称。
描述推理 API 的详细说明,用于解释其功能和用途。
模型位置必填,选择模型文件的来源:Model repositoryPVC
模型 PVC当模型位置为 PVC 时必填。选择一个包含模型文件的现有 PVC。
模型 PVC 路径当模型位置为 PVC 时必填。指定模型在 PVC 中所在的路径。
模型类型当模型位置为 PVC 时必填。在 Generative AI modelPredictive Model 之间选择。该选择将决定可用的 Runtimes。
模型当模型位置为 Model repository 时必填。用于推理的模型名称。
版本当模型位置为 Model repository 时必填。模型的版本。可选项包括 Branch 和 Tag。
推理运行时必填,用于推理运行时的引擎。当 Model TypeGenerative AI model 时,可使用 llm-d 进行分布式推理。
配置来源必填,选择部署资源的来源:Hardware profileCustom
硬件配置文件当配置来源为 Hardware profile 时必填。选择一个预定义的硬件配置文件,以配置所需资源。
请求 CPU当配置来源为 Custom 时必填。推理服务请求的 CPU 资源数量。
请求内存当配置来源为 Custom 时必填。推理服务请求的内存资源大小。
CPU 限制当配置来源为 Custom 时必填。推理服务可使用的最大 CPU 资源数量。
内存限制当配置来源为 Custom 时必填。推理服务可使用的最大内存资源大小。
GPU 加速类型当配置来源为 Custom 时可用。GPU 加速类型。
GPU 加速值当配置来源为 Custom 时可用。GPU 加速值。
存储容量当模型位置为 Model repository 时必填。用于缓存模型的临时存储容量大小。
自动扩缩容启用或禁用自动扩缩容功能。
实例数量必填,运行推理服务的实例数量。
环境变量注入到容器运行时环境中的键值对。
添加参数传递给容器入口可执行文件的参数。字符串数组(例如 ["--port=8080", "--batch_size=4"])。
启动命令覆盖容器镜像中的默认 ENTRYPOINT 指令。可执行文件 + 参数(例如 ["python", "serve.py"])。

推理服务模板管理

AML 引入了 模板发布,用于快速部署推理服务。你可以创建和删除模板(更新模板需要创建新的模板)。

步骤 1:创建模板

  • 在左侧导航栏中,点击 推理服务 > 创建推理服务
  • 点击 自定义发布
  • 进入表单页面并配置参数
  • 点击 创建模板

步骤 2:基于现有模板创建新模板

  • 在左侧导航栏中,点击 推理服务 > 创建推理服务
  • 选择模型并点击 模板名称
  • 按需编辑参数
  • 点击 创建模板,保存为新模板

步骤 3:删除模板

  • 在左侧导航栏中,点击 推理服务 > 创建推理服务
  • 在模板卡片上,点击 操作 > 删除
  • 确认删除

推理服务更新

  1. 在左侧导航栏中,点击 推理服务。
  2. 点击 推理服务名称。
  3. 在推理服务详情页右上角点击 操作 > 更新,进入更新页面。
  4. 修改必要字段并点击 更新。系统将执行滚动更新,以避免影响现有客户端请求。

调用已发布的推理服务

AML 提供了面向常见任务类型的可视化 “推理体验” 方式来访问已发布的推理服务;你也可以使用 HTTP API 方式调用推理服务。

推理体验

AML 支持以下任务类型的推理服务推理演示(任务类型在模型元数据中指定):

  • 文本生成
  • 文本分类
  • 图像分类
  • 文本生成图像

成功发布上述任务类型的推理服务后,你可以在模型详情页和推理服务详情页右侧显示 “推理体验” 对话框。根据推理任务类型的不同,输入和输出数据类型可能不同。以文本生成为例,输入文本后,模型生成的文本会以蓝色字体追加在文本框中已输入内容之后。 推理体验支持选择部署在不同集群中的不同推理服务,以及同一模型多次发布的推理服务。选择某个推理服务后,将调用该推理服务并返回推理结果。

通过 HTTP API 调用

发布推理服务后,你可以在应用或其他服务中调用该推理服务。本文档将以 Python 代码为例,展示如何调用已发布的推理 API。

  1. 在左侧导航栏中点击 推理服务 > 推理服务名称,进入推理服务详情页。

  2. 点击 访问方式 选项卡,获取集群内或集群外访问方式。集群内访问方式可以直接从该 K8s 集群中的 Notebook 或其他容器访问。如果需要从集群外部的位置(例如本地笔记本电脑)访问,则需要使用集群外访问方式。

  3. 点击调用示例查看示例代码。

    注意:调用示例中提供的代码仅支持使用 mlserver 运行时(Seldon MLServer)发布的推理服务所支持的 API 调用协议。此外,Swagger 选项卡也仅支持访问使用 mlserver 运行时发布的推理服务。

推理参数说明

调用推理服务时,你可以通过调整模型推理参数来改变模型输出效果。 在 推理体验 界面中,常用参数和默认值已预置,同时也可以添加任意自定义参数。

不同任务类型的参数说明

文本生成

预设参数
参数数据类型说明
do_samplebool是否使用采样;否则使用贪心解码。
max_new_tokensint生成的最大 token 数,忽略 prompt 中的 token。
repetition_penaltyfloat重复惩罚,用于控制生成文本中的重复内容;1.0 表示不重复,0 表示重复。
temperaturefloat生成文本时模型对下一个 token 的随机性;1.0 表示高随机性,0 表示低随机性。
top_kint在计算下一个 token 的概率分布时,仅考虑概率最高的前 k 个 token。
top_pfloat控制模型在选择下一个 token 时所考虑的累积概率分布。
use_cachebool是否使用生成过程中模型计算得到的中间结果。
其他参数
参数数据类型说明
max_lengthint生成 token 的最大数量。对应输入 prompt 中的 token 数 + max_new_tokens。如果设置了 max_new_tokens,则其效果会覆盖 max_length
min_lengthint生成 token 的最小数量。对应输入 prompt 中的 token 数 + min_new_tokens。如果设置了 min_new_tokens,则其效果会覆盖 min_length
min_new_tokensint生成 token 的最小数量,忽略 prompt 中的 token。
early_stopbool控制基于 beam 的方法的停止条件。True:当出现 num_beams 个完整候选项时停止生成。False:应用启发式方法,在不太可能找到更优候选项时停止生成。
num_beamsintbeam search 使用的 beam 数量。1 表示不使用 beam search。
max_timeint允许计算运行的最长时间,单位为秒。
num_beam_groupsintnum_beams 划分为多个组,以确保不同 beam 组之间的多样性。
diversity_penaltyfloat在启用 num_beam_groups 时生效。该参数会对组间施加多样性惩罚,以确保各组生成的内容尽可能不同。
penalty_alphafloatpenalty_alpha 大于 0 且 top_k 大于 1 时,会启用对比搜索。penalty_alpha 值越大,对比惩罚越强,生成的文本越有可能符合预期。如果 penalty_alpha 设得过大,可能会导致生成的文本过于单一。
typical_pfloat局部典型性衡量的是:在给定已生成的部分文本时,预测下一个目标 token 的条件概率与预测下一个随机 token 的期望条件概率之间的相似性。如果设置为小于 1 的浮点数,则会保留概率之和达到或超过 typical_p 的最小局部典型 token 集合用于生成。
epsilon_cutofffloat如果设置为严格介于 0 和 1 之间的浮点数,则仅对条件概率大于 epsilon_cutoff 的 token 进行采样。建议值范围为 3e-4 到 9e-4,具体取决于模型大小。
eta_cutofffloatEta 采样是局部典型采样和 epsilon 采样的混合。如果设置为严格介于 0 和 1 之间的浮点数,则只有当 token 大于 eta_cutoff 或 sqrt(eta_cutoff) _ exp(-entropy(softmax(next_token_logits))) 时才会被考虑。建议值范围为 3e-4 到 2e-3,具体取决于模型大小。
repetition_penaltyfloat重复惩罚参数。1.0 表示不施加惩罚。

更多参数请参考 Text Generation Parameter Configuration

文本生成图像

预设参数
参数数据类型说明
num_inference_stepsint去噪步骤数。更多的去噪步骤通常会生成更高质量的图像,但推理速度更慢。
use_cachebool是否使用生成过程中模型计算得到的中间结果。
其他参数
参数数据类型说明
heightint生成图像的高度,单位为像素。
widthint生成图像的宽度,单位为像素。
guidance_scalefloat用于调整生成图像质量与多样性之间的平衡。值越大,多样性越高,但质量会降低;建议范围为 7 到 8.5。
negative_promptstr or List[str]用于引导生成图像时不应包含的内容。

更多参数请参考 Text-to-Image Parameter Configuration

文本分类

预设参数
参数数据类型说明
top_kint最高评分的类型标签数量。如果提供的数量为 None,或者大于模型配置中可用的标签数量,则默认返回标签数量。
use_cachebool是否使用生成过程中模型计算得到的中间结果。

更多参数请参考 Text Classification Parameter Configuration

其他参考

Image Classification Parameter Configuration

Conversational Parameter Configuration

Summarization Parameter Configuration

Translation Parameter Configuration

Text2Text Generation Parameter Configuration

Image-to-Image Parameter Configuration