目次
EC2は立ち上げているとどんどんお金が請求されていきます!
私の計算環境については、プライベートではオンプレのGPU環境を自分で整備してきていましたし、EC2のGPU環境も使ってきています。
ただ今まで使ってきたEC2は得意な人に用意してもらったEC2を使わせてもらうことばかりでした。
というわけで自分でEC2を立ち上げる経験はあまりないので、今回チャレンジしてみます。(このブログ自体はEC2で動かしていますが…)
今回参考にさせて頂いたのは以下の記事です。とても丁寧でわかりやすかったです。
作成するインスタンス料金の調査
そこそこ動けばいいかなと思いつつ、ポケットマネーなので料金を調べておきます。料金を調べるのには以下のサイトを使いました。
本家のサイトもあるのですが、ざっくり把握するのには向かないのでこちらの方がいいですね。
今回はp2.xlargeというGPUインスタンスを使います。スペックはこんな感じ。
名称 | GPU | vCPU | RAM(GiB) | ネットワーク帯域幅 | 価格/時間 |
---|---|---|---|---|---|
p2.xlarge | 1 | 4 | 61 | 高 | 0.9USD |
ざっくり計算すると以下でした。
東京リージョンでつけっぱなしだと13万くらいかかりそうなので気をつけます。ちなみに料金アラートを別途設定しているので、別記事で残しておいておこうと思います。
インスタンスの作成
いよいよインスタンスを作成していきます。まずAWSコンソールにアクセスします。この時に右上がバージニア北部になっていることを確認します。(東京リージョンだと料金が高いので)
メニューから「EC2 > インスタンスを起動」を選択します。すると以下のような画面が出てきますので、検索窓に「Deep Learning」を入力して、AMIを探します。
今回は「Deep Learning AMI (Ubuntu 18.04) Version 48.0」を使うことにします。
選択するとインスタンスタイプを選択する画面に遷移するので、p2.xlargeを選択します。
「ストレージの追加」でとりあえずボリュームタイプgp2で200GBにしておきます。「セキュリティグループ」には 自宅の固定IPのみからアクセスできるようにSSHの設定をしておきました。
終わったら「確認と作成」で起動します。
起動すると以下画面のようなポップアップが出てきますので、「新しいキーペアの作成」を選択します。
キーペア名を入力して、キーペア(pem)をダウンロードしておきます。そしてインスタンスの作成をクリック。こんな感じで作成が開始されます。
EC2のダッシュボードから起動が確認できました。
作成したEC2に初回アクセス
私はWindowsを使っているので、Gitbashを開いて、先ほど保存したpemファイルの権限を変更しておきます。変更には以下コマンドを使います。
chmod 400 kazushi_ec2.pem
sshコマンドでの接続を確認します。
ssh -i /c/Users/kazushi/Desktop
/kazushi_ec2.pem ubuntu@ec2-XXX-XXX-XXX-XXX.compute-1.amazonaws.com
ちなみにubuntu@ec2-XXX-XXX-XXX-XXX.compute-1.amazonaws.comの部分はEC2のダッシュボードで確認できます。
接続できたらこんな感じになります。
=============================================================================
__| __|_ )
_| ( / Deep Learning AMI (Ubuntu 18.04) Version 48.0
___|\___|___|
=============================================================================
Welcome to Ubuntu 18.04.5 LTS (GNU/Linux 5.4.0-1054-aws x86_64v)
Please use one of the following commands to start the required environment with the framework of your choice:
for AWS MX 1.7 (+Keras2) with Python3 (CUDA 10.1 and Intel MKL-DNN) _______________________________ source activate mxnet_p36
for AWS MX 1.8 (+Keras2) with Python3 (CUDA + and Intel MKL-DNN) ___________________________ source activate mxnet_latest_p37
for AWS MX(+AWS Neuron) with Python3 ___________________________________________________ source activate aws_neuron_mxnet_p36
for AWS MX(+Amazon Elastic Inference) with Python3 _______________________________________ source activate amazonei_mxnet_p36
for TensorFlow(+Keras2) with Python3 (CUDA + and Intel MKL-DNN) _____________________________ source activate tensorflow_p37
for Tensorflow(+AWS Neuron) with Python3 _________________________________________ source activate aws_neuron_tensorflow_p36
for TensorFlow 2.3(+Keras2) with Python3 (CUDA + and Intel MKL-DNN) _______________________ source activate tensorflow2_p37
for TensorFlow 2.4 with Python3.7 (CUDA + and Intel MKL-DNN) ________________________ source activate tensorflow2_latest_p37
for PyTorch 1.4 with Python3 (CUDA 10.1 and Intel MKL) _________________________________________ source activate pytorch_p36
for PyTorch 1.7.1 with Python3.7 (CUDA 11.1 and Intel MKL) ________________________________ source activate pytorch_latest_p37
for PyTorch (+AWS Neuron) with Python3 ______________________________________________ source activate aws_neuron_pytorch_p36
for base Python3 (CUDA 10.0) _______________________________________________________________________ source activate python3
To automatically activate base conda environment upon login, run: 'conda config --set auto_activate_base true'
Official Conda User Guide: https://docs.conda.io/projects/conda/en/latest/user-guide/
AWS Deep Learning AMI Homepage: https://aws.amazon.com/machine-learning/amis/
Developer Guide and Release Notes: https://docs.aws.amazon.com/dlami/latest/devguide/what-is-dlami.html
Support: https://forums.aws.amazon.com/forum.jspa?forumID=263
For a fully managed experience, check out Amazon SageMaker at https://aws.amazon.com/sagemaker
When using INF1 type instances, please update regularly using the instructions at: https://github.com/aws/aws-neuron-sdk/tree/master/release-notes
=============================================================================
VSCodeからEC2にアクセス
ここからは参考にしたリンクにはなかったのですが、結局使う時にはVSCodeにアクセスしないとしんどいので、アクセスの設定をしておきます。
私はRemoteSSHを使っているので、そちらで設定していきます。
まず先ほどのpemファイルを.sshディレクトリに入れておきます。
そして.ssh内のconfigファイルに以下を設定します。
Host kazushi_ML
HostName ec2-XXX-XXX-XXX-XXX.compute-1.amazonaws.com
IdentityFile ~/.ssh/kazushi_ec2.pem
User ubuntu
Port XXXX
ちなみにHostNameのところは起動のたびに代わってしまうので、Elastic IPをアタッチしておくと便利です。
そしてVSCode左上の「SSH Targets」横に出てくる「kazushi_ML」を選択してアクセスしてみます。
無事にアクセスできました。
GPUが認識できているか確認する
ちゃんと動作しているか一応みておきます。まずPythonの仮想環境をtensorflow_p37に変更して、env_check.pyファイルとして以下を準備します。
from tensorflow.python.client import device_lib
print(device_lib.list_local_devices())
これをpythonで実行すると以下のようなGPUに関する情報が出ていればOK。
incarnation: 1611944860646921124
physical_device_desc: "device: XLA_CPU device"
, name: "/device:XLA_GPU:0"
device_type: "XLA_GPU"
memory_limit: 17179869184
注意
EC2は立ち上げているとどんどんお金が請求されていくので、ちゃんと落とすようにしておくこと!p2.xlargeでも1か月放置すると10万円くらい請求されるのでめっちゃ注意!
ちなみに今回は200GBのストレージをつけて作成したが、こちらはEC2を立ち上げていなくても確保しているかぎり請求されてしまう。
コメントを残す