Amazon Web Services ブログ

EFS ファイルシステムを Amazon SageMaker ノートブックに (ライフサイクル設定を含めて) マウントする

今回のブログでは、Amazon Elastic File System (EFS) を Amazon SageMaker ノートブックインスタンスにマウントする方法について説明します。この方法を使えば、大規模なデータセットを保存してアクセスすること、そして SageMaker ノートブックインスタンスからの機械学習スクリプトを共有することが容易になります。 Amazon SageMaker ノートブックには、Jupyter Notebook サーバーを実行している自分自身のインスタンスに高速にアクセスするための機能が用意されています。そこから、Amazon SageMaker の分散マネージドトレーニング環境にアクセスし、リアルタイムで、実用グレードのホストエンドポイントをセットアップすることができます。Amazon SageMaker の高速でスケーラブルなアルゴリズムや、構築済みディープラーニングフレームワークコンテナを使用できます。Amazon EFS はシンプルでスケーラブルなファイルストレージを提供します。これは同時に複数の AWS リソース間で共有することができます。これら 2 つを組み合わせれば、まさに自分のノートブック環境から、大規模な機械学習データセットや共有コードに簡単にアクセスできます。

現在のところ、 Amazon SageMaker のノートブックインスタンスは、5 GB の Amazon Elastic Block Store (EBS) ストレージから開始し、約 20 GB の非永続的ストレージに拡大するようになっています。さらに大きなファイルは Amazon S3 からアクセスできますが、ファイルシステムと同じほどの柔軟性は提供されていません。柔軟性と大規模なデータセットを必要とするユースケースでは、EFS をノートブックインスタンスにマウントすることにより、その要件を満たすことができます。一部の顧客はまた、すでに EFS をマウントして、ファイルを保存し、既存の EC2 インスタンスにわたって共有しています。これは EFS と Amazon SageMaker が協力できる、別の分野です。

既存の EFS ファイルシステムを既存の Amazon SageMaker ノートブックインスタンスにマウントする

すでに、EFS ファイルシステムを有しており、それを Amazon SageMaker ノートブックインスタンスにマウントする場合には、まず SageMaker コンソールを開いて、ノートブックインスタンスにログインするところから始めます。

次に、新しい conda_python3 ノートブックを開きます。これらのステップは、Jupyter Terminal から実行することもできます。

それから、次のようなコマンドを含むセルを実行して、Jupyter Notebook からディレクトリを作成します。

%%sh

mkdir efs

今度は、EFS ファイルシステムの IP アドレスを取得する必要があります。ノートブックインスタンスに、Amazon SageMaker が提供するインターネットアクセスがセットアップされている場合には、ノートブックから boto3 を使用して describe_file_systems() および describe_mount_targets(FileSystemId='<file_system_id>')を呼び出すことによって行えます。 あるいは、EFS コンソールから確認することもできます。

そして、次のようなコマンドを含むセルを実行すれば、EFS ファイルシステムを Amazon SageMaker ノートブックにマウントできます 忘れずに、 <efs_ip_address_from_above> の箇所を自分の EFS IP で置き換えてください。

%%sh 

sudo mount -t nfs \
    -o nfsvers=4.1,rsize=1048576,wsize=1048576,hard,timeo=600,retrans=2 \
    <efs_ip_address_from_above>:/ \
    ./efs

sudo chmod go+rw ./efs

これで、SageMaker のノートブックインスタンスから、Elastic File System 上のデータセットと共有ファイルにアクセスできるようになりました。 これにより、5 GB よりも大きなデータセットをローカルにトレーニングし、ファイルを複数の Amazon SageMaker ノートブックにわたって共有することができます。

Amazon SageMaker ノートブックのライフサイクル設定を使う

Amazon SageMaker のノートブックインスタンスを停止して再起動すると、EFS マウントは解除されます。 空のディレクトリだけが残りますが、ファイルは引き続き EFS ファイルシステム上に保存されています。しかし、EFS とノートブックの間の接続は失われています。

ノートブックを起動するたびに、 sudo mount -t nfs ... コマンドを再実行して EFS リソースを再マウントすることもできます。 しかし、これを手動で行う代わりに、SageMaker Notebook の Lifecycle 設定を使えば、このプロセスを自動化できます。 SageMaker コンソールの [Lifecycle configuration] ページに移動し、[Create configuration] を選択します。

ライフサイクル設定を使えば、ノートブックインスタンスを最初に作成したときに、または (最初の作成時も含めて) ノートブックインスタンスを開始するたびに実行されるスクリプトを書くことができます。 [Start notebook] スクリプトに、次のコマンドをコピーアンドペーストしてください。 sudo mount -t nfs ... これは先ほど、Amazon SageMaker ノートブックインスタンスを開始するたびに実行できるとして示したのと同じコマンドです。

ただし、ノートブックインスタンスを最初に開始したときには、マウント先の efs ディレクトリはまだ存在しません。 それで、[Create notebook] スクリプトにこのセットアップを行わせましょう。それから、[Create configuration] を選択します。

それでは、 efs-mount ライフサイクル設定の適用先となる、新しい SageMaker ノートブックインスタンスを作成します。

[Create notebook instance] を選択し、インスタンスの準備ができるまで数分間待ってから、それを開き、Jupyter Terminal で efs ディレクトリが作成されていて、正しくマウントされていることを確認してください。

これで、ノートブックインスタンスを再起動しても、EFS ファイルシステムは再マウントされ、すぐに使用できるようになります。

まとめ

Amazon SageMaker のライフサイクル設定は、非常に用途の広いツールです。このブログでは、SageMaker ノートブックインスタンスのファイルシステムストレージを拡張できるようにするためにこの設定を使用する 1 つの方法をご紹介しました。 ライフサイクル設定の詳細についてはここを参照してください。


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

David Arpin は AWS の AI Platforms Selection Leader で、データサイエンスチームと製品管理を統率してきた経歴があります。