Vengineerの戯言

人生は短いけど、長いです。人生を楽しみましょう!

AWS Neuron SDK : TensorFlow - Neuron (neuron.saved_model.compile)

@Vengineerの戯言 : Twitter
SystemVerilogの世界へようこそすべては、SystemC v0.9公開から始まった 

Neuron Compiler にて、TensorFlowモデルをコンパイルできるとありますが、SavedModelに関しては、TensorFlow-Neuron Compilation API にあるように、

  • tensorflow.neuron.saved_mode.compile

という API にて TensorFlow の中で SavedModel を Neuron Compiler にてコンパイルできます。このメソッドを実行すると、

INFO:tensorflow:Number of operations in TensorFlow session: 3978
INFO:tensorflow:Number of operations after tf.neuron optimizations: 555
INFO:tensorflow:Number of operations placed on Neuron runtime: 554

 のようなメッセージが表示されます。この例では、3978個のTensorFlowのOpを  tf.neuron最適化で 555個にし、Neuron runtime上では 554 個に置き換えたことを意味するようです。

ではどのようなコードを書けばいいのか?

import shutil
import tensorflow.neuron as tfn
saved_model_path = "<saved model path>"
compiled_saved_model_path = "<compiled saved model path>"
shutil.rmtree(compiled_saved_model_path, ignore_errors=True)
tfn.saved_model.compile(saved_model_path, compiled_saved_model_path)

 で、tensorflow.neuron の saved_model.compile にて、TensorFlowの SavedModel を Neuron の SavedModel に変換しています。

現時点でサポートしている Op は、ここ にあります。75種類のOpをサポートしています。

Neuron Compile が TensorFlowのSavedModelをコンパイルし、上記の compiled_saved_model にするとどうなるかというと、

Tutorial: Getting Started with TensorFlow-Neuron (ResNet-50 Tutorial)

から探っていきます。

 

pip.conf (WindowsのWSLのUbuntu上で、pyenv を使っているので、

~/.pyenv/versions/3.6.6/pip.conf に追加しました)

[global]
extra-index-url = https://pip.repos.neuron.amazonaws.com

を追加し、

pip install tensorflow-neuron

を実行して、TensorFlow - Neuron をインストール。

~/.pyenv/versions/3.6.6/lib/python3.6/site-packages ディレクトリの下に、

tensorflow

tensorflow_core

等がインストールされました。

tensorflow_core/python/neuron/__init__.py には、

from tensorflow.python.neuron.python import graph_util
from tensorflow.python.neuron.python import saved_model
from tensorflow.python.neuron.python import predictor
from tensorflow.python.neuron.python.fuse import fuse
from tensorflow.python.neuron.ops.gen_neuron_op import neuron_op

 とあるので、

tensorflow_core/python/neuron/python/saved_model.py が実体っぽい。

このファイルの中に、

@tf_export('neuron.saved_model.compile')
def convert_to_inference_model(model_dir, new_model_dir, batch_size=1,
model_shape_feed_dict=None, model_feed_dict=None,
tags=None, signature_def_key=None, strip_default_attrs=False,
**kwargs):

"""Convert a `SavedModel` to a Neuron-optimized `SavedModel`.

 がありました。ビンゴです。この convert_to_inference_model 関数をどんどん掘っていくと、compile_subgraph (tensorflow_core/python/neuran/python/graph_util.py) にて、neuron-cc コマンドをサブプロセスで起動して、TensorFlowのモデル(グラフ)をコンパイルしています。

 

今日は、ここまで。