「Intel® Distribution of OpenVINO™ Toolkit」AMIでEC2上にOpenVINO環境を構築してみた。

2021.10.06

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

せーのでございます。

最近、機械学習の推論環境でOpenVINOをよく使うのですが、最近使うmacをM1モデルに変えたおかげで環境構築が異様にしんどくなってしまいました。M1モデルはApple Siliconが搭載されており、Intelチップではないので、Intel製品であるOpenVINOを使うようにするのは大変。。。ちょっと考えれば当たり前の話なのですが、なんせ新しもの好きなもので、飛びついてしまいました。

なので手元にあるWindows機で今までOpenVINO環境を構築して作業していたのですが、Intel公式でOpenVINOのAMIがある、ということで早速構築してみました。

何がいいの?

手元にIntel機があるならそれを使えばいいじゃない、と思う方も多いと思います。しかし、クラウド環境を使う魅力の一つに「最新のハードを試せる」というものがあります。
新機能を搭載したハードが出るたびにPCを買い換えるのは現実的ではありませんが、AWSを使うのであれば単にインスタンスの変更一つで新しい機能がすぐに手元で使えるようになるわけですね。

Intelが去年発表した新機能に「Deep Learning Boost」というものがあります。簡単に言ってしまうと機械学習の推論を効率的に行える新しい命令セットのことです。VNNI、なんて言われたりします。

学習したモデルをリアルタイムで推論したい時にクラウド環境とのネットワークレイテンシが不安定になることを嫌って、エッジ製品に直接デプロイする「エッジAI」が最近の流行りです。
ここでエッジAIを実現するのに最大の壁はCPU、GPUのパワー不足で遅くなる、ということです。それをカバーするために、今まで32bitの浮動小数点で演算していた(FP32)モデルを8bitの整数で演算(INT8)するように変更するとモデルが軽くなっていい感じに動くのですが、FP32をINT8に効率的に変換するツールがOpenVINOにあるのです。めっちゃ使いたい。

しかしOpenVINOの変換ツールを使うにはVNNIが必要で、VNNIが搭載されているのはノートPCであれば「Tigar Lake」と言われる第11世代のIntelチップです。これが手元にない。
そこでEC2のC5インスタンスが浮かぶわけです。C5インスタンスにはIntel®Xeon®スケーラブルプロセッサという最新のチップが搭載されており、当然VNNIも使えます。このインスタンスにOpenVINOのAMIを載せればサクッと環境ができるのではないか、というのが最終的な目的です。

やってみた

それでは早速やってみましょう。作業自体は普通にEC2を建てるだけなので非常に簡単ですね。
まずはマネージメントコンソールのEC2からインスタンスを立ち上げます。マーケットプレイスより「openvino」で検索をして、OpenVINO Toolkit AMIを選択します。

適用しようとするとそれぞれのインスタンスごとの料金が表示されます。今回は推奨されているc5n.2xlargeを選択します。
ちなみにc5nのnはネットワークが強化されているバージョン、ということです。c5dだとストレージIOが強化されているという意味になります。

あとはデフォルトで構いません。繰り返し使う方はここでElastic IPをつけておくと良いかと思います。ストレージはとりあえず100GBつけておきます。

セキュリティグループはデフォルトでは22番(ssh)と8888番(Jupyter notebookアクセス用)がフルオープンになっています。心配な方は使うIPのみに制限しておきましょう。

キーペアを作ったらあとはローンチするだけです。

初回はディストリビューションのサブスクリプションに時間がかかる場合があります。気長に待っていると出来上がった時にメールが飛びますので放置しておきましょう。

しばらく待つと無事、インスタンスが立ち上がりました。

できたインスタンスのパブリックIPを使ってJupyter notebookを立ち上げてみましょう。URLは

http://[ec2-instance-public-ip]:8888

となります。

Jupyter notebookを開くためのパスワードを聞かれます。パスワードは立ち上げたインスタンスのインスタンスIDになります。

おおおお、Jupyter notebookが見えました!!

サンプルを動かしてみる

ひとまず動くかどうかサンプルを流してみましょう。サンプルはIntelが出しているgithubから取得します。今回は「inceptionv3」というKerasによる学習された画像分類モデルを使うnotebookをダウンロードして、notebookにアップロードしました。

これを上から実行してみます。

既にOpenVINO自体はインストールされていますがpipには入っていないようなので、頭にopenvino-devをインストールします。最近のpipは依存関係が厳しいのでargumentとして--use-feature=2020-resolverをつけてあげます。

model optimizerツールのコマンドスクリプトが効かなかったのでコマンドに拡張子をつけて実行します。

あとはひたすら実行。モデルをダウンロードして

model optimizerを使ってモデルを中間形式(IR)に変更

適当な画像を使って推論をかけます。

ベンチマークもあったのでついでに実行

37FPS!速い!!

まとめ

以上、OpenVINO AMIを使って環境を構築してみました。model optimizerだけならSageMakerでも使えたのですが、推論となるとそれなりに最適化された環境はやはり便利です。次はいよいよ本丸のVNNIを試してみたいと思います。

参考サイト