Amazon Web Services ブログ

SageMaker 一時インスタンスで Jupyter ノートブックのスケジュールを立てる

現在、金曜日の午後 5 時です。あなたは、午後に複雑で洗練された機能エンジニアリング戦略をコーディングしてきたとします。Amazon SageMaker Studio t3.medium ノートブックで作業を開始しました。ここでのタスクは、帰宅するまでにこれを大規模なインスタンスに接続し、残りのデータセット全体にスケールアウトすることです。ノートブックインスタンスをアップグレードできますが、ノートパソコンを閉じるとすぐにジョブが停止してしまいます。ノートブックから直接ジョブをスケジュールしませんか?

Amazon SageMaker は、機械学習 (ML) モデルを構築、トレーニング、デプロイするためのフルマネージドソリューションを提供します。この記事では、Amazon SageMaker Processing ジョブを使用して、オープンソースプロジェクト Papermill で Jupyter ノートブックを実行する方法を示します。Amazon SageMaker と Amazon CloudWatchAWS Lambda、および AWS スタック全体の組み合わせにより、機能エンジニアリングなどのジョブをオンザフライでとスケジュールに沿ってスケールアップするために必要なモジュラーバックボーンが常に提供されます。このプロセスを簡素化するために、DIY ツールキットを喜んで提供させていただきます。AWS CloudFormation を使用してアクセス許可を設定し、Lambda を使用してジョブを起動し、Amazon Elastic Container Registry ( Amazon ECR) を使用してカスタマイズされた実行環境を作成できます。これには、任意の AWS クライアントからノートブックの実行を開始するためのライブラリと CLI、およびシームレスなユーザーエクスペリエンスのための Jupyter プラグインが含まれています。

これを執筆している時点で、Jupyter ノートブックにコードを記述し、ボタンをクリックするだけで、Amazon SageMaker 一時インスタンス上で、即時にまたはスケジュールに従って実行できます。この記事で紹介するツールを使用すると、シェルプロンプト、Amazon SageMaker の JupyterLab、お使いの別の JupyterLab 環境、または作成したプログラムで自動化して、どこからでもこれを実行できます。AWS CloudFormation を使用してセットアップを簡素化するための便利なツールを提供するサンプルコードを作成しました。これにより、重い作業を処理し、実行してそれをモニタリングすることができます。

ノートブックの実行の詳細については、GitHub リポジトリを参照してください。すべてのソースコードは、GitHub の aws-samples で入手できます。この記事では、スケジュールされたノートブックを実行する方法について以下説明します。

このソリューションを使用するタイミング

このツールキットは、毎晩のレポートの実行に特に役立ちます。たとえば、データサイエンスチームがその日に実行したすべてのトレーニングジョブを分析し、費用対効果を分析して、モデルを本番環境にデプロイした後にもたらすビジネス価値に関するレポートを生成することができます。これは、スケジュールされたノートブックにぴったりです。すべてのグラフ、テーブル、およびチャートは、ノートブックを自分で順に実行した場合と同じようにコードで生成されます。相違点は、自動的に処理されることに加えて、Amazon Simple Storage Service (Amazon S3) で持続できるようになったことです。夜通し実行された最新のノートブックで 1 日を始め、分析を進めることができます。

または、機能エンジニアリングのステップをスケールアップしたいとします。すべての Pandas 変換をノックアウトするための for ループはすでに完成しています。必要なのは、20 GB のデータ全体でこれを実行するための時間と計算だけです。何も難しいことはありません。ノートブックをツールキットにドロップして、ジョブを実行し、ノートパソコンを閉じるだけで完了します。現在、Jupyter をアクティブに使用しているかどうかに関係なく、コードはスケジュールされたインスタンスで引き続き実行されます。

おそらく、ユーザーはローカルのノートパソコンまたは Amazon SageMaker ノートブックでモデルをトレーニングするデータサイエンスチームに所属していて、トレーニングジョブに Amazon SageMaker の一時インスタンスをまだ採用していないかもしれません。このツールキットを使用すると、モデルをトレーニングしている間だけ、高度な計算オプションを簡単に使用できます。p3.xlarge は、モデルがトレーニングしている間だけスピンアップできますが、手頃な料金の t3.medium でスタジオ環境を終日利用できます。数行のコードで、リソースを Experiments SDK に簡単に接続できます。Amazon SageMaker ノートブックと Amazon SageMaker Studio を p3 インスタンスで実行することはまだ完全にサポートされていますが、最大のインスタンスを短期間にのみ使用する習慣を身に付けることは、正味のコスト削減の練習になります。

オブジェクトでいっぱいの S3 バケットがあり、各オブジェクトで完全なノートブックを実行する必要がある場合があります。ここでいうオブジェクトは、コールセンターでの通話記録の日付や、ソーシャルネットワークの特定のユーザーからのツイートストリームなどです。このツールキットを使用すると、これらのオブジェクトに対して for ループを簡単に作成できます。このツールキットは、各ファイルのジョブをスケジュールし、ハードウェア専有インスタンスで実行し、完成したノートブックを Amazon S3 に保存します。これらは、好みのトレーニング環境から読み込まれたモデルアーティファクトである可能性もあります。推論コードをノートブックにパッケージ化し、ツールキットを使用して簡単にデプロイできます。

最後に、モデルのパフォーマンスに関するレポートは、利害関係者にとって重要な資産であるとの話をお客様から伺っています。このツールキットを使用すると、機能の重要性を分析し、ROC 曲線を生成し、最終製品に不可欠なトリッキーなエッジケースでモデルがどのように機能するかを予測する人間参加型ソリューションを実装できます。チームのすべてのデータサイエンティストが簡単にアクセスできるモデルプロファイラーを作成できます。このモデルプロファイラーをトリガーして、すべてのトレーニングジョブが完了した後に実行し、利害関係者に対する分析の価値に関するループを閉じることができます。

SageMaker でスケジュールに従ってノートブックを実行する 3 つの方法

Amazon SageMaker でノートブックを実行するには、Amazon SageMaker Processing ジョブをセットアップして実行する Lambda 関数を使用します。この関数はユーザーが直接呼び出すか、Amazon EventBridge ルールのターゲットとして追加して、スケジュールに従って、またはイベントに応答して実行できます。実行するノートブックは Amazon S3 オブジェクトとして保存されるため、実行時にオンラインでなくても実行できます。次の図は、このアーキテクチャを示しています。

この機能をインストールして使用する 3 つの異なる方法を概説します。これにより、ノートブックとスケジュールを思い通りに操作できます。

AWS API または CLI を直接使用する

AWS API を直接使用して、ノートブックを実行およびスケジュールできます。プロセスを簡単にするために、必要な Lambda 関数をセットアップするための CloudFormation テンプレートと、ノートブックの実行時に使用する AWS Identity and Access Management (IAM) ロールおよびポリシーを示しました。また、ノートブックの実行時に Amazon SageMaker Processing ジョブが使用する Docker コンテナイメージを構築およびカスタマイズするためのスクリプトも示しました。

CloudFormation テンプレートをインスタンス化してコンテナイメージを作成したら、次のコードを使用してこのようなノートブックを実行できます。

$ aws lambda invoke --function-name RunNotebook \
             --payload '{"input_path": "s3://mybucket/mynotebook.ipynb", \
                         "parameters": {"p": 0.75}}' result.json

スケジュールを作成するには、次のコードを入力します。

$ aws events put-rule --name "RunNotebook-test" --schedule "cron(15 1 * * ? *)"
$ aws lambda add-permission --statement-id EB-RunNotebook-test \
                            --action lambda:InvokeFunction \
                            --function-name RunNotebook \
                            --principal events.amazonaws.com \
                            --source-arn arn:aws:events:us-east-1:981276346578:rule/RunNotebook-test
$ aws events put-targets --rule RunNotebook-test \
                         --targets '[{"Id": "Default", \
                                      "Arn": "arn:aws:lambda:us-east-1:981276346578:function:RunNotebook", \
                                      "Input": "{ \"input_path\": \"s3://mybucket/mynotebook.ipynb\", \
                                                  \"parameters\": {\"p\": 0.75}}"}]‘

このアプローチでは、ノートブックを Amazon S3 に移動し、Amazon SageMaker Processing ジョブをモニタリングし、Amazon S3 から出力ノートブックを取得します。

これは、余分な依存関係を持たずにソリューションを作成したい、知識豊富な AWS ユーザーの場合に最適なソリューションです。当社が作成した Lambda 関数または Papermill 実行コンテナを変更して、正確なニーズを満たすこともできます。

AWS API を使用したノートブックのスケジュールの詳細については、GitHub リポジトリの完全なセットアップ手順を参照してください。

簡易パッケージで物事を簡単にする

ノートブックのスケジュールを容易にするために (特に AWS のエキスパートでない場合)、簡易パッケージを作成しました。これにより、ノートブックの実行とスケジュールを行うためのより自然なインターフェイスを提供する CLI および Python ライブラリで AWS ツールをラップできます。このパッケージを使用すると、AWS CodeBuild を介して、Docker なしでカスタマイズされた実行環境を構築し、Amazon S3 の相互作用とジョブのモニタリングを管理できます。

セットアップを実行した後、次のコードでノートブックを実行します。

$ run-notebook run mynotebook.ipynb -p p=0.5 -p n=200

次のコードでノートブックをスケジュールします。

$ run-notebook schedule --at "cron(15 1 * * ? *)" --name nightly weather.ipynb -p "name=Boston, MA"

簡易パッケージには、ジョブをモニタリングしてスケジュールを表示するためのツールも含まれています。次のコードを参照してください。

$ run-notebook list-runs
Date                 Rule                 Notebook              Parameters           Status     Job
2020-06-15 15:31:40                       fraud-analysis.ipynb  name=Tom             Completed  papermill-fraud-analysis-2020-06-15-22-31-39
2020-06-15 01:00:08  DailyForecastSeattle DailyForecast.ipynb   place=Seattle, WA    Completed  papermill-DailyForecast-2020-06-15-08-00-08
2020-06-15 01:00:03  DailyForecastNewYork DailyForecast.ipynb   place=New York, NY   Completed  papermill-DailyForecast-2020-06-15-08-00-02
2020-06-12 22:34:06                       powers.ipynb          p=0.5                Completed  papermill-powers-2020-06-13-05-34-05
                                                                n=20
$ 

簡易パッケージの詳細については、GitHub リポジトリをご覧ください。

GUI を使用して JupyterLab から直接ノートブックを実行する

インタラクティブなエクスペリエンスを好むユーザーのために、簡易パッケージには、JupyterLab 拡張機能が含まれています。これを有効にすると、ローカルで、Amazon SageMaker Studio で、または Amazon SageMaker ノートブックインスタンスで JupyterLab を実行できます。

Amazon SageMaker Studio ユーザー用に Jupyter 拡張機能を設定すると、新しいノートブック実行サイドバー (ロケット船のアイコン) が表示されます。サイドバーを使用すると、表示しているノートブックを実行またはスケジュールできます。デフォルトのセットアップで作成した notebook-runner コンテナ、または作成したその他のコンテナを使用できます。これらのジョブが使用する実行ロールとインスタンス設定の ARN を入力すると、準備が整います。

[今すぐ実行] を選択すると、Lambda 関数がノートブックを取得し、Amazon SageMaker Processing ジョブで実行します。[実行] を選択すると、そのジョブのステータスを表示できます。次のスクリーンショットを参照してください。

ジョブが完了すると、完成したノートブックが Amazon S3 に保存されます。つまり、これは以前の実行が持続するので、簡単に元に戻すことができます。

最後に、View Output および Import Notebook を選択して、出力ノートブックをインポートします。ノートブックをインポートしない場合、ローカルディレクトリにコピーされることはありません。これは、何が起こったのかを確認したいが、他の大量のノートブックで煩雑にしたくない場合に最適です。

JupyterLab 拡張機能をセットアップし、GUI を使用してノートブックを実行およびモニタリングする手順については、GitHub リポジトリをご覧ください。

まとめ

この記事では、Amazon SageMaker と AWS クラウドのモジュール機能を組み合わせて、データサイエンティストと ML エンジニアが一時インスタンスでノートブックをシームレスに実行できるようにする方法について説明しました。CLI、簡易パッケージ、Jupyter ウィジェットなど、このプロセスを簡素化するオープンソースツールキットをご利用いただけます。夜間のレポートの実行から機能エンジニアリングのスケールアップ、最新のデータセットでのモデルのプロファイリングまで、さまざまなユースケースについて説明しました。ツールキットを実行するさまざまな方法の例を共有しました。GitHub の クイックスタートの手順を実行し、GitHub リポジトリでさらに多くの例を確認してみてください。


著者 について

Emily Webber は、AWS の機械学習スペシャリスト SA で、曜日によりデータサイエンティスト、機械学習アーキテクト、リサーチサイエンティストを交互に担当しています。彼女はシカゴに住んでおり、YouTube、LinkedIn、GitHub や Twitch で彼女を見つけることができます。お客様をサポートして、次世代の機械学習体験を発明しようとしている時間以外は、美しいレイクショアドライブに沿ってジョギングし、Kindle で日常から離れ、あまり旅しない道を探索することを楽しんでいます。

 

 

 

Tom Faulhaber は、Amazon SageMaker チームのプリンシパルエンジニアです。最近、彼は Jupyter ノートブックの豊富な潜在的な用途をすべて解き放ち、従来とは異なる方法でそれをデータサイエンティストのツールボックスに追加する方法について注力しています。余暇は、シアトル周辺の手つかずの環境を発見しに子供と一緒にサイクリングやハイキングによく出かけています。