Now Available on Amazon SageMaker: The Deep Graph Library 和訳してみた

##はじめに
今回は、Julien Simon 氏が2019年12月3日に投稿した「Now Available on Amazon SageMaker: The Deep Graph Library」の内容を翻訳し、まとめてみました。本記事と Deep Graph については下記リンク参照。

■リンク
[Now Available on Amazon SageMaker: The Deep Graph Library](https://aws.amazon.com/jp/blogs/aws/now-available-on-amazon-sagemaker-the-deep-graph-library/)
[The Deep Graph Library](https://www.dgl.ai/)


##Now Available on Amazon SageMaker: The Deep Graph Library
###Deep Graph Library
Amazon SageMaker で、Deep Graph Library が利用できるようになったことを、発表します。
Deep Graph Library は、オープンソースライブラリです。特徴としては、グラフニューラルネットワーク（GNN）の実装を簡単に行うことができます。
ディープラーニングは、テキストやイメージ、あるいはビデオなどの複雑なデータから精巧なパターンを切り抜くことができます。しかし、全てのデータセットにディープラーニングが当てはまるとは限りません。グラフ表示で十分な場合もあります。その様なデータセットに対しては、畳込ニューラルネットワークや、回帰型ニューラルネットワークといった伝統的なニューラルネットワークアーキテクチャに替わる別のアプローチが必要となります。

###A Primer On Graph Neural Networks
グラフニューラルネットワーク（GNN）は、今日のマシンラーニングにおいて最もエキサイティングな開発の1つです。
GNN は、以下の様なデータセットの予測モデルのトレーニングに利用されます。

- グラフで関係性のある人間同士の繋がりを示しているソーシャルネットワーク
- グラフで顧客と商品の相互作用を示す推薦システム
- グラフで原子と結合でモデル化されチエル合成物質を示している化学解析
- グラフでIPアドレスとソースの疎通を示しているサイバーセキュリティ

等々、上記以外にも対象となるデータセットは沢山あります。
殆どの場合、これらのデータセットは膨大であるにも関わらず、十分にラベル化されていません。

###Introducing The Deep Graph Library
Deep Graph Library（DGL） は、2018年12月に、初めてリリースされました。DGL は Python オープンソースライブラリで、データセットに GNN の構築やトレーニング、そして評価を簡単に行うことができます。
DGL は、PyTorch や Apache MXNet といった有名なディープラーニングのフレームワーク上に構築されております。また、DGL 内に実装されているカッティングエッジモデルの数々を試すことも可能です。例えば、下記のコマンドを入力することで、グラフ畳み込みネットワーク（GCN）と、CORA データセットを使用したドキュメント分類モデルを簡単にトレーニングできます。

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

DGL には、簡単にダウンロードし、実験できるデータセットが用意されております。DGL をインストールし、ローカルで利用することも可能ですが、AWS ではより簡単に利用できるよう、PyTorch および Apache MXNet の Deep Learning Containers に追加しました。これにより、どんな規模のモデルのトレーニングもデプロイもできます。

###Using DGL On Amazon SageMaker
SageMaker の例のために Github リポジトリに例題を追加しております。そのうちの1つ、Tox 21 データセットを使用した分子毒性予測のシンプルな GNN トレーニングを簡単に紹介したいと思います。

- 取り組む内容
 -  12 の異なるターゲット（生体細胞内の受容体など）に対して、新しい化合物の潜在的な毒性を把握すること
- データセットについて
 -  8,000 ちょっとの化合物がデータセットにある
 -  各化合物はグラフ（原子は頂点、原子結合はエッジ）としてモデル化されている
 -  12回ラベル付けされている（1つのターゲットに1つのラベル）

GNNを使用し、マルチラベルバイナリ分類モデルを構築することで、候補分子の潜在的な毒性を予測できるようにします。
トレーニングスクリプトでは、下記のコマンドで DGL のコレクションから簡単にデータセットをダウンロードできます。

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

同じ様に、DGL モデル zoo を使用することで、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'])`


残りのコードの大部分はバニラ PyTorch で、このライブラリに精通していれば、ベアリングを見つけることができるはずです。
Amazon SageMaker でこのコードを実行する場合は、SageMaker を 使用して、EstimatorDGL コンテナのフルネームとトレーニングスクリプトの名前をハイパーパラメーターとして渡すだけです。


   `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 でトレーニング済みのモデルを取得し、それを使用して、実際の実験を実行することなく、多数の化合物の毒性を予測できました。

##おわりに
Now Available on Amazon SageMaker: The Deep Graph Library の和訳は以上となります。