前回作ったWSL2&Docker&Jupyter環境にCUDAを使えるようにしていきます。
かなりのんびりした趣味の記事ですので、厳密な定義や技術的な話が欲しい方はqiitaで検索してください
CUDAというのは
CUDA(Compute Unified Device Architecture:クーダ)とは、NVIDIAが開発・提供している、GPU向けの汎用並列コンピューティングプラットフォーム(並列コンピューティングアーキテクチャ)およびプログラミングモデルである。
出典: フリー百科事典『ウィキペディア(Wikipedia)』
難しいですね笑。
ほとんどの方は普段「GPU」を意識して活用していないかと思います
PCゲームをしてたり動画を見ていたら勝手に動いて、それらをしてないときはほぼ動いてません。
CUDAを使えば、意図的に「GPU」を特定の処理に利用できます。
なぜそんなことをするか、記事ネタがてら、もう少し細かい話をしていきましょう
GPGPU
もともとグラフィックボードなどに搭載されている「GPU(Graphics Processing Unit)」は読んで字のごとく、グラフィック処理を担当するためのアーキでした。
グラフィックの描画処理というのは、非常に単純ですが、量の多い仕事だと思ってください。
大量の書類にハンコを押すイメージです
ゲームのグラフィックを良くしようとすればするほど、大量の押印が必要になります。
「CPU」さんがこの処理に手をつけてしまうと、ハンコ押しが大変すぎて、他の仕事ができなくなってしまいます。
「CPU」さんには他にも大事な仕事が沢山ありますから、その仕事が滞らないように「GPU」さんにお任せするわけですね
では「GPU」さんはなぜ大量書類のハンコ押しが得意かというと・・・。
人海戦術です
「GPU」さんは大量の人手(コア)を使って一気に同じ仕事をすることに長けています。
昨今ではこの「GPU」さんの猛烈なハンコ能力をほかのことにも使ってみようということで「GPGPU(General-purpose computing on graphics processing units)」という使い方が増えています。
その活用方法の一つが、次回からやろうとしている機械学習ですね。
結局CUDAさんは何?
「CUDA」さんは裏で「GPU」さんとコンタクトをとり、我々がやりたい仕事を「GPU」さんに投げてくれます。
要するに「GPU」さんとの橋渡し役というわけですね。
Before
さっそくやっていきましょう・・・の前に。
変な日本語ですが、CUDAが「ちゃんと使えないこと」を確認しておきます。
使えるようになると、「お疲れ様でした。」で返ってくるようになります。
今回の目標はそこですね
CUDA入れてみよう
今回は
- GPUを...
- Windows11上で動かしている...
- WSL2(Ubuntu20.04)上で動かしている...
- Dockerコンテナ上で動かしている..
- Jupyter-labで使わせたい
なので、この1 ~ 5の道筋を通していきます。
GPU ~ WSL2
NVIDIAの公式ドキュメントに詳しいこと書いてますので、とくに手順については触れません。
この手順でインストールするのは大きく二つ
- NVIDIAのGPUドライバ(on OS)
- CUDA(on WSL2)
※公式手順にはWSL2をインストールする手順も含んでいます。
登場人物が多いとややこしい・・・
なんでこんな複雑怪奇な環境にしてるかというと
はい、すいません。面白いからです
WSL2 ~ Jupyter-lab
次にコンテナ上で扱えるようにします。
インストールするのは、
- nvidia-container-toolkit(on WSL2)
これでDockerコンテナでGPUを使う準備はできました。
次に、GPUを扱えるDockerイメージが必要になります。
Dockerについての詳しい説明は省きますが、ゲーム機のエミュレータのようなものだと思ってください
PCの中でゲームの動作(今回はJupyter-labの実行環境)を再現することができます。
幸い公式のDockerイメージがあるので(ベースがubuntu20.04)これを使ってJupyter-lab環境を作ります。
docker-composeに記載するGPUの設定は公式の以下をご参照ください。
一応ですが、自分でやってみた「Dockerfile」及び「docker-compose.yml」は以下においてます。
皆さんも是非やってみてくださいませ
After
さて、使えるようになりましたかね?
やりましたね!
・・・ん?
(つづく)