Inference Service

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

优势

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

核心功能

推理服务的直接模型部署

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

推理服务的应用

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

推理服务模板管理

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

推理服务的批量操作

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

推理体验

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

推理运行时支持

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

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

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

创建推理服务

第 1 步:进入模型仓库

在左侧导航栏点击 Model Repository

TIP

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

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

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

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

"Publish Inference Service" 按钮不可点击,进入 "File Management" 标签页,点击“编辑元数据”,根据实际模型信息选择 "Task Type""Framework"。(必须编辑默认分支的元数据才生效)

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

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

  1. 模板发布:

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

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

第 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 引入 模板发布 以快速部署推理服务。支持创建和删除模板(更新模板需新建)。

第 1 步:创建模板

  • 在左侧导航栏点击 Inference Service > Create Inference Service
  • 点击 自定义发布
  • 进入表单页面配置参数
  • 点击 创建模板

第 2 步:基于已有模板创建新模板

  • 在左侧导航栏点击 Inference Service > Create Inference Service
  • 选择模型并点击 模板名称
  • 根据需要编辑参数
  • 点击 创建模板 保存为新模板

第 3 步:删除模板

  • 在左侧导航栏点击 Inference Service > Create Inference Service
  • 在模板卡片上点击 操作 > 删除
  • 确认删除

推理服务更新

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

调用已发布推理服务

AML 提供可视化的 "推理体验" 方式,针对常见任务类型访问已发布推理服务;也可使用 HTTP API 方式调用推理服务。

推理体验

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

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

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

HTTP API 调用

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

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

  2. 点击 访问方式 标签页,获取集群内或集群外访问方式。集群内访问方式可直接从 Notebook 或该 K8s 集群内其他容器访问。若需从集群外(如本地笔记本)访问,则需使用集群外访问方式。

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

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

推理参数说明

调用推理服务时,可通过调整模型推理参数来调节模型输出效果。 在 推理体验 界面,预置了常用参数及默认值,也支持添加任意自定义参数。

不同任务类型的参数说明

文本生成

预设参数
参数数据类型说明
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,则以其为准。
min_lengthint最小生成 token 数。对应输入提示中的 token 数 + 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 值越大,对比惩罚越强,生成文本越符合预期。若设置过大,可能导致生成文本过于单一。
typical_pfloat局部典型性衡量预测下一个目标 token 的条件概率与预测下一个随机 token 的期望条件概率的相似度。若设置为小于 1 的浮点数,将保留概率加和达到或超过 typical_p 的最小局部典型 token 集合用于生成。
epsilon_cutofffloat若设置为 0 到 1 之间的浮点数,仅采样条件概率大于 epsilon_cutoff 的 token。建议值根据模型大小在 3e-4 到 9e-4 之间。
eta_cutofffloatEta 采样是局部典型采样和 epsilon 采样的混合。若设置为 0 到 1 之间的浮点数,仅考虑大于 eta_cutoff 或 sqrt(eta_cutoff) * exp(-entropy(softmax(next_token_logits))) 的 token。建议值根据模型大小在 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 或 List[str]用于指导图像生成时不应包含的内容。

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

文本分类

预设参数
参数数据类型说明
top_kint返回得分最高的类型标签数量。若提供的数字为 None 或超过模型配置中的标签数,默认返回所有标签数。
use_cachebool是否使用模型在生成过程中计算的中间结果。

更多参数请参考 Text Classification Parameter Configuration

其他参考

图像分类参数配置

对话参数配置

摘要参数配置

翻译参数配置

文本到文本生成参数配置

图像到图像参数配置