Amazon Web Services ブログ

Amazon SageMaker を使用した fastai モデルの構築、トレーニング、およびデプロイ

深層学習は世界を変えています。しかし、コンテナの構築など、その基礎的な作業の多くでは、多くの時間がかかる場合があります。この記事では、fastai モデルを Amazon SageMaker トレーニングとホスティングに構築、トレーニング、デプロイする方法を説明します。この場合は、Amazon SageMaker Python SDK および PyTorch ベースイメージを使用します。このことにより、自分のコンテナを構築するための追加手順を行わずに済みます。

Amazon SageMaker は、フルマネージドの機械学習 (ML) サービスです。これにより、データ科学者と開発者は、低コストで、素早く ML モデルを構築、トレーニングし、本番稼働にデプロイできるようになります。Amazon SageMaker Python SDK は、ML モデルのトレーニングとホスティングのためのオープンソースライブラリです。TensorFlowMXNetPyTorch、および Chainer などの一般的な深層学習フレームワークを容易に使用し、互換性を持たせることができます。AWS は最近 fastai ライブラリを基本の PyTorch コンテナに追加しました。これにより、自分自身おコンテナを提供する代わりに、Amazon SageMaker で fastai 深層学習モデルを利用することができるようになります。

最新のベストプラクティスを使用して、fastai ライブラリは数行のコードだけで、高度な深層学習モデルを作成するときに役立ちます。これには、コンピュータビジョン、自然言語処理、構造化データ、または協調フィルタリングなどのドメインが含まれます。

組織の fast.ai は fastai ライブラリを開発して維持します。これは、一般的な深層学習オープンソース PyTorch パッケージと共に動作します。組織は最近、DAWNBench Competitionで優位な地位を得ました。また、一般的な オンラインコースを提供して、そのモデルを使って ML のバックグラウンドも経験もない開発者のトレーニングさえもしています。

環境のセットアップ

fastai ライブラリをインストールした上で新しい Amazon SageMaker ノートブックインスタンスをセットアップするためには、[Launch Stack] を選択してください。

AWS CloudFormation テンプレートは、このウォークスルーに必要なすべての AWS リソースをプロビジョニングします。[I acknowledge that AWS CloudFormation might create IAM resources with custom names (AWS CloudFormation がカスタム名で IAM リソースを作成する場合があることに同意します)] を選択します。最後に [Createstack] を選択します。

スタックが正常に完了すると、AWS CloudFormation はスタックの CREATE_COMPLETE 状態を通知します。

Amazon SageMaker コンソールで、[ノートブックインスタンス] を選択します。

これで、AWS CloudFormation スタックから作成された fastaiというラベルのノートブックインスタンスが表示されます。[Open Juypter] を選択して、マネージド型 Juypter 環境を回します。ここに自分の Python コードを書き込んでモデルを構築することができます。

この記事のために、SageMaker Examples高度な機能fastai_lesson1_sagemaker_example.ipynb の下で IPython ノートブックを示します。このノートブックのコピーを作成して、モデルを構築、トレーニングして、Amazon SageMaker にデプロイします。

デモンストレーションの目的で、犬種を祝別するための Oxford IIIT Pet dataset を使用します。

fastai ライブラリは PyTorch 上に構築するため、Amazon SageMaker Python SDK を使用して、PyTorch モデルをトレーニングすることができます。PyTorch モデルのトレーニングは、2 段階プロセスです。

  1. PyTorch トレーニングスクリプトを作成します。
  2. Amazon SageMaker でトレーニングジョブを作成します。

PyTorch トレーニングスクリプトを作成します。

トレーニングコードを書き込む _train() 関数を定義します。代表的なトレーニングスクリプトが入力チャンネルからのデータを読み込み、ハイパーパラメータでトレーニングを構成し、モデルを model_dir に保存して、後でホストします。詳細な例については、fastai_oxford_pets GitHub repo にある pets.py ファイルを参照してください。

ベーシックトレーニングコードは、次のとおりです。

print('Creating DataBunch object')
    data = ImageDataBunch.from_name_re(path_img, fnames, pat,
                                ds_tfms=get_transforms(),
                                size=args.image_size,
                                bs=args.batch_size).normalize(imagenet_stats)

    # CNN モデルの作成
    print('Create CNN model from model zoo')
    print(f'Model architecture is {args.model_arch}')
    arch = getattr(models, args.model_arch)
    print("Creating pretrained conv net")    
    learn = create_cnn(data, arch, metrics=error_rate)
    print('Fit for 4 cycles')
    learn.fit_one_cycle(4)    
    learn.unfreeze()
    print('Unfreeze and fit for another 2 cycles')
    learn.fit_one_cycle(2, max_lr=slice(1e-6,1e-4))
    print('Finished Training')

この例では、トレーニングコードと推論コードを1つのスクリプトにまとめます。Amazon SageMaker が誤ってトレーニングコードを実行の誤った場所で実行しないように、トレーニングコードを必ずメインガード (__name __ ==’__main__’) に入れてください。トレーニングスクリプトに argparse.ArgumentParserを使用して取得できる pass ハイパーパラメータを配置することもできます。以下のコードスニペットは、passing ハイパーパラメータ―を使用しています。

if __name__ == '__main__':
    parser = argparse.ArgumentParser()

    parser.add_argument('--workers', type=int, default=2, metavar='W',
                        help='number of data loading workers (default: 2)')
    parser.add_argument('--epochs', type=int, default=2, metavar='E',
                        help='number of total epochs to run (default: 2)')
    parser.add_argument('--batch_size', type=int, default=64, metavar='BS',
                        help='batch size (default: 4)')
    parser.add_argument('--lr', type=float, default=0.001, metavar='LR',
                        help='initial learning rate (default: 0.001)')

Amazon SageMaker でトレーニングジョブを作成する

エンドツーエンドのトレーニングとホスティングを取り扱う PyTorch ベースイメージと PyTorch SageMaker Estimator を使用して、Amazon SageMaker で PyTorch モデルをトレーニングしホストすることができます。

entry_point 引数は _train() 関数を含むトレーニングスクリプトを取ります。train_instance_type 引数はモデルトレーニングするインスタンスタイプを取ります。このパラメータを「local」として設定する場合、モデルは Amazon SageMaker ノートブックインスタンスで Docker コンテナとしてトレーニングします。

ローカルモードのトレーニングを使用するには、Docker Compose だけではなく、GPU でトレーニングする場合は、NVIDIA-Docker もインストールします。モデルを Amazon SageMaker でトレーニングするには、ml.p3.2xlarge や ml.p2.xlarge など、GPU 最適化インスタンスタイプの値を渡します。

Amazon SageMaker は、インスタンスの寿命をトレー二ング時間に基づいて示します。Amazon SageMaker はトレーニングを完了すると、モデルアーティファクトを Amazon S3 にアップロードし、インスタンスを終了します。

トレーニングスクリプトには、モデルの定義と、エンドポイントでモデルを再構築するために必要なサービス機能が含まれています。モデルとコードのバージョニングが一致する限り、コードが書かれるか、モデルが作成するときを制限することはありません。

pets_estimator = PyTorch(entry_point='source/pets.py',
                         base_job_name='fastai-pets',
                         role=role,
                         framework_version='1.0.0',
                         train_instance_count=1,
                         train_instance_type='ml.p3.2xlarge')

pets_estimator.fit(data_location)

Amazon SageMaker のモデルのデプロイ

Amazon SageMaker Python SDK を使用して、PyTorch 推定子から PyTorchModel オブジェクトを作成します。モデルオブジェクトの deploy () メソッドは、リアルタイムで予測要求を処理する Amazon SageMaker エンドポイントを作成します。

Amazon SageMaker エンドポイントは、Amazon SageMaker が提供する PyTorch モデルサーバーを実行jします。これは、fit をコールした後でトレーニングスクリプトが生成するモデルをホストします。これは、model_dir に保存されたモデルでした。

pets_model=PyTorchModel(model_data=pets_estimator.model_data,
                        name=pets_estimator._current_job_name,
                        role=role,
                        framework_version=pets_estimator.framework_version,
                        entry_point=pets_estimator.entry_point,
                        predictor_cls=ImagePredictor)

pets_predictor = pets_model.deploy(initial_instance_count=1,
                                     instance_type='ml.c5.large')

推論スクリプトを作成します。

推論を実行するには、推論スクリプトの 4 つの関数を定義してください。この例では、トレーニングと推論に対して同じスクリプトを使用します。_train() と呼ばれるトレーニング関数と共に次の関数を定義します。

  • model_fn(model_dir)—モデルを Amazon SageMaker PyTorch モデルサーバーに読み込みます。
  • input_fn(request_body,request_content_type)—データを推論のオブジェクトに逆シリアル化します。
  • predict_fn(input_object,model)—逆シリアル化されたデータは、読み込まれたモデルに対して推論を実行します。
  • output_fn(prediction,content_type)—応答コンテンツタイプに従って推論をシリアル化します。

詳細な例については、fastai_oxford_pets GitHub repo にある pets.py ファイルを参照してください。

モデルのデプロイ後に、predict () メソッドを使用して推論を実行します。このメソッドでは、モデル対する推論の結果が返されます。

response = pets_predictor.predict(img_bytes)

クリーンアップ

ノートブックインスタンスを停止し、Amazon SageMaker エンドポイントを削除して、追加料金を避けるようにしてください。

結論

この記事では、PyTorch ベースイメージと Amazon SageMaker Python SDK を使用して fastai モデルをトレーニングしてホストするために Amazon SageMaker を使用する方法を示します。このアプローチにより、 Amazon SageMaker で容易に素早く fastai モデルを構築、トレーニング、デプロイするために、bring-your-own-container アプローチがなくなります。

はじめに、AWS マネジメントコンソールにログインし、AWS CloudFormation テンプレート をデプロイします。新規ユーザーの場合は、アカウントを作成する必要があります。また、Amazon SageMaker で fastai モデルを構築する方法について詳しくは、この GitHub リンク も参照してください。


著者について

Amit Mukherjee は AWS のパートナーソリューションアーキテクトです。パートナーがクラウドで成功できるように、アーキテクチャの指針を提供します。深層学習分野に興味をもっています。余暇の楽しみは家族と充実した過ごしています。

 

 

 

 

Matt McClean は AWS のパートナーソリューションアーキテクトです。 彼は、機械学習のスペシャリストで、EMEA リージョンのテクノロジーパートナーと協力して、AWS テクノロジーを使用したソリューションを開発するための指針を示しています。余暇には、スキーとサイクリングをとても楽しんでいます。