LoginSignup
11
12

More than 5 years have passed since last update.

深層学習ベンチマークについて

Posted at

わざわざベンチマークをやったのを公開してる方もいるので、
フレームワークのバージョンなど少し古い

convnet-benchmarks
https://github.com/soumith/convnet-benchmarks

>すべてのパブリックオープンソースのコンビネーション実装の簡単なベンチマーク。 要約は以下のセクションで提供されています。

マシーン:6-core Intel Core i7-5930K CPU @ 3.50GHz + NVIDIA Titan X + Ubuntu 14.04 x86_64

Imagenet受賞者のベンチマーキング

私はいくつかの人気のイメージネットモデルを選び、完全なフォワード+バックワードパスの時間を計る。私は10回以上の時間を平均しています。私はドロップアウトとソフトマックスの層を無視しました。

記法

入力は{batch_size} x {num_filters} x {filter_width} x {filter_height}と記述されます。 ここで、batch_sizeはミニバッチで使用される画像の数、num_filtersは画像内のチャンネル数、filter_widthは画像の幅、filter_heightは画像の高さです。

メモ

CuDNNベンチマークは、Torchバインディングを使用して実行されます。 Caffeバインディングや他のライブラリのバインディングを使っても同じことができます。 このメモは、Caffe(ネイティブ)とTorch(ネイティブ)が既定のフォールバックとして存在するコンボリューションカーネルであることを明確にするためのものです。 TensorFlowやChainerのようなフレームワークのいくつかはCuDNNでベンチマークされていますが、明示的に言及されていないため、これらのフレームワーク全体がより高速であると考えるかもしれません。

AlexNet (One Weird Trick paper) - Input 128x3x224x224

Library Class Time (ms) forward (ms) backward (ms)
CuDNN[R4]-fp16 (Torch) cudnn.SpatialConvolution 71 25 46
Nervana-neon-fp16 ConvLayer 78 25 52
CuDNN[R4]-fp32 (Torch) cudnn.SpatialConvolution 81 27 53
TensorFlow conv2d 81 26 55
Nervana-neon-fp32 ConvLayer 87 28 58
fbfft (Torch) fbnn.SpatialConvolution 104 31 72
Chainer Convolution2D 177 40 136
cudaconvnet2* ConvLayer 177 42 135
CuDNN[R2] * cudnn.SpatialConvolution 231 70 161
Caffe (native) ConvolutionLayer 324 121 203
Torch-7 (native) SpatialConvolutionMM 342 132 210
CL-nn (Torch) SpatialConvolutionMM 963 388 574
Caffe-CLGreenTea ConvolutionLayer 1442 210 1232

Overfeat [fast] - Input 128x3x231x231

Library Class Time (ms) forward (ms) backward (ms)
Nervana-neon-fp16 ConvLayer 176 58 118
Nervana-neon-fp32 ConvLayer 211 69 141
CuDNN[R4]-fp16 (Torch) cudnn.SpatialConvolution 242 86 156
CuDNN[R4]-fp32 (Torch) cudnn.SpatialConvolution 268 94 174
TensorFlow conv2d 279 90 189
fbfft (Torch) SpatialConvolutionCuFFT 342 114 227
Chainer Convolution2D 620 135 484
cudaconvnet2* ConvLayer 723 176 547
CuDNN[R2] * cudnn.SpatialConvolution 810 234 576
Caffe ConvolutionLayer 823 355 468
Torch-7 (native) SpatialConvolutionMM 878 379 499
CL-nn (Torch) SpatialConvolutionMM 963 388 574
Caffe-CLGreenTea ConvolutionLayer 2857 616 2240

OxfordNet [Model-A] - Input 64x3x224x224

Library Class Time (ms) forward (ms) backward (ms)
Nervana-neon-fp16 ConvLayer 254 82 171
Nervana-neon-fp32 ConvLayer 320 103 217
CuDNN[R4]-fp16 (Torch) cudnn.SpatialConvolution 471 140 331
CuDNN[R4]-fp32 (Torch) cudnn.SpatialConvolution 529 162 366
TensorFlow conv2d 540 158 382
Chainer Convolution2D 885 251 632
fbfft (Torch) SpatialConvolutionCuFFT 1092 355 737
cudaconvnet2* ConvLayer 1229 408 821
CuDNN[R2] * cudnn.SpatialConvolution 1099 342 757
Caffe ConvolutionLayer 1068 323 745
Torch-7 (native) SpatialConvolutionMM 1105 350 755
CL-nn (Torch) SpatialConvolutionMM 3437 875 2562
Caffe-CLGreenTea ConvolutionLayer 5620 988 4632

GoogleNet V1 - Input 128x3x224x224

Library Class Time (ms) forward (ms) backward (ms)
Nervana-neon-fp16 ConvLayer 230 72 157
Nervana-neon-fp32 ConvLayer 270 84 186
TensorFlow conv2d 445 135 310
CuDNN[R4]-fp16 (Torch) cudnn.SpatialConvolution 462 112 349
CuDNN[R4]-fp32 (Torch) cudnn.SpatialConvolution 470 130 340
Chainer Convolution2D 687 189 497
Caffe ConvolutionLayer 1935 786 1148
CL-nn (Torch) SpatialConvolutionMM 7016 3027 3988
Caffe-CLGreenTea ConvolutionLayer 9462 746 8716

レイヤーごとベンチマーク (Last Updated April 2015)

Spatial Convolution layer (3D input 3D output, densely connected)

forward + backprop (wrt input and weights)
Original Library Class/Function Benchmarked Time (ms) forward (ms) backward (ms)
fbfft SpatialConvolutionCuFFT 256 101 155
cuda-convnet2 * ConvLayer 977 201 776
cuda-convnet** pylearn2.cuda_convnet 1077 312 765
CuDNN R2 * cudnn.SpatialConvolution 1019 269 750
Theano CorrMM 1225 407 818
Caffe ConvolutionLayer 1231 396 835
Torch-7 SpatialConvolutionMM 1265 418 877
DeepCL ConvolutionLayer 6280 2648 3632
cherry-picking**** best per layer 235 79 155

This table is NOT UPDATED For TITAN-X. These numbers below were on Titan Black and are here only for informational and legacy purposes.

Original Library Class/Function Benchmarked Time (ms) forward (ms) backward (ms)
Theano (experimental)*** conv2d_fft 1178 304 874
Torch-7 nn.SpatialConvolutionBHWD 1892 581 1311
ccv ccv_convnet_layer 809+bw 809
Theano (legacy) conv2d 70774 3833 66941
  • * indicates that the library was tested with Torch bindings of the specific kernels.
  • ** indicates that the library was tested with Pylearn2 bindings.
  • *** This is an experimental module which used FFT to calculate convolutions. It uses a lot of memory according to @benanne
  • **** The last row shows results obtainable when choosing the best-performing library for each layer.
  • L1 - Input: 128x128 Batch-size 128, Feature maps: 3->96, Kernel Size: 11x11, Stride: 1x1
  • L2 - Input: 64x64 Batch-size 128, Feature maps: 64->128, Kernel Size: 9x9, Stride: 1x1
  • L3 - Input: 32x32 Batch-size 128, Feature maps: 128->128, Kernel Size: 9x9, Stride: 1x1
  • L4 - Input: 16x16 Batch-size 128, Feature maps: 128->128, Kernel Size: 7x7, Stride: 1x1
  • L5 - Input: 13x13 Batch-size 128, Feature maps: 384->384, Kernel Size: 3x3, Stride: 1x1
  • The table is ranked according to the total time forward+backward calls for layers (L1 + L2 + L3 + L4 + L5)
Breakdown
forward

Columns L1, L2, L3, L4, L5, Total are times in milliseconds

Original Library Class/Function Benchmarked L1 L2 L3 L4 L5 Total
fbfft SpatialConvolutionCuFFT 57 27 6 2 9 101
cuda-convnet2 * ConvLayer 36 113 40 4 8 201
cuda-convnet** pylearn2.cuda_convnet 38 183 68 7 16 312
CuDNN R2 cudnn.SpatialConvolution 56 143 53 6 11 269
Theano CorrMM 91 143 121 24 28 407
Caffe ConvolutionLayer<Dtype> 93 136 116 24 27 396
Torch-7 nn.SpatialConvolutionMM 94 149 123 24 28 418
DeepCL ConvolutionLayer 738 1241 518 47 104 2648
cherry-picking**** best per layer 36 27 6 2 8 79
backward (gradInput + gradWeight)

Columns L1, L2, L3, L4, L5, Total are times in milliseconds

Original Library Class/Function Benchmarked L1 L2 L3 L4 L5 Total
fbfft SpatialConvolutionCuFFT 76 45 12 4 18 155
cuda-convnet2 * ConvLayer 103 467 162 15 29 776
cuda-convnet** pylearn2.cuda_convnet 136 433 147 15 34 765
CuDNN R2 cudnn.SpatialConvolution 139 401 159 19 32 750
Theano CorrMM 179 405 174 29 31 818
Caffe ConvolutionLayer<Dtype> 200 405 172 28 30 835
Torch-7 nn.SpatialConvolutionMM 206 432 178 29 32 877
DeepCL ConvolutionLayer 484 2144 747 59 198 3632
cherry-picking**** best per layer 76 45 12 4 18 155


2017年2月15日
http://www.svds.com/getting-started-deep-learning/

必要に応じてフレームワークを選べという話。

SVDSでは、私たちのR&Dチームは、学習の画像認識から音声認識まで、さまざまな深層学習技術を調査してきました。 データの取り込み、モデルの作成、モデルのパフォーマンス評価を行うためのパイプラインを構築する必要がありました。 しかし、どの技術が利用可能であるかを調査したところ、新しい深層学習プロジェクトを開始するための簡潔な要約文書は見つかりませんでした。
私たちにツールを提供するオープンソースコミュニティに還元する1つの方法は、他の人が私たちの経験を活用する方法でそれらのツールを評価して選ぶのを助けることです。 私たちは、私たちの決定に基づいたさまざまな基準の説明とともに、以下のチャートを提供します。
Deep_learning_ratings_final-1024x563.png

これらのランキングは、これらのテクノロジのイメージ認識アプリケーションと音声認識アプリケーションの主観的な経験と、公開されているベンチマーク調査の組み合わせです。 以下に得点を説明します:

言語:深層学習を始めるときは、よく知っている言語をサポートするフレームワークを使用することをお勧めします。 たとえば、Caffe(C ++)とTorch(Lua)はコードベース用のPythonバインディングを持っています(PyTorchは2017年1月にリリースされています)。しかし、これらの技術を使用するには、それぞれC ++またはLuaに熟達していることをお勧めします。 これと比較して、TensorFlowとMXNetは多言語サポートを提供しており、C ++に習熟していなくてもこの技術を利用することができます。
GitHubInterest_DeepLearning.png

GitHubContributors_DeepLearning.png

チュートリアルとトレーニング教材:チュートリアルの質と量、および入門用資料を徹底的に変える深層学習技術。 Theano、TensorFlow、Torch、およびMXNetには、理解しやすく実装するためのチュートリアルが十分に文書化されています。 MicrosoftのCNTKとIntelのNervana Neonは強力なツールですが、私たちは初心者向けの資料を探すのに苦労しました。 さらに、GitHubコミュニティの関与は、ツールの将来の開発だけでなく、StackOverflowやリポジトリのGit Issuesを検索することで、問題やバグをどの程度解決できるかを示す指標となります。 TensorFlowは、チュートリアルの量、トレーニング資料、および開発者とユーザーのコミュニティに関する800ポンドのゴリラであることに注意することが重要です。

GitHubCommits_DeepLearning.png

CNNモデリング能力:畳み込みニューラルネットワーク(CNN)は、画像認識、推薦エンジン、および自然言語処理に使用される。 CNNは、初期データ量を所定のクラススコアの出力スコアに変換する一連の異なるレイヤーで構成されています(詳細は、Eugenio Culurcielloのニューラルネットワークアーキテクチャの概要を参照してください)。 CNNは、自律車両のステアリング角度を出力するモデルなどの回帰分析にも使用できます。テクノロジーのCNNモデリング機能にいくつかの機能が含まれていると考えています。これらの機能には、モデルを定義するための機会スペース、事前作成されたレイヤーの可用性、これらのレイヤーを接続するためのツールと関数が含まれます。 Theano、Caffe、MXNetのCNNモデリング能力は素晴らしいです。つまり、TensorFlowのInceptionV3モデルとTorchの優れたCNNリソース(使いやすい時間的畳み込みを含む)は、CNNモデリング機能のためにこれらの2つの技術を別々にしています。

RNNモデリング能力:音声認識、時系列予測、画像キャプション、および逐次情報の処理を必要とする他のタスクにはリカレントニューラルネットワーク(RNN)が使用されます。あらかじめ構築されたRNNモデルはCNNほどの数ではありませんので、RNNディープ学習プロジェクトをお持ちであれば、RNNモデルが以前に実装されており、特定のテクノロジでオープンソースとなっているものを検討することが重要です。たとえば、CaffeにはRNNのリソースがほとんどなく、MicrosoftのCNTKとTorchには十分なRNNチュートリアルと事前構築されたモデルがあります。 vanilla TensorFlowにはRNNの素材がいくつかありますが、TFLearnとKerasにはTensorFlowを活用したRNNのサンプルが数多く含まれています。

アーキテクチャ:特定のフレームワークで新しいモデルを作成し、訓練するには、使いやすくモジュール式のフロントエンドを持つことが重要です。 TensorFlow、Torch、およびMXNetは、開発を容易にする簡単でモジュラーなアーキテクチャを備えています。これとは対照的に、Caffeなどのフレームワークでは、新しいレイヤーを作成するために多大な労力が必要です。特にTensorFlowは、TensorBoardのWeb GUIアプリケーションが含まれているため、トレーニング中およびトレーニング後にデバッグと監視が容易であることがわかりました。

スピード:TorchとNervanaは、オープンソースの畳み込みニューラルネットワークベンチマークテストで最も優れたパフォーマンスを示しています。ほとんどのテストでTensorFlowのパフォーマンスは同等でしたが、CaffeとTheanoは遅れていました。マイクロソフトのCNTKは、RNNの最速のトレーニング時間が最も短いと主張しています。 Theano、Torch、TensorFlowをRNNと直接比較した別の調査では、Theanoが3つの中で最高のパフォーマンスを発揮することが示されました。

複数のGPUサポート:ほとんどのディープラーニングアプリケーションでは、顕著な数の浮動小数点演算(FLOP)が必要です。たとえば、BaiduのDeepSpeech認識モデルでは、10秒間のExaFLOPを訓練します。それは> 10e18計算です! NVIDIAのPascal TitanXなどの主要なグラフィックスプロセッシングユニット(GPU)は11秒9のFLOPを1秒間に実行できるため、十分に大きなデータセットで新しいモデルを訓練するには1週間以上かかります。モデルを構築するのにかかる時間を短縮するために、複数のマシンにまたがる複数のGPUが必要です。幸いにも、上記の技術のほとんどがこのサポートを提供しています。特に、MXNetには、最も最適化されたマルチGPUエンジンが搭載されていると報告されています。

Keras互換性:Kerasは、迅速な学習プロトタイプ作成を行うための高レベルライブラリです。われわれは、データ・サイエンティストを深層学習に慣れさせるための素晴らしいツールであることを発見しました。 Kerasは現在、2つのバックエンド、TensorFlowとTheanoをサポートしており、今後TensorFlowの正式サポートを受ける予定です。 Kerasは、複数のバックエンドで使用できるフロントエンドとしてKerasが引き続き存在することを著者が最近明示したことを考えれば、高水準ライブラリにとっては良い選択です。

深層学習を開始することに興味がある場合は、自分のチームのスキルを評価し、最初にプロジェクトのニーズを評価することをおすすめします。たとえば、Python中心のチームによる画像認識アプリケーションでは、豊富なドキュメント、適切なパフォーマンス、優れたプロトタイピングツールを備えたTensorFlowをお勧めします。ルアの有能なクライアントチームと連携してRNNをプロダクションに拡張するには、優れた速度とRNNモデリング機能をトーチにお勧めします。

将来、私たちのモデルをスケールアップする際の課題をいくつか議論します。これらの課題には、複数のマシンでのGPU使用の最適化と、深層学習パイプラインのためのCMU SphinxやKaldiなどのオープンソースライブラリの適応が含まれます。

11
12
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
11
12