Amazon Web Services ブログ

Amazon SageMaker で fast.ai ノートブックを実行する

fast.ai はすべての人にディープラーニング能力へのアクセスを可能にすることを目的とした組織です。彼らは fast.ai と呼ばれる人気のあるオープンソースディープラーニングフレームワークを開発しました。このテクノロジーはコンピュータビジョン、自然言語処理、構造化データ、協調フィルタリングなどドメイン内のわずか数行のコードでユーザーが最新のモデルを作成することができる使いやすいディープラーニングライブラリ PyTorch に基づいています。  彼らはまた、機械学習の経験がない開発者向けに、数週間で最先端のディープラーニングモデルをデプロイするためのライブラリの使い方を学べる非常に人気のあるオンラインコースも開講しています。

Amazon SageMaker の主な利点の 1 つは、人気のある Jupyter オープンソースノートブック形式で完全に管理された機械学習ノートブック環境を 1 クリックで提供できることです。このブログ記事では、お使いの fast.ai ベースのディープラーニングモデルをトレーニングするために、fast.ai ライブラリと Jupyter ノートブックサンプルを Amazon SageMaker でホストされたノートブックにデプロイする方法を説明します。 これは fast.ai オンラインコース経由で実行している場合、またはカスタムアプリケーションで独自の fast.ai ベースのディープラーニングモデルをビルドし、トレーニングする場合に便利です。これから、SageMaker ノートブックインスタンスでカスタム fast.ai 環境の設定と構成を自動化するために必要なすべてのステップを説明します。

ステップ 1: Amazon SageMaker ノートブックライフサイクル設定を作成する

Amazon SageMaker は、追加ライブラリをノートブックインスタンスに手動でインストールする機能を備えています。しかし、ノートブックインスタンスの終了後は、これらの追加されたカスタマイズも削除されます。つまり、ノートブックインスタンスを再起動時に、手動でこれらを再度追加する必要があります。しかし、最近リリースされた Amazon SageMaker のライフサイクル設定機能では、これらのカスタマイズを自動化することで、インスタンスのライフサイクルのさまざまな段階に適用することが可能になりました。

この例では、ノートブックインスタンスが起動されるたびに、ライフサイクル設定機能を使用して fast.ai ライブラリと関連する Anaconda 環境をインストールすることで、再起動のたびに繰り返しインストールする必要がなくなりました。

  1. Amazon SageMaker コンソール (https://console.aws.amazon.com/sagemaker/) を開きます。
  2. 左側のナビゲーションウィンドウから [Notebook]、次に [Lifecycle configurations] を開きます。次に [Create configuration] ボタンを選択し、新しい設定を作成します。
  3. 構成設定に名前を付けます。この例では、FastaiConfigSetting を使用します。
  4. [Start notebook] パネルに、以下の bash スクリプトの内容をコピーします。このスクリプトは fast.ai GitHub リポジトリをクローンして、必要なすべての Python パッケージと依存するライブラリを持つ fast.ai conda 環境を設定します。
    注意: このスクリプトは必要なすべてのパッケージとライブラリを設定するために時間がかかります。そのため、最長 5 分間というライフサイクル設定スクリプトの制限を克服するため、これをバックグラウンドプロセスとして実行します。

    #!/bin/bash
    
    set -e
    
    echo "Creating fast.ai conda enviornment"
    cat > /home/ec2-user/fastai-setup.sh << EOF
    #!/bin/bash
    cd /home/ec2-user/SageMaker/fastai
    conda env update
    source activate fastai
    echo "Finished creating fast.ai conda environment"
    EOF
    
    chown ec2-user:ec2-user /home/ec2-user/fastai-setup.sh
    chmod 755 /home/ec2-user/fastai-setup.sh
    
    sudo -i -u ec2-user bash << EOF
    echo "Creating fast.ai conda env in background process."
    nohup /home/ec2-user/fastai-setup.sh &
    EOF
    

    次のようなスクリーンショットが表示されます。

  5. 次に [Create notebook] タブを選択し、次のスクリプトをコピーします。これで、ノートブック作成時に fast.ai GitHub リポジトリをクローンすることができます。
    #!/bin/bash
    
    set -e
    
    sudo -i -u ec2-user bash << EOF
    git clone https://github.com/fastai/fastai.git /home/ec2-user/SageMaker/fastai
    mkdir /home/ec2-user/SageMaker/fastai/courses/dl1/data
    EOF
    

    次のようなスクリーンショットが表示されます。

  6. 次に [Create configuration] ボタンを選択し、fast.ai ノートブックの新しいライフサイクル設定を作成します。指定した名前と Amazon リソースネーム (ARN) が付けられた、新規作成されたライフサイクル設定が表示されます。

これで Amazon SageMaker ノートブックインスタンスが作成され、fast.ai モデルをビルドおよびトレーニングする準備ができました。

ステップ 2: Amazon SageMaker ノートブックインスタンスを作成する

Amazon SageMaker ノートブックインスタンスは、Jupyter Notebook ソフトウェアを実行するための完全に管理された ML Amazon EC2 インスタンスです。詳細については、Notebook インスタンスとノートブックを参照してください。

  1. Amazon SageMaker コンソール (https://console.aws.amazon.com/sagemaker/) を開きます。
  2. [Notebook instances] を選択し、[Create notebook instance] を選択します。
  3. [Create notebook instance] ページで、次の情報を入力します。
  • [Notebook instance name] には、 FastaiNotebook と入力します。
  • [Instance type] には ml.p2.xlarge または ml.p3.2xlarge  を選択します GPU を使用したインスタンスが必要になるため、fast.ai モデルを同じノートブックインスタンスでトレーニングします。 ml.p2.xlarge インスタンスには Nvidia K80 GPU、 ml.p3.2xlarge  にはより強力な Nvidia V100 GPU があるため、モデルのトレーニング時間が他のインスタンスタイプに比べて高速化されています。  ml.p3.2xlargeml.p2.xlarge よりも時間あたりの費用が高くなっています (バージニア北部で 1 時間あたり 4.284 USD 対 1.26 USD)。しかしディープラーニングモデルをより早くトレーニングできるため、インスタンスを長く実行する必要がなくなり、モデルをトレーニングするための実際のコストは低くなる可能性があります。 ml.p2.xlarge インスタンスのアカウントごとのデフォルト上限は 1 で、 ml.p3.2xlarge インスタンスの上限は 2 です。このため同じタイプの他の多くのノートブックが同じアカウントで実行され、制限を超えていないことを確認してください。または AWS サポートでサポートケースを作成し、この制限を増やすリクエストをしてください。アカウントごとの Amazon SageMaker デフォルト制限の詳細は、https://docs.aws.amazon.com/general/latest/gr/aws_service_limits.html#limits_sagemaker をご覧ください。
  • IAM ロールでは、既存の Amazon SageMaker ノートブックのロールを持っている場合にはこれを使用して、それ以外の場合には [Create a new role] のオプションを選択して新しい IAM ロールを作成し、デフォルトのオプションを許可することで、バケット名が「sagemaker」の任意の Amazon S3 バケットへのアクセスを提供することができます。
  • ここで VPC はオプションであり、必須項目ではありません。データベースや VPC から実行またはアクセス可能なその他システムなどのリソースにアクセスする必要がある場合には、このオプションを選択する必要があります。この場合、外部システムに依存しません。
  • ライフサイクル設定では、ステップ 1 で作成したライフサイクル設定を選択します。
  1. [Create notebook instance] を選択します。これにより ML インスタンス (この場合ではノートブックインスタンス) が起動し、ML ストレージボリュームが接続されます。
  2. ノートブックインスタンスの作成とライフサイクル設定スクリプトの実行には数分かかります。ライフサイクル設定スクリプトのログを確認するには、ロググループ名が /aws/sagemaker/NotebookInstances の Amazon CloudWatch Logs で表示できます。ノートブックインスタンス作成時に呼び出される FastaiNotebook/LifecycleConfigOnCreate とノートブックインスタンス起動時に呼び出される FastaiNotebook/LifecycleConfigOnStart の 2 つの CloudWatch LogStreams があるはずです。FastaiNotebook/LifecycleConfigOnStart という名前のログストリームを開き、「Finished creating fast.ai conda environment」というログテキストが表示されてから、ステップ 3 に進みます。

ステップ 3: fast.ai ノートブックを実行する

ライフサイクル設定スクリプトが fast.ai ライブラリと依存関係をインストールし、あなたはお使いの SageMaker ノートブックインスタンスで fast.ai レッスンノートブックを実行する準備ができました。

  1. Amazon SageMaker コンソールを開き、ノートブックインスタンス 画面に移動して、以下のスクリーンショットで 示されるように FastaiNotebook という名前のノートブックで [Open] を選択します。

    ブラウザタブが開き、以下のような Jupyter ノートブックページが表示されます。
  2. fastai/courses/dl1 ディレクトリに移動し、fastai MOOC コースから Jupyter ノートブックにアクセスします。以下のスクリーンショットに表示されているように、lesson1.ipynb という名前の Lesson 1 ノートブックを開きます。
  3. カーネルを選択するように求められますので、以下のスクリーンショットのように conda_fastai オプションを選択します。
  4. fast.ai ライブラリに含まれる Jupyter ノートブックを実行中の場合には、他の fast.ai インポート分の前にコマンド import torch を使用して、torch ライブラリをインポートするコードセルを追加する必要があります。これが完了していない場合には、「ImportError: dlopen: cannot load any more object with static TLS.」のエラーが表示されることがあります。以下はコードセルが追加されたノートブックの例です。
  5. これでノートブックを実行する準備が整いました。データ ZIP ファイルをダウンロードして、/home/ec2-user/SageMaker/fastai/courses/dl1/data ディレクトリに置くことを忘れないでください。

注意: ノートブックインスタンスを使用しないときは、これを停止して、不必要なコストが発生することを回避してください。

まとめ

このブログ記事では、SageMaker のライフサイクル設定機能を使用して、Amazon SageMaker ノートブックで fast.ai ライブラリとそれに関連する依存関係を自動的に設定するステップを説明しました。これであなたは fast.ai コースのレッスンを通して受け、自分の fast.ai ベースモデルを構築する環境ができました。次回のブログ記事では、モデルを使用して下流のアプリケーションに推論を提供する HTTPS エンドポイントを提供する Amazon SageMaker モデルホスティングサービスに fast.ai モデルをデプロイする方法について説明します。

不必要な課金が発生することを避けるため、作業を終えたらノートブックインスタンスをシャットダウンすることを忘れないでください。


今回のブログ投稿者について

Matt_McClean_100Matt McClean は AWS のパートナーソリューションアーキテクトです。彼は EMEA 地域の技術パートナーと協力して、AWS テクノロジーを使用したソリューションを開発するための指導を行い、機械学習のスペシャリストでもあります。余暇にはスキーと自転車の趣味を楽しんでいます。