Article

2018年12月18日

本日、フィックスターズは、CuPyをOpenCLでも使えるようにしたClPyの最新版v2.1.0beta1を公開しました!

8月にβ0版をリリースしてから4ヶ月、ClPyは開発が続き、さらに多くの機能が追加されました。追加された主な機能の概要は以下のとおりです

  • OpenCLのバージョン確認機能が導入されました。現在のClPyはOpenCLのv1.2を要求しますので、それ以下のバージョンのデバイスではエラーが分かりやすく表示されるようになりました。
  • ChainerのImageNetサンプルで動くネットワークの種類が増え、ResNet50とGoogleNetBNが使えるようになりました。
  • 高速な行列積のためにCLBlastを導入しました。これにより、処理性能が最大で1.5倍向上しました。
  • 多くのテストが合格するようになり、不合格テストのファイル数はおよそ2/3になりました。特に、manipulationと呼ばれる、ndarrayの変形に関するテストは全件合格するようになり、これらの全機能が使えるようになりました。

その他より詳細な変更点についてはGitHubのIssue一覧をご覧ください。

ImageNetサンプルはβ0でも動作するようになっていましたが、そこでは既定のNINが使われていました。しかし、大規模な分散並列学習においてはResNet50が使われるように、NINだけでは不十分でした。そこで今回、ResNet50を使えるようにしたことで、より実用に近いニューラルネットワークがClPyでも動かすことができるようになりました。

そうなると次はそろそろ処理性能を考え始める時期になります。前回のβ0リリース記事でもお伝えしたとおり、β0ではBLAS(密行列積)がハンドコードされており性能があまり良くありませんでした。今回、BLASライブラリとしてCLBlastを導入したことで、多くの種類・型のBLAS APIに対応することが可能になり、また処理性能も向上しました。

実測してみたところ、前回のβ0の性能今回のβ1を比べると、ImageNet(nin)のような重いネットワークでは、どのGPUでも1.2-1.5倍程度高速化されたことが分かります。やはり適当に手書きするよりは、ライブラリ等を導入するのが簡単な高速化技法であることが分かりますね。

一方で、依然として、同じGPUでCuPyとClPyを使うと、まだまだ性能に差があることが分かります。今回、cuDNNを使わない状態で計測しましたが、GeForce 1060もTITAN Vもどちらも概ねCuPyの方が2-3倍速いという結果が出ています。これについては、引き続き調査をし、次回以降のリリースでは改善したいと考えています。

また、今回は機能拡充としてテストをたくさん通しました。α版からβ0版では不合格テストのファイル数も件数もほとんど変わっていませんが、β1版では、β0で改善された基礎機能を用いて、多くの機能を有効化することができました。不合格テストファイル数は67件から45件と2/3に、不合格テストケースの数は約1500件から約1150件と75%程度になりました。このテスト合格のための機能拡充は引き続き開発されており、既に一部が実装済みで次回リリースに確実に入る見込みです。疎行列ライブラリなどの一部非サポートの試験は残りますが、次回リリースでは、核となるndarrayに関するほぼすべての機能を提供したいと考えています。

今後の開発項目についてはGitHubで随時更新されます。開発中の機能もPull Requestに上がっていきますので、先行して試してみたい方は、ぜひGitHubのレポジトリをwatchしてみてください。

また、みなさんが使ってみた結果のフィードバックも引き続き歓迎しています。うまく動かなかったりで支援が必要でしたり、こうした方が良いと思うなどの提案があれば、GitHubにIssueを遠慮なく作ってください(何語でも歓迎ですが、日本語か英語が推奨です)。

Tags

About Author

YOSHIFUJI Naoki

yoshifujiです。計算力学的なプログラムを高速化することが得意です。プログラミング自体はチョットダケワカリマス。 Twitter: https://twitter.com/LWisteria

Leave a Comment

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください

Recent Comments

Social Media