CuPyをOpenCLで動かすフレームワーク ClPy を先行リリースしました

本日、フィックスターズは、PythonからNVIDIA GPUを使うためのライブラリCuPyをOpenCLでも使えるようにしたClPyをGitHubにて公開しました!

ClPyを使えば、例えばChainerのようなニューラルネットを用いた機械学習を、OpenCLが動くデバイス(例えばAMD Radeonなど)でも動作させることができるようになります。

詳細

CuPyとは、Python上での数値計算におけるで事実上の標準となっているNumPy互換でCUDAを使ったGPGPUが利用できるようにするためのライブラリです。もともとCuPyは、Preferred Networksさんが作っているChainerというニューラルネット用フレームワークをCUDAで動かすためのバックエンドとして統合されていました。現在では分離・独立して、Preferred Networksさん主体で「NumPy互換で動く」ためのライブラリを目指したものとなっているようですが、そういう経緯もあり、ChainerではGPUを用いた学習・推論のためには現在でもCuPyを利用しています。

今回公開したClPy(lはLの小文字です)は、このCuPyがOpenCLでも利用できるようにしたものです。OpenCLとは、グラフィックス用のOpenGLなどで有名な標準化団体であるクロノス・グループが策定している、異機種混在(ヘテロジニアス)環境における標準規格です。異機種混在環境というのは、複数の演算機・デバイスが混ざった計算環境のことで、例えば、CPUとGPUを混ぜて使うGPGPUなどが想定されるものです。

先述の通り、元々のCuPyでは、CUDAというNVIDIAのGPUでしか使えないSDKでしか動きませんでした。これを、NVIDIA独自規格ではなく標準規格であるOpenCLに対応させることで、NVIDIA以外のGPU、例えばIntelやAMDのGPUや、GPUではないデバイスでも動かすことができるようになります。

とは言ってもCuPyも大きなライブラリですので、現状ではすべてが動くわけではなく、まだまだ完璧ではありません。詳しくはCurrent Statusに書いてありますが、最低限の機能のみが実装されており、まだまだ追加開発が必要です。ただし、現状でも、Chainerの簡単なサンプル、例えばMNISTPTBword2vecといった基本的な学習ができるようになったので、この成果を早くみなさまに公開し、色々使っていただきたい(そして要望などあれば教えてほしい)ということで、今回、先行リリースという形で公開に至りました。

今後の計画

先述の通り、ClPyはCuPyと完全に互換には至っていませんし、また、CuPy自体もまだまだ開発が続いていくものですのでその開発に合わせた追従なども含めて、今後も、フィックスターズが主体となって引き続き開発を続けていきます。CuPy本流との合流など最終的な形についてはまだ検討中ですが、Preferred NetworksさんのCuPyチームには先行して本プロジェクトについては紹介させていただく機会があり、CuPyとは協調して開発を続けていきたいと思っています。詳しい今後の開発計画については、“Future plan”をご覧ください。

ライセンスは元のCuPyと同じくMITライセンスとなっていますので、このライセンスを守る限り、みなさまによる実行・改変・再配布は自由となっています。実際に使ってみて、なにか問題を見つけたり、こういう機能を追加してみたなどありましたら、GitHubにてIssueやPull Requestを大歓迎です(英語でも日本語でもOKです)!また、今後の開発は原則すべてGitHub上で行なっていく予定ですので、最新の開発状況についてもそちらを是非チェックしていてください。

おわりに

ということで、フィックスターズは、引き続きClPyを開発し、それを通して、機械学習やその他の数値計算を様々なプラットフォームに展開・貢献していきたいと思います。またバージョンアップしましたら、本ブログ等で告知いたしますので、お楽しみに!

謝辞:本プロジェクトは、東京大学田浦研究室様らによるNEDO委託事業「IoT推進のための横断技術開発/省電力AIエンジンと異種エンジン統合クラウドによる人工知能プラットフォーム」での研究成果の一部を用いています。

コメントを残す

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

This site uses Akismet to reduce spam. Learn how your comment data is processed.