ゼロから始めるPaperspace Gradient【Google Colab代替サービス】

**Information**

**2024/10/7：**
- ストレージとして Amazon S3 をマウントする方法を 10 章に追記しました。
  - これにより、コストの安い S3 をストレージとして使用できるため、 Paperspace のストレージ容量が少ない問題を解決できます（ S3 の料金体系については 9 章を参照）。
- 特定の torch や cuda のバージョンのコンテナで notebook を起動するする方法を 3 章に追記しました。
  - 「torch==2.4.0 でないとライブラリが動かせない！」といった場合にお試し下さい。

# はじめに
　こんにちは、kunishouです。先月2022年9月の末にGoogle Colabがサービス内容の大幅な変更を実施し、従来は無制限でGPUを使用できていたものが、クレジット制に移行しました。この変更を受けてこれまでGoogle Colabを利用してKaggleに取り組んできたり、Stable Diffusionなどでイラスト自動生成の実験をしてきた多くの方々から悲痛な声が聞こえてきました。そこで、本記事では **『Paperspace Gradient』というGoogle Colabに類似したクラウドGPU開発環境を定額で利用できるサービス** を見つけたので、このサービスの詳細や使い方、使ってみた感想を紹介したいと思います。また、Paperspace Gradientはストレージ容量が少ない（Growthプランで50GB）という欠点がありますが、これをカバーする手段として **インスタンス内に保存したファイルをAmazon S3に転送する方法も併せて説明いたします。**

:::note
Amazon S3 バケットをマウントする方法を10章に追記しました。S3をマウントする設定をすれば Paperspace Gradient 上のストレージ容量を気にする必要はなくなります。
:::

#### Paperspace Gradient

https://www.paperspace.com/gradient

##### Papsespace Gradientサービス概要
・月定額でGPUマシンを利用可能
・FreeプランであればRTX4000 8GBまで、ProプランであればA4000 16GBまで、GrowthプランであればA100 80GBまで使用可能
![04.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/692165/7fdff022-8e68-d286-9b40-fcaa331ca15d.png)




# 目次
１．Google Colabのサービス内容変更
２．Paperspace Gradientについて
３．プロジェクト、Notebookインスタンスの作成
４．Amazon S3の準備
５．AWS CLIのインストール
６．Credential設定
７．PaperspaceからS3へのデータ転送
８．インスタンス再起動後の設定
９．Amazon S3の料金体系
１０．その他のデータ転送方法
１１．Paperspace Gradientを使ってみて分かったこと
１２．その他
１３．まとめ
１４．最後に


:::note warn
Papserspace Gradientを使ってみて分かったこと、感想などについてまず知りたい人は１１項から先に読むのをお勧めします。
:::

# １．Google Colabのサービス内容変更
　前述の通り、2022年9月末にGoogle Colabがサービス内容を大きく変更しました。詳細はKaggle GMのカレーちゃんさんが記事にまとめてくれています。

https://www.currypurin.com/entry/2022/09/30/093810

ざっくりと言うと以下の通りになります。

#### 【サービス変更前】
・月額定額でGPUリソースを無制限に使用可能（必ずしもスペックの良いGPUが使えるとは限らない）

#### 【サービス変更後】
・コンピューティングユニット（以下「CU」）というクレジットの仕組みが導入。Proプランは100CU/month、Pro+プランは500CU/monthが使用可能
・CUが切れた場合は、1000円で100CUを追加購入可能
（なお、Proプラン、Pro+プランの料金については変更なし）

1時間あたりのCU消費量と、Pro+（500CU）だった場合の月の使用可能時間は次の通りです。

```
T4: 1.96 CU/h　　 （255h/month）
V100: 5.36 CU/h   （93h/month）
A100: 13.08 CU/h　（38h/month）
```

私の場合、Kaggleのコンペ参加中はV100 GPUを月に推定480時間（24時間×20日間）くらいは利用していたので今回のColabのサービス変更はかなり影響が大きいものでした。私は現在は、Kaggleの自然言語処理コンペなどのGPU利用が必須のコンペを中心にKaggleに参加しているため、このままColabを利用し続けると不満を抱えながらコンペに取り組むことになるだろうと考えました。そのため、Google Colab以外に代替手段はないかを模索していました。

##### 【参考】Colab代替手段案
* Google Cloud Platform　…　インスタンスの環境をゼロから構築すればGPUが安いがCUDAのインストールからやらないといけない等、結構手間（なお、AWSはGPUインスタンスが高いので検討外）
* オンプレGPUの購入　…　RTX4090が発売されたので3090が買い時か
* Kaggle Notebookで頑張る　…　週35hくらいはP100が利用可能
* チームマージして頑張る　…　複数人で実験を回せばColab 月500CUでも足りるか
* クラウドGPUレンタル　…　Vast.aiやLamda labsなど

このように色々な代替手段を模索しているときに **『Paperspace Gradient』** というGoogle Colabに類似したサービスの存在を知りました。これ以降でPaperspace Gradientのサービス詳細、使用方法を説明していきます。

# ２．Paperspace Gradientについて
　Paperspaceというサービス自体は実は4年以上前から存在しており、クラウドGPU開発環境を従量課金で利用できるサービスになります（現在は「Paperspace Core」というサービス名になっています）。今回紹介する **Papserspace Gradientは従来のPaperspaceを月定額で利用できるサービス** になります。


#### 利用プラン詳細
・フリープラン、Proプラン、Growthプランの3プランあり
・FreeプランであればRTX4000 8GBまで、ProプランであればA4000 16GBまで、GrowthプランであればA100 80Gまでを **無償GPUとして** 使用可能
・無償GPUとは別に従量課金の有償GPUも使用可能
・**Freeプランの場合は、notebookがパブリックになる**
・ストレージはフリープランで5GB、Proプランで15GB、Growthプランで50GB。ストレージは１GBオーバーするごとに0.29ドル発生
・Growthプランであれば5メンバーまでアクセス可能
・Proプラン以上は **有償GPUの使用であれば最大1週間使用可能、無償GPUの場合は最大6時間使用可能**
　→「No time limits」と書いてあるので、GrowthプランであればずっとA100 80GBが使い放題なのか？と思いますが言葉のあやでこれは違います（詳細は１１項で説明）
・ **有償GPUの使用であれば** Notebookインスタンスを最大10個まで同時に起動可能
　→「Running Notebook limit : X」と書いてるので、A100 80GBマシンに余りがあれば同時にA100を2、3個同時に使用できるか？と思いますがこれも言葉のあやで違います（詳細は１１項で説明）
![07.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/692165/0bb3ae23-4b79-dd54-063a-d36939677abd.png)

:::note
予算に余裕があるのであれば Growth プランをお勧めします。利用料金が少し高い分、利用者も少ないため、A6000 インスタンスであればだいたいいつでも利用可能です。逆に Pro プランはリーズナブルで利用者数が多いため、無料利用できる GPU がいつも誰かに使われていることが多いです。
:::

#### 使用可能GPU一覧
![02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/692165/eeb887f2-8bcb-2b34-ea05-a5a0326ff52b.png)
上記の表だけ見ると、Growthプランであれば多くのGPUマシンを無償で使えるように思いますが、上記表は実は無償GPUと有償GPUが混在しています。Growthプランで純粋に無償で利用できるGPU一覧は下記の表の通りです。
![03.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/692165/89a5ed08-bbf2-c968-f3d6-f5c9608f6c74.png)
気づいたかもしれませんがGrowthプランで利用可能な無償GPUにはV100 16GBはありません（V100は従量課金でのみ利用可能）。ただ、Growthプランでは無償GPUがA5000 24GB、A6000 48GB、A100 80GBが利用可能なため特に問題にはならないと思います。

:::note
2023年時点では Growth プランでも A100 80GB インスタンスはわりと使うことができましたが2024年10月時点では滅多に空いているところを見ません（ A6000 はわりといつでも空いています）。
:::

# ３．プロジェクト、Notebookインスタンスの作成
　「ゼロから始める」とタイトルに書きつつ、Paperspaceのサインアップの方法についてはサイトの指示に従って進めれば特にハードルとなる部分もないため割愛させていただきます。

Paperspaceのサインアップは以下より

https://console.paperspace.com/signup?R=POBMK0D

① トップページにて「CREATE A PROJECT」を押下
![01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/692165/49b6c3c1-919f-1674-7d09-60984d28fb83.png)
② プロジェクト名（「Name」）を入力して「CREATE」を押下（ここでは「test」と入力）
![02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/692165/911cd4de-92f6-90e9-4800-abbfa5c627ac.png)
③ 「Notebooks」と画面表示されているページで「CREATE」を押下することでNotebookインスタンスを作成開始
![03.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/692165/9ff57f98-b060-b2d6-2794-b0b89726549e.png)
④ 自身の用途に応じてテンプレート runtimeを選択する。まずは一番ベーシックな「Start from Scratch」で大丈夫です。
![04.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/692165/bdc06ec5-fa7a-c41c-d060-3474ed8d1242.png)

:::note
特定の torch や cuda のバージョンが必要な方はコンテナを変更して notebook 環境を起動することをお勧めします。起動時のコンテナ変更方法は以下のページを参考にして下さい。
:::

https://note.com/gentle_murre488/n/n10892913ea06

https://note.com/hikoza2045/n/n5c057ce7ed86

https://note.com/ai_hinahina/n/n7b21045fbb9b

⑤ 使用するGPUを選択する（ **必ず「Free-」と付いているマシンを選択する** ）。自動シャットダウン時間を選択する（ **無償GPUだと最大6時間** ）。「START A NOTEBOOK」を押下することでNotebookインスタンスが起動する。
![05.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/692165/62be7a75-e7dd-4eb1-4903-48f47f3db3b8.png)
⑥ インスタンスのセットアップが開始する。2、3分くらいすると「Running」状態になり、赤枠の部分にJupyter Labのボタンが出現するので押下

セットアップ中
![06.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/692165/a5cb3eda-7a75-c114-1313-ba1c361a89ad.png)
Running状態
![07.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/692165/879b04de-180e-9ecb-cf3f-b12a80e036c8.png)
⑦ Jupyter Labのページに遷移して、赤枠を押下すればnotebookが起動
![13.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/692165/7696e96e-3807-2fb4-6c8d-e753077fc6ae.png)
![14.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/692165/02cc7204-4424-4652-373a-e0c95a1deec3.png)
セル内に以下のコマンドを入力して実行すると使用しているGPUマシンのスペックを確認できます。画像はA100 80GBを使用した時のものです。ColabでもA100 40GBまでしか使ったことがなかったのでVRAM80GBのマシンを定額で普通に使用できることに感動しました。
```python:notebook
!nvidia-smi
```
![02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/692165/98a4b372-3380-2da7-b23b-5d5c360780db.png)

# ４．Amazon S3の準備
:::note warn
4項～10項のS3利用、外部ストレージへのデータ転送に関わる項については、Papserspace Gradientを使ってみてストレージ容量がなくなったときに読むようにしていただいて問題ありません。Paperspace Gradientを使用してみての感想などについて知りたい方は11項をご覧下さい。
:::

:::note
Amazon S3 バケットをマウントする方法を10章に追記しました。こちらの設定をすれば 5 ～ 8 省の S3 にデータを転送するための設定は不要になります。
:::

　サービスの詳細でも述べましたがPaperspace GradientはGrowthプランでもストレージ50GBと容量が少なめです。この容量でも学習後のモデルをある程度の数は保存できますが、容量が上限に近づいた時のファイル避難用のストレージとしてS3にデータ転送できるように設定していきます。

※ 参考に Deberta-v3-largeはおよそ1.6GBなので5foldで学習するとだいたい8GBくらい
※ 余談ですがS3はSimple Strage Serviceの略

以下の３つの手順を実施します。

① AWSアカウントの作成   
② S3 bucketの作成
③ IAMユーザーの作成

#### ① AWSアカウントの作成
以下のURLからAWS公式サイトに遷移し、「無料アカウントを作成」を押下。遷移後のページで指示に従い、メールアドレスとAWSアカウント名を入力し、認証コードをメールアドレスに送信。認証が完了するとサポートプラン選択ページに遷移。

https://aws.amazon.com/jp/free/
![05.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/692165/bc9c92d1-f06e-1d19-5390-4b9a106f33c6.png)
ベーシックサポートプランを選択し「サインアップを完了」を押下するとアカウント作成が完了
![06.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/692165/6c078498-3bb0-a1ca-90a8-72bfd57d5a8a.png)
Eメールアドレスの入力欄にメールアドレスを入力し、「次へ」を押下。遷移後のページでパスワードを入力してログイン。AWSのコンソールホーム画面へ遷移する。
![07.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/692165/536b3265-d019-6849-2eb1-d049f04879c9.png)
#### ② S3 bucketの作成
コンソールホーム画面で「S3」のアイコンを押下。アイコンがない場合は検索バーに「S3」と入力し、アプリケーションを探す。
![08.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/692165/574492eb-c1e1-0862-a8ca-597d8723ca28.png)
遷移後の画面で「バケットを作成」を押下
![09.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/692165/3202a3c5-6551-264b-9aca-ae254856bb5c.png)
任意のバケット名を入力し、リージョンを選択（「アジアパシフィック（東京）」を選択）
![10.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/692165/2a8f9bd1-cbe1-015d-d8fb-67c6e3b0e13f.png)
下記画面に遷移したらS3バケットの作成完了
![11.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/692165/d417e6a6-6ca5-3398-f141-075ad8d6b502.png)
#### ③ IAMユーザーの作成
コンソールホーム画面で「IAM」のアイコンを押下。アイコンがない場合は検索バーに「IAM」と入力し、アプリケーションを探す。
![08_2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/692165/f227ffb3-eccc-d6a4-1cf7-4a1aa15045e8.png)
IAMダッシュボードに遷移したら、赤枠の部分を押下してIAMユーザを作成する。ここでIAMユーザを作成する理由としては、現在ログインしているルートユーザーで外部アクセス認証情報を発行するのは推奨されていないため、認証情報発行のためにここで通常ユーザ（IAMユーザー）を作成している。
![12.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/692165/ed1cdc96-14c0-604c-3598-6adba87063ce.png)
遷移後の画面で「ユーザーを追加」を押下
![13.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/692165/dce2af14-2983-6ed5-888e-cc66959521dc.png)
任意のユーザー名を入力し、画面通りのチェックボックスにチェックを入れ、「次のステップ：アクセス権限」を押下
![14.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/692165/46eaf0ca-40d1-ca26-094f-28b2a3e7a0a2.png)
「既存のポリシーを直接アタッチ」を押下し、ポリシーのフィルタに「S3」を入力。「AmazonS3FullAccess」にチェックを入れ「次のステップ：タグ」を押下
![15.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/692165/46c66477-899d-d6b1-3bc0-efe141dc309c.png)
こちらのページでは何も触らず「次のステップ：確認」を押下
![16.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/692165/e59f1590-2299-6a27-6f6d-78a8938b0435.png)
遷移後のページで「ユーザーの作成」を押下
![17.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/692165/abd9d334-6332-9551-4e83-b66fb55eb081.png)
以上でIAMユーザーの作成が完了しました。次に「.csvのダウンロード」を押下してS3に外部アクセスするための認証情報をダウンロードします（ **認証情報が漏洩すると不正アクセスに利用されてしまうため、適切に保管して下さい** ）
![18.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/692165/b36b45f2-d3c1-ff04-e0c2-f667afe75e1e.png)

# ５．AWS CLIのインストール
　PaperspaceからAmazon S3にアクセスするための認証情報を設定したり、PaperspaceからS3にデータを転送する操作はAWSコマンドで実施しますが、AWSコマンドをTerminal上で実行できるようにするためにAWS CLIをインストールします。

Jupyter Lab上でTerminalを起動する
![01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/692165/d613a39f-0a97-fee6-f9a9-4a2887027ba8.png)
![02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/692165/ee042c0f-9daf-ca2e-d288-193a4c184d52.png)
下記AWS URL内の画像赤枠のLinuxのインストールコードをコピーしTerminal上で実行するとインストールが開始（5分程度かかります）
https://docs.aws.amazon.com/ja_jp/cli/latest/userguide/getting-started-install.html

![03.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/692165/2dfd1fc4-1118-102c-4011-ea6bd631053d.png)
インストールが完了したらTerminal上で次のコードを入力し、バージョン情報が表示されたらインストール完了
```python:Terminal
aws --version
```
![04.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/692165/98189e9b-2d10-c37d-3364-0e9941846e5d.png)

# ６．Credential設定
　PaperspaceからAmazon S3にアクセスするための認証情報（Credential）を設定します。

Terminal上で以下のコマンドを入力しプロファイルを作成する（ここでは「kunishou」というプロファイルを作成しています）
```python:Terminal
aws configure --profile kunishou
```
次に4つの項目の入力を求められるのでアクセスキー、シークレットキーについては「３．Amazon S3の準備」の③でダウンロードしたCSVファイルの情報を、リージョンについては「ap-northeast-1」を入力する（4つ目の項目は未入力でOK）
```python:Terminal
AWS Access Key ID [None]: XXXXXXXXXXXXXXX
AWS Secret Access Key [None]: XXXXXXXXXXXXXXXXXXXXXXX
Default region name [None]: ap-northeast-1
Default output format [None]: 
```

AWS_PROFILE環境変数を設定したプロファイルに切り替える
```python:Terminal
export AWS_PROFILE=kunishou
```

設定内容を確認する
```python:Terminal
aws configure list
```
以下のように、先ほど入力した内容が表示されていれば設定完了
```
      Name                    Value             Type    Location
      ----                    -----             ----    --------
   profile                   kunishou            env   --profile
access_key     ****************KIFA shared-credentials-file    
secret_key     ****************C4Fe shared-credentials-file    
    region                ap-northeast-1         None    None
```

# ７．PaperspaceからS3へのデータ転送
　長くなりましたが、データ転送の準備が整いましたのでPaperspaceからS3にデータを転送してみます。ここではPaperspaceのNotebookインスタンスのrootフォルダ直下に格納した「test.csv」というファイルを転送してみたいと思います。
![23.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/692165/07b40d5f-0771-fcba-d30d-d41d63ff6a4c.png)
S3バケットのページで「test」というフォルダを作成しました。このフォルダにtest.csvを転送します。図の通り、testフォルダのチェックボックスにチェックを入れ、赤枠の「S3 URLをコピー」を押下
![20.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/692165/a83f624b-a552-3850-c890-68fea6365cec.png)
PaperspaceでTerminalを起動し、AWSコマンドを入力
「aws s3 mv （転送元ファイルパス） （転送先フォルダパス）」で転送先ファイルパスに先ほどコピーしたS3 URLをペーストします。コマンド実行後、Terminal上に「upload」と表示されれば転送完了
```python:Terminal
aws s3 mv test.csv s3://xxxxxxxx/test
```
S3のtestフォルダ内を確認するとtest.csvが無事に転送されていました。
![22.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/692165/b715e847-07bd-ee27-d5d2-6b56bd6184fa.png)

#### S3からPaperspaceにデータを転送する場合
先ほどとは逆に転送元ファイルパスにS3 URLを指定し、転送先フォルダパスにPaperspaceのフォルダパスを指定すれば大丈夫です。
```python:Terminal
aws s3 mv s3://xxxxxxxx/test/test.csv  . 
```
#### 転送ではなくコピーしたい場合
「mv」の代わりに、ファイルをコピーする場合は「cp」、フォルダをコピーする場合は「sync」を使います（「sync」は厳密には差分コピーをしています）。
例えば、以下のようにAWSコマンドを実行することでS3内のtestフォルダがPaperspace側にコピーされます。
```python:Terminal
aws s3 sync s3://xxxxxxxx/test  . 
```
# ８．インスタンス再起動後の設定
　Google Colabのcontentフォルダじゃないですが、Notebookインスタンスが時間上限でシャットダウンした後に、インスタンスを再起動するとAWS CLIやCredential設定は消えているため、再設定が必要になります。以下のようにするとインスタンス再起動後に簡易に再設定ができます。

**※S3へのデータ転送はPaperspace内のストレージがいっぱいになってきたら実施するものだと思うので転送が必要な時にだけこの設定を実施すれば良いと思います。**
#### 事前準備
* 設定したCredentialをrootフォルダ直下にコピーしておく
次のコマンドでCredentialファイルがrootフォルダ直下にコピーされます
```python:Terminal
cp ~/.aws/credentials  .
```
* 先ほどAWS CLIをインストールした時にrootフォルダ直下にできた「aws」フォルダを残しておく（解凍前のzipフォルダは削除して大丈夫です）

事前準備がされた状態で、インスタンス再起動後に以下のコマンドをTemirnal上で実行する。2つに分けて実行しているのはexportコマンドの部分で分けて実行しないとexportでの環境変数切り替えが上手くいかないためです（ここは上手いやり方があるとは思います）。
```python:Terminal
sudo ./aws/install
mkdir ~/.aws
cp credentials ~/.aws/
aws configure --profile xxxxxx
```
```python:Terminal
export AWS_PROFILE=xxxxxx
aws configure list
```
最終行のコマンドの実行結果（クレデンシャル情報）が表示されれば再設定完了です。

# ９．Amazon S3の料金体系
　前項まででS3へのデータ転送の方法を説明しましたが、S3の料金体系についても紹介します。詳細はこちらの記事をご覧下さい。

https://zenn.dev/mryhryki/articles/2020-10-09-hatena-aws-s3-pricing

おおまかに説明すると、大きく以下の3種類の料金が発生します（1ドル145円換算です）。
* S3のストレージの平均保管量に応じて発生する料金
1ヶ月間 **平均して** 500GBのファイルをS3上に保管していた場合、3.6円/GB×500GB = **1,800円発生**
* S3からファイルをダウンロードするときに発生する料金
S3からPaperspace側にファイルを転送したり、S3からローカルPCにファイルをダウンロードした際に **ファイル10GBあたり165円発生**
* S3にファイル操作をリクエストするときに発生する料金
10万回のリクエストあたり68円と非常に低コストのため、あまり考える必要なし

**※ アップロード時は料金の発生なし**
![s3コスト.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/692165/9336bb90-2a81-e9ac-1dae-d0484afb80e4.png)

ダウンロード料金が意外に高いので利用頻度が高いファイルはPaperspace上で保管し、念のためバックアップしておきたいような利用頻度が低いファイルはS3に転送するという運用にするのが良さそうです。

# １０．その他のデータ転送方法
　ここまでは、AWSコマンドを用いてS3にデータ転送する方法を紹介してきましたが他の手段もあるので簡単にご紹介します。
#### Paperspace UI上でS3をマウント
実はPaperspace上でS3をマウントすることができます。以下の画像のようにNotebookインスタンスのデータソース設定の部分でS3を選択し、アクセスキー、シークレットキーを入力することでマウントすることができます。 ~~ただし、 私が試したところなぜかエラーが発生してしまいマウントすることができませんでした。IAMでのS3へのアクセス権限の設定の問題な気がしますがどなたか上手くいった方おりましたら情報提供をお願いしたいです。S3をマウントできれば、読み込みファイルのパスにS3 URLを指定してS3上のCSVを読み込めるようになる（はず）なのでマウントできると非常に楽です。~~

 **過去にマウントしようとして上手くいきませんでしたが、GPUを「START MACHINE」で起動した状態でこの操作を実施することで上手くいきました。** 

図のように「Add a Data Source」のポップアップ画面で「Display Name」、「Bucket URL」を入力、「Access Key ID」、「Secret Access Key ID」を選択し、「ADD S3 DATA SOURCE」ボタンを押下すると指定した S3 バケットがデータソースとして追加されます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/692165/718b1002-180f-536d-bb0c-1ef34edb579e.png)

なお、「Access Key ID」、「Secret Access Key ID」については事前に下の画像のプロジェクトの「Settings」画面にてアクセスキーとシークレットキーを登録すると、上の画像の画面で設定しておくと選択できるようになります。

![05.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/692165/c4e42a35-5e7c-f296-ccc4-360e05602356.png)

　データソースの追加が完了すると以下の画像のようになるので、この状態で「MOUNT」ボタンを押下するとマウントが完了します。 **なお、この操作の実施は一度だけで良く、次回以降の notebook 起動時からはここで指定した S3 バケットが自動でマウントされるようになります。** 別の S3 バケットもマウントしたい場合は同様の操作を実施して下さい。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/692165/a24d3f61-d785-b32b-55f4-6c9e3dca813b.png)

最後に、Jupyt Lab を起動し、Terminal を開き以下のコマンドを実行するとマウントされた S3 バケットが表示されていれば完了です。ファイルサイズの大きいファイルなどはこちらのパスに格納するようにして下さい。

```
ls ../datasets
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/692165/121574d2-fb26-0a03-7bcf-740e5ba9cb27.png)

#### boto3でのデータ転送
AWSコマンドを用いてS3にデータ転送する方法とは別に、boto3というライブラリを使うことでnotebook内にデータ転送のスクリプトを書くことができます。foldごとのモデル学習が終わったときに都度、S3に学習済みモデルを転送したい、といったときにはこちらを使うと良いです。

https://qiita.com/honda28/items/bf71c2b39e8ab109fda3

#### Google Drive APIとPyDrive2を用いてGoogle Driveにデータ転送
GCP上でGoogle Drive APIを有効化し、認証情報ファイルをPaperspace上に格納することで、PyDrive2というライブラリを介してデータをGoogle Driveに転送することが可能です。この方法ができればS3のような料金が発生しないのでリーズナブルだと思い、以下のからあげさんの記事を参考に **私も試してみましたがエラーが出てしまい上手く実行できませんでした** （他の方にも試してもらいましたが同様でした）。こちらも上手いやり方があれば情報提供をお願いしたいです。

https://zenn.dev/karaage0703/articles/9e92e077ad2725

### 結局、データはS3のようなクラウドストレージに保存するのが良いのか？
ここは人に寄りけりだと思っています。Paperspace上でモデル学習が完了して、Kaggleにデータセット登録したあと、個人の状況に応じて以下の対応方法があると思っています。
* Paperspaceストレージに余裕があるならそのまま保存
* PaperspaceおよびローカルPCのストレージに余裕がない場合はS3などに保存　
* Paperspaceストレージに余裕はないが、ローカルPCのストレージに余裕がある場合はローカルPC上で保存

# １１．Paperspace Gradientを使ってみて分かったこと
　大変お待たせしました。おそらくここが一番知りたい部分かと思います。私のほうでもGrowthプランを契約して色々と使用してみましたので現時点での使ってみて分かったことを述べます。

* **Notebookインスタンスは無償GPU使用の場合は、最大6時間で自動シャットダウンする**
プランメニュー上ではProプラン、Growthプランであれば「No time limits on **paid instance** 」と書かれてあるので長時間使えるのかと思いましたが、これは従量課金の有償GPUを使用している場合なら最大1週間インスタンスを使い続けられるという意味でした。Proプラン、GrowthプランにするとGPUマシン名に「Free-」の付いた無償GPUが選択できるようになりますが（「Free-A100-80GB」など）、これらには使用可能時間 最大6時間のルールが適用されます。ちなみに、NotebookインスタンスがRunningし始めて途中でシャットダウンされるといったことは今のところ経験したことがなく、一度GPUマシンを掴めれば6時間は継続して学習が回せそうです（ちなみに実行処理が何もされていない状態で1時間無操作の場合もシャットダウンされるので注意）。
* **最大6時間の使用でKaggleを戦えるのか？**
まだPapserspaceを使い始めたばかりなのではっきりとは言えませんが、Kaggleに取り組むにあたってもPaperspaceは十分活躍してくれると思っています。6時間制限はありますがGworthプランであれば、A100 80GBやA6000 48GBなどのハイエンドGPUが使えるため、モデル学習時のバッチサイズを24、32など高めに設定し高速に学習を回せるため、6時間制限があっても問題ないと思っています。どうしても学習が回りきらない場合はfold1～3、fold4～5と分けて学習する方法もあると思います（分割するとCVを出すのにちょっとひと手間かかりそうですが）。
* **ハイエンドGPUはふつうに使えるのか？**
Paperspaceのラインアップの中で最もハイエンドであるA100 80GBについては夜間帯は基本的に他の人に使用されていることが多いです。ただ、日中帯であれば比較的使用できることが多いように感じます。ちなみにA6000 48GBについては日中、夜間問わずいつも使える状態であることが多いです。仮にA6000 48GBも選択不可だった場合でも、ミドルクラスのA5000 24GBやA4000 16GBも選択できるので「GPUが使用できなくて何もできない」という状況にはあまりならないと思います。ちなみにGPUリソースがない場合は左の画像のように「OUT OF CAPACITY」と表示され選択できないようになります。GPUが使用できるときは右の画像のような表示になっています。
![10.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/692165/4d5e3c67-7042-54c1-a21f-ab83873b2919.png)
* **複数のGPUマシンを使用可能なのか？**
プランメニューに「Running Notebook limit : 10」と書かれているのでGPUマシンに余りがあればA100 80GBを複数台使用できるのでは？と思い試してみました。結果としては、無償GPUの場合は起動できるNotebookインスタンスは1個のみで、従量課金の有償GPUであれば最大10個までインスタンスを同時に走らせることができます（≒複数のGPUマシンを利用可能）。ただし、同一Notebookインスタンス内で複数のnotebookを走らせることは可能なので、例えばA6000 48GBを使用している時にnotebook_AでVRAM24GB、notebook_BでVRAM24GBでモデル学習を並列で走らせる、ということは可能です。

* **Notebookインスタンスがシャットダウンした直後に再度GPUを使用可能なのか？**
これに関しては、GPUマシンのリソースが空いているのであれば選択してインスタンスを再度起動することは可能です。ただ、A100 80GBは人気なので連続で掴めることはあまりないと思ったほうが良いです（A6000 48GBなら割と連続で掴めた気がします）。
* **Jupyter Lab上での操作性は良い**
Google Colabだとクラウド環境のためか動きがもっさりしていたり、操作途中で画面がフリーズすることがありますがPaperspaceのJupyter Labではこういったことはなく常に快適に操作することができました。

* **プロジェクトに5メンバーまでアクセス可能**
こちらは実際に試せていませんが、プロジェクトに5メンバーまでアクセス可能なのでKaggleにチームで取り組むときに活用できそうな気がしました。サブ実験環境としてチームで誰かひとりがGworthプランを契約しておいて、それをチームメンバーが必要に応じて利用する、というように活用すると助かるシーンもあると思います。

# １２．その他（疑問など）
* **ストレージ外領域にファイルを一時保存することは可能か？**
AWS CLIのインストールファイルやCredentialファイルはストレージ外領域に格納されるため、インスタンスを再起動するとこの領域のデータはリセットされます（Colabで言うと、ストレージ外領域がcontentフォルダ、ストレージがMy Driveフォルダのイメージ） ここでストレージ外領域にGoogle Driveのように一時的にファイルを格納できるのかは気になりました。ストレージ外領域に保存可能であれば、データセットで100G超えるようなコンペでも学習時のみ一時的にPaperspace上にファイルを格納することができて助かると思いました（できそうな気はしますが）。試しに100GBのデータをアップロードしてみてストレージの超過金が発生するとつらいので、試すときは60GBくらいのデータで試すと良さそうです（これならもし超過金が発生しても10GB分のみ）。
→  **（追記）** こちら確認してみましたがストレージ外領域へファイル保存した場合は、ストレージ保存容量にカウントされないようでした。Kaggleからデータセットをこの領域に直ダウンロードすれば、画像コンペのようなファイルサイズの大きいコンペでも問題なく臨めそうです（ただし、インスタンスを再起動するごとにデータセットはダウンロードする必要あり）。
* **（追記）GPUマシンの演算速度比較**
Paperspaceで使用できるA6000、A5000、A4000などがColabで使用できるA100、V100、P100、T4などと比較して演算速度が仕様上、どれぐらい違うのか分かりやすくするためにFP32（単精度浮動小数点）の場合の演算速度表を掲載します。モデルの学習時間はこの演算性能とバッチサイズにより決まるため、演算性能のみで単純に学習時間の遅い速いを比較できませんが目安として参考にしてみて下さい。
![GPU_spec.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/692165/23b83aad-bf6c-7ec4-b012-9a34f17e8df9.png)


# １３．まとめ
今回、Papserspaceのサービス内容、始め方、S3へのデータ転送方法についてざっくり説明しました。Paperspaceにはデメリットもありますが、以下の通り対応できるため、Kaggleでも十分活用できるサービスだと考えます。
* **Paperspaceはストレージ容量が少なくGrowthプランで50GB**
⇒ Amazon S3と連携し必要時にデータ転送が可能（エラーが出てまだ実施できていないがS3をマウントすることも可能）
* **GrowthプランだとハイエンドGPUが無償で使用可能だが使用可能時間は最大6時間**
ハイエンドGPUなのでバッチサイズを高めに設定し学習を高速に回せるため問題なし
* **必ずしもA100 80GBが使えるわけではない**
GrowthプランであればハイエンドなA100 80GB、A6000 48GBからミドルクラスのA5000 24GB、A4000 16GBまで使用可能なため、モデル学習のためのGPUリソースに困ることは少ない

今回紹介した内容はあくまでもPaperspaceを1週間程度触ってみての知見なので、他にもいろいろと機能があります。以下のドキュメントに色々とPaperspace Gradientで実施できることが書かれてあるので興味があれば見てみて下さい。 **dockerで環境構築したり、VSCode、PyCharmからリモートでPaperspaceにアクセスできたりもするようです。**

**Paperspace Gradient ドキュメント**

https://docs.paperspace.com/gradient/

# １４．最後に
　長い記事になりましたが最後まで読んでいただきありがとうございました。最後にPaperspaceのプロモーションリンクを貼っておきます。以下のリンク経由でサインアップした後に有効な支払い方法（クレジットカード等）の登録まで実施すると10ドル分のクレジットがプレゼントされるとのことです。Proプランが8ドル/月なので、まずはお試しで安くPapserspaceを使ってみたいと思っている方はぜひこちらのリンクをご活用下さい！

##### プロモーションリンク

https://console.paperspace.com/signup?R=POBMK0D


****

### リンク
Paperspace Gradient サービストップ

https://www.paperspace.com/gradient

Paperspace Gradient ドキュメント

https://docs.paperspace.com/gradient/