DEVELOPER’s BLOG

技術ブログ

TensorFlowのAVX2, FMAの有無で性能の比較をする

2019.05.16 中村 昴
TensorFlow 機械学習
TensorFlowのAVX2, FMAの有無で性能の比較をする

概要

ビルド済みのTensorFlowをpipでインストールすると、CPUの命令セットのAVX2やFMAが有効にならない。 AVX2やFMAを用いると、演算速度や精度の向上が期待できる。

参考 MMX, SSE, AVX, FMA命令とは何かを明らかにしたい会

そこで今回は、ソースコードからビルドしてAVX2とFMAを有効にしたTensorFlowを用意し、ビルド済みのパッケージをインストールしたものと、速度や精度の比較を行った。

環境

  • プロセッサ Intel Core i7-5557U 3.1 GHz
  • メモリ 16GB 1867 MHz DDR3
  • macOS Sierra 10.12.6
  • Python 3.6.8
  • TensorFlow 1.13.1

方法

学習は以下のようなCNNで行った。 データセットはMNIST、Fashion MNIST、CIFAR-10を用いた。

import tensorflow as tf

# データセットの選択
dataset = tf.keras.datasets.mnist
# dataset = tf.keras.datasets.fashion_mnist
# dataset = tf.keras.datasets.cifar10

(x_train, y_train), (x_test, y_test) = dataset.load_data()
x_train, x_test = x_train / 255.0, x_test / 255.0

# shapeをモデルの入力に合わせる
if len(x_train.shape) == 3:
    x_train = x_train.reshape(x_train.shape + (1,));
    x_test = x_test.reshape(x_test.shape + (1,));

# CNNモデルの作成
model = tf.keras.models.Sequential([
    tf.keras.layers.Conv2D(32,
        kernel_size=(3, 3),
        activation=tf.nn.relu,
        input_shape=x_train.shape[1:]),
    tf.keras.layers.Conv2D(64, (3, 3), activation=tf.nn.relu),
    tf.keras.layers.MaxPooling2D(pool_size=(2, 2)),
    tf.keras.layers.Dropout(0.25),
    tf.keras.layers.Flatten(),
    tf.keras.layers.Dense(128, activation=tf.nn.relu),
    tf.keras.layers.Dropout(0.5),
    tf.keras.layers.Dense(10, activation=tf.nn.softmax)
])
model.compile(optimizer='adam',
    loss='sparse_categorical_crossentropy',
    metrics=['accuracy'])

# 訓練
model.fit(x_train, y_train, epochs=12)
# 評価
model.evaluate(x_test, y_test)

計測は以下のコマンドで行った。

$ time python cnn.py

結果

MNIST

AVX2, FMA 有 AVX2, FMA 無
学習時間 26m37s 28m32s 6.7%
精度 0.9939 0.9928 +0.0011

Fashion MNIST

AVX2, FMA 有 AVX2, FMA 無
学習時間 25m30s 27m59s 8.9%
精度 0.9218 0.9241 -0.0023

CIFAR-10

AVX2, FMA 有 AVX2, FMA 無
学習時間 32m00s 37m04s 13.7%
精度 0.7049 0.7034 +0.0015

まとめ

AVX2, FMAが有効であると実行時間が短くなった。一方、精度はあまり変わらなかった。

関連記事

TensorFlowでVGG19を使ったインスタ映え画像の生成

概要 DeepArtのようなアーティスティックな画像を作れるサービスをご存知でしょうか? こういったサービスではディープラーニングが使われており、コンテンツ画像とスタイル画像を元に次のような画像の画風変換を行うことができます。この記事では画風変換の基礎となるGatysらの論文「Image Style Transfer Using Convolutional Neural Networks」[1]の解説と実装を行っていきます。 引用元: Gatys et a

記事詳細
TensorFlowでVGG19を使ったインスタ映え画像の生成
TensorFlow ニューラルネットワーク 画像認識
【Python】TensorFlow / SegmentationチュートリアルでU-netを学習させる

はじめに 前回の「画像セグメンテーションのためのU-net概要紹介」では画像のクラス分類のタスクを、画像のSegmentationのタスクにどう発展させるかを解説し、SegmentationのネットワークであるU-netの理論ついて簡単に解説しました。 今回はTensorFlowのSegmentationのチュートリアルを行いながら、実際にU-netを学習させてみたいと思います。 尚、本記事ではTensorflowの詳しい解説は行いません。 参考 : ht

記事詳細
【Python】TensorFlow / SegmentationチュートリアルでU-netを学習させる
TensorFlow ニューラルネットワーク 機械学習
TensorFlowをソースコードからビルドしてAVX2とFMAを有効化する

概要 TensorFlowをpipでインストールして実行したところ、以下のようなログが表示され、AVX2とFMAが有効でないことがわかった。 2019-04-09 10:28:05.680156: I tensorflow/core/platform/cpu_feature_guard.cc:141] Your CPU supports instructions that this TensorFlow binary was not compiled

記事詳細
TensorFlowをソースコードからビルドしてAVX2とFMAを有効化する
TensorFlow 機械学習

お問い合わせはこちらから