1. taniyam

    No comment

    taniyam
Changes in body
Source | HTML | Preview
@@ -1,33 +1,63 @@
-## 概要
-Amazon SageMakerのノートブックインスタンスでは最初からDockerが使えたり、tensorflowやmx-netなどが入ったカーネルを選択したり特に環境構築を行わずともそれなり使える環境が簡単に用意することができ便利です。一応jupter notebookのcondaタブで環境を編集することはできますが少し面倒です。Pipenvを用い環境をそのままノートブックインスタンスで使うことを考えます
+## はじめに
+こんにちは。
+ニッチな需要だと認識していますがタイトルの通り書かせていただきます。
+Amazon SageMakerのノートブックインスタンスでは最初からDockerが使えたりawscliが使えたり、tensorflowやmx-netなどが入ったカーネルを選択したり特に環境構築を行わずともそれなり使える環境が簡単に用意することができ便利です。
+一応jupter notebookのcondaタブで環境を編集することはできますが少し面倒です。
+プロジェクトの環境管理をPipenvを用いていたこともあり、どうにかPipenv環境をそのままノートブックインスタンスで使うことができないか考えてみました
-### おさらい
+## おさらい
SageMakerのノートブック項の簡単な説明を行います。
![スクリーンショット 2018-12-04 11.36.00.png](https://qiita-image-store.s3.amazonaws.com/0/287793/d30d543f-b595-ed6f-1bfa-0da588be9f09.png)
### ノートブックインスタンス
-SageMakerの目玉機能?の一つです。ある程度設定されたjupyter notebook(lab)が簡単に使えるのが最大の魅力です。これ単体でも機能します。インスタンスなので当然マシンパワーを設定でき後からでも自由に強さを変更できます。また、`/home/ec2-user/SageMaker`以外の場所はインスタンス再起動時にリセットされるので注意しなければいけません。
+SageMakerの目玉機能?の一つです。
+ある程度設定された**jupyter notebook(lab)が簡単に使えるのが最大の魅力**です。
+これ単体でも機能します。インスタンスなので当然マシンパワーを設定でき後からでも自由に強さを変更できます。
+ただ、`/home/ec2-user/SageMaker`以外の場所はインスタンス再起動時にリセットされるので注意しなければいけません。
### ライフサイクル
ノートブックインスタンスの最初の構築時または起動時に実行するスクリプトを記述でき任意のノートブックに紐付けることができる機能です。今回はこれを使って`/home/ec2-user/SageMaker`内のPipenvfileから作られる環境をインスタンスに元から入っているjupyterにカーネルとして追加します。
### Git リポジトリ
-2018年11月28日に追加された新たな機能です。Gitリポジトリを指定しておき、これと紐付けたノートブックインスタンスにリポジトリをクローンするそうです。(まだ試してません)
+2018年11月28日に追加された新たな機能です。
+Gitリポジトリを指定しておき、これと紐付けたノートブックインスタンスにリポジトリをクローンします。
+httpだけでsshを使ったクローンはできないようです。
+同一VPC内のgitlabに対しても使うことができましたが、「別にインスタンス内で手動でクローンすればよくない?」みたいな感じです。
+シークレットマネージャと連動してuser名とpassを管理するのでその辺の入力手間が省けるくらい?
+今回は関係ない機能です。
## 設定
-ライフサイクルの「ノートブックの開始」に以下を書いてノートブックインスタンスに紐付けるだけです。
+ライフサイクルの「ノートブックの開始」に以下を書いて
```sh
#!/bin/bash
set -e
-sudo -u ec2-user sh <<-EOS
+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](https://qiita-image-store.s3.amazonaws.com/0/287793/7ddab8ef-264b-2e28-a697-ffd16426028f.jpeg)
+
+ただしく、設定できると以下のようにたくさんの既存カーネルに紛れて、先ほど設定したpipenvカーネルが追加された状態で起動します
+![コメント 2018-12-17 210811.jpg](https://qiita-image-store.s3.amazonaws.com/0/287793/dd13dd77-8230-a9b4-bf7f-71a4934bb506.jpeg)
+
+
+### 説明
+* ライフサイクルはrootユーザで実行されるが普通にノートブックを使う場合はec2-userなためuserを指定して実行します
+* PIPENV_VENV_IN_PROJECTの環境変数を設定するとpipenv環境(.venv)がプロジェクトディレクトリに生成されるようになり、次回起動時起動が早くなる気がする
+terminalで確認すると.venvが使われていることがわかります。
+![コメント 2018-12-17 211240.jpg](https://qiita-image-store.s3.amazonaws.com/0/287793/c416ee1f-46ed-8051-7b45-42fc3bdd8188.jpeg)
+* あとはノートブックに`~/SageMaker`の環境を追加しています
+
+## 感想
+(コピペするだけなはずなのに私用PCがwindowsを使っていたためライフサイクルをコピペすると改行コードの違いでスクリプトが動かず少々困りました。)
+決まったものしか使えないのかと思いきやカスタマイズする余地が残されててがんばればなんとでもなるのはよいと思いました。SageMakerのノートブックインスタンスは機械学習用途となっていますが全然他のことに使えそうです。いるのかわかりませんが同じことがしたい人の役に立てれば幸いです。