Blog

Neural Network Console クラウド版 アップデート

Thursday, October 25, 2018

News

Posted by Yoshiyuki Kobayashi

本日、Neural Network Console Cloudをアップデートいたしました。本blogでは、新たに追加された以下の新機能と、その使いどころについて紹介していきます。

・ONNX、およびNNBファイルのダウンロードに対応
・Mixed-Precision学習に対応
・ユニット機能の追加
・その他の機能・改善点

 

1. ONNX、およびNNBファイルのダウンロードに対応

Neural Network Console Cloudで学習したニューラルネットワークのモデルは、学習結果のDownloadメニューから取得できます。
これまでも学習したモデルはNNPファイルとしてダウンロードすることで、GitHubで公開中のDeep LearningフレームワークNeural Network Librariesを用い、PythonもしくはC++から利用することができました。

Neural Network Libraries
https://nnabla.org/

Neural Network Libraries (GitHub)
https://github.com/sony/nnabla

今回このNNPファイルに加えてONNX、NNBファイルのダウンロードにも対応し、Neural Network Console Cloudで学習したモデルがONNXに対応する各社の推論実行環境、およびC Runtimeから利用可能になりました。

 

ONNXはDeep Learningモデルのオープンなファイルフォーマットで、各社からリリースされている多数のDeep Learningのフレームワーク、ライブラリがこれに対応しています。

ONNX
https://onnx.ai/

今回ONNX対応ファイルフォーマット形式でのダウンロードに対応したことで、Neural Network Console Cloudで学習したモデルの他のDeep Learningフレームワークからの再利用や、各チップベンダの提供する最適化された推論実行環境を利用したより高速な推論実行が可能になりました。

 

NNBは、ほぼPure Cで書かれた推論実行用のリファレンスCライブラリ、NNabla C Runtime用のモデルファイルフォーマットです。

NNabla C Runtime
https://github.com/sony/nnabla-c-runtime

今回NNBのダウンロードに対応したことで、Neural Network Console Cloudで学習したモデルを、C言語が利用可能な多様な組み込みデバイス上でも実行可能になりました。

 

2. Mixed-Precision学習に対応

NVIDIAのPascal世代以降のGPUでは、16bit浮動小数点(半精度、fp16、half型)による演算がサポートされています。
今回、Neural Network Console Cloud版で利用可能なNVIDIA Tesla V100 GPU選択時、プロジェクトのGlobal Configに新設されたPrecisionの設定項目をFloatからHalfに変更するだけで、FloatとHalfを組み合わせたMixed-Precisionによる学習が利用可能になりました。

Mixed-Precisionを用いた学習には以下のようなメリットがあります。

・パラメータやバッファのメモリサイズを約半分に抑えることができ、限られたGPUメモリの中でより大きいニューラルネットワークが学習可能に
・GPUメモリを最大限利用するような学習を行う際、Batch Sizeを倍に設定できるようになり計算効率(学習速度)が向上、さらにNVIDIA Tesla V100GPUに搭載されたTensor Coreにより学習速度が向上(合わせて約1.5~2.0倍の高速化)

 

Mixed-Precisionを用いる場合演算精度低下の影響によるモデル精度の低下が懸念されますが、多くのケースではLoss Scalingと呼ばれるテクニックを用いることでこれを回避できることが示されています。
http://docs.nvidia.com/deeplearning/sdk/mixed-precision-training/index.html

 

Neural Network Console Cloudでは、ロス関数の後にMulScalarレイヤーを用いてロスの値をスケール倍し、Learning Rateをスケール分の1に設定することで、簡単にLoss Scalingを行うことが可能です。


※Mixed-Precisionを用いた学習は、学習対象のニューラルネットワークがGPUメモリを最大限利用するような大型のものである場合に効果を発揮します。
サンプルプロジェクトのほとんどを含む小型のネットワークである場合、また計算量に対して学習に用いるデータのサイズが大きい(読み込みに時間がかかる)場合は速度向上効果が見られないことがありますのでご注意ください。
GPU上での速度向上効果は、事前にProfile機能を用いることで計測することをおすすめします。

 

3. ユニット機能の追加

ユニット機能は、予め定義したネットワーク構造を、Unitレイヤーから呼び出して繰り返し利用可能にするものです。
Neural Network Console Windows版 Version 1.2に搭載していた本機能ですが、今回Cloud版からも利用可能になりました。

ユニット機能を用いたLeNetの記述

ユニット機能は、プログラミングにおけるサブルーチンや関数と似た役割を果たします。プログラミングではよく使う機能を関数として定義して再利用できるようにしますが、ユニット機能はこれと同じようによく使うネットワーク構造をユニットとして定義し、再利用することを可能にするものです。

特に大きく複雑なネットワークを設計する際には、少ない労力でネットワーク全体を設計できる、ネットワーク全体の見通しを良くできる(可読性の向上)、高いメンテナンス性を実現できる(保守性の向上)など、その効果が顕著になります。

ユニットレイヤーについての詳細は「チュートリアル:ユニット機能を用いて複雑なネットワークを簡潔に記述する」をご参照ください。

 

4. その他の機能・改善点

その他にも、以下のように様々な機能追加や改善が行われています。

Pythonコード出力機能
Windows版で提供していたNeural Network Libraries対応Pythonコードの出力機能が、Cloud版からも利用可能になりました。
Pythonコードの出力は、右クリックメニューのExport、Python Code (NNabla)から行うことができます。
Cloud版で学習したモデルが、Neural Network LibrariesのPython APIを用いて手軽に利用可能になりました。

Project、Componentsの文字列による検索機能
ダッシュボードのProject右上のSearchテキストボックスに文字列を入力すると、指定した文字列を含んだプロジェクトを絞り込んで表示することができます。
また、EDITタブ、ComponentsのSearchテキストボックスに文字列を入力すると、指定した文字列を含んだレイヤーに絞り込んでComponentsを表示することができます。
本機能により目的のプロジェクトやレイヤーがより探しやすくなりました。

構造自動探索機能の改善
これまでと比較して、よりバリエーション豊かなネットワーク構造が探索されるようになりました。また、Settingカテゴリに新たに追加されたStructureSearchレイヤーを用いることで、ネットワーク構造(EDITタブ内のネットワークのタブ)毎に探索を行う(探索を禁止する)かどうかを指定できるようになりました。

 

Neural Network Consoleは今後も改善を継続していきます。
今後の適切な機能追加のため、引き続きユーザの皆さんからのご意見ご要望をお待ちしています!

Neural Network Console Cloud
https://dl.sony.com/ja/cloud/