自前GPUを使ったKaggle環境をローカルのVSCode（Cursor）に作るのに手こずった話

みなさん、お久しぶりです。A7です。ここ数か月いろいろと忙しくてなかなか記事を書けてませんでした。
松尾研LLM講座の記事もそのうちだすのでお待ちください

そして今もまだ忙しいので、今回の記事もまたぱっとまとめます。笑

# 自己紹介
データサイエンティストを目指して日々勉強している、慶應義塾大学大学院理工学研究科1年生（2024.05.01時点）
取得資格、コンペ優勝経験など、リアルタイムの情報は👇👇👇をみてね

X: <a href='https://twitter.com/A7_data'>@A7_data</a>←普段はXで活動しています。ありがたいことに、フォロワーは6500人を超えました😌
プロフィールページ👇👇👇

https://mohki7.notion.site/Mototsugu-Oki-c478f842c4de48f394e2e24b58e206bb

X👇👇👇

https://twitter.com/A7_data

# 背景
## Kaggleやりたい！ってなってた。
Kaggleはデータサイエンティストなら知らない人はいない、世界一のデータサイエンスコンペティションプラットフォーム。

https://www.kaggle.com/

世界の第一線で働くデータサイエンティストの方も多く参加されており、自分なんかよりももっともっとツヨツヨの方々のデータを使った手法を本当に数多く学べて勉強になる。

さらに称号制度があり、コンペティションで数回上位に入ると称号がもらえ、さらに金メダルなどをとるとよりよい称号がもらえる。会社によってはある称号をもっていると給与が「何%アップ！」などの制度があるらしい。

まあ、それほどデータサイエンス界では有名なもの。

## でもGPUがない！
実際にコンペティションに参加するとわかるが、まずすべて英語で書かれていて専門用語までもが英語なので疲れる。

ぼくは初学者のときにこれで挫折した。笑
けど英語なんかでやりたいことができないのはずっと心残りで、KaggleをやるためにもTOEICを勉強し、英語苦手を克服した。

あ、この記事に僕のTOEIC奮闘記はまとめてあるので読んでね。

https://note.com/a7_data/n/n4880a4e8e41c

まあ無事915点を取って英語に抵抗がなくなったものの、コンペティションをみるとみんな当たり前にGPUを使ってる。

僕はMacbookしか持ってなかったからGPUをつかえず、（一応あるけど遅い）なんか結局GPUを持っている人が有利で勝てないじゃん。という現実を知った。（挫折2回目）

まあテーブルデータならいけるけど、テーブルデータってなんか面白くないなあと個人的に感じていたのもあり、Kaggleに本格参戦するには至らず。


## PC買った！！
普段お金を全然使わないこともあり、貯金をはたいてGPUを載せたWindowsデスクトップPCを買った。値段忘れたけど大学生にはまあまあ高かった。。

### 僕のPC
僕は二台PCを持っている。それぞれのスペックは、

#### M2 MacBook Air
- Apple M2 チップ
- メモリ24GB
- ストレージ512GB

https://www.apple.com/jp/shop/buy-mac/macbook-air/13%E3%82%A4%E3%83%B3%E3%83%81-m2

#### Windows PC (DGI7G70B7ACC)
- 13th Gen Intel(R) Core(TM) i7-13700F
- RAM 32GB
- GPU NVIDIA GeForce RTX 4070

https://www.mouse-jp.co.jp/store/g/ggtune-dgi7g70b7accw101dec/?adid=nt_yhsa_ac_1355796_cm_20453281889_gp_160929939268_cr_669742955164_kw_dsa-2180705948141_dv_c&argument=QzuaYF3M&dmai=a64d4d88714c81&yclid=YSS.1001300846.EAIaIQobChMI87Oqs77shQMVIBN7Bx3dbAHmEAAYASAAEgL47fD_BwE

これで「GPUがないから勝てない」言い訳は使えなくなったから、3度目のKaggle挑戦がはじまった。（今）

## ローカルにKaggle環境作りたい！
Kaggleにもノートブックはついてるし、GPUも時間制限はあるけど使えるので、正直Kaggleノートブックでもどうにかできはするが、

もう僕はGitHub Copilotなしでプログラミングしたくないし、GPUもあるんだから自由にぶん回したい、ということでローカルにKaggle環境を作ることにした。

ローカルにKaggle環境を作る際、気を付けるべきことは「Kaggleと環境を一緒にすること」

kaggleからデータをダウンロードしてローカルでモデル作ってsubmitファイルを作成、ではダメな理由は、

1. 推論時間制限があるコンペティションの場合、Kaggle環境でその時間内に終わるとは限らない
1. コードコンペティションのとき、せっかくローカルで作ったモデルがKaggle環境では使えない可能性がある

たぶんこんな感じ。だからKaggleにローカルマシンを使って挑むには、Kaggleと同じ環境を作らないといけない。

そしておそらく一番簡単なのが、Dockerをつかった方法。
Dockerは昔触ったことがあったので、今回もDockerを採用した。

https://github.com/Kaggle/docker-python

# 参考サイト
結論、この記事に沿ってやれば、GPUを使わないKaggle環境は構築できる。しかし、GPUでやりたいときは最後のコマンドだけ変える必要がある。（ここで詰まった。）

https://zenn.dev/yuto_mo/articles/d261e96f35986a

Kaggle APIを使ってCLIから使えるようにしたい方は同じ方が書いてるこの記事もおすすめ

https://zenn.dev/yuto_mo/articles/5c5311a83892b2

## CPUだけでいいとき
MacBookはこっちでやった。CPUでやりたいときはこの記事の通りにすすめ、
VSCode(Cursor)でプログラムしたいときはdocker runしたあとにVSCodeのDockerで使用したいコンテナを右クリックし、「Visual Studio Codeをアタッチする」を選択すれば、Kaggle環境の中に入れる。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3179677/d0a7298c-f8c0-c748-a213-bf7d27e7a506.png)

入ったらあとはpythonとJupyterを拡張機能としてインストールすればもうipynbファイルを書くことができる。

そこに最強のトッピング「GitHub Copilot」を追加すれば完璧だ。

ただ、これだけではGPUはつかえない。

```
import torch
print(torch.cuda.is_available())
```
を実行すると、「False」となる。
上の記事のままやるとGPUを使えるようにセッティングしていないかららしい。（GPT-4先生によると）

## GPUを使いたいとき
ということで、GPUを使いたいWindowsは一部コマンドを変更した。

変更するのは、Dockerイメージをrunするときのコマンド。

https://zenn.dev/yuto_mo/articles/d261e96f35986a#:~:text=python%20/bin/bash-,5.2%20Image%E3%82%92pull%E3%81%99%E3%82%8B%E5%A0%B4%E5%90%88,-Kaggle%E3%81%AEdocker

まず、この記事では自前のGPUを使いたい場合は「GitHubからcloneして./build --gpuとする」とあるが、それは必要ない。

この記事の「ImageをPullする場合」をやればよいのだが、ここのコマンドを少し変えなければGPUは使えない。

具体的には、
```
$ docker pull gcr.io/kaggle-gpu-images/python:latest
```
のあとに、
```
$ docker run -itd --gpus all -p 8888:8888 -v "$(pwd)"/target:/home --name kaggle gcr.io/kaggle-gpu-images/python /bin/bash
```
とする必要がある。記事ではGPUを使えるDockerイメージをpullしているにも関わらず、（kaggle-imagesがCPUのみ、kaggle-gpu-imagesがGPUも使えるもの）

runするときにGPUを使えるようにしていないのだ。
（--gpus allが必要だが、記事では省略されている。CPUのための設定の解説だからだと思う。）

なので、GPUを使いたい人はこのコマンドをコピペすれば、使えるはず。

実際それでやると、VSCode（Cursor）でGPUが使えることが確認できる。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3179677/4a6cedbf-a1fc-18b2-6c6f-2f4d3065a0cf.png)

ちなみに全然できなくていろいろな方法試したけど、ChatGPT先生に聞いたらすぐにできた。。。最初から聞けばよかったじゃん。。。

# 試行錯誤の結果のまなび
この「True」をみるために1日かかった。
さっさとGPTに聞けばよかった話。

# これからのKaggleへのとりくみ
これでKaggleに本格参戦する準備はいよいよ整った。あとはやるだけ。
KaggleはTOEICみたいなものだと思う。Kaggle意味ある・意味ない論争は時々加熱するが、TOEICに似てる気がする。

べつにスコアが高いから英語ができるわけではないし、ビジネスに直結するわけではない。ただ、ある程度できることは証明できる。そんな意味で似てるなって思った。

まあ、TOEICで900超えたし、データサイエンス界でのTOEICであるKaggleでも900相当の称号は持っておきたいなって感じた。まあ900くらいはたぶんKaggle Masterくらいだろうから、とりあえずMasterを目指す。

https://www.kikagaku.co.jp/career-blog/starting-kaggle-from-scratch/

現在すでにコンペティションにチームで参加していろいろなディスカッションやコードを読んでるけど、めちゃくちゃ勉強になる。

社会に出るまでにあと2年弱あるし、データサイエンティストとして第一線で活躍するためにも、Kaggleで確固たる基礎力をつけていこうと思う。

3度目のしょうじき。めざせますたー。

# 最後に
X(Twitter)では日々データサイエンスやAIに関する勉強記録・情報発信をしています。フォロワーは7000人を超えました。

https://twitter.com/A7_data

少しでも刺激になるようなことを発信できたらいいなと思っているので、気になった方は見てみてください🔥

Kaggle奮闘記もどんどん発信していきます。

では👋