TensorFlowのCPU命令セット警告、AWSでどのインスタンス使えばいいか

  • AWS
  • TensorFlow
  • EC2
  • SageMaker

この記事は、構成と文章の整理にAIを使っています。
あくまで読みやすくするための補助で、内容そのものをAIにすべて任せて書いているわけではありませんが、ところどころ相談しながら整えています。

TensorFlowを動かすと出てくるこの警告、意味を調べたのでメモ。

This TensorFlow binary is optimized to use available CPU instructions.
To enable the following instructions: SSE4.1 SSE4.2 AVX AVX2 AVX512F FMA,
in other operations, rebuild TensorFlow with the appropriate compiler flags.

警告の意味

TensorFlowのバイナリは一部の演算(パフォーマンスが重要な箇所)でSSE4.1やAVXなどのCPU命令セットをすでに使ってる。ただ、それ以外の演算では使ってない。全部の演算でこれらの命令セットを使いたいなら、コンパイラフラグを指定してソースからビルドし直す必要がある、という案内。

エラーではなく、あくまで「もっと速くできる余地がある」という情報メッセージ。

CPU最適化を活かせるAWSインスタンスタイプ

SSE4.1/SSE4.2/AVX/AVX2/AVX512F/FMAをフル活用したい場合、これらの命令セットに対応したCPUを積んでるインスタンスを選ぶ必要がある。

  • C5 / C5d / C5n: コンピューティング最適化。Intel Xeon Platinum 8000番台(Skylake-SPやCascade Lake)を採用していて、AVX-512に対応してる。
  • M5 / M5d: 汎用インスタンス。CPUは同系統のXeon Platinum。コンピューティングとメモリのバランスが良い。
  • R5 / R5d: メモリ最適化。大きめのデータセットを扱う機械学習用途向け。CPUはやはりXeon Platinum系。

TensorFlowの性能を出し切るには、インスタンスタイプだけでなくネットワーク性能なども合わせて見た方がいい。

ml.p2.xlargeは適切か

結論から言うと、CPU命令セットの最適化という文脈では最適解ではない。

ml.p2.xlargeはNVIDIA K80 GPUを搭載した、機械学習・ディープラーニング向けのGPUインスタンス。GPUを使ったモデルの学習・推論に向いてる作りで、CPU側の命令セット最適化を主目的にしたインスタンスタイプではない。CPU自体はSSE4.1やAVXなどをサポートしてる可能性はあるが、このインスタンスの強みはあくまでGPU性能側にある。

なので、

  • TensorFlowのCPU最適化を重視するなら → C5やM5のようなCPU性能特化型
  • GPUを使った学習・推論を重視するなら → ml.p2.xlargeも選択肢に入る

という切り分けになる。どちらを選ぶかは、ワークロードがCPU依存かGPU依存かで決まる話で、ml.p2.xlargeそのものが悪いわけではない。