CPU上での実行

Neuronコアによる推論高速化を体験する前に、一度CPU上での画像分類を実行してみます。

Inf1 インスタンスには、第2世代 Intel® Xeon® スケーラブルプロセッサが搭載されています。inf1.2xlargeに搭載されるvCPU数は8です。

Step 1. 推論実行 Python スクリプトを作成

以下の内容でinfer_resnet50_cpu.py というファイル名の推論実行 Python スクリプトを作成します。

import os
import time
import shutil
import numpy as np
import tensorflow as tf
import tensorflow.compat.v1.keras as keras
from tensorflow.keras.preprocessing import image
from tensorflow.keras.applications.resnet50 import ResNet50, preprocess_input, decode_predictions

# Instantiate Keras ResNet50 model
keras.backend.set_learning_phase(0)
tf.keras.backend.set_image_data_format('channels_last')
model = ResNet50(weights='imagenet') 

# Export SavedModel
model_dir = 'resnet50'
shutil.rmtree(model_dir, ignore_errors=True)

tf.saved_model.simple_save(
    session            = keras.backend.get_session(),
    export_dir         = model_dir,
    inputs             = {'input': model.inputs[0]},
    outputs            = {'output': model.outputs[0]})

# Create input from image
img_sgl = image.load_img('kitten_small.jpg', target_size=(224, 224))
img_arr = image.img_to_array(img_sgl)
img_arr2 = np.expand_dims(img_arr, axis=0)
img_arr3 = preprocess_input(img_arr2)

# Run inference, Display results
preds = model.predict(img_arr3)
print(decode_predictions(preds, top=5)[0])

Step 2. 入力イメージの準備

Keras Resnet-50モデルによる画像分類を実行するために、以下のサンプルイメージをダウンロードします。

curl -O https://raw.githubusercontent.com/awslabs/mxnet-model-server/master/docs/images/kitten_small.jpg

Step 3. 推論スクリプトを実行

CPU上でのモデル推論を実行するために、推論実行スクリプトinfer_resnet50_cpu.py を実行します。

python infer_resnet50_cpu.py

次の結果が取得されます。

[('n02123045', 'tabby', 0.68324643), ('n02127052', 'lynx', 0.12829497), ('n02123159', 'tiger_cat', 0.089623705), ('n02124075', 'Egyptian_cat', 0.06437764), ('n02128757', 'snow_leopard', 0.009918912)]

tabby は虎猫、lynx は大山猫です。