推理服务

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

优势

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

核心特性

推理服务直接模型部署

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

推理服务应用

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

推理服务模板管理

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

推理服务批量操作

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

推理体验

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

推理运行时支持

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

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

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

创建推理服务

第 1 步:进入模型仓库

在左侧导航栏中,点击 模型仓库

TIP

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

第 2 步:发起推理服务发布

点击模型名称进入模型详情页,然后点击右上角的 发布推理服务

第 3 步:配置模型元数据(如需要)

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

第 4 步:选择发布模式并进行配置

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

  1. 模板发布:

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

    • 点击 自定义发布
    • 进入自定义发布表单并配置参数
    • 点击 发布 即可部署推理服务

第 5 步:监控和管理推理服务

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

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

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

模型发布参数说明

参数说明
名称必填,推理 API 的名称。
描述对推理 API 的详细描述,说明其功能和用途。
模型必填,用于推理的模型名称。
版本必填,模型版本。可选项包括 Branch 和 Tag。
推理运行时必填,推理运行时所使用的引擎。
请求 CPU必填,推理服务请求的 CPU 资源量。
请求 Memory必填,推理服务请求的内存资源量。
限制 CPU必填,推理服务可使用的最大 CPU 资源量。
限制 Memory必填,推理服务可使用的最大内存资源量。
GPU 加速类型GPU 加速类型。
GPU 加速值GPU 加速值。
临时存储推理服务使用的临时存储空间。
挂载已有 PVC将现有的 Kubernetes Persistent Volume Claim(PVC)挂载为存储。
容量必填,临时存储或 PVC 的容量大小。
自动扩缩容启用或禁用自动扩缩容功能。
实例数量必填,运行推理服务的实例数量。
环境变量注入到容器运行环境中的键值对。
添加参数传递给容器入口可执行文件的参数。字符串数组(例如 ["--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. 点击 访问方式 选项卡,获取集群内或集群外访问方式。集群内访问方式可直接从 Notebook 或此 K8s 集群中的其他容器访问。如果需要从集群外部位置(例如本地笔记本电脑)访问,则需要使用集群外访问方式。

  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_new_tokens
min_lengthint生成的最小 token 数。对应输入 prompt 中的 token 数 + min_new_tokens。如果设置了 min_new_tokens,则其效果会覆盖 min_new_tokens
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