Amazon Web Services ブログ

Deep Graph Library が Amazon SageMaker で利用可能に

本日ここに、グラフニューラルネットワークを簡単に実装できるよう構築されたオープンソースライブラリ、Deep Graph Library が、Amazon SageMaker で利用可能になったことをお知らせします。

近年、自由形式のテキスト、画像、動画など、複雑なデータから詳細なパターンを抜き出すことができる、驚異的な性能の深層学習が世界に旋風を巻き起こしています。しかし、多くのデータセットはこれらのカテゴリーに当てはまらないため、グラフの方がわかりやすく表すことができます。 畳み込みニューラルネットワークや再帰型ニューラルネットワークのような、従来のニューラルネットワークのアーキテクチャは、そのようなデータセットに適していないことは直感的にも感じられ、新しいアプローチが必要となります。

グラフニューラルネットワークの初歩
グラフニューラルネットワーク (GNN) は、今日の機械学習におけるもっとも画期的な発展事項です。手始めに、これらの参考資料をご覧になるとよいでしょう。

GNN は、以下のような予測モデルのトレーニングに使用されています。

  • ソーシャルネットワーク。関連する利用者同士のつながりをグラフ化
  • 推奨システム。顧客とアイテムの間のやり取りをグラフ化
  • 化学分析。原子や結合をグラフ化して化合物のモデルを作成
  • サイバーセキュリティ。発信元と発信先の IP アドレスの接続状況をグラフ化で説明
  • その他多数のモデル

ほとんどの場合、これらのデータセットは非常に大きく、部分的なラベル付けしかできません。ある個人から既知の不正を行う者への接続状況を分析することで、その個人が不正を行っている可能性を予測する、不正行為検出シナリオを考えてみましょう。この問題は、グラフノードの一部のみがラベル付けされる (「不正」か「正当」)、半教師あり学習タスクとして定義できます。これは大きなデータセットを手作業のラベル付けにより構築し、「線形化」して従来の機械学習アルゴリズムに適用するよりも良いソリューションになるはずです。

これらの問題に対処するためには、分野の専門知識 (小売、財務、化学など)、コンピューターサイエンスの知識 (Python、深層学習、オープンソースツール)、インフラストラクチャの知識 (トレーニング、デプロイ、モデルのスケーリング) が必要です。これらのスキルをすべてマスターしている人はごくわずかです。それが Deep Graph LibraryAmazon SageMaker のようなツールが必要とされる理由です。

Deep Graph Library の紹介
2018 年 12 月に Github で初めてリリースされた Deep Graph Library (DGL) は Python のオープンソースライブラリーで、研究者や科学者がデータセットの GNN を迅速に構築、トレーニング、評価するのに役立ちます。

DGL は、PyTorchApache MXNet のような人気の深層学習フレームワーク上に構築されています。いずれかのフレームワークを知っていれば、すぐに慣れることでしょう。どのフレームワークを使用しても、これらの初心者向けので簡単に始めることができます。また、GTC 2019 のワークショップでのスライドやコードも非常に役立ちます。

簡単な例を使ってみた後は、すでに DGL に実装された多数の最新鋭モデルをチェックすることができます。たとえば、グラフ畳み込みネットワーク (GCN) と CORA データセットを使用してドキュメントの分類モデルのトレーニングができます。この場合は以下の内容を実行するだけです。

$ python3 train.py --dataset cora --gpu 0 --self-loop

調査や設定用にすべてのモデルのコードが利用可能です。これらの実装では、AWS チームによる入念な検証が行われています。チームではパフォーマンスの要求の検証を行い、結果を再現できるようにします。

また DGL には、簡単にダウンロードして試用できる、さまざまなグラフデータセットが含まれています。

もちろん DGL はローカルにインストールして実行することもできますが、簡素化するために、PyTorch と Apache MXNet 用の深層学習コンテナに追加しました。こうすることで、Amazon SageMaker で DGL を使用し、サーバーを一切管理することなく、スケールを問わずにモデルのトレーニングとデプロイを行うことが容易になります。その方法を説明します。

Amazon SageMaker で DGL を使用する
SageMaker の例の Github リポジトリに完全な例を追加しました。その 1 つでは、Tox21 データセットを使用して、分子の毒性を予測する単純な GNN をトレーニングします。

解決しようとしている問題は、異なる 12 種類のターゲット (生物細胞内の受容体など) について、新しい化合物の持ちうる毒性を推測することです。想像できると思いますが、このようなタイプの分析は新しい薬品を開発する際に非常に重要です。試験管による実験を行うことなく迅速に結果を予測できれば、研究者はもっとも有望な薬品の候補に労力を集中することができます。

このデータセットには、8,000 種強の化合物が含まれています。それぞれがグラフ (原子を頂点、原子結合を線とする) としてモデリングされ、12 回分のラベル付けがされています (ターゲット 1 つあたり 1 ラベル)。候補となる分子が持つ可能性のある毒性を予測できるよう、GNN を使用して複数ラベルのバイナリ分類モデルを構築しようとしています。

トレーニングのスクリプトでは、データセットを DGL コレクションから簡単にダウンロードできます。

from dgl.data.chem import Tox21
dataset = Tox21()

同様に、DGL モデルズーを使用して GNN 分類機能を簡単に構築できます。

from dgl import model_zoo
model = model_zoo.chem.GCNClassifier(
    in_feats=args['n_input'],
    gcn_hidden_feats=[args['n_hidden'] for _ in range(args['n_layers'])],
    n_tasks=dataset.n_tasks,
    classifier_hidden_feats=args['n_hidden']).to(args['device'])

コードの残りはほとんどが vanilla PyTorch のため、このライブラリーに慣れていれば理解できるでしょう。

このコードを Amazon SageMaker で実行する場合、SageMaker Estimator を使用して DGL コンテナの完全な名前と、ハイパーパラメータ―としてのトレーニングスクリプトの名前を渡すだけです。

estimator = sagemaker.estimator.Estimator(container,
    role,
    train_instance_count=1,
    train_instance_type='ml.p3.2xlarge',
    hyperparameters={'entrypoint': 'main.py'},
    sagemaker_session=sess)
code_location = sess.upload_data(CODE_PATH,
bucket=bucket,
key_prefix=custom_code_upload_location)
estimator.fit({'training-code': code_location})

<output removed>
epoch 23/100, batch 48/49, loss 0.4684

epoch 23/100, batch 49/49, loss 0.5389
epoch 23/100, training roc-auc 0.9451
EarlyStopping counter: 10 out of 10
epoch 23/100, validation roc-auc 0.8375, best validation roc-auc 0.8495
Best validation score 0.8495
Test score 0.8273
2019-11-21 14:11:03 Uploading - Uploading generated training model
2019-11-21 14:11:03 Completed - Training job completed
Training seconds: 209
Billable seconds: 209

これで、S3 上にトレーニング済みモデルを入れ、実際の実験を行うことなく、大量の化合物の毒性予測に使用することができます。素晴らしい機能ですね。

今すぐご利用いただけます!
DGL は Amazon SageMaker 上で今すぐ使用を開始できます。

AWS では皆さんからのフィードバックをお待ちしています。DGL フォーラムAmazon SageMakerAWS フォーラム、または通常の AWS サポートの連絡先からご意見をお寄せください。

Julien