背景
机器学习模型的在线推理在生产实践中扮演着非常重要的角色,从典型的互联网场景中的搜索,广告,推荐的召回排序,到实时的图像识别,语音识别,文本处理等领域,都需要涉及到模型的在线推理,从简单的逻辑回归模型到复杂的深度学习模型,从 CPU 到 GPU加速,Aliyun 推出的 EAS 模型推理平台在云原生模型推理领域深耕多年,旨在打造一个开放的高性能云原生模型推理平台,能够覆盖经典机器学习模型和深度学习模型对于在线推理的不同诉求,借助于阿里云的弹性底座来实现资源的动态弹性伸缩,降低用户成本。在推理引擎层面,EAS除自研的推理引擎支持外,同样兼容并包,支持诸如 Tensorflow Serving,Triton 等优秀的第三方推理引擎,本文我们将介绍如何使用 Nvidia 开源的Triton 推理引擎来部署服务到 EAS 上,以利用云原生推理平台的能力,更好地服务业务。
EAS 架构
EAS 在底层支持 CPU/GPU 等异常计算资源,上层基于 kubernetes 进行容器化资源管理和调度,在引擎层面上提供了基础的微服务接口,用户可以使用多种语言来开发推理微服务,实际上有很多用户对于该层微服务接口的使用也不再局限于模型推理,而是可以将更多业务逻辑的实现以该接口来实现。同时 EAS 也拥有一套自研的推理引擎和服务编排引擎,来实现复杂的流式的服务编排,特别是在视频和语音处理场景中,流式的架构能够极大提升服务性能。除自研的引擎和推理框架之外,EAS 也支持以自定义 docker 镜像的方式来部署服务,为用户提供足够的灵活性,基于该能力可以非常方便将开源的推理引擎部署到 EAS 平台上,如 Tensorflow Serving,Triton 等,能够快速满足已经使用这些引擎来部署过服务的用户快速迁移到云上。本文会以 Triton 为例介绍如何使用第三方推理引擎在云端部署模型推理服务。
服务部署
EAS 提供了 web 管理控制台可以对模型服务进行部署和管理,以及在线查看服务的监控日志等数据,同样 EAS 也提供了一个全功能的客户端工具 eascmd(https://help.aliyun.com/document_detail/195363.html),可以通过该工具实现对服务的部署和管理等操作,同时,所有的操作都有配套的openapi(https://help.aliyun.com/document_detail/412076.html)可以供用户更好地与自己的生产流程或内部业务平台做集成,本文中我们会以eascmd为例介绍如何部署 Triton 服务到 EAS 平台中。
在使用 eascmd 部署服务时,我们需要准备一个 json 格式的服务描述的配置文件,如下所示,相关参数说明在 eascmd 的使用文档中有详细介绍:
{
"name": "triton_test",
"processor": "triton",
"processor_params": [
"--model-repository=oss://triton-model-repo/models",
"--allow-http=true"
],
"metadata": {
"instance": 1,
"cpu": 4,
"gpu": 1,
"memory": 10000,
"resource":""
}
}
eas 中有一个概念为 processor,其含义为进去模型推理所需要执行的推理逻辑,EAS 平台基于自研的引擎提供了多种内置的 processor,同时也将三方引擎包装为 processor,如本例中 triton 即为一个 processor。使用如下命令即可在云端部署一个模型服务:
eascmd create service.json
服务管理及监控
使用 eascmd 或者控制台可以对服务进行查询管理运维等操作,如下界面为 eas 控制台,可对服务和资源进行全方位的管理
同时 eas 对每个服务采集了非常详尽的业务指标和系统指标以及支持用户自定义指标,可用于监控展示和告警,以及进行弹性伸缩。
高级功能介绍
EAS 提供了较多高级功能,包括微服务体系中的蓝绿发布,灰度发布,服务分组等功能,用户在模型部署过程中仅需提供模型文件,部署过程会自动构建镜像并进行部署,完成微服务化,并在集群内部服务之间互访时提供高效的内部通信接口等。接下来重点介绍一下较为重要的弹性伸缩功能,以及EAS在网络通信方面所做的优化。
自动水平扩缩容
在模型推理服务过程中,用户最为关注的除了性能之外往往是成本,而弹性是降低成本的很好的方式,这也是云端服务部署的独特优化,EAS 为用户提供了多种弹性伸缩的方式,包括支持系统指标如通用的 QPS,CPU Utilization 等,也包括用户自定义指标,借助于 EAS 的服务引擎和自研的Metrics Server,可以实例基于任意指标的弹性伸缩,同时EAS 也将指标以API的方式开放给外部用户,用户可以结合服务管控的 OpenAPI 来自定义弹性伸缩。
下图为一个开启了基于 CPU Ultilization 弹性伸缩的服务的监控页面,可以看到随着QPS曲线的上下波动,服务的实例个数以同样的趋势在上下波动,而 CPU Utilization 始终维持在预设置的 33% 左右,打开弹性伸缩后该服务能够节省 50% 的计算资源。不同服务的业务特点不同,流量低谷时长长于流量高峰的服务打开弹性伸缩后可以节省更多的计算资源。
直连的网络通信方式
EAS 通过打通用户 VPC 和 EAS 服务端的网络实现了服务的跨域直连请求,不再需要4层和 7 层的 Load Balancer,一方面避免了网关和 Load Balancer 带宽的限制,提升可扩展性,另一方面省掉了两次转发可以提供更好的通信性能。EAS 同时也支持经典的网关访问模式,提供了公网网关和内网网关,以及刚才提供到跨域直连三种访问方式,可供用户灵活选择,目前 EAS 的客户中大量的生产服务都使用直连的方式来进行服务访问。
上图为一个简单的网络架构图,EAS 提供了一个用于服务发现的 Service,配合该 Service 以及连通的网络,我们要以非常方便地在客户端通过软负载的方式直连到服务端发送请求,该架构下服务端的处理性能可以实现线性扩展。
关于PAI-EAS更多详细的功能,请参考文档:https://help.aliyun.com/document_detail/113696.html