AWSのGPUインスタンスでvCPUの上限を解除してもらおう

AWSのGPUインスタンスで【vCPU】の上限を解除してもらう為にやった事をメモに残します。

# 経緯
- 『つくりながら学ぶ! PyTorchによる発展ディープラーニング』の教材が私のBTOPCのGPU（GeForce GTX1060 super：6GB）では、モデルとデータがGPUメモリ上に乗らなくなり、学習が進まなくなってきました。
- 新しいGPUの購入を検討しましたが、半導体不足の昨今、GPUメモリが10G以上のNvidiaのGPUに買い替えて、PC本体の電源ユニットの強化まで含めると、15万円以上の出費になってしまいます。
- それなら、『AWS：g4dn.xlarge（0.526USD/時間：オレゴン）』の方が安い？と考え、下記のリンク先を参考にトライしてみました

[AWSによるEC2インスタンスの作成](https://qiita.com/iwankoTG/items/16bcec5177b63a554a50)

[AWS EC2インスタンスを作成する（AMI:Amazon Linux / Amazon EBSの設定など）](https://www.ritolab.com/entry/17)

- トライの結果、オレゴンで2回、北部バージニアで1回、【vCPUの上限依頼】をリジェクトされてしまいました。（この頃、制限解除の条件が厳しくなっている様です）
- 途方にくれておりましたが、やり取りの中で気付きがあったので、それに従ってトライしたところ、北部バージニアでオンデマンドインスタンスで【vCPUの上限依頼】が通り、無事に『GPUインスタンス：g4dn.xlarge』を作成する事ができました。

# 気付き
- AWSサポートとのやり取りの中で、AWSは、以下の3点をチェックしていると感じました

#### <font color="Red">・GPUインスタンス申請者はお試しでは無く、ちゃんと使い続けるつもりなのか？（基本設定はできているか？）</font>
#### <font color="Red">・申請者がちゃんとAWSを管理できるだけのスキルを持っているか？</font>
#### <font color="Red">・”Amazon SageMaker Studio Lab”ではなく、あえてEC2のGPUインスタンスを申請する理由が妥当か？</font>

# 行った事
- AWS初心者の私は（こんなこともあろうかと、セールで買っておいた）Udemy講座を参考に設定を見直しました。
 [【AWS初心者向け】手を動かして身につける！ 実戦で役立つAWSサービスの基礎とアーキテクチャ(SAAレベル) ](https://www.udemy.com/course/aws-beginner-lecture-and-handson/)

    - 設定の詳細を書くとUdemy講座に対して失礼に当たるので、詳細は上記の講座や他のページでご確認ください
- 下記の記事に私が追加して行った事だけを記載します。
[AWSによるEC2インスタンスの作成](https://qiita.com/iwankoTG/items/16bcec5177b63a554a50)

<font color="Red">注）以下は4度目のトライ時に私が行った全てであり、AWSがどの設定を気にして承認してくれたかは、不明です。</font>

####１．AWSアカウント（rootユーザ）の追加設定：<font color="Red">MFAによるSecurity設定</font>
- MFAデバイスを設定してアカウントを安全に保護する（2段階認証です）
    - 仮想MFAデバイスを設定しました
    - ”Google Authenticator”を使用します
        - AWSアカウントは<font color="Red">6ケタ数字を2個入力</font>する必要があります。
            - 上の枠に、”Google Authenticator”に表示されている6桁の数字を記載します
            - 下の枠に、1分経過して、切り替わった”Google Authenticator”の6桁の数字を記載します
    - MFAを設定したら、一度サインアウトして、再度サインインします

####2．<font color="Red">IAMユーザーの新規作成：MFAによるSecurity設定</font>
- ”rootユーザー”の使用を避け、安全にAWSを使う為、<font color="Red">”IMAユーザー”</font>を作成します
    - 管理用IAMグループを作成
        - ”ポリシー”を設定した
    - グループに所属する形で”IAMユーザー”を作成
        - ”AWSへのアクセスの種類”を設定した
        - <font color="Red">”ユーザー追加完了”時のCSVのダウンロードは必ず行っておくこと</font>
    - 一度サインアウトして、上記CSVファイルにサインインリンク先が記載されているので、ブラウザにコピペしてサインインする
        - 情報はCSVファイルからコピペして、”新しいパスワード”を設定する
    - 右上のユーザー名が”IAMユーザー”のアカウント名になっていればOKです
- ”IAMユーザー”にもMFAを設定する
    - 手順は”AWSアカウント（rootユーザ）”と同じです。
    - ”IAMユーザー”は<font color="Red">6ケタ数字を1個入力</font>でOKです
    - MFAを設定したら、一度サインアウトして、再度”IAMユーザー”でサインインします

####3．EC2インスタンスの設定準備：（この項目がどの程度効果があったか？は不明）
- 予算の設定
    - ”ルートユーザ”でサインインします
        - "IAMユーザ/ロールによる請求情報へのアクセス"を有効にする
        - サインアウトする
    - ”IAMユーザ”でサインインします
        - AWS Bugetsで”予算の設定”を行う
        
- <font color="Red">以下は全て、 ”IAMユーザ”で設定します</font>
- VPCの作成
    - Amazon VPCを作成
        - ”VPC”サービスウィンドウから（1クリックで作成も可能（らしい））
            - ”VPC”を作成
        - ”サブネット”を作成（Publicを１つで十分）
            - ”インターネットゲートウェイ”を作成
                - 同時に”VPCへのアタッチ”を実施する
        - ”パブリックサブネット用ルートテーブル”の作成
           - ”VPC”を設定する
           - ”ルートテーブル”の”ルートの編集”を行う
           - ”サブネットの関連付け”を行う
- キーペアの作成
    - EC2ダッシュボードから
        - ”キーペア”を選択して、【キーペアを作成】され、秘密鍵がダウンロードされます
        - <font color="Red">ダウンロードされる秘密鍵は再ダウンロードできないので、しっかり保存しておくこと</font>
- Elastic IPの取得
    - EC2ダッシュボードから
        - ”Elastic IP”を選択して、【Elastic IPアドレスの割り当て】をクリック
            - タグに”Name”を記載しておくと、あとでわかりやすい

           
####4．EC2インスタンスの設定：<font color="Red">失敗すること前提</font>
- AMI（Amazonマシンイメージ）の選択
    - 私は、Docker主体で構築するので『Deep Learning Base AMI (Ubuntu 18.04)』を選択
- インスタンスタイプの選択
    - ”g4dn.xlarge”を選択
-インスタンスの詳細の設定
    - ネットワーク：”VPC”で設定した”VPC”の名前
    - サブネット：”VPC”で設定したPublicの名前
- ストレージの追加
    - お望みのサイズで
- タグの設定
    - ”Name”は記載しておくとあとでわかりやすい
    - その他はお好みで
- セキュリティグループの設定
    - 下記のリンク先を参照しました
    - [AWS EC2インスタンスを作成する（AMI:Amazon Linux / Amazon EBSの設定など）](https://www.ritolab.com/entry/17)
- インスタンス作成の確認
    - "キーペア"は『既存のキーペア』を選び、先程作成したキーペアを選択する
    - 『インスタンスの作成』をクリックする
    - インスタンス作成が開始されるが、
      
### <font color="Red">インスタンスの作成に失敗し、 『You have requested more vCPU capacity than your current vCPU limit of 0 allows for the instance bucket that the specified instance type belongs to』と表示される(涙)</font>

####5．AWSへの【vCPUの上限】の解除依頼
- ”EC2ダッシュボード”→”制限”→【vCPU制限を計算】をクリック
    - 『制限計算ツール』が開くので、必要なインスタンス等を設定し、必要な『vCPU数』を再確認
        - ”オンデマンド制限の引き上げをリクエスト”
        - ”スポット制限の引き上げをリクエスト”
            - の何れかをクリック
- ”Create case”が開くので、
    - リージョン
    - インスタンス名
    - New limit value : 必要なvCPU数
を記入する
- <font color="Red">Use case description”に記載する情報も大事らしい
    - 以下の内容をDeepL翻訳などで英語にする（私のように英語が不得意な方）
        - 読んでいる最終判断するのは各Regionの担当者の様なので、英語での記載が安全
            - 和文は”主語を抜かない”等の正しく英訳してくれる和文を意識して書く
            - 【和文→英文→和文】にしても和文の意味が崩れない事を確認する
    - 内容
        - 要求する内容（”vCPU上限”を【x個】にしてくれ!!）
        - GPUが必要な理由はなにか？
        - どの程度使用する予定なのか？
        - EC2では無いとダメな理由はなにか？
        - なぜ、オンデマンドインスタンスなのか？</font>
- 私は以下の英文を添付しました

```
Dear AWS support staff

I've just started using AWS.
I need a GPU for deep learning.
I'm trying to launch an AWS "g4ad.xlarge" instance because my PC's GPU is not powerful enough.
However, at the end of launching the instance, an error message "You have requested more vCPU capacity than your current vCPU limit of 0 allows for the instance bucket that the specified instance type belongs to" is displayed and the instance will not launch.
Please adjust the vCPU limit of the "g4ad.xlarge" instance and change it to "4".

I plan to use it for about 2 hours on weekdays and about 6 hours on weekends.
I am going to use AWS EC2 with ROS (Robot Operating System) and web apps as well, so I need an EC2 GPU instance instead of "Amazon SageMaker Studio Lab".
I chose the "On-demand Instance" because I have limited time to work on it.
My company also uses AWS EC2 instances, and since this study is related to that work, I chose the same AWS EC2.
Please let me know if there are any conditions necessary to remove the restriction.

Thank you very much for your help.
```
（改めて見直すと、日本語英語ですね〜。”Please adjust the vCPU limit of the "g4ad.xlarge" instance and change it to "4".”と要求から書き始めても良かったかも。）
####6．EC2インスタンスの作成：【vCPUの上限解除】後
- 無事にAWSから”vCPUの制限解除”の連絡が届いたら、『4．EC2インスタンスの設定準備』を再トライです、
- インスタンスが『実行中』になり『ステータス：2/2のチェックに合格しました』と表示されたら成功です
- Elastic IPの取得
    - EC2ダッシュボードから
        - ”Elastic IP”を選択して、【アクション】から【Elastic IPの関連付け】を選択
        - ”インスタンス名”と”プライベートIPアドレス”を選択して、【関連付け】をクリック
    - これで無事にssh接続ができます

＜参照先＞
[AWSによるEC2インスタンスの作成](https://qiita.com/iwankoTG/items/16bcec5177b63a554a50)
[AWS EC2インスタンスを作成する（AMI:Amazon Linux / Amazon EBSの設定など）](https://www.ritolab.com/entry/17)
 [【AWS初心者向け】手を動かして身につける！ 実戦で役立つAWSサービスの基礎とアーキテクチャ(SAAレベル) ](https://www.udemy.com/course/aws-beginner-lecture-and-handson/)

0版：2022年1月16日