2017-11-07 14 views
5

新しいVoltaアーキテクチャと利点を備えた3dconv/deconvレイヤーを使用するニューラルネット(ジェネレータとして機能するオートエンコーダー+ CNNをディスクリミネータとして使用)をテストしたいと考えました混合 - 精密訓練から得たものである。 CUDA 9とCudNN 7.0でTensorflow 1.4の最新のソースコードをコンパイルし、自分のconv/deconvレイヤーで使用されているすべての訓練可能な変数をtf.float16にキャストしました。また、すべての入力と出力のテンソルは8の倍数のサイズを持っています。Tesla V100のTF1.4で混合精度が有効になっていません

残念ながら、この設定では速度の改善はほとんど見られません。トレーニング時間はtf.float32を使用した場合とほぼ同じです。私の理解は、VoltaアーキテクチャとcuDNN 7.0では、Mixed PrecisionがTFによって自動的に検出され、それによってTensor Core数学の使用が可能になるということです。私は間違っているのですか、それを可能にするために何かすべきでしょうか? TF1.5のnighltyビルドも試しましたが、それは私のカスタム1.4よりもさらに遅いようです。

Tensorflowに関わる開発者がこれに答えることができれば、私は感謝します。

編集:NVIDIAのテクニカルサポートと話をした後、float16をサポートしている間、TFは単純な2D conv Opsでは混在精度の加速度を統合しますが、今のところ3D conv Opsではそうではないようです。

+1

@Engineero AWSはちょうど私があまりにもV100を持っているV100 – yjmade

+0

とP3のインスタンスを解放し、そしてまたでイライラを感じますテンソルフローによるサポートの欠如。畳み込みグループのサポートの欠如も迷惑です:https://github.com/tensorflow/tensorflow/issues/3332。その投稿は、何かがすぐに公開されることを希望します:https://github.com/tensorflow/tensorflow/issues/12474#issuecomment-338309705。私がせっかちになれば、私はCaffe2を試みます。それは長い間、最新のcudnn機能をサポートしていました。 –

+1

ここでNVIDIAが提案した手順を試しましたか?http://docs.nvidia.com/deeplearning/sdk/mixed-precision-training/index.html#tensorflow Tf 1.4が利用可能になったので、コードを変更するだけですより速いトレーニングをサポートします。 また、ブログを見てください:https://devblogs.nvidia.com/parallelforall/mixed-precision-training-deep-neural-networks/ – melgor89

答えて

3

NVIDIA documentationに基づいて、私はFP16(TensorCore)でベンチマークを実行する。そのために私はtensorflowで配信alexnet_benchmarkをmodyfied: https://gist.github.com/melgor/946b9643aa25dd3839a86804fc580741

全体的に、AlexNetはあまりない、わずか35%高速です。私は〜2倍速くなることを望んでいた。また、多分Resnetはより大きな差異を生み出すでしょう。素晴らしいことは、私はbatch_size = 5120(fp32はできません)のモデルに適合することができ、1回のFBパスは0.653を取るので、ImageNetを90エポックでトレーニングするには〜4時間かかります。

batch_size=512 alexnet_fp32: Forward-backward across 100 steps, 0.099 +/- 0.000 sec/batch alexnet_fp16: Forward-backward across 100 steps, 0.064 +/- 0.000 sec/batch

編集:

私は(BNがFP16では動作しません何らかの理由で、しかしBatchNormなし)FP16にResNetモデルを実行するために管理:

batch_size=256 resnet50_fp32: Forward-backward across 100 steps, 0.575 +/- 0.001 sec/batch resnet50_fp16: Forward-backward across 100 steps, 0.504 +/- 0.001 sec/batch

batch_size=128 resnet152_fp32: Forward-backward across 100 steps, 0.757 +/- 0.001 sec/batch resnet152_fp16: Forward-backward across 100 steps, 0.581 +/- 0.010 sec/batch

ResNetのゲインはさらに小さくなります。 FP16はV100で多くの利益を得ていないようですが、その理由はわかりません。たぶん、TensorCoreのサプリメントは現在完全に統合されていないかもしれません。

+0

NVIDIAのドキュメントへのポインタをありがとう。私はそれを見つけられなかった。 –

+0

ええ、先週も同様のことをしましたが、私は多かれ少なかれ同じことを観察しました。 TensorCoreや他の何かをサポートするためには、テンソルフローがより多くの作業を必要とするため、私はそれがわからない。 – derekhh

+0

あなたが35%速く言うと、それは1対1の比較ですか、つまり、double精度のAlexNetもtesla V100でも動作しますか? –

0

私はテンソルフローが最良のアルゴリズムを決定するための適切なcudnn APIコールを使用していないと考えています。 I cudnnGetConvolutionForwardAlgorithm_v7 と cudnnFindConvolutionForwardAlgorithmEx

なし試合のためだけgrepped tensorflowコード。 私はTensorflowでチケットを発行します。

0

私はこのトピックに非常に関心があります。誰でもVolta Tensor CoresとTensorflowの統合の現在の状況について更新していますか?私はボルタV100 GPU速度をテストするための実験を実行し、1.5 CUDA 9.0 cudnnをtensorflowし、次の結論に達したています

  • ボルタV100を使用してトレーニングのGeForce 1080チタンと型学習よりも高速ではありません、それは著しく速くする必要があり、一方、 。float16またはfloat32を使用しても何も変わらない
  • Volta V100をfloat 16で使用するトレーニングは、Volta V100 with float32を使用したトレーニングよりも高速ではありません。ボルタGPUはfloat16用に最適化されているはずなので、スピードの大幅な向上を期待していました。

基本的に私はOPと同じ結論を得ました。Volta GPUはまだTensorflowによって完全にサポートされていません。

tensorflowのgithubの上のこのPRは、私はまだこれらの変更をテストしていませんが、トピックに関連すると思われる:https://github.com/tensorflow/tensorflow/pull/16253

+0

新しい質問がある場合は、[質問する](https://stackoverflow.com/questions/ask)ボタンをクリックしてください。コンテキストを提供する場合は、この質問へのリンクを含めてください。 - [レビューから](/レビュー/低品質の投稿/ 18761890) – Shikkediel

+0

これは本当に質問に答えるものではありません。別の質問がある場合は、[質問する](https://stackoverflow.com/questions/ask)をクリックして質問することができます。十分な[評判](https://stackoverflow.com/help/)があれば、この問題にもっと注意を払うために[奨励金を追加](https://stackoverflow.com/help/privileges/set-bounties)することもできます何が評判か)。 - [レビューから](/レビュー/低品質の投稿/ 18761890) – MattSizzle

関連する問題