Cloud Numerics-それは何ですか?

先週、マイクロソフトがクラウドで作業するための数学ライブラリをリリースするというメモを投稿しました。



製品自体へのリンク



このライブラリーがなぜ必要なのか、他の多くのライブラリーとどのように違うのか、どのように機能するのかについて多くの質問を受けました。 この出版物では、同僚のロニー・フーガーヴェルトが以前に発表した記事を簡単に例を挙げて説明します。 今後の投稿では、Cloud Numericsのより複雑な例を提供する予定です。



したがって、「Cloud Numerics」は、大規模な分散データアレイで集中的なコンピューティングを実行するように設計された新しい.NETプログラミングフレームワークです。



このフレームワークは以下で構成されます。



1.データセット用の従来の分散コンテナ

2.クラウド内のクラスターノード上のデータの分布を操作し、それらに対して並列計算を実行できるシステム

3.複数のクラスターノードで同時に実行できる幅広いライブラリ数学関数

4. Windows AzureのCloud Numerics上に構築されたアプリケーションの展開と実行を簡素化するユーティリティのセット



Map / Reduceアプローチを使用するシステム(Hadoopなど)は、大規模なデータ配列の処理を大幅に簡素化するように設計されました。 これらのシステムは、非常にシンプルなプログラミングモデルと、標準コンピューティングノードで構成される巨大なクラスターのスケーリングの詳細を隠すプログラムサブシステムを提供します。 この単純化されたモデルは、クラスター内のすべてのノードのメインメモリに収まらないほど大きなデータに対して、リレーショナル操作、クラスタリングアルゴリズム、および機械学習を実行するのに適しています。



ただし、これらのアプローチは、データがクラスターノードのRAMに収まる場合には必ずしも最適ではありません。 さらに、対話型アルゴリズムの性質、または配列の操作に関して最も単純に形式化されたアルゴリズムにより、Map / Reduceのようなソフトウェアモデルを表現するのはかなり困難です。 結局、Mahout、Pegasus、HAMAなどのデータ分析および機械学習用の多くのライブラリが開発された動的なHadoopエコシステムは、長年にわたって最適化および検証されてきたPBLASやScaLAPACKのような既存の開発されたスケーラブルな線形代数ライブラリの可能性を利用していません。



同時に、Message Passing InterfaceやMPIなどのライブラリは、大規模クラスターのRAMに保存されたデータを効率的に処理するには理想的ですが、プログラミングが非常に困難です。 このようなライブラリのユーザーは、クラスターノードとその内部で動作するさまざまな並列プロセス間のデータ転送アルゴリズムの実装を注意深く監視する必要があります。 これが十分に行われないと、このような「生産性の高いプログラム」の開発により、スケーラビリティが極端に低くなり、復元できない予測不能な障害、フリーズ、クラッシュが発生する可能性が高くなります。



「Cloud Numerics」が提供する抽象化とインターフェースには、並列コンピューティングを編成するための低レベルの構造は含まれていません。 並行性は暗黙的に実装され、分散マトリックスなどのデータ型の操作の背後にあるユーザーからは隠されています。 非表示の並列操作は、シンプルで効率的なコード操作につながり、既存のBLASおよびScaLAPACKライ​​ブラリーを使用します。



Hello Worldの例


並列ソフトウェアモデル「Cloud Numerics」を簡単に説明するために、分散行列をメモリに読み込み、その固有値を並列に計算し、行列の二重ノルムと条件を出力するC#の例を示します。



var A = Distributed.IO.Loader.LoadData(csvReader);

var S = Decompositions.SvdValues(A);

var s0 = ArrayMath.Max(S);

var s1 = ArrayMath.Min(S);

Console.WriteLine("Norm: {0}, Condition Number: {1}", s0, s0 / s1);



.







All Articles