翻訳者 | 崔昊 校正 | 梁哲、孫淑娟 1. はじめにこの記事では、Deep Graph Library (DGL) と PyTorch Geometric という 2 つのグラフ ニューラル ネットワークを比較し、チームに適した GNN ライブラリを選択できるようにします。 2. グラフニューラルネットワークDGLとPyTorch Geometricの比較グラフベースのディープラーニングとは何ですか?一般的に言えば、グラフはエッジとノードによって形成されるシステムであり、ノードには何らかの内部状態があり、その状態は、ノードを接続するエッジによって定義される現在のノードと他のノードとの関係によって変更されます。同時に、これらの接続とノードの状態はさまざまな方法で定義できます。 ディープラーニングでは、通常は行列乗算または畳み込みを介して、データに非線形変換を繰り返し適用します。ディープラーニングとグラフを組み合わせることで、グラフニューラルネットワーク (GNN) の分野が急速に発展しました。 グラフは、ソーシャル ネットワーク、分子、その他多くの種類の理論システムなど、ノードと関係によって定義されるあらゆるシステムに便利なフレームワークを提供します。グラフとして定義されたデータを使用すると、研究対象のシステムに関する意味のある構造データと、豊富な数学的およびアルゴリズム的ツールが利用できるようになります。 さらに重要なのは、グラフは行列数学を使用して記述および操作できるため、グラフはディープラーニングの分野でも重要な追加要素となり、長年にわたって同じ数学プリミティブをほとんど使用する高速ディープラーニング ライブラリの開発から大きな恩恵を受けてきたことです。 隣接行列はグラフ内のエッジ接続を表します。 riversunder によるパブリック ドメイン画像 グラフは、多くの種類の問題に対する豊富なフレームワークを提供し、過去数十年にわたってディープラーニング ニューラル ネットワークの大きな成功を可能にしてきました。グラフ ニューラル ネットワーク (GNN) がますます注目を集め、独自のブレークスルーを達成したことは間違いありません。 これまでのところ、グラフディープラーニングにおける最もエキサイティングな成果は、DeepMind が開発した AlphaFold と AlphaFold2 であり、構造生物学におけるタンパク質構造予測という長年の課題の解決に大きな進歩をもたらしました。 グラフ ニューラル ネットワークは、創薬、ソーシャル ネットワーク、基礎生物学、その他多くの分野で無数の重要な用途があるため、グラフ ニューラル ネットワークを操作するためのオープン ソース ライブラリが数多く開発されてきました。 これらのオープンソース ライブラリの多くは十分に成熟しており、運用や研究に使用できますが、新しいプロジェクトを開始するときに使用する適切なライブラリを選択する際には、考慮すべき要素が多数あります。 最も重要な GNN ライブラリの選択は、チームの既存の専門知識との互換性に基づいています。PyTorch の使用に慣れている場合は、PyTorch Geometric が適切な選択ですが、バックエンドとして PyTorch を使用した DGL を使用することもできます (DGL はバックエンドとして TensorFlow を使用することもできます)。 同様に、TensorFlow と Keras に精通している場合は、Spektral の方が価値があるかもしれません。新興の JAX エコシステムを使用して開発したい場合は、Jraph が GNN プロジェクトに適している可能性があります。 もちろん、チームで Python よりも Julia を好む場合は、Flux.jl 機械学習エコシステムをベースにした GeometricFlux.jl または GraphNeuralNetworks.jl を検討することもできます。 Julia で書かれたその他のツール Julia プログラミング言語自体と同様に、GeometricFlux.jl と GraphNeuralNetworks.jl は、より成熟した Python の同等ツールほど有名ではなく、コミュニティもニッチですが、魅力的な利点がいくつかあります。 Julia ベースのツールの利点の 1 つは、Julia に組み込まれた「ジャストインタイム」コンパイルによる実行速度です。 PyTorch や TensorFlow などの言語や類似のライブラリが現在利用できるようになったことで、特定のタスクを達成する際の開発効率が大幅に向上しましたが、機械学習プロジェクトの効率に大きく貢献するもう 1 つの要素は計算速度です。 開発者の時間は多くの場合、貴重なリソースであり、コード自体の実行速度と比較して、機械学習プロジェクトでは過小評価されることがよくあります。しかし、GPU 上で効果的なハードウェア アクセラレーションを実現するためのライブラリが広く利用できなかったとしたら、ディープラーニングが成熟して適用されるまでにはおそらく長い時間がかかるでしょう。 しかし、効率的なソフトウェアがなければ、世界中のあらゆる専用ハードウェアの性能は最大限に発揮されません。この記事では、グラフ ニューラル ネットワークの計算に焦点を当てて、最も人気のある 2 つのオープン ソース ライブラリをベンチマークして比較します。比較のために、Python ライブラリ PyTorch Gemetric と Deep Graph Library (DGL) に焦点を当てます。名前が示すように、Pytork Geometric は Pytorh (およびスパース行列を処理するための多くの Pytorh 拡張機能) に基づいていますが、DGL はバックエンドとして Pytorh または TensorFlow のいずれかを使用できます。 DGL は、チャンピオンのタンパク質構造予測モデルである AlphaFold に大きな影響を与えた、平行移動および回転不変モデルである SE3-Transformer の開発に使用されました。 DeepMind の研究に触発され、Baker 氏の研究室はオープンソースの RosettaFold でタンパク質構造の予測に DGL を使用しました。 PyTorch Geometric は、GitHub で 13,000 を超えるスターを獲得している非常に人気のあるライブラリであり、PyTorch の経験がある人にとって便利で使い慣れた API を提供します。各 API を紹介し、Zitnik と Leskovec (2017) のタンパク質間相互作用 (PPI) データセットで同等の GNN アーキテクチャをベンチマークします。 PPI データセットは、マルチクラス ノード分類タスクを提示します。各ノードは 50 個の特徴で構成されるタンパク質を表し、121 個の非排他的ラベルが付けられます。 しばらくディープラーニング モデルを扱っている場合、Python ライブラリが登場したり消えたりするのを見たことがあるでしょう。 Google が 2015 年にオープンソース ライブラリ TensorFlow をリリースして以来、TensorFlow は広く採用されるようになりました。これまで、ディープラーニング ライブラリのレイアウトは、Theano、AutoGrad、Caffe、Lasagne、Keras、Chainer などのフレームワークで構成される多面的なものでした。 この期間中、ディープラーニングライブラリはすべて独立して開発されました。 GPU サポートが必要な場合は、CUDA を理解する必要があります。 PyTorch は 2016 年にリリースされ、ゆっくりと発展してきましたが、間違いなくディープラーニングの推奨ライブラリになるでしょう。同時に、TensorFlow は Keras を飲み込み、依然として生産プロセスで好まれています。 TensorFlow がバージョン 2.0 をリリースした時点では、PyTorch と TensorFlow という「2 つのライブラリ」間の競争になっているようでした。 TensorFlow は PyTorch のようにより動的になり、PyTorch はジャストインタイム コンパイルと Torchscript によって高速化しており、両者の違いはますます小さくなっています。 おそらく、2 つの主要なライブラリが徐々に収束しつつあるため、学術プロジェクト Autograd の後継である JAX は、機能、機能性、構成可能性を備えたディープラーニングの空きポジションを見つけました。DeepMind などの大手研究所も JAX に注目しています。 Jraph は、グラフベースのディープラーニング向けの DeepMind の JAX ベースのソリューションですが、TensorFlow プロジェクトの Graph Nets (この記事の執筆時点では 1 年以上更新されていません) と多くの機能を共有しています。 次のセクションでは、DGL と PyTorch Geometric をインストールして設定する方法と、各ライブラリを使用して 6 つの隠し層を持つグラフ畳み込みネットワークを構築する方法について説明します。また、PPI データセットでノード分類のトレーニング ループを構築し、それぞれが使用するグラフ データ構造 API の違いについても説明します。最後に、単一の NVIDIA GPU で 10,000 エポックのトレーニングを実行し、各 GPU の速度向上を比較します。 3. PyTorch ジオメトリックPyTorch Geometric (PyG) は、標準の PyTorch によく似た直感的なライブラリです。データセットとデータ ローダーには一貫した API があるため、さまざまなタスクに合わせてモデル アーキテクチャを手動で調整する必要はありません。 1. インストールPyTorch Geometric は、pip、PyTorch 1.10、Python 3.6、CUDA 10.2 を使用したシステム設定に基づいてインストールされたことに注意してください。 仮想環境pyg_env --python = python3 2. モデルとコードKipf と Welling が 2016 年の論文で説明したグラフ畳み込み層 (PyTorch Geometric の GCNConv と DGL の GraphConv) に基づくベンチマーク ライブラリのアーキテクチャを使用します。 PyTorch ジオメトリック グラフ レイヤーは PyTorch の API と非常によく似た API を使用しますが、PyTorch ジオメトリック バッチ クラスの edge_index 内のグラフ エッジを入力として使用します。ライブラリ内のバッチは、1 つ以上のグラフを内部ギャップのある大きなグラフに集約することを記述します。 グラフ畳み込みの場合、これらのバッチは行列乗算と結合隣接行列を使用して重み共有を実装しますが、Batch オブジェクトは batch と呼ばれる変数内のノードとグラフのマッピングも追跡します。 使用するグラフ畳み込みモデルを以下に示します。 DGLとPyTorch Geometricのベンチマークに使用されたグラフ畳み込みネットワークの図 コードでは、PyTorch の torch.nn.Module モデル クラスを継承してモデルが構築されます。 インポート時間 このモデルは入力としてテンソルを取らず、代わりに「バッチ」と呼ばれる変数(一般的なスタイル規則では「データ」と呼ばれることもある)を取ることに注意してください。バッチには、ノードがグラフにどのように対応し、これらのノードがどのように接続されているかを定義する追加情報が含まれています。 この違いを除けば、このモデルは標準的な畳み込みネットワークとよく似ていますが、GCNConv または同様のグラフベースのレイヤーを使用することは標準的な畳み込みではないという点が異なります。 トレーニング ループも PyTorch ユーザーにとっては非常に馴染み深いものですが、個々の入力テンソルではなくバッチ全体をモデルに渡します。ただし、トレーニング ループに入る前に、タンパク質間相互作用 (PPI) データセットをダウンロードし、トレーニングおよびテスト データ ローダーを設定する必要があります。 num_epochs = 10000 これで、トレーニング ループを定義し、各エポックでの時間と損失を追跡する準備が整いました。 損失= [ ] この時点で、コードは PPI データセットで PyTorch Geometric をベンチマークする準備が整いました。これらを用意しておけば、Deep Graph ライブラリで同等のモデルを構築するのがはるかに簡単になります。このモデルは、次のセクションで説明するコードとは若干異なります。 4. ディープグラフライブラリ、DGLDeep Graph Library は、PyTorch または TensorFlow をバックエンドとして利用できる柔軟なライブラリです。このデモでは PyTorch を使用しますが、TensorFlow に慣れていて、グラフでのディープラーニングに使用したい場合は、「TensorFlow」を DGLBACKEND という環境変数にエクスポートすることで使用できます。 少なくとも、コードを調整して torch.nn.Module ではなく tf.keras.Model のサブクラスを作成し、keras API の fit メソッドを使用することができます。 1. インストール繰り返しになりますが、インストールは CUDA 10.2 を使用するシステムで行われますが、CUDA 11 にアップグレードした場合、またはまだ CUDA 10.1 を使用している場合は、DGL Web サイトから正しい pip install コマンドを入手できます。 仮想環境 dgl_env --python = python3 2. モデルとコードDGL では、Kipf グラフと Welling グラフの畳み込み層は、PyTorch Geometric で使用される「GCNConv」ではなく「GraphConv」と呼ばれます。それ以外では、モデルはほぼ同じに見えます。 インポート時間 入力としてバッチを渡す代わりに、g (DGL グラフ オブジェクト) とノード機能を渡すことに注意してください。 トレーニング ループを設定する場合もほとんど同じですが、モデルに渡す内容には特に注意する必要があります。 この場合、ノード機能は 'batch.ndata["feat"]' にありますが、ノード機能に使用される特定のキーはデータセットごとに異なることがわかりました。おそらく「feat」が最も一般的ですが、「node_attr」などもあり、一貫性のない API が少し混乱を招く可能性があります。 これは本当に痛い点でした。このデモではさまざまな組み込みデータセットを試しましたが、さまざまなデータセットに対応するためにコードの一部を書き直すことで開発が大幅に遅れたからです。当然のことながら、PyTorch Geometric で使用される Batch オブジェクトの一貫性が優先されます。 実際には、組み込みデータセットは使用されないため、一貫した内部スタイルは実際のアプリケーションでは問題を引き起こしません。 __name__ == "__main__"の場合: 3. 結果PPI データセット上の DGL および PyTorch ジオメトリグラフ畳み込みネットワークのトレーニング曲線 単一の NVIDIA GTX 1060 GPU で実行し、PPI データセットで PyTorch Geometric と DGL を使用して 10,000 エポックにわたってモデルをトレーニングしました。 PyG はトレーニングを完了するのに 2,984.34 秒かかりましたが、DGL は半分以下の 1,148.05 秒でした。 両方の実行は同様のパフォーマンスで終了し、PyG では 73.35% のテスト精度、DGL では 77.38% でした。ランダム初期化によって各実行で何らかのチャンスが発生することが予想されます。 10,000 エポック後も損失は減少し続けているため、このモデル アーキテクチャは最終的にわずかに高い精度に収束すると予想できます (ただし、この実験では検証損失は追跡しませんでした)。 5. あなたにとって最適な GNN ライブラリはどれですか?異なるライブラリ間でのトレーニング時間の大きな違いに人々は驚きました。 DGL と PyG はどちらも PyTorch 上に構築されているか、計算バックエンドとして PyTorch を使用しているため、どちらも 10% または 20% 以内に完了すると予想されます。 バッチ API は DGL の同等の API よりも直感的で一貫性があるため、実際には DGL を使用するよりも PyTorch Geometric を使用してトレーニング ループをセットアップする方が快適であることがわかりました。 PPI データセットに落ち着く前に、いくつかの異なるデータセットを試しましたが、それぞれがノード機能を取得するために DGL に異なるキーを使用しているようでした。 そうは言っても、DGL の使用中に遭遇したいくつかの小さな煩わしさは、DGL よりも長く PyG を使用しているため、ライブラリの慣れに関係している可能性があります。 さまざまなアーキテクチャやレイヤー タイプのパフォーマンスを調査することは確かに価値がありますが、適切なライブラリを選択するだけで 2 倍のパフォーマンス向上を達成できる可能性は低いでしょう。 開発者の時間はモデルの計算時間よりも少ないですが、この設定では DGL はほぼ 2.6 倍高速であるため、モデル ライブラリをトレーニングして切り替える価値があります。同時に、DGL エコシステムで発生する小さな問題も、慣れが増すにつれて解決されるでしょう。 DGL は PyTorch Geometric ほど人気がないようですが、GitHub のスターとフォークの数 (DGL 13,700/2,400 対 PyTorch 8,800/2,000) からわかるように、大規模なコミュニティ サポートと豊富なドキュメントにより、DGL ライブラリは簡単に習得でき、発生する問題の解決にも役立ちます。 どちらを選択するかに関係なく、データをネットワーク化し、グラフにエンコードされた構造情報を学習できる環境であれば、多くの学習コンテンツを提供できます。また、ハードウェアとソフトウェアのサポートと高速スパース行列計算の改善により、GNN ライブラリへの投資の価値が高まります。 オリジナルリンク: https://dzone.com/articles/pytorch-geometric-vs-deep-graph-library 翻訳者紹介51CTO コミュニティ エディター兼シニア アーキテクトの Cui Hao 氏は、ソフトウェア開発とアーキテクチャで 18 年の経験があり、分散アーキテクチャでは 10 年の経験があります。元HPの技術専門家。彼は情報を共有することに積極的で、60 万回以上読まれている人気の高い技術記事を多数執筆しています。 『分散アーキテクチャの原則と実践』の著者。 |
<<: インテリジェントな顧客サービス チャット モジュールの 3 つのソリューションを比較すると、どれが気に入りましたか?
>>: 今後 30 年間、人工知能の時代において、どの職業が消滅し、あるいは存続するのでしょうか?
人工知能(AI)は人類社会を真に知的な時代へと導くことができるのでしょうか?人工知能産業は60年以上...
2月28日、BaiduはXiaodu新製品戦略発表会で、Xiaodu TV CompanionとXi...
[51CTO.com クイック翻訳] インターネットの活発な発展とインターネットユーザーの継続的な増...
Hugging Faceのオープンソース大型モデルのランキングがまた更新されました。今回のランキング...
[[197493]]この記事の主な内容は機械学習と神経科学を組み合わせたものであり、読者にはこれら...
画像ソース: https://pixabay.com/images/id-1069218/ 2024...
外交活動に関して、近年最も議論されている概念は「デジタル外交」であろう。 2010年には、当時米国務...
[[414048]]この記事では、面接の質問と面接のシナリオを使用して、再帰アルゴリズムの時間計算量...
AI が洞察を導き出し、意思決定を行う方法は謎に包まれていることが多く、機械学習の信頼性について懸...
手やキーボードを使わず、思考だけに頼って、1分間に691.55ビットをコンピューター画面に出力できま...
この記事は、Heart of Autonomous Driving の公開アカウントから許可を得て転...
10月11日、北京市経済情報化局は「人工知能コンピューティングパワーバウチャー実施計画(2023~2...