非CUDAの悲哀 〜image to 3D “Hunyuan3D”をRyzenAI Max+ 395で動作させるチャレンジ〜
はい、トップバッターということで、よろしくお願いいたします。ダーンと(スライドに)出ているように『非CUDAの悲哀』というタイトルをつけております。
会場にあるGPUはNVIDIAのものが多いと思うのですが、今回はNVIDIAではなくて AMD 系のマシンを使うとどうなるのかという内容をお話しさせていただきます。
まず自己紹介です。本名をネットで出すと色々ややこしいことになりますので、匿名で「ほーきー」(Hawkie)という名前で活動しております。基本、生成AI や AI エージェント関連の投稿をリツイートやリポストすることの方が多いのですが、ちょこちょこ(自分で仕入れた)情報も出しています。
所有マシンは GMKTekの『EVO-X2』と、RTX 5090 搭載のゲーミングマシン『GARELLIA』です。EVO-X2でAIを使ってみて「やはり AMD 系だと結構厳しいところもあるな」と思い、RTX5090(搭載のマシン)を買ったりしています。ということで、逸(はぐ)れている方の「逸般」側・という自覚があります。よろしくお願いいたします。
──というわけで、AMD 系統と NVIDIA 系統の、GPUの違いについて見ていきます。
まず『メーカーが違う』という点があるのですが……メーカーが違うということは、ハードウェアに OS からソフトウェアを介して送られる命令が異なるということです。NVIDIA 系(のGPU)では聞いたことがある方も多いと思いますが、CUDAというものが、そのあたりを色々とうまいことやってくれます。
(筆者セルフツッコミ: "色々とうまいこと"ってなんだよ……)
AMD の方はこの HIP Runtime というものがあり、それと 1 個上の層のあたりで、ROCm というものが、ソフトウェアから GPU に命令を送るためのソフトウェア一式、というイメージです。実際にアプリケーションを開発する時は、そこ(ROCm)に命令を送るために、何かしらのライブラリーを使って(命令が)送られるのですが、そこは NVIDIA の場合でも AMD の場合でも、この PyTorch という Python の有名なライブラリーが、うまいこと差分を吸収してくれるという"触れ込み"で存在していますが、結局、下のハードウェアが違うので、そこでうまく動いたり、動かなかったりするということがあります。
今回はですね、Image to 3D(画像から 3D モデルを作る)の Hunyuan3D──正確な読み方はちょっとわからないのですが──というモデルを使っています。
これを動かすマシンは、自己紹介の際にも出てきた『EVO-X2』です。CPU は AMD Ryzen AI MAX+ 395 で、内蔵のGPU(iGPU) があるため、外付けの dGPU はない状態、マシン単体で動かしていきます。ただ、アーキテクチャーが結構新しくて。これが先ほどの ROCm という…… GPU を動かすための色々なソフトウェアに対応しきれていなかったり、あるいは、そこは対応していても、その 1 個上のアプリケーションやミドルウェアのレイヤーで対応していない、ということに出くわします。
なぜそんなものを使うのかというと、この EVO-X2……正確にはこの Ryzen AI MAX+ 395 のアーキテクチャは、メインメモリーを GPU と共用していて、(GPUが使用する)VRAMへの割り当てをたくさん増やして、RTX 5090 よりも大きな VRAM を確保することができるという点で注目されているものです。
(筆者注: RTX5090のVRAMは32GBであるのに対し、EVO-X2ではデフォルトで64GB、最大96GBまでVRAMへ割り当てることができます。)
Image to 3D は大きく分けるとプロセスが 2 つあります。まずは、入力画像から3D構造がどんなものなのか推定して、色のついていない、粘土細工のような 3D モデルを作る・という『シェイプ生成』のプロセスと、それ(シェイプ)に色を塗ったり、画像を貼っていく『テクスチャ生成』というプロセスがあります。シェイプ生成の方は比較的すんなり動いたのですが、テクスチャ生成のほうは、どうやっても動かない──(Claude Codeを使って)3 回ぐらい移植チャレンジをしたのですが、3 回とも結局失敗してしまい、(今も)うまく動いていない状況です。
シェイプ生成の方は、若干トリックを使っているものの『環境変数を設定して実験的な機能を有効にする』という設定や、新しすぎてライブラリが対応していないアーキテクチャを、1 世代前のアーキテクチャですよ、という風にうまく偽装する設定をして、何とかシェイプ生成が動きました。しかし、テクスチャ生成の方に進むと、そのテクスチャ生成で使うライブラリーの中で、思いっきりcuda:0とか cuda:1とか、デバイスを直接 CUDA 前提で指定しているようなコードがありました。それと、GPU が先ほど 0 や 1 と言いましたが、そもそも GPU が何枚かある・という前提でコードが書かれていたりもします。
元々、そんな"ご家庭のGPUで動かす"前提で作られていないモデルだろうから、しょうがないかな……という側面もあるのですが、ほかにはメモリー要求が厳しく、バッチサイズや解像度を調整しないとメモリに乗り切らない、というような処理になっていました。色々 Claude Code に頑張ってもらったのですが、なかなかすんなり動かず、移植できなかった、というところでございます。
まとめとしては、Image to 3D、今回試したテンセントのモデルに関しては『シェイプ生成はうまくいったけれども、テクスチャ生成はうまくいかなかった』ということです。
──ということで、一口に"AI"と言っても、ハードウェア依存のある部分が色々ありまして、(AMD 系のGPUの場合には)VRAMが多いからといって何でもかんでもすんなり動くわけではない、というのが難しいところです。ただ一方で、ollama とか LM Studioのように、流行りの大規模言語モデルを動かすというものに関しては、ソフトウェアがよく対応されていてスムーズに動かせる場合もありますので、(”AMD系だからダメ”とは)一概に言えず、用途による──ということですね。
(AMD系GPUも)エコシステムが徐々に成熟はしていますが、それなりに大きな買い物になりますので、皆さん、購入する際は下調べを十分行ってから買ってくださいね、というところが今回の報告でした。以上です。
Discussion