@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のモデル(グラフ)をコンパイルしています。
今日は、ここまで。