Amazon Web Services ブログ
Amazon SageMaker ノートブックが Git 統合への対応開始により、持続性、コラボレーション、再現性を強化
Amazon SageMaker ノートブックインスタンスと GitHub、AWS CodeCommit、あらゆるセルフホスティング型 Git リポジトリとの関連付けが可能になり、Jupyter ノートブックでの簡単で安全なコラボレーションや確実なバージョンコントロールが実現できるようになりました。本ブログ記事では、Git ベースのバージョンコントロールシステムを使用することのメリット、および Git リポジトリで作業するためのノートブックインスタンスの設定方法について詳しく説明します。
データサイエンス分野のプロジェクトでは、コラボレーションが不可欠です。データサイエンティスト、機械学習の開発者、データエンジニア、アナリスト、ビジネスの意思決定権限者は、機械学習モデルのコンセプト作りから製品化にいたる合理的な行程を維持するために、インサイトの共有、タスクの委託、業務履歴のレビューが必要です。 Git ベースのバージョンコントロールシステムは、共有可能な環境でデータサイエンス活動を一元管理します。Git リポジトリと合わせて Jupyter ノートブックを使用することで、プロジェクトの共同起草、コード変更のトラッキング、リリース可能なコード管理を実現するソフトウェアエンジニアリングとデータサイエンス活動の融合が可能になります。
また、ノートブックインスタンス内のノートブックは、耐久性の高い Amazon Elastic Block Store (EBS) ボリュームに格納されます。ただし、ノートブック自体がノートブックインスタンスの寿命以上に存続することはありません。つまり、ノートブックインスタンスを削除すると、作業自体も削除されます。Git リポジトリ内にノートブックを格納すると、Jupyter ノートブックをインスタンスのライフサイクルから分離し、将来の参照や再利用に備えてスタンドアロンドキュメントとして保持できます。
さらに、機械学習および深層学習テクニックに関して一般に公開されているコンテンツの多数が、GitHub のような Git リポジトリ内にホスティングされた Jupyter ノートブック上で入手できます。このノートブックをユーザーのノートブックインスタンスにシームレスにクローニングすると、一般に公開済みの学習教材の検索、実行、共有が簡単になって、学習プロセスのスピードアップにつながります。
Git リポジトリを Amazon SageMaker ノートブックインスタンスに関連付ける方法は 2 つあります。
- パブリックな Git リポジトリのクローンを作成したい場合は、ノートブックインスタンスを作成する際に当該リポジトリの URL を用意するだけです。認証情報は特に必要ありません。Amazon SageMaker が、Git リポジトリをクローンしたインスタンスを起動します。
- 認証情報や個人用アクセストークンを要するプライベート Git リポジトリを関連付けたい場合や、将来の利用に備えてパブリック Git リポジトリ情報を格納したい場合は、まずこの Git リポジトリをユーザーの Amazon SageMaker アカウントにリソースとして追加する必要があります。認証を要する Git リポジトリを追加すると、リポジトリへのアクセス用の認証情報や個人用アクセストークンを含む AWS Secrets Manager のシークレット情報を指定できます。 Git リポジトリをリソースとして追加すると、当該リポジトリと関連付ける必要に応じていくつでもノートブックインスタンスを作成、使用できます。
これは包括的ですので、Amazon SageMaker にリソースとしてプライベート Git リポジトリを導入し、その Git リポジトリに関連づけられたノートブックインスタンスを作成するための 2 番目のユースケースをご紹介します。
Git リポジトリを Amazon SageMaker アカウントに追加する
AWS マネジメントコンソールまたは AWS CLI を使って、Git リポジトリを Amazon SageMaker アカウントに追加することができます。
AWS マネジメントコンソールで Git リポジトリを Amazon SageMaker アカウントに追加するには、https://console.thinkwithwp.com/sagemaker/ で AWS マネジメントコンソールを開きます。
左側のナビゲーションペインで、[Git リポジトリ] を選択します。[リポジトリを追加] を選択します。
[AWS CodeCommit] を選択し、AWS CodeCommit リポジトリを追加します。ここでは、新規に AWS CodeCommit リポジトリを作成するか、既存のものを使用することができます。リポジトリ名は、1~63 文字にしてください。a~z、A~Z、0~9、– (ハイフン) が使用できます。
AWS CodeCommit リポジトリを新しく作成する場合は、AWS CodeCommit リポジトリが作成できてから、[リポジトリを追加] のアクションボタンが有効になります。
AWS CodeCommit 以外の場所にホストされている Git リポジトリを追加するには、[ GitHub/Other Git-based repo] を選択します。
リポジトリの URL と、Amazon SageMaker で使用するリポジトリの名前を入力します。名前は 1~63 文字にしてください。a~z、A~Z、0~9、– (ハイフン) が使用できます。
[Git 認証情報] には、リポジトリの認証に使用する認証情報を入力します。利便性と安全性の面から、GitHub リポジトリにはアカウントのパスワードではなく、Git サービスプロバイダが生成した個人用アクセストークンを使用することを強くお勧めします。
Amazon SageMaker では AWS Secrets Manager を使用して、認証が必要なプライベート Git リポジトリ用の Git 認証情報を安全に保存しています。ここでは、新規に AWS Secrets Manager シークレットを作成するか、既存のものを使用することができます。 AWS Secrets Manager シークレットに関する情報や、自社の LDAP 認証情報を AWS Secrets Manager で使用する場合の詳細については、AWS Secrets Manager ユーザーガイドを参照してください。
シークレットを新しく作成して認証情報を保存する場合は、新しいシークレットが作成できてから、[リポジトリを追加] のアクションボタンが有効になります。
[Git リポジトリ] メニューで、Amazon SageMaker に関連付けられたすべての Git リポジトリを表示および管理することができます。
CLI で Git リポジトリを Amazon SageMaker アカウントに追加するには、create-code-repository
の AWS CLI コマンドを使用します。
AWS CodeCommit 以外のプライベート Git リポジトリを追加するには、まず認証情報を保存するための AWS Secrets Manager シークレットを作成し、次に create-code-repository
の AWS CLI コマンドを使用中に提供するための、AWS Secrets Manager シークレットの Amazon リソースネーム (ARN) を取得する必要があります。
IAM ロールにポリシーの更新があり、GetSecretValue へのアクセス権限が付与されていることを確認してください。
また、シークレットは以下の形式であることが必要です。
{“username”: UserName, “password”: Password}
パブリック Git リポジトリを追加する場合、AWS Secrets Manager シークレットは必要ありません。
リポジトリの名前を、code-repository-name
の引数の値として指定します。名前は 1~63 文字にしてください。a~z、A~Z、0~9、– (ハイフン) が使用できます。デフォルトブランチ、Git リポジトリのURL、および git-config
の引数の値としてリポジトリを認証する際に使用する認証情報を含む AWS Secrets Manager シークレットの Amazon リソースネーム (ARN) を指定します。
以下のコマンドで、https://github.com/myprofile/my-repo でホストされている Git リポジトリを示す MyRespository
という名前の新しいリポジトリを Amazon SageMaker アカウントに作成します。
関連づけられた Git リポジトリで、ノートブックインスタンスを作成する
Git リポジトリがクローンされたインスタンスを作成するには、Amazon SageMaker コンソールに移動し、[ノートブックインスタンスの作成] を選択します。
Amazon Virtual Private Cloud (VPC) や AWS Identity and Access Management (IAM) などのその他の設定については、Amazon SageMaker 開発者ガイドの手順に従ってください。
Amazon SageMaker ではなく、AWS CodeCommit で直接作成した既存の AWS CodeCommit リポジトリを使用できます。ただし、必ず “AmazonSageMaker-” という接頭辞をリポジトリ名に追加するか (たとえば、AmazonSageMaker-MyAWSCodeCommitRepository など)、ノートブックインスタンスの実行ロールの IAM ポリシーを更新して、AWS CodeCommit リポジトリにアクセスするための権限を Amazon SageMaker に付与する必要があります。IAMポリシーを更新し、ノートブックインスタンスの実行ロールに codecommit:GitPull
と codecommit:GitPush
の許可があるようにします。AWS CodeCommit の許可の完全な一覧については、AWS CodeCommit ユーザーガイドをご覧ください。
Git リポジトリのクローンを作成するには、メニューからクローンを作成したいリポジトリを特定します。
ここで、Amazon SageMaker アカウントにまだ追加していない、または追加したくないパブリックリポジトリを使いたい場合、[このノートブックインスタンスのみに対してパブリック Git リポジトリのクローンを作成します。] を選択します。この場合、公開 URL をリポジトリにペーストするだけで Amazon SageMaker によってノートブックインスタンスにクローンが作成されます。
[Amazon SageMaker にリポジトリを追加] を選択し、Amazon SageMaker でリポジトリを追加した先ほどのメニューを開くこともできます。
これで、Amazon SageMaker に追加したリポジトリをメニューに表示することができます。追加したばかりのリポジトリがメニューに表示されない場合は、更新ボタンでメニューを更新してみてください。
ノートブックインスタンスに関連付けるため、デフォルトリポジトリを 1 件、追加リポジトリを最大 3 件まで選択できます。
ノートブックインスタンスはクローンが作成された Git リポジトリと一緒に作成されます。
JupyterLab を開くと、リポジトリが左メニューに表示されています。
CLI コマンドを使用してアクションを実行したい場合、Amazon SageMaker 開発者ガイド で詳細を参照してください。
Git リポジトリをノートブックインスタンスで使用する
ノートブックインスタンスはデフォルトリポジトリで開きます。これは、/home/ec2-user/SageMaker
のノートブックインスタンスにインストールされています。 ノートブックセルでは Git コマンドを手動で実行することが可能です。以下に例を挙げます。
追加リポジトリを開くには、1 つ上のフォルダに移動します。追加リポジトリも、ディレクトリとして /home/ec2-user/SageMaker
にインストールされています。
Amazon SageMaker チームは、Project Jupyter コミュニティとのコラボレーションで、オープンソース Git extension for JupyterLab の再設計および開発を行ってきました。CLI コマンドを使いたくない場合は、Git 拡張機能を使って直感的かつ視覚的に JupyterLab と連携できます。Git 拡張機能を使うと、ブランチの作成や切り替え、コード変更のステージングとコミット、共有リポジトリへのプッシュまたはプルリクエストの送信、詳細なバージョン履歴の表示、ならびに必要な場合には古いバージョンへの差し戻しをすることができます。
ノートブックインスタンスを JupyterLab インターフェースで開くと、jupyter-git 拡張機能がインストールされ、使用可能になります。JupyterLab Git に関する詳細は、JupyterLab GitHub のページ をご覧ください。
結論
ノートブックで Git ワークフローを簡単に活用することにより、JupyterLab ワークベンチへのコンテンツのクローン作成、複数の共同起草者によるプロジェクトへの参加、組織内のより大規模な開発と製造のワークフローへのデータサイエンスのブランチを行うことが可能になります。
著者について
Erkan Tas は、Amazon SageMaker のシニアテクニカルプロダクトマネージャーです。彼は、AWS プラットフォームを使用して、人工知能を簡単に、アクセス可能に、スケーラブルにするという役割を担っています。また、彼は船乗りであり、科学と自然を崇拝し、碁やストラトキャスターのプレイヤーでもあります。