Python と C/C++ 混合デバッグ

機械学習をはじめとする分野では、プログラミング言語としてPython と C/C++の混合が広く使われています。その際、SWIGやctypesなどを使ってCやC++の言語でPythonコードの機能を拡張することにより、ライブラリなど既存の資産を利用したり優れたパフォーマンスを得ることができます。しかし、そのように言語を組み合わせて書かれたアプリケーションをデバッグしようとすると、特にアプリケーションが複数のスレッドで構成されている場合には非常に困難が伴います。しばしば自動生成された大量のglueコードの中で道を見失ったり、両言語の間でデータ型の対応が取れなくなることになるでしょう。

この問題を解決するための混合デバッグの便利な方法が TotalView /CodeDynamics に搭載されました。これにより、C/C++で書かれた既存の高速なアルゴリズムをPythonから利用するのが容易になります。

  • 煩雑なグルーコードを非表示
  • 両方の言語の変数を同時に閲覧できるビュー
  • 既存のC++アルゴリズムの処理速度を容易にPythonに取り込む

機械学習のコールスタックをデバッグする方法

Pythonはディープラーニングの領域で人気のある言語ですが、C/C++で書かれた既存の共有ライブラリへの呼び出しをデバッグすることは非常に困難です。 PythonやC/C++のための専用デバッガは言語全体をまたいだ包括的なビューを提供するものではないので、ライブラリコールや両言語でのデータの比較、リンクされたCUDAコードといった複雑な迷路の中で長時間さまようことになるでしょう。

この動画はGPUテクノロジーカンファレンス (GTC) 2017で録画されたもので、マルチスレッド/マルチプロセス対応のデバッガがどのようにPythonとC/C++の間でデータを変換し、それにより皆様のディープラーニングのコード内で何が行われているのかを把握する助けになるのかをお見せします。

PythonとC/C++を組み合わせたコードを書くための様々な技術やデバッグ方法 (Eclipse使用とTotalView使用を比較) を紹介した ホワイトペーパー Mixed-language debugging with Python and C/C++ (英語)または日本語の ローグウェーブオフィシャル ブログ をご覧下さい。言語間の壁を理解するのに役立つでしょう。

PythonStoppedInCWithData-3.png

この混合言語デバッグ機能に、TotalView や CodeDynamics の先進的なマルチスレッド/マルチプロセスデバッグ機能を組み合わせれば、最高のデバッグ体験を実現できます。