准备工作:将镜像上传到SWR
在推理服务部署场景中,开发人员通常需要将训练好的模型封装为镜像进行部署,并将镜像上传至容器镜像服务SWR(SoftWare Repository for Container),利用其安全存储和版本管理能力,实现镜像的高效分发和推理服务的快速部署。
本节介绍如何将制作好的镜像上传到租户SWR,以便于部署推理服务。
镜像规范
部署服务用户镜像需要满足如下镜像规范。
- 镜像定义的推理接口支持的协议必须是HTTP、HTTPS、WS或WSS,接口协议为HTTPS或WSS时,支持开启TLS认证,参考推理服务开启TLS认证。
- 镜像定义的自定义监控采集指标接口支持的协议必须是HTTP或HTTPS,接口协议为HTTPS时,不支持开启双向认证。
- 镜像定义的HTTP请求健康检查方式的接口支持的协议必须是HTTP或HTTPS,接口协议为HTTPS时,不支持开启双向认证。
- 镜像定义的推理接口、自定义指标采集接口及健康检查接口支持单独配置接口协议与端口号,可提前在镜像中完成端口分配。
- 镜像定义的执行命令健康检查方式对命令无限制,可在镜像中按需设计。
- 在线服务支持代码、密钥挂载,如果镜像中有需要使用代码或密钥配置的地方,可提前在镜像中规划挂载路径。
- 在使用推理服务时,如果客户端预测请求超时或被取消,服务端(即您的推理实例)会接收到TCP连接断开信号(FIN包),这可能导致资源未及时清理。
自ascend-vllm推理框架T410-A3.7版本起,已在框架层面支持请求取消后的自动资源清理功能,您无需再手动处理。
由于早期版本缺乏框架级支持,开发者需通过监听连接断开事件实现资源释放。如果推理框架不是ascend-vllm推理框架T410-A3.7版本及以后的版本,建议在推理服务使用的HTTP服务器框架中监听连接断开事件,并在该事件发生时中断推理过程、释放计算资源(如GPU内存)。例如,在使用Python FastAPI时,您可以在路由处理函数中周期性地检查await request.is_disconnected(),一旦返回True,则立即退出推理。其他Web框架(如Flask、Tornado等)也有类似的机制。
步骤一 创建单节点CCE集群
此处直接用CCE集群来制作镜像,是因为CCE节点中默认已安装可用的Containerd。
如果希望使用已有的ECS制作镜像,则需要满足以下条件:
- CPU架构根据实际选择,镜像推荐选择EulerOS。
- 机器上已安装可用的Containerd。
若使用已有的ECS,后续关于CCE上的操作,改为在您已有的ECS上操作。
- 在CCE控制台创建一个Containerd容器的单节点CCE集群。
- 创建节点。
- 在左侧导航栏中选择“集群管理”,单击上一步创建的集群名称进入集群控制台。
- 在集群控制台左侧导航栏中选择“节点管理”,切换至“节点”页签并单击右上角的“创建节点”,在节点配置步骤中设置节点参数。更多参数说明请参见创建节点。
- 登录方式:选择密码,填入密码
- 存储配置:系统盘、数据盘大小保持默认50G、100G即可。
其它参数保持默认。
- 单击“下一步:规格确认”,阅读使用说明,确认无误后单击“提交”。
步骤二 创建镜像组织
进入容器镜像服务管理控制台,在总览页,单击右上角“创建组织”,填写组织名称,单击“确定”完成创建。
步骤三 在CCE节点中登录SWR
- 进入弹性公网EIP控制台,在弹性IP页面,单击“购买弹性公网IP”,创建一个临时使用的EIP。
详情请见获取EIP。
- 前往CCE服务控制台“集群管理”页面,单击集群名称进入集群详情页,单击“节点管理>节点”,单击步骤一 创建单节点CCE集群中创建的节点名称,在弹框中单击“确定”跳转至ECS服务。
- 切换至“弹性公网IP”页签,单击“绑定弹性公网IP”,在弹框中勾选前面创建的EIP,单击“确定”进行绑定。
- 使用PuTTY通过EIP,使用root用户登录CCE节点。具体操作请见登录节点。
图2 CCE节点登录成功
步骤四 上传推理镜像至CCE节点
- 将准备好的镜像加载到CCE节点。
ctr image import <镜像包名>
参数说明:
<镜像包名>:镜像包的名称,包含后缀名。例如:helloworld-aarch64_1.0.20250322104447.tar
示例:
ctr image import helloworld-aarch64_1.0.20250322104447.tar
图3 导入镜像包成功
- 给加载好的镜像包打tag。
ctr image tag <原始包路径> <新包路径>
参数说明:
原始包地址:通过ctr image list命令获取。例如:swr.example.myhuaweicloud.com/itep-test-mock/helloworld-aarch64:1.0.20250322104447。
图4 获取原始包路径
新包路径地址:局点SWR地址/组织名称/镜像名称/tag。例如:swr.ma-region-3.ma03.external.com/yrx/helloworld-aarch64:1.0.20250322104447。
示例:
ctr image tag swr.cn-north-7.myhuaweicloud.com/itep-test-mock/helloworld-aarch64:1.0.20250322104447 swr.ma-region-3.ma03.external.com/yrx/helloworld-aarch64:1.0.20250322104447
图5 镜像包打tag成功
步骤五 上传镜像到SWR
在CCE节点输入命令:
ctr image push --user <资源空间名>@<AK>:<登录密钥> <局点SWR地址>/<组织名称>/<镜像名称>:<tag>
参数说明:
- <资源空间名>:登录管理控制台,单击右上角您的用户名处,单击“个人设置”。在“资源空间列表”页签中查找当前区域对应的资源空间。例如:ma-region-3。
- <AK>的获取方法:
- 登录管理控制台,单击右上角您的用户名处,单击“个人设置”。
- 在“个人设置”页面,单击“管理访问密钥”页签。
- 单击“新增访问密钥”,新建AK/SK。
- 单击“确定”,自动下载访问密钥。
- 下载成功后,在“credentials”文件中即可获取AK和SK信息。
- <登录密钥>:登录一台linux系统的计算机,执行如下命令获取登录密钥。根据credentials文件中的AK和SK替换$AK和$SK。
printf "$AK" | openssl dgst -binary -sha256 -hmac "$SK" | od -An -vtx1 | sed 's/[ \n]//g' | sed 'N;s/\n//'
- <局点SWR地址>:填写对应局点的SWR地址。例如:swr.ma-region-3.ma03.external.com。
- <组织名称>:前面步骤中创建的组织名称。例如:yrx。
- <镜像名称>:<tag>:定义镜像名称。示例:helloworld-aarch64:1.0.20250322104447。
示例:
ctr image push --user ma-region-3_test_01@<AK>:<登录密钥> swr.ma-region-3.ma03.external.com/yrx/helloworld-aarch64:1.0.20250322104447
如果拉取/推送镜像报swr域名相关 x509: certificate has expired or is not yet valid,直接在push或pull命令最后加 -k规避。
下一步操作
部署模型为在线服务:在ModelArts部署模型为在线服务,并对部署成功的在线服务进行预测。
