Intel内蔵GPUで深層学習するには Intel® Extension for PyTorch

経緯
最近nvidiaのgpuのVRAMで16GBを超えるのものを買おうとすると、60万超えるものがないと買えない。
買ってみてもよいが本当にnvidiaじゃないと学習できないのだろうか?
そう思っていた時、ちょうどPCが重いのでなんとなくPCのタスクマネージャを見たところ、気になる項目が。
例えばigpuの場合、自前でRAMを搭載していないので、PCのRAMを使用する(共有メモリ)。もしこれがgpuで言うVRAMとして扱われるのであれば、PCのメモリさえ積めば安くそこそこ大きなRAMが搭載したgpuの計算ができるのではないのかと期待している。
よこから失礼します。
Windowsに外部GPUを付けた場合にもある程度のPCーRAMが共有GPUメモリとして認識されるようです。この状態でwsl2にPytorch環境を作成し大きめのバッチサイズで学習を実行したところ、素のGPUメモリである16GB以上のメモリを使っているのを確認しました。
データセットのロードまで無茶苦茶時間がかかりましたが・・・

コメントありがとうございます。(コメントに全然気づきませんでした...)
共有gpuメモリ使ってもデータの読み込みで遅くなるんですね。こういう風に時間がかかるところを見ると、現状ではGPUのRAMに期待するほかなさそうかもですね...
ちなみに「データセットのロードまで無茶苦茶時間がかかりましたが・・・」とありますが、時間がかかったのはデータセットのロードだけで学習時間にはあまり影響はなかったのでしょうか?

Intel® Extension for PyTorch
intelの内蔵GPUをpytorchの学習に利用できる方法を調べると以下にあった。
これはintelのcpuやgpuをpytorchに最適化するライブラリで、Installationタブを見ると、GPUの項目がある。内蔵gpuを利用したい場合、「gpu」選択すると、使用したい環境に合わせてインストール方法を紹介してくれる

Intel® Extension for PyTorchの使い方
使用方法は一部コードを少し変更するだけ。
- データやモデルの
to()
をcuda→xpuにする - 学習ループ前に
ipex.optimize
にモデルとオプティマイザーを入れる
♯# データ部分はデータ型をcuda→xpuに変更するだけ
model = model.to('xpu')
data = data.to('xpu')
optimizer = ...
# 学習のループに入る前にipex.optimizeにモデルとoptimizerを入れる
model, optimizer = ipex.optimize(model, optimizer=optimizer)
# float16でも学習できる
#model, optimizer = ipex.optimize(model, optimizer=optimizer, dtype=torch.bfloat16)

対応GPU
intel内蔵gpuも対応していることには対応しているが、使えるのは以下のもので、この中で内蔵gpuとして入っているのはおそらくCore™ Ultra SeriesのIntel® Arc™ Graphicsだけ。
- Intel® Arc™ A-Series GPUs
- Intel® Core™ Ultra Processors with Intel® Arc™ Graphics (MTL-H)
- Intel® Core™ Ultra Series 2 with Intel® Arc™ Graphics
- Intel® Data Center GPU Flex Series 170
- Intel® Data Center GPU Max Series
自身が現在所持しているのは、Iris Xe graphicsが内蔵されているpcのため実行できず。
公式のgithubを見ると、Iris Xe graphicsは「対応していない」・「対応する計画はない」との回答があったので現在の自前PCでは実行不可。

intelの内蔵gpuでpytorchなどを学習したい場合どうすればよいのか?
手軽にやるなら、core ultraシリーズのcpuが入ったパソコンを購入するのが良いと思う。
amazonの場合、ミニPCかつRAM32GBでcore ultraが売っている。
他にもノートPCに搭載されているものもあるので、確認するなら自腹切って買うしかない。
純粋にRAM=iGPUのVRAMと仮定する※なら、64GBある以下のPCなら意外と使えるかも。
※cpuのRAMも割り当てる必要があるので全て使えるわけではない

本当に実行できるのか?
自分も考えていれば他の人も考えているだろうと思い、色々調べ方を変える(meteor lake pytorchでググる)と、検証している人が。
解釈としては、完全に対応はしていないがインストールするとxpuは認識しているっぽいので、使えないことはなさそうだが...?
ただwindows環境では上手くいかないのか?

nvidia以外のgpuでの学習性能の考察
macのgpu、MPSの検証
現時点ではやはりnvidiaのgpuの方が圧倒的に良いので、性能だけを求めるならnvidiaのgpuを買うのが一般的だが、それ以外の可能性を模索するなら現時点でpytorchでそのまま利用できるmacの方がcore ultraより良さそうな気もする。
ただ最近のmacだと、M3で232800円、M3proで303800円、M3maxで487800円なので、ここまでくるとnvidiaのgpuを買った方が性能的な意味で良さそう。
追記(LLMの推論にmacを使っている記事): https://zenn.dev/robustonian/articles/selection_of_gpus_for_local_llm
VRAMを意識するなら今のところ性能もintelを使うよりmac使う方が安定はしていそう。
単純に64GBメモリを選択すると、64GB分のVRAMが使えるのかは不明だが。

cpuスコア
core ultraとこれまでのcpuのベンチマークテスト記事
- Core Ultra 7 155H: 25143
- Core i7-13700H: 28676
cpuとしては最新世代だがpassmarkスコアとしては微妙...?
当然内蔵gpu面ではCore Ultraの方が良いのだろうが、スコアを気にするとどうにも引っかかってしまう性分になる。
実際に買ってみないと分からない部分だろうが、色々比較するために様々なPCを買っても持て余すので比較が難しいところ。

2024/10/18 新情報
pytorch2.5でintellのgpu(おそらく内蔵gpuも含む)のサポート拡大の記事↓
少なくとも時間が経てば、ある程度nvidiaのgpu以外でも時間を掛ければ我慢ができるくらいのものは出来そう。
学習時間とメモリのトレードオフをどの様に調整するかを考えてみよう。

知ったことまとめ
mac studioを利用すると、コスパよくGPUのRAMが増やせる。
このブログの記事で目についたのが以下の項目、
- 700億パラメータあるLLMではQ4_K_M(4bit量子化)にした場合でもVRAMが42.5GB以上必要。
- RTX4090(BTOで大体60万~)でVRAMは24GB
- mac studio(約80万)でVRAMは最大192GB程度?(実際は他の処理などもあるので全て使えるわけではないことに注意するとどれくらいかは不明。)
- 推論速度(この資料では1秒当たりのトークンの生成個数)はgpuのメモリ領域に依存しやすい
VRAMを意識するならmac studio一択になる。
ではcore ultraはどうか?
内蔵GPUのVRAMはPCのメモリ(RAM)を共有する。
この場合、core ultra7とcore ultra9の対応可能な最大メモリは、
96GBで、何も考えない場合最大90GB程度は使用できる。
ただ内蔵gpuの共有メモリはデフォルトで全体の半分程度に留めておくらしいので、48GB程度が限界か?(BIOSで上げることもできるが、cpuで他の処理をすることを考えると半分が賢明か。)
そう考えると、現状はmac studioの方が良さそう。(将来性的にintelはありかもしれないが)

推論速度(この資料では1秒当たりのトークンの生成個数)はgpuのメモリ領域に依存しやすいことを考えるとどうだろう。
以下のリンクの説明では、mac studioは最大800GB/s
一方でcore ultraをそのまま利用する場合、メモリの種類が以下になるので、
Up to LPDDR5/x 7467 MT/s
Up to DDR5 5600 MT/s
そこからメモリ帯域幅を計算(計算はChatGPTに聞くと以下の画像の様になるらしい。一応調べたが間違いはなさそう)すると、
- LPDDR5/x 7467 MT/s: 119.47GB/s
- DDR5 5600 MT/s: 89.6GB/s
となる。
全くmacのgpuの足元に及ばないのでintelの内蔵gpuを、VRAMを増やす目的として期待するのはあまり良くないかもしれない。
結局mac studio買うのが良さそうだが、自身がmacユーザーでないことを考えると、あまり気が進まない。
ただあの小さな一台にgpuとcpu入って大きなLLMの推論などができるのは普通に良い気がする。
ただここまでお金を出すのであれば、学習速度も考慮してNVIDIA RTX 4090, 5090を買うかなと今の自分は思っている。