この記事は、The Parallel Universe Magazine 41 号に掲載されている「Taking Data Science Application to the Next Level with OmniSci」の日本語参考訳です。
この 10 年間、テクノロジーの展望は主にデータ自身により推進されてきたことは明らかです (データと AI の状況 2019 (英語) を参照)。純粋な応用科学であれ産業であれ、人間の試みのあらゆる分野で、問題を解決する主な方法として、我々はデータを収集して使用しています。その結果、データサイエンスが重要な分野として注目を集めるようになりました。増え続けるデータセットから有用な情報を整理して引き出せることは重要なスキルセットであり、データ・サイエンティストがより大きくより詳しいデータを扱えるようにさまざまなツールと手法が登場しました。
データ・サイエンティストの一般的なワークフローは、基本的に図 1 のような反復プロセスです。
図 1. データ・サイエンス・ワークフロー
データ・サイエンティストは、(職業プログラマーではなくデータ・サイエンティストにとっての) 使いやすさと統計および数値計算向けライブラリーを広範にサポートするエコシステムの組み合わせとして、Python* および R エコシステムを長年支持してきました。近年、データサイエンスの重要なサブフィールドとしてディープラーニングと AI が出現したことで、これらのエコシステムにも多くの機能が追加されています。特に Python* は、マシンラーニングと AI ワークフローで広く普及しています。
Python* の世界では、しばらくの間、PyData スタック (図 2) が最も完全で人気の高いデータ・サイエンス・ツールのセットでした。N 次元配列データの最も低いレベルの数値計算 (NumPy) から始まり、このスタックは、科学計算 (SciPy*)、表形式/リレーショナル・データ解析 (pandas)、シンボリック計算 (SymPy) の一連のレイヤーを提供します。
スタックの上位には、可視化 (Matplotlib、Altair*、Bokeh)、マシンラーニング (scikit-learn)、グラフ・アナリティクス (NetworkX など) に特化したライブラリーも用意されています。AstroPy や BioPython などのドメイン固有のツールキットは、これらのレイヤー上に構築され、オープンツールのディープでリッチなエコシステムを提供します。これらに加えて、Jupyter* プロジェクトは、インタラクティブ・コンピューティングのアイデア全般、特にデータに基づくストーリーテリングの推進に大きく貢献しました。多くのデータ・サイエンティストは、デフォルトの開発環境として Jupyter* を使用し、仮説とモデルを作成して調査しています。
図 2. データ・サイエンス・ワークフロー
OmniSci: 最新のハードウェアを活用してアナリティクスを高速化
OmniSci (旧 MapD) では、2013 年以降、HPC の手法を使用して分析 SQL とデータ可視化を同時に高速化しました。オープンソースの OmniSciDB SQL エンジンは、複数のアイデアを結集したものです。
- メモリー階層の効率的な利用による I/O アクセラレーション
- 分析 SQL カーネル向けの LLVM ベースの JIT コンパイル
- 大規模なインサイチュ・データの可視化
- マシンラーニングやディープラーニングなどのアウトオブコアのワークフローとの効率的なデータ交換
これらのアイデアを結集することにより、GPU などのハードウェア・アクセラレーターと最新のベクトル CPU の両方で、分析 SQL クエリーを 2 桁から 3 桁高速化できます。
OmniSci は当初、分析 SQL とデータ可視化の問題に取り組んでいましたが (OmniSciDB エンジンは 2017 年にオープンソース化)、主要な統合とインターフェイスを備えたオープンな PyData エコシステムにさらなる価値を提供できることに気付きました。我々は、データ・サイエンティストが PyData スタック内のプログラム・ワークフロー、つまり Jupyter* の内部で作業して、(未加工の SQL ではなく) 使い慣れた API を使用してデータを操作できるようにしようと考えました。これを念頭に、NumPy と SciPy* の作者の Travis Oliphant 氏により設立された Quansight Labs と協力して、Python* API のレイヤーのセットでコア OmniSciDB エンジンのスケーラビリティーとパフォーマンスを活用するオープン・データ・サイエンス・スタックを実現しました。
コンパイラーの最適化に関する詳細は、最適化に関する注意事項を参照してください。