推理服务

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

优势

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

核心功能

用于推理服务的直接模型部署

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

用于推理服务的应用

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

推理服务模板管理

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

推理服务批量操作

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

推理体验

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

推理运行时支持

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

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

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

创建推理服务

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

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

  1. 从 Model repository 进入:在左侧导航栏中,单击 Model repository。单击目标模型名称进入模型详情页,然后在右上角单击 Publish Inference Service
  2. 从推理服务进入:在左侧导航栏中,单击 Inference Service,然后单击 Create Inference Service
TIP

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

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

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

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

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

  1. Template Publish:

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

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

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

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

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

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

模型发布参数说明

参数说明
Name必填,推理 API 的名称。
Description推理 API 的详细描述,用于说明其功能和用途。
Model Location必填,选择模型文件来源:Model repositoryPVC
Model PVC当 Model Location 为 PVC 时必填。选择包含模型文件的现有 PVC。
Model PVC Path当 Model Location 为 PVC 时必填。指定模型在 PVC 中所在的路径。
Model Type当 Model Location 为 PVC 时必填。可在 Generative AI modelPredictive Model 之间选择。此选择将决定可用的 Runtimes。
Model当 Model Location 为 Model repository 时必填。用于推理的模型名称。
Version当 Model Location 为 Model repository 时必填。模型版本。可选项包括 Branch 和 Tag。
Inference Runtimes必填,用于推理运行时的引擎。当 Model TypeGenerative AI model 时,可使用 llm-d 进行分布式推理。
Config Source必填,选择部署资源的来源:Hardware profileCustom
Hardware Profile当 Config Source 为 Hardware profile 时必填。选择一个预定义的硬件配置文件,以配置所需资源。
Requests CPU当 Config Source 为 Custom 时必填。推理服务请求的 CPU 资源量。
Requests Memory当 Config Source 为 Custom 时必填。推理服务请求的内存资源量。
Limits CPU当 Config Source 为 Custom 时必填。推理服务可使用的最大 CPU 资源量。
Limits Memory当 Config Source 为 Custom 时必填。推理服务可使用的最大内存资源量。
GPU Acceleration Type当 Config Source 为 Custom 时可用。GPU 加速类型。
GPU Acceleration Value当 Config Source 为 Custom 时可用。GPU 加速值。
Storage Capacity当 Model Location 为 Model repository 时必填。用于缓存模型的临时存储容量大小。
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 方式调用推理服务。

推理体验

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

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

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

通过 HTTP API 调用

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

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

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

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

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

推理参数说明

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

不同任务类型的参数说明

文本生成

预设参数
参数数据类型说明
do_samplebool是否使用采样;如果不使用,则采用贪心解码。
max_new_tokensint生成的最大 token 数量,不包括提示词中的 token。
repetition_penaltyfloat重复惩罚,用于控制生成文本中的重复内容;1.0 表示不重复,0 表示重复。
temperaturefloat生成文本时模型对下一个 token 的随机性;1.0 表示高随机性,0 表示低随机性。
top_kint在计算下一个 token 的概率分布时,只考虑概率最高的前 k 个 token。
top_pfloat控制模型在选择下一个 token 时所考虑的累积概率分布。
use_cachebool是否使用模型在生成过程中计算出的中间结果。
其他参数
参数数据类型说明
max_lengthint生成 token 的最大数量。对应输入提示词中的 token 数 + max_new_tokens。如果设置了 max_new_tokens,则其效果会覆盖 max_new_tokens
min_lengthint生成 token 的最小数量。对应输入提示词中的 token 数 + min_new_tokens。如果设置了 min_new_tokens,则其效果会覆盖 min_new_tokens
min_new_tokensint生成 token 的最小数量,不包括提示词中的 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 的浮点数,则会保留局部典型 token 概率之和达到或超过 typical_p 的最小集合用于生成。
epsilon_cutofffloat如果设置为严格介于 0 和 1 之间的浮点数,则仅对条件概率大于 epsilon_cutoff 的 token 进行采样。建议值范围为 3e-4 到 9e-4,具体取决于模型大小。
eta_cutofffloatEta sampling 是局部典型采样和 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