Machine Learning Platform for AI (PAI)-Blade は、最適化されたモデルを推論用にデプロイするために使用できる C++ 用 SDK を提供しています。このトピックでは、PAI-Blade が提供する SDK の使用方法について説明します。ここでは TensorFlow モデルを使用します。
前提条件
-
TensorFlow モデルが PAI-Blade を使用して最適化されていること。詳細については、「TensorFlow モデルを最適化する」をご参照ください。
-
SDK がインストールされ、認証トークンが取得されていること。詳細については、「Blade をインストールする」をご参照ください。このトピックでは GCC 4.8 を使用しているため、pre-cxx11 アプリケーションバイナリインタフェース (ABI) を使用する SDK が必要です。この例では、バージョン 3.7.0 の RPM Package Manager (RPM) パッケージを使用します。
説明PAI-Blade で最適化されたモデルを正しく実行するには、対応する SDK が必要です。
環境の準備
このトピックでは、PAI-Blade SDK を使用して TensorFlow モデルをデプロイし、推論する方法について説明します。この例では、CentOS 7 がインストールされています。
-
サーバーの準備
この例では、以下の構成の ECS インスタンスを使用します。
-
インスタンスタイプ: ecs.gn6i-c4g1.xlarge, T4 GPU
-
オペレーティングシステム: CentOS 7.9 64 ビット
-
デバイス: CUDA 10.0
-
GPU ドライバー: Driver 440.64.00
-
GPU コンピューティングアクセラレーションパッケージ: cuDNN 7.6.5
-
-
GCC のインストール
この例では、CentOS のデフォルトの GCC 4.8 を使用します。以下のコマンドを実行してインストールできます。
yum install -y gcc-c++ -
Python 3 のインストール
# pip のバージョンを更新します。 python3 -m pip install --upgrade pip # virtualenv をインストールして、仮想環境に TensorFlow をインストールします。 pip3 install virtualenv==16.0 python3 -m virtualenv venv # 重要!virtualenv をアクティブ化します。 source venv/bin/activate -
TensorFlow と関連ライブラリのインストール
TensorFlow モデル推論には通常、libtensorflow_framework.so と libtensorflow_cc.so の 2 つの動的ライブラリが必要です。本番環境では、libtensorflow_framework.so を含む TensorFlow Wheel パッケージをビルドする必要があります。このパッケージは、libtensorflow_cc.so と同じ構成、環境、およびコンパイラのバージョンを使用する必要があります。デモンストレーション目的のため、この例では TensorFlow のコミュニティ版とプリコンパイル済みライブラリファイルを使用します。これらのファイルは本番環境では使用しないでください。
# TensorFlow をインストールします。 pip3 install tensorflow-gpu==1.15.0 # libtensorflow_cc.so をダウンロードします。 wget http://pai-blade.oss-cn-zhangjiakou.aliyuncs.com/demo/sdk/tensorflow/libtensorflow_cc.so
推論用モデルのデプロイ
PAI-Blade SDK を使用して最適化されたモデルをロードし、推論用にデプロイするには、元のコードロジックを変更することなく、推論コードをコンパイルする際に SDK 内のライブラリをリンクできます。
-
モデルの準備
この例では、最適化されたサンプルモデルを使用します。以下のコマンドを実行してダウンロードできます。独自の最適化されたモデルを使用することもできます。詳細については、「TensorFlow モデルを最適化する」をご参照ください。
wget http://pai-blade.oss-cn-zhangjiakou.aliyuncs.com/demo/asr_frozen.pb -
推論コードのダウンロードと表示
PAI-Blade で最適化されたモデルは、通常の TensorFlow モデルと同じように実行されます。追加のコードや構成は必要ありません。以下のコマンドを実行して推論コードをダウンロードできます。
wget http://pai-blade.oss-cn-zhangjiakou.aliyuncs.com/demo/sdk/tensorflow/tf_sdk_demo.ccダウンロードされた tf_sdk_demo.cc ファイルには、TensorFlow 推論の一般的なロジックのみが含まれており、PAI-Blade 固有のコードは含まれていません。
-
コードをコンパイルできます。
PAI-Blade で最適化されたモデルを実行するには、SDK の /usr/local/lib サブディレクトリにある libtf_blade.so ファイルをリンクするだけで済みます。コンパイルコマンドは以下のとおりです。
# TensorFlow コンパイルフラグを取得します。 TF_COMPILE_FLAGS=$(python3 -c 'import tensorflow as tf; print(" ".join(tf.sysconfig.get_compile_flags()))') # TensorFlow リンクフラグを取得します。 TF_LD_FLAGS=$(python3 -c 'import tensorflow as tf; print(" ".join(tf.sysconfig.get_link_flags()))') # libtensorflow_cc.so は現在のフォルダにあります。 TF_CC_PATH='.' g++ -std=c++11 tf_sdk_demo.cc \ ${TF_COMPILE_FLAGS} \ ${TF_LD_FLAGS} \ -L ${TF_CC_PATH} \ -L /usr/local/lib \ -ltensorflow_cc \ -ltf_blade \ -ltao_ops \ -o demo_cpp_sdk.bin必要に応じて、以下のパラメーターを変更します。
-
tf_sdk_demo.cc: 推論コードファイルの名前。
-
/usr/local/lib: SDK のインストールパス。通常、変更する必要はありません。
-
demo_cpp_sdk.bin: コンパイル後に生成される実行可能プログラムの名前。
説明標準の TensorFlow Serving コンパイルと比較して、最適化演算子を含む PAI-Blade が提供する 2 つの .so ファイル (libtf_blade.so と libtao_ops.so) もリンクする必要があります。
-
-
ローカルデバイスでの推論用モデルの実行
以下のコマンドを使用して、コンパイル済みの実行可能プログラム (demo_cpp_sdk.bin) で PAI-Blade 最適化サンプルモデル (asr_frozen.pb) をロードして実行できます。
# 必須。値を取得するには PAI チームにお問い合わせください。 export BLADE_REGION=<region> # 必須。値を取得するには PAI チームにお問い合わせください。 export BLADE_TOKEN=<token> TF_LD_FLAGS=$(python3 -c 'import tensorflow as tf; print(" ".join(tf.sysconfig.get_link_flags()))') TF_FRAMEWORK_PATH=`echo $TF_LD_FLAGS | awk '{print $1}' | sed "s/-L//g"` LD_LIBRARY_PATH=${TF_FRAMEWORK_PATH}:${TF_CC_PATH}:/usr/local/lib:${LD_LIBRARY_PATH} ./demo_cpp_sdk.bin asr_frozen.pb必要に応じて、以下のパラメーターを置き換えます。
-
<region>: PAI-Blade がサポートされているリージョン。この情報を取得するには、PAI-Blade ユーザーグループに参加してください。ユーザーグループの QR コードについては、「認証トークンを取得する」をご参照ください。
-
<token>: 認証トークン。この情報を取得するには、PAI-Blade ユーザーグループに参加してください。ユーザーグループの QR コードについては、「認証トークンを取得する」をご参照ください。
-
/usr/local/lib: SDK のインストールディレクトリ。通常、変更する必要はありません。
-
demo_cpp_sdk.bin: 前のステップでコンパイルされた実行可能プログラム。
-
asr_frozen.pb: PAI-Blade で最適化された TensorFlow モデル。この例では、ステップ 1 でダウンロードしたサンプルモデルを使用します。
システムは以下のような出力を返し、モデルの実行が開始されたことを示します。
... 2020-11-20 16:41:41.263192: I demo_cpp_sdk.cpp:96] --- Execution uses: 41.995 ms 2020-11-20 16:41:41.305550: I demo_cpp_sdk.cpp:96] --- Execution uses: 42.334 ms 2020-11-20 16:41:41.347772: I demo_cpp_sdk.cpp:96] --- Execution uses: 42.195 ms 2020-11-20 16:41:41.390894: I demo_cpp_sdk.cpp:96] --- Execution uses: 43.09 ms 2020-11-20 16:41:41.434968: I demo_cpp_sdk.cpp:96] --- Execution uses: 44.047 ms ... -