在复杂的模型推理场景中,例如AIGC、视频处理等场景,推理耗时较长,存在长连接超时导致请求失败或实例负载不均衡等问题,不适用于同步推理的场景。针对以上问题,PAI提供了异步推理服务,支持通过订阅或轮询的方式来获取推理结果。本文为您介绍如何使用异步推理服务。
实现原理
异步推理服务旨在帮助您快速地将同步推理服务增加异步推理能力。
异步服务的原理同异步推理及队列服务所述,但在结构上引入了子服务的概念。
在创建异步服务时,在单个服务内部将集成两个子服务,分别是推理子服务和队列子服务,队列子服务中拥有两个内置的消息队列,即输入(input)队列和输出(sink)队列。服务请求会先发送到队列子服务的输入队列中,推理子服务实例中的EAS服务框架会自动订阅队列以流式地获取请求数据,调用推理服务中的接口对收到的请求数据进行推理,并将响应结果写入到输出队列中。
当输出队列满时,即无法向输出队列中写入数据时,服务框架也会停止从输入队列中接收数据,避免无法将推理结果输出到输出队列。
如果您不需要输出队列,例如将推理结果直接输出到OSS或者您自己的消息中间件中,则可以在同步的HTTP推理接口中返回空,此时输出队列会被忽略。
创建异步推理服务
EAS的异步推理服务可以实现同步推理逻辑到异步推理的转换,创建异步推理服务的操作步骤如下。
-
准备服务的配置文件service.json。
-
部署方式为模型部署。
{ "processor": "pmml", "model_path": "http://example.oss-cn-shanghai.aliyuncs.com/models/lr.pmml", "metadata": { "name": "pmmlasync", "type": "Async", "cpu": 4, "instance": 1 } }
其中关键参数说明如下。
type:配置该参数为Async,即可创建异步推理服务。
-
部署方式为镜像部署。
{ "containers": [ { "image": "registry-vpc.cn-shanghai.aliyuncs.com/eas/eas-container-deploy-test:202010091755", "command": "/data/eas/ENV/bin/python /data/eas/app.py" "port": 8000, } ], "metadata": { "name": "imageasync", "type": "Async", "rpc.worker_threads": 4, "instance": 1, } }
其中关键参数说明如下。
-
type:配置该参数为Async,即可创建异步推理服务。
-
instance:预测子服务的实例数量,不包含队列子服务。
-
rpc.worker_threads:为异步推理服务中EAS服务框架的线程数,该参数与订阅队列数据的窗口大小一致。线程数设置为4,即一次最多只能从队列中订阅4条数据,在这4条数据处理完成前,队列不会给异步推理服务推送新数据。
例如:某视频流处理服务,单实例一次只能处理2条视频流,则该参数可以设置为2,队列最多将2个视频流的地址推送给异步推理服务,在异步推理服务返回结果前,不会再推送新的视频流地址。如果异步推理服务完成了其中一个视频流的处理并返回结果,则队列服务会继续再推送一个新的视频流地址给该服务实例,保证一个服务实例最多同时处理不超过2路视频流。
-
配置文件中的其他参数解释,详情请参见服务模型所有相关参数说明。
在创建异步推理服务时,为了方便您的使用和理解,会自动创建和metadata.name同名的服务分组,因此您可以认为除了配置了metadata.name以外,系统默认为您默认增加了配置项metadata.group。
创建异步推理服务时,队列服务会随异步推理服务自动创建,并集成到异步推理服务内。队列服务实例数默认为1,且会随推理服务实例数量动态伸缩,最大为2。单个实例占用资源默认为1核4 GB。如果队列服务默认配置不能满足你的需求,您可以参考队列服务参数配置及说明,进行配置。
-
-
创建服务。
您可以登录eascmd客户端后使用create命令创建异步推理服务,如何登录eascmd客户端,请参见下载并认证客户端,使用示例如下。
eascmd create service.json
访问异步推理服务
如上文的介绍,系统会默认为您创建和服务同名的服务分组,而且由于分组内的队列子服务拥有分组流量入口,因此可以直接通过下述路径访问队列。
地址类型 |
地址格式 |
示例 |
输入队列地址 |
|
|
输出队列地址 |
|
|
接下来的调用方式和访问队列服务中所述的相同,您只需按照上面的指引替换访问的路径。
管理异步服务
您可以像管理普通服务一样管理异步服务,异步服务的子服务会由系统自动管理。比如,当您删除异步服务时,队列子服务和预测子服务都将被同时删除,或者当您更新预测服务时,预测子服务将被更新而队列服务维持不变以获取最大的可用性。
由于采用了子服务架构,虽然您为异步预测服务配置了1个实例,但是由于队列子服务的存在,会在实例列表中看到额外的队列实例的存在。
异步服务的实例数量指的是预测实例的数量,队列服务的实例数量会随着预测子服务的实例数量自动变化。比如,当您扩容实例数量到3时,可以观察到队列子服务的实例数量扩容到了2。
两个子服务间的实例数量配比规则如下:
-
当异步预测服务被停止,则队列子服务和预测子服务的实例数量均会缩容到0,这时看到的实例列表为空。
-
当预测子服务的实例数量为1时,队列子服务的实例数量也将为1,除非您配置了队列服务的参数。
-
当预测子服务的实例数量超过2时,队列子服务的实例数量将保持为2,除非您配置了队列服务的参数。
-
当您配置了异步预测的自动扩缩容功能,且配置了最小的实例数量为0,则当预测子服务缩容到0时,队列服务将保持1个实例待命。
内容没看懂? 不太想学习?想快速解决? 有偿解决: 联系专家
阿里云企业补贴进行中: 马上申请
腾讯云限时活动1折起,即将结束: 马上收藏
同尘科技为腾讯云授权服务中心。
购买腾讯云产品享受折上折,更有现金返利:同意关联,立享优惠
转转请注明出处:https://www.yunxiaoer.com/162077.html