手把手教你用ModelArts模型部署上线&在线推理(一)【我的华为云体验之旅】
前言
ModelArts是面向开发者的一站式AI开发平台,为机器学习与深度学习提供海量数据预处理及半自动化标注、大规模分布式Training、自动化模型生成,及端-边-云模型按需部署能力,帮助用户快速创建和部署模型,管理全周期AI工作流。
本文的主要目的是带想用ModelArts的同学过遍ModelArts的基础功能并部署属于你自己的模型在云上,并且能够本地通过python代码调API的方式在线推理【本文以tensorflow 1.13为例】。
模型部署阶段
1、模型格式要求
因为模型部署在云上需要在AI框架[tf/pytorch/mxnet]上再套一个serving框架,本文主要利用tensorflow框架,上层的serving框架会对tensorflow的saved model形式比较亲和[推理比较快],所以需要把模型先转成saved model格式的模型,可能的路线是pb--->saved model / ckpt --->saved model /h5--->saved model,具体转法同学们可以参考网上的教程~
最终生成的saved model文件树如下:
variables目录里如下:
值得注意的是,saved model.pb文件只包含了图,不包含权重,权重全部存在了variables目录下,如果同学们转换出来variables里面是空的,pb文件很大,是有问题的,应该是转换代码的问题。
2、配置文件编写
config.json:
如下是一个简单的config.json文件的内容,runtime 参数定义运行的ai引擎、和推理的环境,reques参数定义当通过request调用这个api时的格式,需要是form-data还是其他,传的是图片file还是string,response定义了推理完模型后返回给请求的格式,dependency是额外需要的一些依赖环境的配置。
具体的其他场景怎么编写可以参考官网文档:模型配置文件编写说明_AI开发平台ModelArts_推理部署_推理规范说明_模型包规范_华为云 (huaweicloud.com)
{
"model_type": "TensorFlow",
"model_algorithm": "test-resnet",
"runtime":"tf1.13-python3.6-cpu",
"apis": [{
"protocol": "http",
"url": "/",
"method": "post",
"request": {
"Content-type": "multipart/form-data",
"data": {
"type": "object",
"properties": {
"sentence": {
"type": "string"
}
}
}
},
"response": {
"Content-type": "applicaton/json",
"data": {
"type": "object",
"properties": {
}
}
}
}]
"dependencies": [{
"installer": "pip",
"packages": [{
"restraint": "EXACT",
"package_version": "1.1.5",
"package_name": "pandas"
},
2、customize_service.py编写
这部分主要是定义模型的数据前处理、后处理和推理的接口,以及返回什么内容应该怎么写,下模板是一个无需前后处理,返回QPS和推理结果、时间的例子,更详细的说明可以参考官方文档:模型推理代码编写说明_AI开发平台ModelArts_推理部署_推理规范说明_模型包规范_华为云 (huaweicloud.com)
import logging
import threading
import numpy as np
import os
import pandas as pd
import tensorflow as tf # 导入tensorflow
from PIL import Image
from model_service.tfserving_model_service import TfServingBaseService
from config import *
import time
logger = logging.getLogger()
logger.setLevel(logging.INFO)
class mnist_service(TfServingBaseService):
def __init__(self, model_name, model_path):
self.ctx = None
self.use_time = 0
def _preprocess(self, data):
return data
def _inference(self, data):
print('ready to infer')
time_list = []
start_time = time.time()
predict_result = self.sess.run(self.model_outputs, feed_dict=self.model_inputs)
time_list.append(time.time() - start_time)
use_time = np.mean(time_list)
result = {}
result['output'] = predict_result.tolist()
result['aver_use_time'] = use_time
result['QPS'] = 1 / use_time
return result
def _postprocess(self, data):
return data
3、打包上传OBS
将上述文件按如下图打包到一个文件夹里:
上传OBS:
4、模型部署
选择ModelArts里的模型管理---模型
然后在‘’我的模型‘’里选择‘’导入‘’,然后再模型创建界面中的‘元模型来源’选择从OBS导入,如下图,除了红框需要选择外,其他配置是读取config.json文件自动配置的,然后点击创建即可完成模型部署:
然后等到模型创建成功:
模型上线阶段
选择部署上线---在线服务---部署
选择把模型在什么样的资源下上线[gpu/cpu],选择刚才部署上去的模型,和版本号(如果多次部署的话),即可创建成功
等待在线服务部署完成会出现,‘运行中’,便是成功上线了:
- 点赞
- 收藏
- 关注作者
评论(0)