このブログは、株式会社フィックスターズのエンジニアが、あらゆるテーマについて自由に書いているブログです。
本日、フィックスターズは、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の簡単なサンプル、例えばMNIST、PTB、word2vecといった基本的な学習ができるようになったので、この成果を早くみなさまに公開し、色々使っていただきたい(そして要望などあれば教えてほしい)ということで、今回、先行リリースという形で公開に至りました。
先述の通り、ClPyはCuPyと完全に互換には至っていませんし、また、CuPy自体もまだまだ開発が続いていくものですのでその開発に合わせた追従なども含めて、今後も、フィックスターズが主体となって引き続き開発を続けていきます。CuPy本流との合流など最終的な形についてはまだ検討中ですが、Preferred NetworksさんのCuPyチームには先行して本プロジェクトについては紹介させていただく機会があり、CuPyとは協調して開発を続けていきたいと思っています。詳しい今後の開発計画については、“Future plan”をご覧ください。
ライセンスは元のCuPyと同じくMITライセンスとなっていますので、このライセンスを守る限り、みなさまによる実行・改変・再配布は自由となっています。実際に使ってみて、なにか問題を見つけたり、こういう機能を追加してみたなどありましたら、GitHubにてIssueやPull Requestを大歓迎です(英語でも日本語でもOKです)!また、今後の開発は原則すべてGitHub上で行なっていく予定ですので、最新の開発状況についてもそちらを是非チェックしていてください。
ということで、フィックスターズは、引き続きClPyを開発し、それを通して、機械学習やその他の数値計算を様々なプラットフォームに展開・貢献していきたいと思います。またバージョンアップしましたら、本ブログ等で告知いたしますので、お楽しみに!
謝辞:本プロジェクトは、東京大学田浦研究室様・産業技術総合研究所様によるNEDO委託事業「IoT推進のための横断技術開発/省電力AIエンジンと異種エンジン統合クラウドによる人工知能プラットフォーム」での研究成果の一部を用いています。
keisuke.kimura in Livox Mid-360をROS1/ROS2で動かしてみた
Sorry for the delay in replying. I have done SLAM (FAST_LIO) with Livox MID360, but for various reasons I have not be...
Miya in ウエハースケールエンジン向けSimulated Annealingを複数タイルによる並列化で実装しました
作成されたプロファイラがとても良さそうです :) ぜひ詳細を書いていただきたいです!...
Deivaprakash in Livox Mid-360をROS1/ROS2で動かしてみた
Hey guys myself deiva from India currently i am working in this Livox MID360 and eager to knwo whether you have done the...
岩崎システム設計 岩崎 満 in Alveo U50で10G Ethernetを試してみる
仕事の都合で、検索を行い、御社サイトにたどりつきました。 内容は大変参考になりま...
Prabuddhi Wariyapperuma in Livox Mid-360をROS1/ROS2で動かしてみた
This issue was sorted....