6
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

SageMakerのノートブックでPipenvを使う

Last updated at Posted at 2018-12-17

はじめに

こんにちは。
ニッチな需要だと認識していますがタイトルの通り書かせていただきます。
Amazon SageMakerのノートブックインスタンスでは最初からDockerが使えたりawscliが使えたり、tensorflowやmx-netなどが入ったカーネルを選択したり特に環境構築を行わずともそれなり使える環境が簡単に用意することができ便利です。一応jupter notebookのcondaタブで環境を編集することはできますが少し面倒です。今回はプロジェクトの環境管理をPipenvを用いていたこともあり、どうにかPipenv環境をそのままノートブックインスタンスで使うことができないか考えてみました。

ノートブックインスタンス関連の機能紹介

SageMakerはいくつかの機能のあつまりで構成されているのですが、全部使う必要はなく個別につかうことができます。
大別してノートブック機能、トレーニング機能、推論機能です。
今回はSageMakerのノートブック機能の簡単な説明を行います。
スクリーンショット 2018-12-04 11.36.00.png

ノートブックインスタンス

SageMakerの目玉機能?の一つです。
ある程度設定されたjupyter notebook(lab)が簡単に使えるのが最大の魅力です。
これ単体でも機能します。インスタンスなので当然マシンパワーを設定でき後からでも自由に強さを変更できます。
ただ、/home/ec2-user/SageMaker以外の場所はインスタンス再起動時にリセットされるので注意しなければいけません。

ライフサイクル

ノートブックインスタンスの最初の構築時または起動時に実行するスクリプトを記述でき任意のノートブックに紐付けることができる機能です。今回はこれを使って/home/ec2-user/SageMaker内のPipenvfileから作られる環境をインスタンスに元から入っているjupyterにカーネルとして追加します。

Git リポジトリ

2018年11月28日に追加された新たな機能です。
Gitリポジトリを指定しておき、これと紐付けたノートブックインスタンスにリポジトリをクローンします。
httpだけでsshを使ったクローンはできないようです。すこし試してみたところ同一VPC内のgitlabに対しても使うことができましたが、「別にインスタンス内で手動でクローンすればよくない?」みたいな感じです。シークレットマネージャと連動してuser名とpassを管理するのでその辺の入力手間が省けるくらい?
今回は関係ない機能です。

設定

ライフサイクルの「ノートブックの開始」に以下を書いて、

#!/bin/bash

set -e

sudo -u ec2-user sh << EOS
pip install --upgrade 
export PIPENV_VENV_IN_PROJECT="42"
cd /home/ec2-user/SageMaker
/home/ec2-user/anaconda3/envs/JupyterSystemEnv/bin/pip install pipenv
/home/ec2-user/anaconda3/envs/JupyterSystemEnv/bin/pipenv install -d ipykernel
/home/ec2-user/anaconda3/envs/JupyterSystemEnv/bin/pipenv run ipython kernel install --user --name=pipenv
EOS

ノートブックインスタンスに紐づけるだけです。
コメント 2018-12-17 203709.jpg

ただしく、設定できると以下のようにたくさんの既存カーネルに紛れて、先ほど設定したpipenvカーネルが追加された状態で起動します
コメント 2018-12-17 210811.jpg

説明

  • ライフサイクルはrootユーザで実行されるが普通にノートブックを使う場合はec2-userなためuserを指定して実行します
  • PIPENV_VENV_IN_PROJECTの環境変数を設定するとpipenv環境(.venv)がプロジェクトディレクトリに生成されるようになり、次回起動時起動が早くなる気がする terminalで確認すると.venvが使われていることがわかります。 コメント 2018-12-17 211240.jpg
  • あとはノートブックに~/SageMakerの環境を追加しています

感想

(コピペするだけなはずなのに私用PCがwindowsを使っていたためライフサイクルをコピペすると改行コードの違いでスクリプトが動かず少々困りました。)
決まったものしか使えないのかと思いきやカスタマイズする余地が残されてて、頑張ればなんとでもなるのはよいと思いました。SageMakerのノートブックインスタンスは機械学習用途となっていますが全然他のことに使えそうです。機械学習用途に関しても始めるならこれ以上ないくらいに十分な環境であり、その上サンプルもたくさん用意されているので勉強にもなりそうです。
最後に、いるのかわかりませんが同じことがしたい人の役に立てれば幸いでした。

6
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?