阿里云机器学习PAI EAS部署TensorFlow Model-阿里云开发者社区

开发者社区> 云服务技术课堂> 正文

阿里云机器学习PAI EAS部署TensorFlow Model

简介: 为了帮助用户更好的实现一站式端到端的算法应用,PAI平台针对在线推理场景提供了PAI EAS(Elastic Algorithm Service)在线预测服务,支持基于异构硬件(CPU/GPU)的模型加载和数据请求的实时响应。您可以通过在线部署功能将您的模型快速部署为Restful API,然后使用HTTP请求的方式进行调用。本文通过一个示例演示:TensorFlow(SavedModel)模型的在线部署及调用。

Step By Step

1、TensorFlow模型训练Code Sample

from tensorflow.examples.tutorials.mnist import input_data
mnist = input_data.read_data_sets("MNIST_data/", one_hot = True)
import tensorflow as tf

if __name__ == '__main__':
    x = tf.placeholder(tf.float32, [None,784], name="x")
    W = tf.Variable(tf.zeros([784,10]))
    b = tf.Variable(tf.zeros([10]))
    y = tf.nn.softmax(tf.matmul(x,W) + b, name="y")
    y_ = tf.placeholder(tf.float32, [None, 10])
    cross_entropy = tf.reduce_mean(-tf.reduce_sum(y_ * tf.log(y), reduction_indices=[1]))
    train_step = tf.train.GradientDescentOptimizer(0.5).minimize(cross_entropy)
    init = tf.initialize_all_variables()
    sess = tf.Session()
    sess.run(init)

    for i in range(1000):
        batch_xs, batch_ys = mnist.train.next_batch(100)
        sess.run(train_step, feed_dict={x: batch_xs, y_: batch_ys})
    correct_prediction = tf.equal(tf.argmax(y,1), tf.argmax(y_,1))
    accuracy = tf.reduce_mean(tf.cast(correct_prediction, tf.float32))
    print(sess.run(accuracy, feed_dict = {x: mnist.test.images, y_:mnist.test.labels}))
    saver = tf.train.Saver()
    tf.saved_model.simple_save(
        sess,
        "./savedmodel/",
        inputs={"image": x},   ## x是模型的输入变量
        outputs={"scores": y}  ## y是模型的输出
    )

注意:目前仅支持TensorFlow1.12和TensorFlow1.14,所以在训练模型的时候注意选择对应版本的TensorFlow。

2、模型导出保存打包
图片.png

图片.png

3、EAS控制台导入模型
图片.png
图片.png

图片.png

图片.png

4、获取模型信息

curl http://18482178.cn-shanghai.pai-eas.aliyuncs.com/api/predict/* -H 'Authorization:' | python -mjson.tool

图片.png

5、Python SDK调用

eas-prediction 包安装

测试:28*28=784规格图片下载地址

图片.png

Code Sample

#!/usr/bin/env python
from eas_prediction import PredictClient, TFRequest

import cv2
import numpy as np

with open('2.jpg', 'rb') as infile:
    buf = infile.read()
    # 使用numpy将字节流转换成array
    x = np.fromstring(buf, dtype='uint8')
    # 将读取到的array进行图片解码获得28 × 28的矩阵
    img = cv2.imdecode(x, cv2.IMREAD_UNCHANGED)
    # 由于预测服务API需要长度为784的一维向量将矩阵reshape成784
    img = np.reshape(img, 784)

if __name__ == '__main__':

    # http://1848217816******.cn-shanghai.pai-eas.aliyuncs.com/api/predict/tarotensor
    client = PredictClient('1848******.cn-shanghai.pai-eas.aliyuncs.com', 'tarotensor')
    #  注意上面的client = PredictClient()内填入的信息,是通过对调用信息窗口(下图)中获取的访问地址的拆分
    client.set_token('NjlmZDFjYzR*******')
    #  Token信息在“EAS控制台—服务列表—服务—调用信息—公网地址调用—Token”中获取
    client.init()

    req = TFRequest('serving_default') # signature_name 参数
    req.add_feed('image', [1, 784], TFRequest.DT_FLOAT, img)

    resp = client.predict(req)
    print(resp)

Result

outputs {
  key: "scores"
  value {
    dtype: DT_FLOAT
    array_shape {
      dim: 1
      dim: 10
    }
    float_val: 0.0
    float_val: 0.0
    float_val: 1.0
    float_val: 0.0
    float_val: 0.0
    float_val: 0.0
    float_val: 0.0
    float_val: 0.0
    float_val: 0.0
    float_val: 0.0
  }
}

参考链接

PAI-AutoLearning 图像分类使用教程
Tensorflow服务请求构造
TensorFlow模型导出示例

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

分享:

云服务技术课堂,各类技术课程、最佳实践输出,来好好听课吧!

官方博客