部署异步在线服务
在AI生成内容(AIGC)及复杂计算任务(如高清图像处理、长视频解析)广泛应用的业务场景中,传统同步请求-响应模式面临显著挑战:客户端需长时间等待任务完成易导致网络超时中断,服务端则因瞬时高并发请求承受巨大压力,且计算资源(如GPU)因同步等待产生空闲浪费。此类场景下,如何实现任务提交与结果获取的解耦,同时保障系统高可用性与资源高效利用成为关键问题。
ModelArts支持构建以"任务"为核心的异步推理服务,提供标准化接口实现任务异步提交、状态查询及结果获取,将长任务从同步阻塞流程中剥离,通过任务队列机制实现资源动态调度与负载均衡,从而在提升系统吞吐量与稳定性的同时,显著优化用户体验并降低单位计算成本。
本章节主要介绍如何在ModelArts部署模型为异步在线服务,并对部署成功的在线服务进行调用。如果是视频推理、大视频文件等,请按照本章节的指导,选择部署异步在线服务并调用。如果是图片、较小视频文件需要同步返回结果,请选择部署同步在线服务。
前提条件
- 已按照准备工作完成数据准备。
- 由于在线运行需消耗资源,确保账户未欠费。
注意事项
针对使用资源池部署的在线服务,服务处于“异常”或“停止”等状态时,也占用配额资源。如果发现配额不足,无法部署更多服务时,可先删除部分异常服务释放资源。
- 配额计算:
- 计量计算:
- SFS Turbo挂载:
在线服务使用SFS Turbo挂载时需要有预置操作,打通SFS Turbo所在VPC和专属资源池网络。
部署异步在线服务
- 登录ModelArts管理控制台,在左侧导航栏中选择“模型推理 > 在线推理”,默认进入“在线推理”列表。
- 在“在线服务”列表中,单击“部署服务”。
- 进入服务部署页面,配置如下关键参数,其他参数说明请见部署在线服务-服务信息。
表1 异步服务信息参数说明 参数
子参数
说明
基本信息
服务调用模式
选择“异步调用”。服务创建后,调用模式不支持修改。
单服务最大任务数
单个服务所能创建的最大任务数。范围为0-10000。任务状态为succeeded、failed、created_failed、start_failed、upgrade_failed、timeout、deleted均不占用任务配额数量。任务状态可通过调用“查看任务详情”API获取。
网络配置
服务协议
异步推理服务可选协议:HTTPS、HTTP。
异步服务当前不支持镜像流量。
更多配置
- 外网访问:在线服务是否允许外网访问。开启后允许外网访问服务,调用URL请在服务详情页查看在线服务调用信息。关闭后,不允许通过互联网访问在线服务。
- 内网接入免审批:在线服务内网连接是否需要审批。
开启后,三方用户的内网接入申请自动生效,无需审批。关闭后,需要审批。内网访问服务请参见通过内网访问在线服务。
- 访问管控:勾选后,可指定白名单或黑名单进行访问管控。
白名单:仅允许匹配的用户IP进行访问,最多支持添加10个正则表达式。
黑名单:仅不允许匹配的用户IP进行访问,最多支持添加10个正则表达式。
高可用配置
更多配置
- 请求大小限制(M):单个服务的请求大小限制,请求大小范围:1~50。单位:M。
- 请求超时时间(秒):服务预测请求超时时间。输入值必须在1到1200之间。单位:秒。
- 单击“下一步”,进行服务部署配置。关键参数如下,其他参数说明详情请见部署在线服务-部署配置。
表2 异步服务部署参数说明 参数
子参数
说明
资源配置
单副本最大任务并发数
当“服务调用模式”选择“异步调用”时需要设置此参数。
单个副本可同时处理的任务上限,取值范围为:1-100,只要任务没有从副本容器中删除掉,均会占用该配额。
- 单击“下一步”,在“部署在线服务>确认配置”页面,确认配置信息无误后,单击“确认部署”。
部署服务一般需要运行一段时间,根据您选择的数据量和资源不同,部署时间将耗时几分钟到几十分钟不等。
您可以前往在线服务列表,查看在线服务的基本情况。在线服务列表中,刚部署的服务“状态”为“部署中”,当在线服务的“状态”变为“运行中”时,表示服务部署完成。
在线服务部署完成后,将立即启动。服务状态为“运行中”,“告警”状态下正常运行实例正在产生费用,不使用时,请及时停止。
访问异步在线服务地址
在ModelArts管理控制台左侧导航栏中选择“模型推理 > 在线推理”,默认进入“在线推理”列表,单击目标服务的操作列的“服务调用”,查看调用信息。
|
类型 |
URL格式 |
URL示例 |
|---|---|---|
|
POST (创建任务) |
https://{公网调用地址}/v2/async-infer/{服务ID} |
https://100.XX.XXX.XXX/v2/async-infer/testxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/tasks |
|
DELETE (删除任务) |
https://{公网调用地址}/v2/async-infer/{服务ID}/{task_id} task_id:创建任务后返回。 |
https://100.XX.XXX.XXX/v2/async-infer/testxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/tasks/{task_id} |
|
GET (获取任务列表) |
https://{公网调用地址}/v2/async-infer/{公网调用地址}/tasks |
https://100.XX.XXX.XXX/v2/async-infer/testxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/tasks |
|
PUT (更新任务) |
https://{公网调用地址}/v2/async-infer/{公网调用地址}/tasks/{task_id} |
https://100.XX.XXX.XXX/v2/async-infer/testxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/tasks/{task_id} |
|
GET (查询任务详情) |
https://{公网调用地址}/v2/async-infer/{公网调用地址}/tasks/{task_id} |
https://100.XX.XXX.XXX/v2/async-infer/testxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/tasks/{task_id} |
|
POST (启动任务) |
https://{公网调用地址}/v2/async-infer/{公网调用地址}/tasks/{task_id}/start task_id:创建任务后返回。 |
https://100.XX.XXX.XXX/v2/async-infer/testxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/tasks/{task_id}/start |
|
POST (停止任务) |
https://{公网调用地址}/v2/async-infer/{公网调用地址}/tasks/{task_id}/stop task_id:创建任务后返回。 |
https://100.XX.XXX.XXX/v2/async-infer/testxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/tasks/{task_id}/stop |
调用异步在线服务
异步调用服务部署成功后,可以进入服务详情页面的调用页面,做简单的业务功能验证。服务调用页面提供简易的rest客户端功能,用户可以选择自己服务指定的请求方法,填写自己的预测路径。
在Params栏中,可以填写task_id等路径参数,也可以填写查询任务列表的limit、offset和status参数。
在Body栏中,选择对应的数据格式raw,用于发送原始文本数据,遵循接口规范,需要保证JSON格式正确。
在Headers中可以填写Header信息,比如api-key鉴权信息,将{API Key}替换为自己的API Key等。单击“调用”发送对应的调用请求。
如果删除Authorization 键值对,系统将自动切换为 IAM Token 认证。
预测页面的Body和请求头填写可参考ModelArts在线服务处于运行中时,如何填写request header和request body。
异步服务的状态会影响任务接口的调用。服务状态为“运行中”,“告警”,“升级中”,“异常”状态下才能够创建、更新、启动、停止任务,服务不处于“已删除”状态,均可以调用查询任务详情、查询任务列表、删除任务接口。
使用CloudShell调试在线服务实例容器
允许用户使用ModelArts控制台提供的CloudShell登录运行中在线服务实例容器。
只支持专属资源池部署的在线服务使用CloudShell访问容器。
- 登录ModelArts控制台,左侧菜单选择“模型推理 > 在线推理”。
- 在线服务列表页面单击“名称/ID”,进入在线服务详情页面。
- 单击CloudShell页签,选择部署、实例和Pod节点,当连接状态变为连接成功时,即登录实例容器成功。
如果遇到异常情况服务器主动断开或超过10分钟未操作自动断开,此时可单击“重新连接”重新登录实例容器。图2 CloudShell界面
部分用户登录Cloud Shell界面时,可能会出现路径显示异常情况,此时在Cloud Shell中单击回车键即可恢复正常。图3 路径异常
- 登录实例容器成功后,在容器的终端环境执行所需的调试命令。例如:
以下仅为示例,实际日志路径和服务状态检查方法和服务配置有关,以镜像和容器启动命令为准。
查看日志:
tail -f /var/log/app.log
检查服务状态:
systemctl status app
执行自定义脚本:
./debug_script.sh
- 完成调试后,使用以下命令退出容器:
exit
返回CloudShell终端后,您可以查看调试结果或日志文件。
删除服务
如果服务不再使用,您可以删除服务释放资源。
- 没有委托授权时,无法删除服务。
- 删除服务时,推荐同时删除LTS中的日志以及日志流,避免LTS日志流超过限额产生额外费用,如后续不再使用,建议删除。
删除操作无法恢复,请谨慎操作。
- 单击在线服务列表“操作”列的“更多>删除”,在弹框中一键输入DELETE,单击“确定”,删除服务。
- 勾选在线服务列表中的服务,然后单击列表左上角“删除”按钮,在弹框中一键输入DELETE,单击“确定”,批量删除服务。
- 单击目标服务名称,进入服务详情页面,单击右上角“删除”,在弹框中一键输入DELETE,单击“确定”,删除服务。