バードコールを始めるついでに、AWS の S3 を使うことにしました。 一応、バードコールはカーネルコンペですが、色々な実験は AWS 上でテンポよく進めていきたいので。
データのダウンロードや前処理を低価格のCPUインスタンスに任せ、ある程度前処理が完了した後で S3 を経由させて GPUインスタンスで計算をさせるという使い方になります。
(概要図を参照。こういう図を一度作ってみたかったんですよね。あと、draw.io
にデフォルトで全部これらのアイコン入ってて便利でした。)
ついでに、S3 にデータを置いておいたり、AWS CLI (コマンドラインツール) を使って Sync することで、急ぎの計算が必要なときに新しいインスタンスを立てて擬似的に並列で回せます。
AWS のインスタンスを使用しなくても、AWS CLI を使うことで S3 から自分のパソコンにもデータを共有できるので便利です。 (自分は現在、手元にまともな GPU がないのでやりませんが、手元のマシン+AWS とかの構成もコスパ的にはありだと思います。)
次は Cloud Watch とかで自動シャットダウンの安全装置作ったり、ECS を触ってみたいですね。
コスト見積もり
現在、東京リージョンだと、標準ストレージで 1ヶ月あたり 0.025USD/GB です。
例えば、100GB のデータを1ヶ月置いておくと、
100GB * 0.025USD/GB * 107円/USD * 1.1 (消費税) = 294.2円
になります。
(データ転送料とかもあるはずですが、ストレージ扱いならほとんど気にしなくていいはずです。)
完全にコンペ依存ですが、1TB のデータを 2ヶ月置いておいても、6,000円前後のはずなので、インスタンス代に比べたらそこまで高くないはずです。 バードコールとかだと数百円程度で済みますね。
コストは基本的に使用時間と容量に対し線形で増加する形ですが、変則的な部分もあるので、AWSのドキュメントリンクも貼っておきます。
データの利用規約について
Kaggle のデータは、基本的に他人に閲覧できないようにしておく必要があります。 おそらく個人 (もしくはチーム内) で S3 を使う場合問題ないと思います。
(何か問題あったら教えて下さい)
小ネタ
S3 のバケットを「kaggle.dataset」とか「kaggle.competition」とかで作ろうとしたら既に同じバケット名が取得されていて取れませんでした。
(東京リージョンなので誰か日本人がやっているはず)