はてなキーワード: CUDAとは
未だに「謎の半導体メーカー」程度の認識の方になぜNVIDIAが時価総額世界4位なのかをあれこれ説明する必要があるので短めにメモ。半導体業界のすみっこの人間なので機械学習まわりの説明は適当です
・~1993年 AI冬の時代。エージェントシステムがさほど成果を挙げられなかったり。まだ半導体やメモリの性能は現代とくらべてはるかに劣り、現代のような大規模データを用いた統計的処理など考えられなかった。2006年のディープラーニングの発明まで実質的な停滞は続く。
・1995年 NVIDIAが最初のグラフィックアクセラレータ製品NV1を発売。
・1999年 NVIDIAがGeForce 256発売。GPUという名が初めて使われる。以降、NVIDIAはGPU業界1位の座を守り続ける。
・2006年 GPGPU向け開発基盤CUDAを発表。以降、その並列計算に特化した性能を大規模コンピューティングに活用しようという動きが続く。
・2006年 ディープラーニングの発明。のちのビッグデータブームに乗り、これまでよりはるかに高性能なAIを模索する動きが始まる(第3次AIブームのおこり)
・2006年 CPU業界2位のAMDがGPU業界2位のATIを買収、チップセットにGPUを統合することで事実上自社製品をNVIDIAと切り離す戦略に出る。CPU業界1位のインテルも、同じく自社CPUに自社製GPUを統合する動きを強める。NVIDIAはこれまでの主力だったGPUチップセット製品の販売を終了し、データセンター向けGPGPUのTeslaシリーズ、ゲーム用外付けGPUのGeForceシリーズ、ARM系CPUと自社GPUを統合したTegraシリーズの3製品に整理する。このうちTeslaシリーズが性能向上やマイクロアーキテクチャ変更を経て現代のAIサーバ製品に直接つながる。GeForceシリーズはゲーマー向け需要や暗号通貨マイニング向け需要も取り込み成長。Tegraシリーズは後継品がNintendoSwitchに採用される。
・2012年 ディープラーニングが画像認識コンテストで圧倒的な成績を収め、実質的な第3次AIブームが始まる。
・2017年 Transformerモデル発表。これまでのNN・DLと異なり並列化で性能を上げるのが容易=デカい計算機を使えばAIの性能が上がる時代に突入。
・2018年 IBMがNVIDIAと開発した「Summit」がスパコン世界ランキング1位の座を5年ぶりに中国から奪還。全計算のうち96%がGPUによって処理され、HPC(ハイパフォーマンスコンピューティング)におけるGPUの地位は決定的になる。NVIDIAの開発したCPU-GPU間の高速リンク「NVLink」が大規模に活用される。「Summit」は2020年に「富岳」にトップを奪われるまで1位を維持。
・2018~2021年 BERTやXLNet、GPT2など大規模言語モデルの幕開け。まだ研究者が使うレベル。
・2019年 NVIDIA CEOジェスン・ファン(革ジャンおぢ)が「ムーアの法則は終わった」と見解を表明。半導体のシングルスレッド性能の向上は限界に達し、チップレットを始めとした並列化・集積化アーキテクチャ勝負の時代に入る。
・2022年 NVIDIAがH100発表。Transformerモデルの学習・推論機能を大幅に強化したサーバ向けGPUで、もはや単体でもスパコンと呼べる性能を発揮する。H100はコアチップGH100をTSMC N4プロセスで製造、SK Hynix製HBMとともにTSMC CoWoSパッケージング技術で集積したパッケージ。※N4プロセスは最新のiPhone向けSoCで採用されたN3プロセスの1つ前の世代だが、サーバ/デスクトップ製品向けプロセスとモバイル製品向けプロセスはクロックや電流量が異なり、HPC向けはN4が最新と言ってよい。
・2022年 画像生成AIブーム。DALL-E2、Midjourney、Stable Diffusionなどが相次いで発表。
・2022年 ChatGPT発表。アクティブユーザ1億人達成に2カ月は史上最速。
・2023年 ChatGPT有料版公開。Microsoft Copilot、Google Bard(Gemini)など商用化への動きが相次ぐ。各企業がNVIDIA H100の大量調達に動く。
・2024年 NVIDIAが時価総額世界4位に到達。半導体メーカー売上ランキング世界1位達成(予定)。
こうして見るとNVIDIAにとっての転換点は「ディープラーニングの発明」「GPGPU向けプログラミング環境CUDAの発表」「チップセットの販売からコンピューティングユニットの販売に転換」という3つが同時に起こった2006年であると言えそう。以降、NVIDIAはゲーマー向け製品やモバイル向け製品を販売する裏で、CUDAによってGPGPUの独占を続け、仮装通貨マイニングやスパコンでの活躍と言ったホップステップを経て今回の大きな飛躍を成し遂げた、と綺麗にまとめられるだろう。
単体の演算器の性能なんてクロック周波数が速くなっている現代だと数クロックの差なんてわからないだろう。
メモリーは社外の汎用品GDDRを使う以上、帯域やレイテンシは変わらない。
違いが出てくるとすると、どうやってメモリ間を隠蔽しているかというのが想像出来る。
データ待っている期間を出来るだけ少なくする、といった感じだ。
演算器を並列に多数動かすと配線抵抗などで電源がドロップする。
圧倒的に足りてない物
cadence、synopsysという米国企業がほぼ独占している。
なんで重要かというと、色々理由はあるが、1例を上げると製造した時に問題が起こらないかをデザインルールをチェックする。
TSMCが新しい○nmプロセスを出すときは、必ずCacence、Synopsysが対応したとプレスリリースを出している。
デザインルールをチェックしない場合、配線間が短く設計し過ぎていてショートして最悪チップが動かないといった自体になる。
ちなみに中国もEDA企業は立ち上げ出来てない(一応中国国内EDAベンダーはあるが)
日本で独自に2nmプロセスを立ち上げるとして、当たり前だがCadenceかSynopsysに対応してもらう、ということになるはずだ。
日本のソフトウェアを立ち上げるのは流石に難しいのではないだろうか。
Cadence、Synopsysともライセンス量が馬鹿みたいに高い。
1チップ作るのに○億と量産前に飛んでいく。
CPUサーバー上でシミュレーターを動かす方法もあるが、先端ロジックだとトランジスタ数が多くなりすぎて、エミュレータを使わないとまともに検証が出来ない。
エミュレータはFPGAみたいなもので、実チップまでは早くならないがシミュレーターより断然早い。
Cadence、Synopsysともエミュレータも出しているが、こちらも高い。ポンポン買えるものでもない。
チップの次はボード設計する為のソフトや、熱シミュレーター、EMCなど必要になる。
ボードはなんとかしようと思えば出来るはず・・・。先端の高密度はCadence、Altium使いたいが。
ちなみにAltiumに関する書籍は日本にはないが、中国では何冊も出ている。
先端ロジックで設計する会社、製造する工場を作ったとして、作った物が売れないと意味がない。
何を作るのか、だ。
しかも今時の先端ロジックは金がかかりすぎて、グローバルで億単位で売らないと半導体にかかる費用がペイしない。
車に沢山半導体が使われるんだということで報道されるが、台数が少ないので、後回しにされて、半導体不足が解消しないってのは昨今の状況だった。
高温まで対応するなど要求スペックが厳しいわりに、数が売れないので半導体企業としては美味しくない。
PS5の台数でも厳しいはずだ。(PS5は売れば売るほど赤字だし)
スマホほど単価が高くて、体積が小さいの輸送費がかからない、そんなものがないといけない。
AI向けはまだまだどれだけ演算能力があっても足りないので、そっち向けはありかもしれない。
ただチップを作っただけでは動かず、ドライバー、ミドルウェアが必要になる。
インテルがやったようにCUDAからコンバートするソフトを用意するなども必要だろう。
相当性能高いチップを作ったとしても、国内市場だけでペイしないだろう。
ソフトウェアエンジニアの方々も、チップが相当性能高くても携わりたくないのではないか。
NVIDIAのGPUを8個とか、数増やしてどっこいどっこいの性能のチップなら、わざわざ国産チップ用にソフトを作る必要がない。
5年前だろうと同じことだぞ。
そもそもCUDAとPythonは関係ないのであんま分かってなさそう。
大方pytorchかtensorflowあたり使っててcuda環境との区別がついてないんだろうな。
せっかく課金したのにユーザが増えまくっているのか滅茶苦茶重くなっていて最悪。
だから流出したモデルを使ってローカルでNAIの環境を構築する。
ネットには情報もだいぶ転がってるけど陳腐化した情報があまりに多いため増田にまとめることにした。
もしかしたらこの記事もすでに陳腐化しているかもしれないが…単純に間違ってたらトラバで教えてほしい。
もちろん自己責任。この記事を見て導入した結果何かあっても増田は何も保証しない。
英語がわかる人はこっちを見た方が早いと思う。今は導入RTAができるくらい導入は楽になっている。
https://rentry.org/nai-speedrun
VRAMが2GB以上あるNVIDIA製のグラフィックボードがあればローカル環境を構築できる。
GPUの世代はGTX700シリーズ以降。なので一昔前のミドル級ボードでも動作するらしい。
IntelのオンボードGPUでも実行する方法があるらしい(stable_diffusion.openvino)が今回は割愛する。自分で探してね。
その他の推奨環境は以下の通り。
対応OS:Windows7以上(と言うがM1Macでも動作する方法があるとかなんとか)
メインメモリ:16GB以上(VRAMもたくさん必要だが起動時にメインメモリも大量に食う。WebUI起動時にタスクマネージャを見ているとよくわかる)
スマホしか持ってないような人やこういうのがよくわからない人はNovelAIを使った方が良いと思う。
今は重いけど、きっとそのうちみんな飽きてサーバも軽くなるかもしれないし。
(追記)NovelAIがリソースを確保してサーバが軽くなったからリスクを背負ってまで導入しなくても良いかも
(追記)Pythonは当然3系。最新の奴を入れれば問題無い。
導入方法はいちいち書かないけど、「python --version」や「git -v」で
正常にバージョン情報が出る(パスがきちんと通っている)ことはちゃんと確認しよう。
Stable Diffusion web UIはStable Diffusionやそれをベースとした画像生成AIを利用するためのフロントエンド。
その中でも特に開発が活発でデファクトスタンダードとなっているのがAUTOMATIC1111版だ。
導入したい適当なディレクトリに対してPowerShellなどで
「git clone https://github.com/AUTOMATIC1111/stable-diffusion-webui.git」
なお、AUTOMATIC1111版は数時間単位でコミットが行われるから
定期的に「git pull origin master」で更新しよう。
クライアントはqBitTorrentが一番楽だと思う。
ここにはさすがにmagnetリンクは書かないから各自ググって欲しい。
結構誤解されがちなことだが流出データ50GBを全部ダウンロードする必要は無い。
必要なファイルはanimefull-final-prunedディレクトリの中身とanimevae.ptだから5GBちょっとくらいなんじゃないかな。
もし余裕があるならmoduleディレクトリの中身もダウンロードすればいいけど、ぶっちゃけ必要無いんじゃないか?
まずはanimefull-final-prunedの中身のファイルをリネーム。
「model.ckpt」を「animefinal-full-pruned.ckpt」のようなわかりやすい名前にして、
「animevae.pt」を例えば「animefinal-full-pruned.vae.pt」のような拡張子以外は同じファイル名にする。
WebUI起動フォルダ配下の\models\Stable-diffusionにリネームしたファイルを移動させれば配置はOK。
ちなみにmoduleディレクトリの中身は\models\hypernetworksに移動させて使う。
それらのファイルを設定で適用させると画風が結構変わるがNovelAI再現とは関係無いみたいだ。
(追記)moduleディレクトリの中身の.ptファイルはhypernetworksという技術によって画風などを学習したものらしい。
すでに複数のイラストレーターの画風を学習したptファイルが作成されており議論を呼んでいる。
自分のグラボのVRAMが4GB未満の場合は「set COMMANDLINE_ARGS=」の後に
4GB未満の場合は「--medvram」、2GB未満の場合は「--lowvram」とパラメータを追加しておこう。
自分の持ってるグラボのVRAMがわからないときはGPU-Zなどで調べよう。
またGTX1600系固有のバグ(単色の画像が出力される)があるらしいので
その場合は「--no-half-vae」もしくは「--no-half」や「--precision full」とパラメータを追加。
ちなみにパラメータに「--xformers」を追加してxformersを導入・使用すると
消費VRAMが減って画像生成処理時間も短縮されるので是非導入しよう。
画像からdanbooruのタグをAIで調査するdeepdanbooruを利用する場合は「--deepdanbooru」を追加。
のようになる。
ターミナルやPowerShellなどでwebui-user.batを起動しwebUIの初期導入と起動を行う。
過去には手動でCUDA等を導入する必要があったが、現在はこの初期導入でだいたいの導入が行われる。
ずいぶん楽にはなったがその分初期導入の時間は結構長い。10分~20分くらいかかるかもしれない。
途中で導入処理がエラーで止まってしまった場合は管理者権限で実行するなどして対応して欲しい。
起動ができたらSettingで以下の設定を変更してNovelAIに近づける。
Stop At last layers of CLIP modelを2に、
Eta noise seed deltaを31337にする。
これで設定は完了!
設定を合わせて完全にNovelAIと同じ内容になったのかを確認するテストがある。
出力結果から海外じゃHallo Asuka Testなんて呼ばれている。
これは初期SEEDをはじめとする設定内容が完全に一致していれば同じ出力結果を得られる仕組みを利用している。
プロンプトの内容:masterpiece, best quality, masterpiece, asuka langley sitting cross legged on a chair
ネガティブプロンプトの内容:lowres, bad anatomy, bad hands, text, error, missing fingers, extra digit, fewer digits, cropped, worst quality, low quality, normal quality, jpeg artifacts,signature, watermark, username, blurry, artist name
https://i.imgur.com/Bfl5qJB.jpg
なお、このテストはAUTOMATIC1111のバージョンやxformersの適用状態によっては微妙に違う画像が出力されることがあるらしい。
xformersを適用させている増田の環境だと確かに二つ並べると間違い探しレベルの違いがあった。
「Booru tag autocompletion for A1111」を導入すればNovelAIのように自動でdanbooruのタグを保管してくれる。
画像生成AIモデルはStable DiffusionがOSSのため派生が結構多い。
自前で追加学習もできるため自前で学習した追加AIモデルを4chanのような掲示板などで共有する人もいるらしい。
しかしそのようなモデルの中にウィルスのような悪意のある動作を行うものもあるらしい。
FBIがペドフィリアを一網打尽にするためにIPアドレスなどの個人情報を抜き出す動作を行うロリ特化AIモデルを掲示板で配布していて
しかもそれには本物の児童ポルノが教師データとして使われている…などという都市伝説的な話が今界隈を賑わせている。
プログラミングとは無縁の職業だが久々に勉強としてゲーミングPC(wsl2)上でstable diffusion回せるような環境を作ろうとしたらこんな時間になってしまった
wsl2上でcuda使えるようにするのにまず躓いて、GPGとかいうのが問題だとわかるのに1時間くらいかかって、
そのあとビデオメモリ不足でプログラムが回らない問題が起きて、まぁこれはメモリ少なくて済むフォークを使えばいいとすぐわかったので問題なかったが、
最後anacondaで一度includeできたモジュールが何故かincludeできなくなる問題が発生してpathとかいじったりしたがうまくいかず、最終的にはvscodeの問題だとわかって一度wsl2を切断して再接続したら治ったけどこの対応に2時間くらいかけてしまった
まぁ結果一日かけずにstable diffusionを動かすことができるようになったから良かったけど
本当はいい感じの絵を出せる文章とかコード変えてエッチな絵を生成できるようにしたり中身を見て勉強しようと思ってたけどそれは明日以降だな
元増田とは別の書き方を参考までに。
https://note.com/npaka/n/ndd549d2ce556
from diffusers import StableDiffusionPipeline pipe = StableDiffusionPipeline.from_pretrained("CompVis/stable-diffusion-v1-4", use_auth_token=YOUR_TOKEN) pipe.to("cuda") def dummy_checker(images, **kwargs): return images, False pipe.safety_checker = dummy_checker
下の2行を追加するだけ。これでも動いた。
MATLABを使っているが、どうも中途半端な存在になっている。
①言語的な競合はもちろんPythonになるが、Pythonとの差別化が出来てない。
Python側は純粋なPythonだと遅いが、今はC++のラッパーとして使うのが多くなっており、Pythonの方が速いということが起こる。
最近のMATLABはJITコンパイラによって昔ほどfor文を気にしなくても良くなっているが、それでも遅さは気になる。
GPU、分散コンピューティングにMATLABは対応しているが、使いこなすのに苦労する。
GPU使う場合だと、CUDAをそのまま使いたくなるし、GPUメモリーとのやり取りといったオーバーヘッドが加わるので、
単純にGPU使うようにしたら速くなるってことはなく、処理時間を測りながらトライアルを繰り返すことになる。
MATLAB側のエディタは機能が増えているとはいえ、Python+VSCodeとの対抗となると辛いものがある。
toolboxを追加で課金してCコードを吐き出すことはできるが、劇的に速くなるわけではない。
②toolboxは沢山あるが、使い始めると色々足りておらず、Pythonのエコシステムが欲しくなる
toolboxが多くなりすぎていることと、手を広げすぎているのかtoolboxを買って使ってみると色々足りないことがある。
買う前に調べるわけだが、色んな事ができそうだと思って購入し、実際使っていくと、嘘は言ってないが事あるごとに使いにくい所が出てくる。
GUI周りに関しては不満が多い。
③GUIが重い、使いにくい
事あるごとにGUIが重たいのが気になって仕方ない。
また使いにくいのが多い。デザインが良いというのはコンシューマ用ではないので気にしないが、重たさと使いにくさで嫌になってくる。
④plotや可視化周りが重い
エクセルが普通になっている今、エクセルで出来ないことが出来て欲しいが、そうなっていない。
GPGPUアプリケーション開発の環境およびAPIとしては、ハードウェア内部構造自体が汎用性を増したDirectX 10世代の統合型シェーダーアーキテクチャGPUの登場以降、NVIDIAによるGPGPU専用の統合開発環境「CUDA」や、AMDによるGPGPU基盤「AMD Stream」(旧称ATI Stream)、そしてクロノス・グループによる標準規格「OpenCL」が現われ、GPGPU活用の幅が広がりつつある。 https://ja.wikipedia.org/wiki/%E3%82%AF%E3%83%AD%E3%83%8E%E3%82%B9%E3%83%BB%E3%82%B0%E3%83%AB%E3%83%BC%E3%83%97