Advertisement

2018/06/23 Sony"s deep learning software and the latest information

Sony Network Communications Inc.
Jun. 26, 2018
Advertisement

More Related Content

Slideshows for you(20)

Similar to 2018/06/23 Sony"s deep learning software and the latest information(20)

Advertisement

Recently uploaded(20)

2018/06/23 Sony"s deep learning software and the latest information

  1. db analytics showcase Sapporo 2018 ソニーネットワークコミュニケーションズ株式会社 / ソニー株式会社 シニアマシンラーニングリサーチャー 小林 由幸 ソニーのDeep Learningソフトウェア、最新情報
  2. 2 自己紹介 小林 由幸 1999年にソニーに入社、2003年より機械学習 技術の研究開発を始め、音楽解析技術「12音 解析」のコアアルゴリズム、認識技術の自動 生成技術「ELFE」などを開発。近年は 「Neural Network Console」を中心にディー プラーニング関連の技術・ソフトウェア開発 を進める一方、機械学習普及促進や新しいア プリケーションの発掘にも注力。 こばやし よしゆき
  3. 3 目次 • ソニーのDeep Learningソフトウェア • Neural Network Libraries最新情報 • Neural Network Console最新情報 • Windows版 Version 1.20新機能紹介 • Cloud版 正式サービス紹介 • まとめ Neural Network Libraries/Consoleの 最新情報はこちらから Twitter @NNC_NNL_Jpn
  4. 4 ソニーのDeep Learningソフトウェア
  5. 5 ソニーのDeep Learningに対する取り組み Neural Network Libraries/Consoleにより、効率的なAI技術の開発を実現 2000年以前~ 機械学習の研究開発 2010年~ Deep Learningの研究開発 2011年~ 初代コアライブラリ 2013年~ 第二世代コアライブラリ 2016年~ 第3世代コアライブラリ Neural Network Libraries 2015年~ GUIツール 2010年~ Deep Learning開発者向けソフトウェアの開発 Deep Learningを用いた認識技術等の 開発者が用いるソフトウェア群 技術開発効率を圧倒的に向上 Neural Network Console 17/8/17 Windows版無償公開 18/5/9 クラウド版正式サービス開始 17/6/27 オープンソースとして公開
  6. 6 Neural Network Libraries / Console Neural Network Libraries ・Deep Learning研究開発者向けオープンソースフレーム ワーク(他社製既存Deep Learning FWに相当) ・コーディングを通じて利用→高い自由度 ・最先端の研究や製品への実装にも柔軟に対応 Neural Network Console ・研究や、商用レベルの技術開発に対応したDeep Learningツール ・様々なサポート機能→高い開発効率 ・GUIによるビジュアルな操作→敷居が低い 主なターゲット ・じっくりと研究・開発に取り組まれる方 ・プログラミング可能な研究、開発者 import nnabla as nn import nnabla.functions as F import nnabla.parametric_functions as PF x = nn.Variable(100) t = nn.Variable(10) h = F.tanh(PF.affine(x, 300, name='affine1')) y = PF.affine(h, 10, name='affine2') loss = F.mean(F.softmax_cross_entropy(y, t)) 主なターゲット ・特に開発効率を重視される方 ・はじめてDeep Learningに触れる方 学習エンジンとして Neural Network Librariesを利用 優れたDeep Learningの開発環境を提供し、需要の急拡大するAI技術の普及・発展に貢献
  7. 7 Neural Network Libraries最新情報 Mixed Precision学習 Extension開発支援機能 nnabla-examples
  8. 8 Neural Network Libraries • 17/6/27 v0.9.1 最初のOSSバージョン • 17/7/22 v0.9.2 Python 3のサポート • 17/8/3 v0.9.3 マルチGPUのサポート • 17/8/22 v0.9.4 C++のみによる推論機能 • 17/11/8 v0.9.5 MacOSビルドの正式対応など多数の改善 • 17/11/27 v0.9.6 マルチノードのサポート • 17/12/7 v0.9.7 様々な改善 • 18/3/6 v0.9.8 分散学習の改善 • 18/3/28 v0.9.9 Mixed Precision学習対応 nnabla.org github.com/sony/nnabla https://github.com/sony/nnabla/releases https://github.com/sony/nnabla-ext-cuda/releases 17年6月27日のリリース後も活発にアップデートを継続
  9. 9 Neural Network Librariesを用いたMixed Precision学習 Mixed Precision学習とは • NVIDIAのPascal世代以降のGPUを用いた場合に利用できる • 通常用いられる32bit浮動小数点数(float)の代わりに16bit浮動小数点数(half)を可能な限り用いた学習 • GPUの使用メモリを約半分に抑えられることから、大きいバッチサイズでの学習が可能になる • NVIDIAのVOLTA世代以降のGPUでは、TensorCoreによる高速化の恩恵も得られる(1.5~2倍程度) Float(fp32)→Half(fp16)への切り替え from nnabla.ext_utils import get_extension_context nn.set_default_context(get_extension_context('cudnn')) from nnabla.ext_utils import get_extension_context nn.set_default_context(get_extension_context('cudnn', type_context='half') Float Half その他のコードはそのままに、fp16を用いた学習を行うことができる
  10. 10 Neural Network Librariesを用いたMixed Precision学習 Loss Scaling • ネットワーク構造によっては、halfを用いた演算では演算途中に必要な情報が失われてしまい、うまく学習 できないものもある • このような場合は、Loss Scaling※と呼ばれるテクニックを用いて現象を回避できる l.backward(clear_buffer=True) solver.weight_decay(weight_decay) solver.update() Back-propagation時 Update時(Sgd, Momentum系利用の場合) ※Mixed Precision Training Paulius Micikevicius, Sharan Narang, Jonah Alben, Gregory Diamos, Erich Elsen, David Garcia, Boris Ginsburg, Michael Houston, Oleksii Kuchaiev, Ganesh Venkatesh, Hao Wu https://arxiv.org/abs/1710.03740 l.backward(grad=loss_scale, clear_buffer=True) Loss Scalingあり:勾配をLoss Scaling倍するLoss Scalingなし solver.weight_decay(weight_decay * loss_scale) solver.set_learning_rate(lr / loss_scale) solver.update() Loss Scalingあり:WeightDeacyをloss_scale倍、 Learning Rateを1/loss_scale倍する Loss Scalingなし
  11. 11 Extension開発支援機能 NNLでは、新しいデバイス向けの実装をExtensionとして追加実装することができる High-level API •Python API •C++ API •CLI •Utils CPU Implements •Array •Function •Solver •Communicator Core •Variable •CoputationGraph •… nnabla nnabla-ext-cuda CUDA Implements •Array •Function •Solver •Communicator from nnabla.ext_utils import get_extension_context nn.set_default_context(get_extension_context('cudnn')) 宣言一つで、 APIやコア部分はそのままに、 特定デバイス用のコードを利用○○ Implements •Array •Function •Solver •Communicator nnabla-ext-cudaをフォークし 社内独自チップ等、 特定デバイス用実装を開発可 nnabla-ext-○○ プラグインに実装がない関数は 自動的にCPUにフォールバック
  12. 12 参考)Neural Network LibrariesのAffineCUDA実装 template <class T> void AffineCuda<T>::forward_impl(const Variables &inputs, const Variables &outputs) { cuda_set_device(std::stoi(this->ctx_.device_id)); const T *x = inputs[0]->get_data_pointer<T>(this->ctx_); const T *w = inputs[1]->get_data_pointer<T>(this->ctx_); T *y = outputs[0]->cast_data_and_get_pointer<T>(this->ctx_); // y = x * w. ... } template <class T> void AffineCuda<T>::backward_impl(const Variables &inputs, const Variables &outputs, const vector<bool> &propagate_down, const vector<bool> &accum) { cuda_set_device(std::stoi(this->ctx_.device_id)); const T *dy = outputs[0]->get_grad_pointer<T>(this->ctx_); if (propagate_down[0]) { T *dx = inputs[0]->cast_grad_and_get_pointer<T>(this->ctx_); const T *w = inputs[1]->get_data_pointer<T>(this->ctx_); // dx += dy * w^t ... } Forward計算 Backward計算 Code Generatorが基本的なコードを自動生成。開発者は関数の演算部の実装に集中できる (他にSetupがある)
  13. 13 nnabla-examples github.com/sony/nnabla-examples GitHubにてNeural Network Librariesを用いた様々なサンプルコードを公開している
  14. 14 nnabla-examples • GANs • Pix2pix(画像翻訳) • Cycle-GAN (画像翻訳) • PGGAN(画像生成) • Capsule Net(画像認識) • CIFAR-10データセット • Resnetとその分散学習 • Imagenetデータセット • Resnet • MNISTデータセット • Binary Networks(二値化ネットワーク) • Siamese Network(特徴空間学習) • DCGAN(画像生成) • 物体検出 • Yolov2 • Penn Treebankデータセット • LSTM(言語モデルの学習) • Reduction(ネットワークのコンパクト化) • Distillation(蒸留学習) • Factorization (テンソル分解) • Quantization(量子化) • Resnet2rnn(重み共有) • Structured-sparsity(スパース化) • Word Embedding • Word2vec github.com/sony/nnabla-examples サンプルコードも活発に更新中!
  15. 15 Neural Network Console最新情報 Windows版 version 1.20 新機能紹介 ユニット機能 量子化実験機能 pptxレポート出力機能
  16. 16 ユニット機能 – 概要 • 部分ネットワークであるユニットを定義し、それらを 組み合わせてネットワークを定義可能に (ネストも可) • 従来1度の計算に用いるネットワークは1つの ネットワークにベタ書きする必要があった Fire Module (Unit) SqueezeNet 利用 例)SqueezeNet SqueezeNet: AlexNet-level accuracy with 50x fewer parameters and <0.5MB model size Forrest N. Iandola, Song Han, Matthew W. Moskewicz, Khalid Ashraf, William J. Dally, Kurt Keutzer https://arxiv.org/abs/1602.07360 + 複雑なニューラルネットワークをより簡潔に記述
  17. 17 ユニット機能 – 基本的な使い方 プログラミングにおける関数とその引数感覚で、直観的に使うことができる 1. ユニットを定義する 2. 定義したユニットを呼び出す Argumentレイヤーで 引数を定義 受け取った 引数の利用 Unitレイヤーで 定義したUnitを 呼び出し
  18. 18 ユニット機能 – ユースケース1 よく使う構成をユニットとして定義し、グラフの見通しをよくする 例) LSTM 例) Squash@CapsNet プログラミングにおける、サブルーチンの定義に相当する使い方ができる
  19. 19 ユニット機能 – ユースケース2 • ネットワークの主要部分は1つだけ定義し、差異 のみを上位のネットワークに記述可能に 例:MobileNet 学習用Net 評価用Net MobileNet Unit 学習用Net 評価用Net 利用 • 従来、学習、評価時に別のネットワークを使う場 合、それぞれを別に定義する必要があった (コピー&ペースト) ネットワークの改造時に複数のネットを修正する必要がなくなり、作業効率が改善 MobileNets: Efficient Convolutional Neural Networks for Mobile Vision Applications Andrew G. Howard, Menglong Zhu, Bo Chen, Dmitry Kalenichenko, Weijun Wang, Tobias Weyand, Marco Andreetto, Hartwig Adamnnhttps://arxiv.org/abs/1704.04861
  20. 20 ユニット機能 – NNLibrariesのPythonコード出力にも対応 def network_FireModule(x, SqueezeMaps, ExpandMaps, test=False): # Input:x -> 96,56,56 # Squeeze -> 16,56,56 h = PF.convolution(x, SqueezeMaps, (1,1), (0,0), name='Squeeze') # SqueezeReLU h = F.relu(h, True) # Expand1x1 -> 64,56,56 h1 = PF.convolution(h, ExpandMaps, (1,1), (0,0), name='Expand1x1') # Expand3x3 -> 64,56,56 h2 = PF.convolution(h, ExpandMaps, (3,3), (1,1), name='Expand3x3') # Expand1x1ReLU h1 = F.relu(h1, True) # Expand3x3ReLU h2 = F.relu(h2, True) # Concatenate -> 128,56,56 h1 = F.concatenate(h1, h2) return h1 ユニットのコード 呼び出し元のコード Neural Network Librariesとの高い親和性 • 各ユニットはそれぞれ関数として出力 • Argumentレイヤーで設定した引数も引き継がれる def network_SqueezeNet(x, DropP, test=False): # SNInput:x -> 3,227,227 # MulScalar h = F.mul_scalar(x, 0.01735) # AddScalar h = F.add_scalar(h, -1.99) # Convolution -> 64,113,113 h = PF.convolution(h, 64, (3,3), (0,0), (2,2), name='Convolution') # ReLU h = F.relu(h, True) # MaxPooling -> 64,56,56 h = F.max_pooling(h, (3,3), (2,2)) # FireModule -> 128,56,56 with nn.parameter_scope('FireModule'): h = network_FireModule(h, 16, 64) # FireModule_2 with nn.parameter_scope('FireModule_2'): h = network_FireModule(h, 16, 64) …
  21. 21 量子化実験機能 例えば、FixedPointQuantizeを各データパスおよびパラメータに挿入することで、それぞれを固定 小数点に量子化した際にどの程度の精度が得られるかの実験を行うことができる ←符号あり/符号なし ←量子化ビット数 ←量子化ステップ ←(値域外の Gradientを0とするか どうか) FPGAへの実装等を想定したよりコンパクトなネットワーク構造を容易に探索できる
  22. 22 pptxレポート出力機能 学習の設定、学習・評価結果をPower Point ® 形式のレポートとして出力できる機能 ※PowerPoint®は米国Microsoft Corporationの米国およびその他の国における登録商標です。
  23. LeNet dataset-require=MNIST pptxレポート出力機能を用いて出力した実際のレポート
  24. Dataset : Training • Number of data : 60,000 – Variable : x (image) • Type : Image • Shape : 1, 28, 28 – Variable : y (label) • Type : Scalar pptxレポート出力機能を用いて出力した実際のレポート
  25. Dataset : Examples of variable x in "Training" pptxレポート出力機能を用いて出力した実際のレポート
  26. Dataset : Validation • Number of data : 10,000 – Variable : x (image) • Type : Image • Shape : 1, 28, 28 – Variable : y (label) • Type : Scalar pptxレポート出力機能を用いて出力した実際のレポート
  27. Dataset : Examples of variable x in "Validation" pptxレポート出力機能を用いて出力した実際のレポート
  28. Network Architecture : Main Type Value Output 26,929 CostParameter 70,054 CostAdd 21,920 CostMultiply 3,144 CostMultiplyAdd 700,904 CostDivision 10 CostExp 110 CostIf 13,124 pptxレポート出力機能を用いて出力した実際のレポート
  29. Training Procedure : Optimizer • Optimize network "Main" using "Training" dataset. – Batch size : 64 – Solver : Adam • Learning rate(Alpha) : 0.001 • Beta1 : 0.9 • Beta2 : 0.999 • Epsilon : 1e-08 – Weight decay is not applied. pptxレポート出力機能を用いて出力した実際のレポート
  30. Experimental Result : Learning Curve pptxレポート出力機能を用いて出力した実際のレポート
  31. Experimental Result : Evaluation • Evaluate network "MainRuntime" using "Validation" dataset. • Variable : y – Accuracy : 0.9931 – Avg.Precision : 0.9930 – Avg.Recall : 0.9929 – Avg.F-Measures : 0.9929 pptxレポート出力機能を用いて出力した実際のレポート
  32. References • Sony Corporation. Neural Network Console : Not just train and evaluate. You can design neural networks with fast and intuitive GUI. https://dl.sony.com/ • Sony Corporation. Neural Network Libraries : An open source software to make research, development and implementation of neural network more efficient. https://nnabla.org/ • BatchNormalization - Ioffe and Szegedy, Batch Normalization: Accelerating Deep Network Training by Reducing Internal Covariate Shift. https://arxiv.org/abs/1502.03167 • Convolution - Chen et al., DeepLab: Semantic Image Segmentation with Deep Convolutional Nets, Atrous Convolution, and Fully Connected CRFs. https://arxiv.org/abs/1606.00915, Yu et al., Multi-Scale Context Aggregation by Dilated Convolutions. https://arxiv.org/abs/1511.07122 • ELU - Clevart et al., Fast and Accurate Deep Network Learning by Exponential Linear Units (ELUs). http://arxiv.org/abs/1511.07289 • Adam - Matthew D. Zeiler. ADADELTA: An Adaptive Learning Rate Method. https://arxiv.org/abs/1212.5701 pptxレポート出力機能を用いて出力した実際のレポート
  33. 33 Neural Network Console最新情報 Cloud版 正式サービス紹介
  34. 34 豊富なGPUリソースを利用可能に • ニューラルネットワークの学習には膨大な演算が必要 • 必要な演算量は主に扱うデータの量とニューラルネットワークの 構造に依存 • GPU、マルチGPUを用いると、学習完了までの時間を 大幅に短縮できる • ネットワークにもよるが、10倍~数百倍高速に学習できる • 同じ開発期間でより多くの試行錯誤を行うことが可能に • 環境のセットアップ、メンテナンス作業不要で豊富な GPUリソースを利用可能 • 開発者はDeep Learningの開発作業に集中できる 最先端研究者と同等の環境(1ジョブあたり8GPU×無制限の並列利用)をGUI環境から利用可能
  35. 35 シングルGPUにおける学習時の動作 Fwd/Bwd 1 iteration GPU Fwd/Bwd Fwd/Bwd Fwd/Bwd… Time 1 epoch Num data / Batch size Fwd/Bwd Update 1 epochの間にデータセットのデータ数÷Batch Size回以下の動作を行う • CONFIGタブ、Global ConfigのBatch Sizeで指定した数のデータをデータセットから取得 • 取得したデータを用いてニューラルネットワークのパラメータの勾配を計算 (Forward/Backward) • 求めた勾配を用いてニューラルネットワークのパラメータを更新(Update)
  36. 36 マルチGPU時における学習時の動作 Fwd/BwdGPU 1 Fwd/Bwd Fwd/Bwd… Time 1 epoch Num data / (Batch size * Num GPU) Fwd/BwdGPU 2 Fwd/Bwd Fwd/Bwd… Fwd/BwdGPU 3 Fwd/Bwd Fwd/Bwd… Fwd/BwdGPU n Fwd/Bwd Fwd/Bwd… … UpdateSync1 iteration Forward/Backward計算と Update計算の間に以下の 処理が入る • 求めた勾配を全ての GPU間で平均(Sync)
  37. 37 マルチGPU学習とシングルGPU学習の関係 Fwd/Bwd 256×4 data GPU=Fwd/Bwd 256 data / GPU GPU 1 Fwd/BwdGPU 2 Fwd/BwdGPU 3 Fwd/BwdGPU 4 Multi-GPU Single-GPU シングルGPU時と同じ結果を得るには、 Learning RateをGPU数倍する 例)シングルGPU時Learning Rate 0.1のプロジェクトを 4GPUで学習するには、Learning Rateを4倍の0.4とする マルチGPUを用いた学習は、シングルGPUにおけるBatch SizeをGPU数倍した学習に相当
  38. 38 マルチGPUの使いどころ マルチGPU学習が適さないケース 学習に要する時間が極めて短い • 1 Iterationの演算に要する時間が極端に短い場 合(10ms以下など)、マルチGPUの場合GPU 間の通信に要する時間等、その他のオーバー ヘッドが支配的に 1つのデータのサイズが小さい 1つの関数の処理にかかる時間が短い • 各レイヤーのForward、Backward演算に要す る時間が極めて短い(0.1ms以下など)ような ネットワークではGPUによる高速化効果が得 られづらいことがある マルチGPU学習が適したケース 学習に要する時間が長い • シングルGPUでは1度の学習に数日~数週間を 要するケース • 4GPU、8GPUの利用により最大4倍、8倍に学 習時間を短縮可能 演算量に対するパラメータサイズが小 さいネットワーク • 画面右下に表示されるCostMultiplyAdd(演算 量)に対してCostParameter(パラメータサイ ズ)が小さいネットワークほど効率よく複数の GPUを利用できる プロジェクトの特性に合わせて効果的にマルチGPUの活用を
  39. 39 まとめ
  40. 40 Webにてチュートリアルを随時公開中 https://support.dl.sony.com/docs-ja/#Tutorial 質問・ご要望等はフォーラムへ https://groups.google.com/forum/#!forum/neur al_network_console_users_jp
  41. 41 Neural Network Libraries/Consoleまとめ 今後もDeep Learningの研究開発におけるボトルネックの徹底的な解消を目指した開発を継続 Neural Network Libraries https://nnabla.org/ Neural Network Console https://dl.sony.com/ import nnabla as nn import nnabla.functions as F import nnabla.parametric_functions as PF x = nn.Variable(100) t = nn.Variable(10) h = F.tanh(PF.affine(x, 300, name='affine1')) y = PF.affine(h, 10, name='affine2') loss = F.mean(F.softmax_cross_entropy(y, t)) 実現 • Deep Learning応用技術者の迅速な育成 • 効率的なDeep Learning応用技術の研究開発~実用化 様々な特長を兼ね備えた最新世代のDeep Learningフレームワーク 商用クオリティのDeep Learning応用技術開発を実現する統合開発環境
  42. SONYはソニー株式会社の登録商標または商標です。 各ソニー製品の商品名・サービス名はソニー株式会社またはグループ各社の登録商標または商標です。その他の製品および会社名は、各社の商号、登録商標または商標です。
Advertisement