このハンズオンは Amazon SageMaker 上で Tensorflow を使った機械学習/深層学習を学ぶことを目的としています。
このコースを終えたあと、以下のような概念/方法を習得することができます。
- Amazon SageMaker を使ってTensorFlow のモデルを構築・学習・デプロイする方法
- Amazon SageMaker を使った分散学習 (複数CPU/GPU、あるいはマルチノード)
- Amazon SageMaker Neo を使ったモデルコンパイル
- Amazon SageMaker を使ったHPO最適化
- Amazon SageMaker/Tensorflow を使ったTensorboardの使い方
- Amazon SageMaker でKerasを使ったMNIST分類
なお、以下の知識を前提とします。
- 機械学習/深層学習の概念と一般的な理解
- Python/Tensorflow を用いたプログラミング
- AWS の基礎的な知識と操作方法
これらのコンテンツを動かす SageMaker ノートブックインスタンスは ml.c5.xlarge
を推奨します
- TensorFlow のモデルを使った分散学習とNeoによるモデル最適化 [notebook]
- Tensorflow Containerを使ったHPO [notebook]
- HPO ジョブの可視化 [notebook]
- ResNet Cifer10によるTensorflowboardの利用[notebook]
- Keras (Tensorflow Backend) を利用してMNISTの分類を行う[notebook]
1. 分散学習
-
出力を見て複数ノードで学習が分散されていることを確認します。
-
hyperparameters={'epochs': 6}
でハイパーパラメータを渡すことができます。 -
SageMaker Neo
で推論モデルのランタイムをコンパイルし、推論時間がどのくらい短縮されるか試してみましょう。 -
(optional)
metric_definitions
で CloudWatch メトリクスとして結果を出力することができます [ドキュメント]。metric_definitions=[ {'Name': 'train:loss', 'Regex': 'loss: ([0-9\.]+)'}, ]
-
(optional) local mode: Local instance上での学習や推論が可能です。notebook
2. ベイズ最適化 (HPO)
-
SageMaker ではベイズ最適化を用いて、正規表現でパースされたメトリクスに対してハイパーパラメータの最適化 (HPO) を行うことができます。
-
HPO ジョブの結果を可視化しましょう [notebook]。
-
(optional) 新たなパラメータを最適化対象として追加してみましょう。
'batch_size': CategoricalParameter([50, 100, 200])
など。
-
(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()
作成時に追加。 -
- SageMakerからTensorBoardを利用できます。
- Cifar10 を使った学習スクリプト
source/cifar10.py
が用意されているので、これをエントリーポイントとした SageMaker の学習を行います。
- Amazon SageMaker上でKerasを実行し、MNISTの手書き数字の分類を学習します。
- バックエンドはTensorflow。