推理服务

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

优势

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

核心功能

直接部署模型到推理服务

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

将 Application 作为推理服务

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

推理服务模板管理

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

推理服务批量操作

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

推理体验

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

推理运行时支持

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

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

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

创建推理服务

第 1 步:进入模型仓库

在左侧导航栏中,点击 Model Repository

TIP

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

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

点击模型名称进入模型详情页,然后点击右上角的 Publish Inference Service

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

如果 "Publish Inference Service" 按钮不可点击,请进入 "File Management" 选项卡,点击 "Edit Metadata",并根据实际模型信息选择 "Task Type""Framework"。 (必须编辑默认分支的元数据才会生效。)

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

进入 Publish Mode Selection 页面。AML 提供 Custom PublishTemplate Publish 两种选项。

  1. Template Publish:

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

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

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

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

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

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

模型发布参数说明

参数说明
Name必填,推理 API 的名称。
Description推理 API 的详细描述,说明其功能和用途。
Model必填,用于推理的模型名称。
Version必填,模型版本。可选项包括 Branch 和 Tag。
Inference Runtimes必填,用于推理运行时的引擎。
Requests CPU必填,推理服务请求的 CPU 资源量。
Requests Memory必填,推理服务请求的内存资源量。
Limits CPU必填,推理服务可使用的 CPU 资源上限。
Limits Memory必填,推理服务可使用的内存资源上限。
GPU Acceleration TypeGPU 加速类型。
GPU Acceleration ValueGPU 加速值。
Temporary storage推理服务使用的临时存储空间。
Mount existing PVC将现有的 Kubernetes Persistent Volume Claim (PVC) 挂载为存储。
Capacity必填,临时存储或 PVC 的容量大小。
Auto scaling启用或禁用自动扩缩容功能。
Number of instances必填,运行推理服务的实例数量。
Environment variables注入到容器运行时环境中的键值对。
Add parameters传递给容器入口可执行文件的参数。字符串数组(例如 ["--port=8080", "--batch_size=4"])。
Startup command覆盖容器镜像中的默认 ENTRYPOINT 指令。可执行文件 + 参数(例如 ["python", "serve.py"])

推理服务模板管理

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

第 1 步:创建模板

  • 在左侧导航栏中,点击 Inference Service > Create Inference Service
  • 点击 Custom Publish
  • 进入表单页面并配置参数
  • 点击 Create Template

第 2 步:基于现有内容创建新模板

  • 在左侧导航栏中,点击 Inference Service > Create Inference Service
  • 选择模型并点击 Template Name
  • 按需编辑参数
  • 点击 Create Template 保存为新模板

第 3 步:删除模板

  • 在左侧导航栏中,点击 Inference Service > Create Inference Service
  • 在模板卡片上,点击 Actions > Delete
  • 确认删除

更新推理服务

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

调用已发布的推理服务

AML 为常见任务类型提供了可视化的 "Inference Experience" 方式来访问已发布的推理服务;你也可以使用 HTTP API 方式调用推理服务。

Inference Experience

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

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

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

通过 HTTP API 调用

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

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

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

  3. 点击 Call Example 查看示例代码。

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

推理参数说明

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

不同任务类型的参数说明

文本生成

预设参数
参数数据类型说明
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 时启用 contrastive search。penalty_alpha 值越大,对比惩罚越强,生成的文本越有可能符合预期。如果 penalty_alpha 设置过大,可能会导致生成的文本过于单一。
typical_pfloatlocal typicality 衡量预测下一个目标 token 的条件概率与基于已生成部分文本预测下一个随机 token 的期望条件概率之间的相似性。如果设置为小于 1 的浮点数,则会保留概率累加达到或超过 typical_p 的最小局部典型 token 集合用于生成。
epsilon_cutofffloat如果设置为严格介于 0 和 1 之间的浮点数,则仅对条件概率大于 epsilon_cutoff 的 token 进行采样。建议值范围为 3e-4 到 9e-4,具体取决于模型大小。
eta_cutofffloatEta sampling 是 local typical sampling 和 epsilon sampling 的混合方式。如果设置为严格介于 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