- 科学データ可視化は、大容量・高次元データとリアルタイム分析の要求によりボトルネックが大きくなっており、fastplotlib はそれを GPU アクセラレーションによるプロットで軽減しようとする Python ライブラリ
- WGPU ベースのレンダリングにより、大規模データ探索、高速なプロトタイピング、アルゴリズム設計、計測機器向けのリアルタイム収集システム構築を支援
- 配列中心の API を採用し、初回プロット後も NumPy スタイルのインデクシングで色・カラーマップ・データといったグラフィック属性を動的に変更可能
- コールバックベースのイベントシステムで、クリックのようなユーザー操作を定義し、例ではクリック位置に最も近い円を見つけて色を変える流れを構成
- レンダリングは pygfx 上に抽象化され、WGPU を通じて Vulkan、Metal、DX12 を対象とするため、OpenGL 中心のツールよりも最新 GPU の活用に重点を置く
fastplotlibが狙う科学可視化のボトルネック
- fastplotlib は WGPU を活用する GPU アクセラレーション 科学プロットライブラリであり、高速でインタラクティブな可視化を目指している
- 科学可視化が難しくなる理由はおおむね次のとおり
- データが テラバイト規模 に達することがあり、高次元である場合が多い
- 計算資源を効率的に使いにくい
- 多くのツールが静的プロット中心であるか、大容量データにうまくスケールしない
- データ生成速度に対して可視化が遅く、リアルタイム分析が遅延する
- fastplotlib は高性能・インタラクティブ可視化のため、次の用途を強調している
- GPU アクセラレーション可視化
- 高速なプロトタイピングとアルゴリズム設計
- 大規模データ探索と高速レンダリング
- 計測機器向けの リアルタイム収集システム の作成
- ほとんどのユースケースでは、最新の統合 GPU で十分
静的プロットを超えるインタラクティブ探索
- 従来の科学可視化は静的プロットに依存してきたが、動的でインタラクティブな可視化はデータ探索と分析をより直接的なものにする
- 例として Olivetti faces dataset の共分散行列を fastplotlib でインタラクティブに可視化している
- 左のサブプロットは Olivetti faces dataset の共分散行列を表示する
- 共分散行列の各要素は、2 つのピクセルの強度が一緒にどのように変化するかを表す
- 右のサブプロットは、現在選択されている共分散行列の行を再構成した画像
- セレクターを動かすことで、表示中の行を簡単に切り替えられる
- 共分散行列だけを静的に見るより、各行の再構成画像をあわせて見ることで、データセット内の顔においてピクセル強度がどう変化するかをよりよく把握できる
- この例は、共分散行列そのものを深く分析するというより、小さなレベルの 相互作用 だけでもデータ理解が向上しうることを示している
- fastplotlib は、高水準のインタラクティブプロットを作成できるメカニズムを提供し、科学可視化の活用範囲を広げようとしている
配列のように扱える API
- Python の科学可視化エコシステムには多くのオープンソースツールがあるが、一部のライブラリは API が複雑で、科学者やユーザーにとって参入障壁が高い
- fastplotlib は高速なインタラクティブ可視化を 直感的な API で提供しようとしている
- 中核となる設計は、可視化内のデータを配列以外のものとして考えなくてもよいようにすること
- データが馴染みのある配列構造を保てば、可視化との相互作用も単純になる
- 例では正弦波を描画した後、NumPy スタイルのインデクシングで 3 つおきの点の色を赤に変更している
sine_wave.colors[::3] = "red"
- この方式により、最初にプロットした後でもグラフィックのさまざまな属性を動的に操作できる
- 配列型 API は、fastplotlib を柔軟かつ直感的に使えるようにするための基盤
コールバックで構成するイベントシステム
- fastplotlib はイベントシステムもシンプルに扱えるよう設計されている
- グラフィックやプロット間のイベントは コールバック関数 で定義でき、これによりインタラクティブ可視化を作成・拡張できる
- クリックイベントの例は次の流れで動作する
- 複数の円データを生成する
add_line_collection で円をプロットに追加する
- レンダラーに
"click" イベントハンドラーを登録する
- クリック位置を画面座標からワールド座標に変換する
- クリック位置に最も近いグラフィックを見つける
- 最も近い円の色を白に変更する
- イベント処理は、まず動作を関数として定義し、その後で対象のグラフィックやプロットにハンドラーを追加する方式
- ユーザーは複雑なライブラリ専用 API を新たに学ぶより、関数を定義する形で相互作用を構成できる
最新 GPU とグラフィックス API の活用
- GPU は科学用途において事実上の前提条件に近く、可視化も例外ではない
- 高解像度可視化を高性能に実現するには、GPU の計算資源を最大限活用する必要がある
- fastplotlib の例では 300万個のポイント をプロットしながら、次の操作を行っている
- 線をプロットする
- 拡大・縮小を行う
- 線のカラーマップを変更する
- 特定ポイントの色を個別に変更する
- 他の Python 科学可視化ライブラリでは、これほど多くのポイントを一度にプロットし、ポイント色を細かく制御するのは難しい
- fastplotlib は pygfx レンダリングエンジン上に抽象化されている
- pygfx は WGPU で駆動され、WGPU はプラットフォームごとに次のグラフィックス API を対象とする
- Linux: Vulkan
- Mac: Metal
- Windows: DX12
- Vulkan、Metal、DX12 は OpenGL より高速で効率的であり、GPU ハードウェアをより有効に活用できる新しいグラフィックス API
- fastplotlib が pygfx 上に構築されている理由は、カメラ、レンダラー、シーンといった低レベルのレンダリングエンジン詳細や定型コードを抽象化し、ユーザーがデータに集中できるようにするため
ドキュメントと今後の内容
- fastplotlib は、使いやすい配列型 API と最新のグラフィックスハードウェアを組み合わせることで、Python 科学可視化の現在の課題に取り組もうとしている
- ドキュメントと例は fastplotlib ドキュメント で提供されている
- 質問や議論は GitHub Issue または Discussion を通じて受け付けている
- 今後は fastplotlib の使用例や基盤となるグラフィックス技術をさらに深く扱う記事が追加される予定
まだコメントはありません。