Skip to main content
QUICK REVIEW

[論文レビュー] A Compilation Target for Probabilistic Programming Languages

Brooks Paige, Frank Wood|arXiv (Cornell University)|Mar 3, 2014
Bayesian Modeling and Causal Inference参考文献 10被引用数 43
ひとこと要約

この論文では、標準的なCコンパイラとPOSIXシステムプリミティブ(fork、プロセス、共有メモリなど)を用いて機械語にコンパイル可能な、ポータブルで効率的な確率的プログラミングのための中間表現であるProbabilistic Cを紹介する。OSの機能を活用することで、順序モンテカルロとパーティクルMCMCによるスケーラブルで並列な前方推論を実現し、確率的プログラミングワークロードのシステムレベル最適化の新しい道筋を確立する。

ABSTRACT

Forward inference techniques such as sequential Monte Carlo and particle Markov chain Monte Carlo for probabilistic programming can be implemented in any programming language by creative use of standardized operating system functionality including processes, forking, mutexes, and shared memory. Exploiting this we have defined, developed, and tested a probabilistic programming language intermediate representation language we call probabilistic C, which itself can be compiled to machine code by standard compilers and linked to operating system libraries yielding an efficient, scalable, portable probabilistic programming compilation target. This opens up a new hardware and systems research path for optimizing probabilistic programming systems.

研究の動機と目的

  • 標準コンパイラを用いて機械語にコンパイル可能な、ポータブルで効率的な確率的プログラミングのための中間表現を設計すること。
  • 標準POSIXオペレーティングシステムプリミティブのみを用いて、スケーラブルで並列な前方推論(例:SMC、パーティクルMCMC)を可能にすること。
  • 低レベルのハードウェアおよびOS最適化を通じて、確率的プログラミングのパフォーマンス最適化に関するシステム研究の基盤を構築すること。
  • 推論戦略を高水準言語設計から分離するために、低レベルのコンパイルターゲットを提供すること。
  • 確率的推論におけるプロセスベースの並列処理と、他の並列モデル(例:スレッド、ユーザーレベルの抽象化(例:分岐継続))との間のパフォーマンスのトレードオフを調査すること。

提案手法

  • Probabilistic Cは、データ尤度の条件付けに用いるobserve(観測)と、事後分布サンプルの出力に用いるpredict(予測)のマクロを標準Cに拡張したCライブラリである。
  • 並列実行を実現するために、POSIXのforkシステムコールを用いて、実行パスごとのパーティクルベースの推論を実装する。
  • main関数をマクロでラップし、元のプログラムをループで実行することで、SMCおよびパーティクルMCMC推論のための複数のパーティクル実行をシミュレートする。
  • 推論は、各々が1つの実行パスを実行する複数のプロセスを生成することで実現され、尤度はobserveによって計算され、結果はpredictによって収集される。
  • 標準CコンパイラとPOSIX準拠のOSライブラリに依存しているため、アーキテクチャ間でのポータビリティが保証される。
  • 乱数生成と対数尤度の観測、事後予測の組み合わせにより、一般用途の確率的モデル(例:正規分布、HMM)をサポートする。

実験結果

リサーチクエスチョン

  • RQ1標準POSIXシステムプリミティブ(例:fork、共有メモリ)のみを用いて、確率的プログラミングにおける前方推論を効率的かつポータブルに実装できるか?
  • RQ2forkによるプロセスベースの並列処理は、スケーラブルな確率的推論システムの基盤として実用的でかつパフォーマンスに優れているか?
  • RQ3ページサイズ、メモリ管理、プロセススケジューリングなどのシステムレベルの特性が、確率的推論のパフォーマンスにどのように影響を与えるか?
  • RQ4プロセスの多重化とメモリレイアウトに特化したシステム最適化が、確率的プログラミングワークロードのパフォーマンス向上に寄与できるか?
  • RQ5プロセス(fork経由)とスレッド、またはユーザーレベルの抽象化(例:分岐継続)との間で、パフォーマンス、ポータビリティ、統計的正しさの観点からどのようなトレードオフが生じるか?

主な発見

  • Probabilistic Cは、標準CコンパイラとPOSIXシステムライブラリを用いて、効率的でポータブルな機械語にコンパイル可能であることが確認された。
  • forkの使用により、パーティクルベースの推論にネイティブな並列処理が可能となり、マルチコアシステムでのスケーラブルな実行が実現された。
  • OSレベルの特性(例:ページサイズ)がパフォーマンスに影響を与え、特に小さなページサイズでは、確率的変数の代入時のコピーオーバーヘッドが低減され、効率が向上する可能性がある。
  • システムレベルのプリミティブのみを用いても、SMCやパーティクルMCMCのような前方推論戦略を効率的に実装できることを示した。言語レベルの拡張は不要である。
  • observeの同期ポイントにおけるプロセス同期のオーバーヘッドがパフォーマンスボトルネックであることが判明し、最適化されたキュー基盤の同期モデルの導入が有効である可能性がある。
  • 本アプローチにより、コア間での高速なプロセス多重化に最適化されたページ置換ポリシーなどのアーキテクチャ固有の最適化に関する今後のシステム研究が可能になる。

より良い研究を、今すぐ始めましょう

論文設計から論文執筆まで、研究時間を劇的に削減しましょう。

クレジットカード登録不要

このレビューはAIが作成し、人間の編集者が確認しました。