AWSのGPUインスタンスでCIFAR-10の分類で作ったGPUインスタンスを、普段はお高いので止めておいて、時々jupyter notebookを起動してブラウザから触りたい。
想定は1リージョンに1インスタンスしかない、AWS超ライトユーザです。(設定が全然汎用的ではないので・・)
aws CLIでインスタンスを起動
コンソールをぽちぽちしても同じことができるが、時間がかるのでCLIがよい。
対象のリージョンにインスタンスが2つ以上ある場合、jqに渡すオプションは変更しないと失敗するはず。
describe-instancesでインスタンスIDをもってきて、そのまんまstart-instancesに渡す。この辺のノウハウはもっと良い記事があるに違いない。
aws ec2 start-instances --instance-ids `aws ec2 describe-instances | jq -r '.Reservations[].Instances[].InstanceId'`
~/.ssh/configにLocalForwardの設定
"ec2"がドメインに含まれているPublic DNSにつなげたとき、ユーザ名とキーファイルは決め打ちで、LocalForwardする設定にする。
これで、SSH接続している間はローカルの8888に接続するとEC2側で待ち受けている8889に繋がるようになる。
Host *ec2*
User ec2-user
LocalForward 8888 127.0.0.1:8889
IdentityFile ~/.ssh/gpu.pem
SSH接続してjupyter notebookを起動
SSHはその時のPublicDnsNameに繋がるように次のコマンドを実行する。
ssh `aws ec2 describe-instances | jq -r '.Reservations[].Instances[].PublicDnsName'`
Keras(Theano)がGPUを使うように、jupyter notebookを起動する。起動ポートは8889にする。
THEANO_FLAGS=mode=FAST_RUN,device=gpu,floatX=float32 jupyter notebook --no-browser --port 8889
ローカルのブラウザからアクセス
必要なipynbファイルはscpなどで送り込んでおく。
アクセス先は http://localhost:8888/ になる。