🤩

AWS SageMakerとGitHubを連携方法

2024/04/12に公開

はじめに

AWS SageMakerを使ってデータ分析や機械学習をする時にコードの管理方法に困っていたため、Gitを導入してチーム開発の効率化を図りました。メモ書き程度ですが、初めてSageMakerを触る人などの助けになれば幸いです😁

AWSのアカウント、GitHubのアカウントは持っている前提で話を進めていきます。

準備

連携を始める前に以下のものをAWS consoleなどを通して準備しておいてください。

  • GitHub上に今回のプロジェクト用のレポジトリ
  • AWS SageMaker上にドメインとプロフィール

SageMakerドメインとGitHubの連携

基本的には公式ドキュメントの通りに進めていきます。

  1. AWS conosle上でSageMakerを開く
  2. サイドバーから Admin configurations > Domains > 対象のドメイン > Environmentに進む
  3. 一番下のSuggested code repositories for the domainセクションから「Attach」を選択し、GitHub上のレポジトリのURLをJupyterServer AppとJupyterLab Appの両方に追加する
  4. 自動で前画面に戻るので以下のようにRepositoryが追加されていれば成功です。

Code Editor内でレポジトリのコードを取り込む

Code Editorは開発をVS codeのような作業環境で行うことができる機能です。ドメインとGitHubの連携後、Code Editor内で今回のプロジェクト用のレポジトリを取り込む必要があります。
2023年12月にSageMakerに大幅なアップデートが行われ、従来のものをSageMaker Studio Classic、最新のものをSageMaker Stuidoと大別するようになりました。Code EditorはSageMaker Studio固有のものになりますので、注意してください。
移行が必要な方はこちらをご覧ください

  1. ドメインのプロフィールからStudioが起動
  2. Code Editorを選択
  3. 右上からCode Editor Spaceを作成してAction欄のOpenを選択
  4. VSCode的なエディタが開くのでClone Repositoryを選択してください。
  5. Githubの認証を済ませ、取り込むレポジトリを選択してください

注意: Code Editor Spaceを起動している間は料金が加算されますので、作業が終わったら必ず停止させるようにしてください

Code Editor内でのGit操作

実際にレポジトリを取り込むことができたら、あとはVS Codeと同じようにGitの操作を行うことができます。CommitやPushをする前にCode Editor内のターミナルを開きGitHubのアカウントを連携するようにしてください

$ git config --global user.name "your name"
$ git config --global user.email your.email@example.com

ここまでできれば、SageMakerでの開発をチームで行う準備が完了です。あとは普段の開発のようにブランチを分けてコミットやプッシュなどを行ってコード管理が簡単にできます。

おまけ: NoteBookコードのPR Review

今回SageMakerとGitHubを連携することができたので、PRを立てたりチームメイトのコードのReviewをGitHub上で行う機会が今後増えると思います。

ただ、Notebookはブロックごとに多くのメタデータを含むためGitHub上のPRで差分を見ようとすると以下のようになります。

メタデータが多く見づらいと思います。Code Editor内でPRをフェッチして差分を確認することもできますが、ReviewのたびにCode Editorを起動するのは大変です。。。

そこでGitHubのRich Jupyter Notebook Diffsという機能を有効化します。2023年の春に追加された機能です。有効化することでメタデータを取り除いた、実際のコード部分の差分が以下のように見やすくなります。

自分のアカウントアイコン > Feature Preview > Rich Jupyter Notebook Diffsから有効化することができます。

有効化することで先ほどのPRの差分が以下のように見やすくなります。

NCDCエンジニアブログ

Discussion