ちょっと前からfast.ai が提供しているディープラーニング学習のオンラインコース、Practical Deep Learning For Coders, Part 1を始めています。
このコースはためになり面白い! ƪ(•◡•ƪ)"
(Udacityのコースより全然よい。しかも無料)
しかし、
自宅マシンのスペックが非力(メインメモリ8GB、GPUメモリ2GB)なため課題の途中でMEMORY ERRORの嵐。。(◞‸◟)
FloydHubはプロモーション期間が10/1で終了してしまいGPU無料枠を失ってしまいましたが UdacityのDeep Learning Nanodegreeを受講したときの特典、AWS100ドルクーポンがまだ残ってる!
fast.aiのgithubのレポジトリにはAWSのセットアップスクリプトが含まれています。若干の改造が必要でしたが超簡単にGPUインスタンスが使えるようになりました。:-)
なお、fast.aiのコースの内容についてはこのブログが大変参考になります。
スクリプトの改修点
setup_p2.sh
EC2インスタンスを作成するスクリプトです。そのまま実行すると、
Only us-west-2 (Oregon), eu-west-1 (Ireland), and us-east-1 (Virginia) are currently supported
というエラーが出ちゃいました。。
なので、強制的にOregonリージョンを使うようにしました。
# get the correct ami #export region=$(aws configure get region) export region='us-west-2' export AWS_DEFAULT_REGION='us-west-2'
これでものの数分でP2インスタンスが起動できちゃいます。
P2インスタンスのコスト(2017/10/6時点)
P2インスタンスは東京リージョンでも使えるようになったのでスクリプトを修正すれば東京リージョンでも起動できると思いますが以下のようにコストが1.7倍するので学習用である限りは東京リージョンで使うのをやめたほうがいいと思います
リージョン | P2インスタンスのコスト |
---|---|
米国東部 バージニア北部(us-east-1) | $0.9 |
米国東部 オハイオ(us-east-2) | $0.9 |
米国西部 オレゴン(us-west-2) | $0.9 |
欧州アイルランド(eu-west-1) | $0.972 |
欧州フランクフルト(eu-central-1) | $1.362 |
アジアパシフィック ソウル(ap-northeast-2) | $1.465 |
アジアパシフィック 東京(ap-northeast-1) | $1.542 |
アジアパシフィック シドニー(ap-southeast-2) | $1.542 |
アジアパシフィック シンガポール(ap-southeast-1) | $1.718 |
アジアパシフィック ムンバイ(ap-south-1) | $1.542 |
aws-alias.sh
setup_p2.sh
を実行すると fast-ai-commands.txt
というファイルが作成され、その中で設定すべき環境変数が記述されているのですが.bash_profile
などに書き写すのに少し抵抗があり、これを自動的に設定するようにしました。
以下のコードを先頭に足します。
export AWS_DEFAULT_REGION='us-west-2' eval $(grep -e "^export" fast-ai-commands.txt)
これでaws-alias.sh
を実行したとき、必要な環境変数が自動的に設定されてます。
ただ、このままでは aws-alias.sh
で定義されている aws-ssh
等がなぜかうまく動きません...
$instanceIp
が x.x.x.x
のようになっているべきところ、"x.x.x.x"
とダブルクォーテーションがついてしまっているのが原因でした。
なので、これを取り除くように修正します。( | sed -e "s/\"//g"
を追加します)
# Original #alias aws-start='aws ec2 start-instances --instance-ids $instanceId && aws ec2 wait instance-running --instance-ids $instanceId && export instanceIp=`aws ec2 d escribe-instances --filters "Name=instance-id,Values=$instanceId" --query "Reser vations[0].Instances[0].PublicIpAddress"` && echo $instanceIp' # 修正版 alias aws-start='aws ec2 start-instances --instance-ids $instanceId && aws ec2 w ait instance-running --instance-ids $instanceId && export instanceIp=`aws ec2 de scribe-instances --filters "Name=instance-id,Values=$instanceId" --query "Reserv ations[0].Instances[0].PublicIpAddress" | sed -e "s/\"//g"` && echo $instanceIp' # Original #alias aws-ip='export instanceIp=`aws ec2 describe-instances --filters "Name=ins tance-id,Values=$instanceId" --query "Reservations[0].Instances[0].PublicIpAddre ss"` && echo $instanceIp' # 修正版 alias aws-ip='export instanceIp=`aws ec2 describe-instances --filters "Name=inst ance-id,Values=$instanceId" --query "Reservations[0].Instances[0].PublicIpAddres s" | sed -e "s/\"//g"` && echo $instanceIp'
これで、一度 source aws-alias.sh
したあと、aws-start
、aws-ssh
、aws-stop
のコマンドで楽にEC2インスタンスの制御とsshログインができます。
簡単にP2インスタンスが起動できちゃうので使いすぎに注意ですね。。
Jupyter Notebook起動時に求められるパスワードは Lesson1のNote に記載されており、 dl_course
です。