このハンズオンは Amazon SageMaker 上で PyTorch を使った機械学習/深層学習を学ぶことを目的としています。
このコースを終えたあと、以下のような概念/方法を習得することができます。
- Amazon SageMaker を使って PyTorch のモデルを構築・学習・デプロイする方法
- Amazon SageMaker を使った分散学習 (複数GPU、あるいはマルチノード)
- Amazon SageMaker を使ったハイパーパラメータのチューニング
なお、以下の知識を前提とします。
- 機械学習/深層学習の概念と一般的な理解
- Python/PyTorch を用いたプログラミング
- AWS の基礎的な知識と操作方法
3つのコンテンツの間に5分ずつの休憩をはさみ、2時間のハンズオンを通して学習できるよう構成されています。なお、これらのコンテンツを動かす SageMaker ノートブックインスタンスは ml.c5.xlarge
を推奨します (ml.t2.medium
でも動きますがローカルでの計算が少し遅くなります)。
- SageMaker で PyTorch の分散学習 (40分) [notebook]
- ベイズ最適化による Hyper Parameter Optimization (HPO) (40分) [notebook]
- SageMaker で Torchvision の転移学習 (30分) [notebook]
以下は必須ではありませんが追加のコンテンツです。
1. 分散学習
- Cifar10 を使った学習スクリプト
source/cifar10.py
が用意されているので、これをエントリーポイントとした SageMaker の学習を行います。- デフォルトではローカルモードを用いて学習を行うようになっているので、ノートブックを書き換えて分散学習のジョブを発行します (実はスクリプト自体は元から対応しているので書き換えなくていい)。
- ここでは
PyTorch 0.4.0
ビルド済みコンテナを呼び出しています。対応バージョンはこちら参照、なお 2018-12-02 時点の対応バージョンは0.4.0
,1.0.0.dev
("Preview") です。 - 出力を見て複数ノードで学習が分散されていることを確認します。
- SageMaker PyTorch Estimator
sagemaker.pytorch.PyTorch
について:hyperparameters={'epochs': 6}
でハイパーパラメータを渡すことができます。- (optional)
metric_definitions
で CloudWatch メトリクスとして結果を出力することができます [ドキュメント]。
metric_definitions=[ {'Name': 'train:loss', 'Regex': 'loss: ([0-9\.]+)'}, ]
- (optional) 学習スクリプト
source/cifar10.py
68行目transforms.Compose([])
の中に以下の操作などを書き足して Data augmentation するようにして精度を比較 [ドキュメント]。transforms.RandomCrop(32, padding=4), transforms.RandomHorizontalFlip()
- (optional) 出力されたモデルを S3 から取得しノートブックインスタンス上の Jupyter Notebook で読み込んで推論を行ってみましょう。
2. ベイズ最適化 (HPO)
-
SageMaker ではベイズ最適化を用いて、正規表現でパースされたメトリクスに対してハイパーパラメータの最適化 (HPO) を行うことができます。
-
(optional) HPO ジョブの結果を可視化しましょう [notebook]。
-
(optional) 新たなパラメータを最適化対象として追加してみましょう。
'momentum': ContinuousParameter(0.1, 0.5)
など。
-
(optional) Warm Start を使って最適化ジョブを継続するよう書き換えてみましょう [ドキュメント, 参考ブログ]。
-
from sagemaker.tuner import WarmStartConfig, WarmStartTypes hpo_warm_start_config = WarmStartConfig(WarmStartTypes.IDENTICAL_DATA_AND_ALGORITHM, parents={'<parent_tuning_job_name>','<parent_tuning_job_name_2>'})
を実行し、
warm_start_config=hpo_warm_start_config
をHyperparameterTuner()
作成時に追加。 -
3. 転移学習
- Torchvision で学習済みの Squeezenet を読み込んで、アリとハチのデータセットを用いて2値分類のモデルを学習させます。
feature_extract
変数により、 finetune / feature extract の2種類の方法を試すことができます。
- 未学習のモデルを学習させて、上記の手順との学習速度・精度を比較します。
- (optional) 他のモデルやサイズの違うモデル (Alexnet や Resnet34 など) を使って試します。