CuPyをOpenCLで動かすフレームワーク ClPy がベータ版になりました

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

前回、6月にα版として先行リリースしたclpyは、今日からベータ版となり、アルファ版では不十分だった多くの機能を拡充しました。

具体的には、以下のような機能が追加されました。

  • ChainerのImageNet(ResNet50) exampleが動くようになりました。これまではMNISTなどの小さいアプリでしか動作しませんでしたが、今回のバージョンからはもう少し実用的な深層学習もできるようになりました。
  • CUDA C++を元にOpenCL Cのカーネルを生成する、新しい生成器を作成しました。この機能により、従来よりより多くのUser defined custom kernelがClPyでも動作できるようになりました。例えば、今まではChainerのexamplesを動かすにはパッチが必要でしたが、不要になりました。
  • OpenCL APIを呼ぶための薄いPythonラッパーを、インストールした先の環境に合わせて生成するようになりました。バージョンの不整合などによるエラーが解消されます。
  • CuPyを使ったソースコードを変更することなくClPy(OpenCL)を使うためのエイリアス機構が改善され、CuPyと共存できるようになりました。

今回、これらの機能(特に2つ目と3つ目)のために、LLVM/Clang(libTooling)を用いて、「生成元になるC++のソースコードを抽象構文木(AST)経由で意味解析をしてから適切な変換を施す」という技術を用いています。これについては、ここで解説すると長くなりますので、近い内に詳細を解説する記事を執筆し紹介したいと思います。

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

ImageNetサンプルも動くようになったのが今回のベータ版での大きな目玉機能なのですが、性能測定結果を見ると分かる通り、同じGPUで比較してもCuPyに比べClPyはまだまだ遅い状態となっていることが分かります。この理由は複数あると私たちは考えていますが、一番の問題はcuBLAS/cuDNNに匹敵するOpenCLライブラリがないことで、これに関しては現在作業をしています。次回のリリースではもう少し性能が良くなったClPyになる予定です。

その他、現在作業中の内容は随時GitHubにて更新していきます。みなさんが使ってみた結果、うまく動かなかったりで支援が必要でしたり、こうした方が良いと思うなどの提案があれば、GitHubにIssueを遠慮なく作ってください(何語でも歓迎ですが、日本語か英語が推奨です)。

コメントを残す

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

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