将模型部署为批量推理服务
模型准备完成后,您可以将模型部署为批量服务。在“模型部署>批量服务”界面,列举了用户所创建的批量服务。
前提条件
- 数据已完成准备:已在ModelArts中创建状态“正常”可用的模型。
- 准备好需要批量处理的数据,并上传至OBS目录。
- 已在OBS创建至少1个空的文件夹,用于存储输出的内容。
背景信息
- 用户最多可创建1000个批量服务。
- 根据模型定义的输入请求不同(JSON文本或文件),不同的模型输入,需要填写的参数不同。当模型输入为JSON文件时,则需要根据配置文件生成映射文件;如果模型输入为文件时,则不需要。
操作步骤
- 登录ModelArts管理控制台,在左侧导航栏中选择“模型部署 > 批量服务”,默认进入“批量服务”列表。
- 在批量服务列表中,单击左上角“部署”,进入“部署”页面。
- 在部署页面,填写批量服务相关参数。
- 填写基本信息。基本信息包含“名称”、“描述”。其中“名称”默认生成。例如:service-bc0d,您也可以根据实际情况填写“名称”和“描述”信息等。
- 填写服务参数。包含资源池、模型配置等关键信息。
表1 参数说明 参数名称
说明
“资源池”
“公共资源池”
公共资源池有CPU或GPU两种规格。如需使用,需联系管理员创建公共资源池。
“专属资源池”
您可以在资源池规格中选择对应的规格进行使用。
“模型来源”
根据您的实际情况选择“自定义模型”或者“订阅模型”。
“选择模型及版本”
选择状态“正常”的模型及版本。
“输入数据目录位置”
选择输入数据的OBS路径,即您上传数据的OBS目录。只能选择文件夹或“.manifest”文件。“.manifest”文件规范请参见Manifest文件规范。
说明:- 输入数据为图片时,建议单张图片小于12MB。
- 输入数据格式为csv时,建议不要包含中文。
- 输入数据格式为csv时,建议文件大小不超过12MB。
- 如果单张图片/csv文件超过文件12MB,会提示报错,建议调整文件大小使其符合要求,或联系技术支持人员调整文件大小限制。
“请求路径”
批量服务中调用模型的接口URL,表示服务的请求路径,此值来自模型配置文件中apis的url字段。
“映射关系”
如果模型输入是json格式时,系统将根据此模型对应的配置文件自动生成映射关系。如果模型的输入是文件,则不需要映射关系。
自动生成的映射关系文件,填写每个参数对应到csv单行数据的字段索引,索引index从0开始计数。
映射关系生成规则:映射规则来源于模型配置文件“config.json”中输入参数(request)。当“type”定义为“string/number/integer/boolean”基本类型时,需要配置映射规则参数,即index参数。请参见映射关系示例了解其规则。
index必须是从0开始的正整数,当index设置不规则不符时,最终的请求将忽略此参数。配置映射规则后,其对应的csv数据必须以英文半角逗号分隔。
“输出数据目录位置”
选择批量预测结果的保存位置,可以选择您创建的空文件夹。
“实例规格”
系统将根据您的模型匹配提供可用的计算资源。请在下拉框中选择可用资源,如果资源标识为售罄,表示暂无此资源。
例如,模型来源于自动学习项目,则计算资源将自动关联自动学习规格供使用。
“实例数”
设置当前版本模型的实例个数。如果节点个数设置为1,表示后台的计算模式是单机模式;如果节点个数设置大于1,表示后台的计算模式为分布式的。请根据实际编码情况选择计算模式。
“环境变量”
设置环境变量,注入环境变量到容器实例。为确保您的数据安全,在环境变量中,请勿输入敏感信息,如明文密码。
“部署超时时间”
用于设置单个模型实例的超时时间,包括部署和启动时间。默认值为20分钟,输入值必须在3到120之间。
“运行日志输出”
默认关闭,批量服务的运行日志仅存放在ModelArts日志系统,在服务详情页的“日志”支持简单查询。
如果开启此功能,批量服务的运行日志会输出存放到云日志服务LTS。LTS自动创建日志组和日志流,默认缓存7天内的运行日志。如需了解LTS专业日志管理功能,请参见云日志服务。
说明:- “运行日志输出”开启后,不支持关闭。
- LTS服务提供的日志查询和日志存储功能涉及计费,详细请参见了解LTS的计费规则。
- 请勿打印无用的audio日志文件,这会导致系统日志卡死,无法正常显示日志,可能会出现“Failed to load audio”的报错。
- 完成参数填写后,根据界面提示完成批量服务的部署。部署服务一般需要运行一段时间,根据您选择的数据量和资源不同,部署时间将耗时几分钟到几十分钟不等。
批量服务部署完成后,将立即启动,运行过程中将按照您选择的资源按需计费。
您可以前往批量服务列表,查看批量服务的基本情况。在批量服务列表中,刚部署的服务“状态”为“部署中”,当批量服务的“状态”变为“运行完成”时,表示服务部署完成。
- 文件名:“test.manifest”
- 文件内容:
{"source": "obs://test/data/1.jpg"} {"source": "s3://test/data/2.jpg"} {"source": "https://infers-data.obs.cn-north-1.myhuaweicloud.com:443/xgboosterdata/data.csv?AccessKeyId=2Q0V0TQ461N26DDL18RB&Expires=1550611914&Signature=wZBttZj5QZrReDhz1uDzwve8GpY%3D&x-obs-security-token=gQpzb3V0aGNoaW5hixvY8V9a1SnsxmGoHYmB1SArYMyqnQT-ZaMSxHvl68kKLAy5feYvLDM..."}
- 文件要求:
- 文件名后缀需为“.manifest”;
- 文件内容是多行JSON,每行JSON描述一个输入数据,需精确到文件,不能是文件夹;
- JSON内容需定义一个source字段,字段值是OBS的文件地址,有2种表达形式:
- 桶路径“<obs path>{{桶名}}/{{对象名}}/文件名”,适用于访问自己名下的OBS数据;您可以访问OBS服务的对象获取路径。<obs path>可以为“obs://”或“s3://”。
- OBS生成的分享链接,包含签名信息。适用于访问其他人的OBS数据。分享链接有效时间限制,请在有效时间内操作。
输出manifest文件样例
- 假设用户输出结果路径为/test-bucket/test/,则结果存放位置如下:
OBS桶/目录名 ├── test-bucket │ ├── test │ │ ├── infer-result-{{task_id}}.manifest │ │ ├── infer-result │ │ │ ├── 1.jpg_result.txt │ │ │ ├── 2.jpg_result.txt
- infer-result-0.manifest文件内容:
{"source": "obs://obs-data-bucket/test/data/1.jpg","result":"SUCCESSFUL","inference-loc": "obs://test-bucket/test/infer-result/1.jpg_result.txt"} {"source": "s3://obs-data-bucket/test/data/2.jpg","result":"FAILED","error_message": "Download file failed."} {"source ": "https://infers-data.obs.example.com:443/xgboosterdata/2.jpg?AccessKeyId=2Q0V0TQ461N26DDL18RB&Expires=1550611914&Signature=wZBttZj5QZrReDhz1uDzwve8GpY%3D&x-obs-security-token=gQpzb3V0aGNoaW5hixvY8V9a1SnsxmGoHYmB1SArYMyqnQT-ZaMSxHvl68kKLAy5feYvLDMNZWxzhBZ6Q-3HcoZMh9gISwQOVBwm4ZytB_m8sg1fL6isU7T3CnoL9jmvDGgT9VBC7dC1EyfSJrUcqfB_N0ykCsfrA1Tt_IQYZFDu_HyqVk-GunUcTVdDfWlCV3TrYcpmznZjliAnYUO89kAwCYGeRZsCsC0ePu4PHMsBvYV9gWmN9AUZIDn1sfRL4voBpwQnp6tnAgHW49y5a6hP2hCAoQ-95SpUriJ434QlymoeKfTHVMKOeZxZea-JxOvevOCGI5CcGehEJaz48sgH81UiHzl21zocNB_hpPfus2jY6KPglEJxMv6Kwmro-ZBXWuSJUDOnSYXI-3ciYjg9-h10b8W3sW1mOTFCWNGoWsd74it7l_5-7UUhoIeyPByO_REwkur2FOJsuMpGlRaPyglZxXm_jfdLFXobYtzZhbul4yWXga6oxTOkfcwykTOYH0NPoPRt5MYGYweOXXxFs3d5w2rd0y7p0QYhyTzIkk5CIz7FlWNapFISL7zdhsl8RfchTqESq94KgkeqatSF_iIvnYMW2r8P8x2k_eb6NJ7U_q5ztMbO9oWEcfr0D2f7n7Bl_nb2HIB_H9tjzKvqwngaimYhBbMRPfibvttW86GiwVP8vrC27FOn39Be9z2hSfJ_8pHej0yMlyNqZ481FQ5vWT_vFV3JHM-7I1ZB0_hIdaHfItm-J69cTfHSEOzt7DGaMIES1o7U3w%3D%3D","result":"SUCCESSFUL","inference-loc": "obs://test-bucket/test/infer-result/2.jpg_result.txt"}
- 文件格式:
- 文件名为“infer-result-{{task_id}}.manifest”,task_id为批量任务id,批量服务对应唯一的批量任务id。
- 当处理文件数目较多时,可能会有多个manifest文件,后缀相同,均为“.manifest”,文件名以后缀区分,例如“infer-result-{{task_id}}_1.manifest”等。
- manifest同一目录下会创建infer-result-{{task_id}}目录存放文件处理结果。
- 文件内容是多行JSON,每行JSON描述一个输入数据的对应输出结果。
- JSON内容包含多个字段。
- source:输入数据描述,与输入的manifest一致。
- result:文件处理结果,值为SUCCESSFUL或FAILED,分别代表成功与失败。
- inference-loc:输出结果路径,result为SUCCESSFUL时有此字段,格式为“obs://{{桶名}}/{{对象名}}”。
- error_message:错误信息,result为FAILED时有此字段。
映射关系示例
如下示例展示了配置文件、映射规则、csv数据以及最终推理请求的关系。
假设,您的模型所用配置文件,其apis参数如下所示:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 |
[ { "method": "post", "url": "/", "request": { "Content-type": "multipart/form-data", "data": { "type": "object", "properties": { "data": { "type": "object", "properties": { "req_data": { "type": "array", "items": [ { "type": "object", "properties": { "input_1": { "type": "number" }, "input_2": { "type": "number" }, "input_3": { "type": "number" }, "input_4": { "type": "number" } } } ] } } } } } } } ] |
此时,其对应的映射关系如下所示。ModelArts管理控制台将从配置文件中自动解析映射关系,如果您调用ModelArts API时,需要自行根据规则编写映射关系。
{ "type": "object", "properties": { "data": { "type": "object", "properties": { "req_data": { "type": "array", "items": [ { "type": "object", "properties": { "input_1": { "type": "number", "index": 0 }, "input_2": { "type": "number", "index": 1 }, "input_3": { "type": "number", "index": 2 }, "input_4": { "type": "number", "index": 3 } } } ] } } } } }
用户需要进行推理的数据,即CSV数据,格式如下所示。数据必须以英文逗号隔开。
5.1,3.5,1.4,0.2 4.9,3.0,1.4,0.2 4.7,3.2,1.3,0.2
根据定义好的映射关系,最终推理请求样例如下所示,与在线服务使用的格式类似:
{ "data": { "req_data": [{ "input_1": 5.1, "input_2": 3.5, "input_3": 1.4, "input_4": 0.2 }] } }
查看批量服务预测结果
当您在部署批量服务时,会选择输出数据目录位置,您可以查看“运行完成”状态的批量服务运行结果。
- 登录ModelArts管理控制台,在左侧菜单栏中选择“模型部署>批量服务”,进入“批量服务”管理页面。
- 单击状态为“运行完成”的目标服务名称,进入服务详情页面。
- 您可以查看服务的“名称”、“状态”、“服务ID”、“输入数据目录位置”、“输出数据目录位置”和“描述”。
- 您也可以通过单击描述右侧的,对描述信息进行编辑。
- 从“输出数据目录位置”参数右侧获取详细OBS地址,前往此OBS目录,可以获取批量服务预测结果,包括预测结果文件和模型预测结果。
如果预测成功,目录下有预测结果文件和模型预测结果;如果预测失败,目录下只有预测结果文件。
- 预测结果文件:文件格式为“xxx.manifest”,里面包含文件路径、预测结果等信息。
- 模型预测结果输出:
- 当输入为图片时,每张图片输出一个结果,输出结果格式为“图片名_result.txt”。例如:IMG_20180919_115016.jpg_result.txt。
- 当输入为音频时,每个音频输出一个结果,输出结果格式为“音频名_result.txt”。例如:1-36929-A-47.wav_result.txt。
- 当输入为表格数据时,输出结果格式为“表格名_result.txt”。例如:train.csv_result.txt。