使用EAIS推理TensorFlow模型

EAIS实例成功绑定至ECS实例后,您需要远程登录该ECS实例,使用EAIS实例进行AI推理。本文为您介绍使用EAIS推理TensorFlow模型的具体操作。

前提条件

  • 已将EAIS实例绑定至ECS实例上。具体操作,请参见绑定实例

  • 已将您需要推理的TensorFlow模型文件放至已绑定EAIS实例的ECS实例客户端的目录下。

使用限制

  • Python版本:3.6~3.7。

  • TensorFlow版本:1.15.0~1.15.5。

操作步骤

  1. 登录并连接ECS实例。

    1. 登录EAIS控制台

    2. 在页面左上角选择实例所在地域。

    3. 在实例列表中,单击EAIS实例对应的ECS实例ID,进入该ECS实例控制台。

    4. 远程登录ECS实例。

      具体操作,请参见连接方式概述

  2. 搭建运行环境。

    1. 执行如下命令,将pip软件升级至最新版本。

      python3 -m pip install --upgrade pip
    2. 执行如下命令,安装TensorFlow。

      以TensorFlow版本为1.15.5为例。

      pip3 install tensorflow==1.15.5
    3. 执行如下命令,安装EAIS TensorFlow。

      pip3 install eais_tensorflow -f https://aiacc-inference-public.oss-cn-beijing.aliyuncs.com/eais/packages/index.html
    4. 执行如下命令,下载模型软件包。

      wget https://aiacc-inference-public.oss-cn-beijing.aliyuncs.com/eais/packages/eais2_example.tar
    5. 执行如下命令,解压软件包。

      tar xvf eais2_example.tar
  3. (可选)执行如下命令,查看EAIS实例的相关信息。

    eais_smi

    您可以查看EAIS实例规格、EAIS GPU使用率等,回显如下。eais_smi工具查看硬件信息

  4. 开发模型推理脚本并使用EAIS进行加速推理。

    • Python脚本开发说明

    相较于普通推理流程,您仅需要在进行推理前,在原有推理脚本的基础上添加一行import eais_tensorflow导入EAIS提供的Python模块,即可使用EAIS推理TensorFlow模型。

    假设您的TensorFlow模型推理初始源代码如下所示:

    # 导入tensorflow模块
    import tensorflow as tf
    
    model_file = "xxx.pb"
    
    with tf.gfile.FastGFile(model_file, 'rb') as f:
        graph_def = tf.GraphDef()
        graph_def.ParseFromString(f.read())
        tf.import_graph_def(graph_def, name='')
    
    with tf.Session() as sess:
        result = sess.run(...)

    如果您需要使用EAIS推理您的TensorFlow模型,请将源代码修改为如下内容:

    # 导入tensorflow模块
    import tensorflow as tf
    # 导入eais tensorflow模块
    import eais_tensorflow
    
    model_file = "xxx.pb"
    
    with tf.gfile.FastGFile(model_file, 'rb') as f:
        graph_def = tf.GraphDef()
        graph_def.ParseFromString(f.read())
        tf.import_graph_def(graph_def, name='')
    
    with tf.Session() as sess:
        result = sess.run(...)
    • 使用示例

      1. 准备模型推理Python脚本。

        本示例以resnet50模型推理、resnet50.py脚本为例,脚本内容如下:

        import tensorflow as tf
        import eais_tensorflow
        from tensorflow.core.protobuf import config_pb2
        from tensorflow.core.protobuf import rewriter_config_pb2
        import numpy as np
        from PIL import Image
        
        img = 'cat.jpg'
        
        def load_graph(model_path):
            with tf.gfile.FastGFile(model_path, "rb") as f:
                graph_def = tf.GraphDef()
                graph_def.ParseFromString(f.read())
                g_in = tf.import_graph_def(graph_def, name="")
            return g_in
        
        if __name__ == "__main__":
            shape = [1, 299, 299, 3]
            image = Image.open(img)
            image = image.resize((shape[2],shape[1]))
        
            image_data = np.array(image,dtype='float32')
            image_data /= 255.
            image_data = np.expand_dims(image_data, 0)
            image_input = image_data.repeat(shape[0],axis=0)
        
            model_path='resnet_v2_50.pb'
            input_name = 'input'
            output_name = 'classes'
            config = config_pb2.ConfigProto()
            config.graph_options.rewrite_options.remapping = (
              rewriter_config_pb2.RewriterConfig.OFF)
            session = tf.Session(graph=load_graph(model_path),config=config)
            logits_tensor = session.graph.get_tensor_by_name(output_name + ':0')
        
            logits = session.run(logits_tensor, feed_dict={input_name + ':0': image_input})
            print(logits[0])
      2. 执行如下命令,运行准备好的EAIS模型推理脚本。

        python3 resnet50.py