ChatGPT「CUDA(Compute Unified Device Architecture)は、NVIDIAが開発した並列計算プラットフォームおよびプログラミングモデルです。主にNVIDIAのGPU(Graphics Processing Unit)を利用して、高性能な計算処理を実行するために使用されます。・・・」
・・・
なんだそれは?
ということで、この記事では"CUDA"って言葉の意味、ローカルLLMにおける立ち位置と必要知識をまとめて解説します。
最後まで読んでいただけたら幸いです。よろしくお願いします。
そもそも、GPUとは
CUDAの話をする前に、その前提について少しだけ。
そもそもGPUって"ビデオカード"とか"グラフィックボード"って呼ばれたくらいですから、本当は「グラフィックを処理するために存在する機械」のはずなんです。
でも・・・今の感覚だと全然そんなことないですよね。
GPUといえばゲーム、マイニング、そしてAI。
ゲームは確かにグラフィックです。
でもこのサイトに来ていただいたあなたにとってはAIの印象がずっと強いでしょうし、それよりも何にも興味のない方にとっては一昔前のマイニング時代のイメージが一番だったりするんじゃないでしょうか。
ゲームの他、仮想通過だの、生成AIだの、全然"グラフィック"ボードじゃないじゃないか?
・・・という疑問は自然に湧いてきます。
以下、ここは本記事の主題ではないので要点だけを説明します。
まずPCのグラフィックの処理には、簡単な計算を同時並行的に膨大に行うことが求められます。
この"同時並行"というのが重要な点でして、つまり普通の計算機やGPUの搭載されてない昔のPC、もっと言えば電卓、彼らにはあまりに荷が重いのです。
あれらだってその性能は大したものですが、同時並行的な計算のために設計されていないという仕様上グラフィック処理にはまるで向きません。
そんなわけで、その昔、GPUなんて言葉も存在しなかった昔では、高度なグラフィック表現というのはPCにおける大きな課題でした。1980-90年代とか。
でもまあ、課題は分かりきっていたわけです。
簡単な計算を高速に同時に大量にやれればいい(もちろんここまで単純ではなさそうですが)
そんなこんなで、1999年?にNvidiaが「世界最初のGPU」GeForce 256という、ようは簡単な計算を高速に同時に大量にできる機械を生み出しました。
そして、後になって登場したマイニングにもたまたまそれが適していた。
たまたまTransformersのスケール則が発見された。というのは暴論かも・・・
CUDAとは
で、長くなってしまいましたがここからが本題です。
以上の顛末で生み出されたGPUですが、それから数年の後・・・本来の能力はやっぱり「ひたすら大量に計算すること」であり続けている。でも今はもっぱらグラフィック処理の為だけに使われている。という状況でした。
当時の科学技術計算に何の知見もない私(と、おそらくは読者の皆様も)ですが、どう考えたってGPUがグラフィック以外のもっと広範な用途で使えそうな気がするのは明らかです。
実際当時の世の中の科学者たちも、Nvidia社自身もそう思っていたみたいです。気象や物理のシミュレーション、また機械学習等に需要があったとか。
実際にまもなくNvidiaは、GPUを画像以外の色々な目的、とにかく大量な計算が必要などんな目的にでも使えるようにと専門の自由な開発プラットフォームを作り出します。
それがCUDAというわけです。
結論。
CUDAとはNvidiaのGPUで計算をするためのもの・・・本当にそれだけ。
なまじグラフィック専用として誕生してしまったものだから順序が逆転し、分かりにくくなっているけど、こう考えるとシンプルですよね。
LLMにおけるCUDAの価値
次に、なんでLLMでCUDAがよく登場するのか。
実は大規模言語モデルによる文章生成というのもまた、部分部分を切り分ければすさまじく単純な計算の集まりになっているんです。
足し算とか掛け算、そのレベルです。
ただその数は膨大・・・
ユーザーの"こんにちは"に対して"こんにちは"と返す、その最初の"こ"を生成するだけでも余裕で億は超える回数の計算をしなければなりません。
ということで、見るからにGPUの、つまりCUDAの出番です。
(ちなみに、最近NvidiaがAIブームと繋げて以上な過熱を見せるのもこれが理由・・・CUDAを持っているのがNvidiaだからです。Nvidiaが作るGPUの性能それ自体は競合他社より特別に優れる、という程ではない気がします。)
ローカルLLMをやるうえでCUDAについて知っておくべきこと
結論から言うとありません。
いや、そんなわけはないのですが・・・
「ローカルLLMをやる」多くの人はまず、ネット上のモデルをダウンロードして自宅のPC上で動作させることを目指すでしょう。
それが叶ったら次にはこのモデルをもっとうまく扱う為の仕組み・・・ベクトルデータベースとか、コンテキストの調整の学習を始めたりするかもしれません。
深みにはまっていくと量子化やファインチューニング、その他モデルを直接いじる勉強を始めるかも知れません!
・・・ここまでCUDAの出番はありません。
というのは、もうCUDAを用いた既成の仕組みが公開されているので、そちらを使った方が速いんですね。
逆に言えば、ここで書いたような内容をもっと掘り下げる、むしろその先に行く、もはや全く別の方向性に行く、あるいはもっと根本的な機械学習を深く学ぶ・・・といった場合には、CUDAは当然のように最重要の知識として求められてくるようです。
だったらまあ、それはその時にということで。
少なくとも今ローカルLLMを始めた、その時に「CUDAがどうたらこうたら」という形で無数に表れるネット上の文書、Pythonのエラーコード、ライブラリのドキュメント達をそう気にすることはないと思います。(もちろん、知っておくに越したことはない)
ただ「CUDAとはそんなもんか」と見慣れてしまえばあとは何の問題もありません。
・・・あれ?だったらこの記事はなんのためにあるんだ?
えーと・・・
Comments