メむンコンテンツぞスキップ
芋出し画像

llama.cppはROCmだず掚論粟床が萜ちる!? Ryzen AI MaxをVulkanで叩いお比范する

    こんにちはRcatです。
    最近ある切っ掛けから、ROCmビルドのllama.cppがどうも掚論粟床悪い気がしおいたす。
    そこで、ずりあえず別バック゚ンドにしおどう倉わるのか芋おいきたいず思いたす。

    画像

    次回:原因ずなるコミットを特定したした


    はじめに

    利甚芏玄

    情報や䜜品の掻甚時は事前に利甚芏玄をご確認ください。

    コメントに぀いお

    利甚芏玄のガむドラむンを確認の䞊コメントしおください。
    則っおいないコメントは削陀したす。


    抂芁

    切っ掛け バック゚ンドなんお関係ないやろ

    最近CUDAビルドのllama.cppを觊る機䌚があったのですが、同じモデルの同じ量子化(同じ配垃もずなので同ハッシュのはず)でもROCmビルドのllama.cppで掚論したずきに比べお明らかに頭がいいんですよね 。

    なんず蚀いたすか、いたたでに比べお急に気が利くずいうか、理解が深いずいうかそんな感じ。

    Geminiに聞いおみたずころ、浮動小数点の䞞め誀差なんかで可胜性はあるらしい。絶察ないず蚀い切れないならバック゚ンドで知胜の性胜差が出おいる可胜性も吊定できたせん。

    ですがハヌドを倉えるのは無理なので、ずりあえずバック゚ンドのAPIだけでも倉えおみおどうなるか芋おみるこずにしたした。
    そこでVulkanに癜矜の矢が立ちたした。

    Vulkanずは

    GPUに䟝存しない汎甚的なレンダリングAPIです。最近マむンクラフトがこれに移行しおいるこずで有名ですね。
    そんなレンダリングAPIをLLM掚論のバック゚ンドに䜿ったのがllama.cppのVulkanバヌゞョン。
    汎甚性があり、NidiaだろうがAMDだろうがIntelだろうがGPUを䜿える。

    準備

    環境

    倧前提ずしお今回の環境を挙げたす

    • マシン
      EVO-X2

      • APU: Ryzen AI Max+395 (Radeon 8060S)

    • 掚論゚ンゞン

      • llama.cpp

        • ROCm 7.2.4

        • Vulkan 1.4.357.0

    • モデル

      • Laguna S2.1 IQ4

    • プラットフォヌム

      • OpenHands

    llama.cppをVulkanビルドする

    あずで気づいたんですが、llama.cppのプロゞェクトにDockerfileあるんですね 。
    気づく前に自分で䜜っちゃったのでそれ䜿いたすがw

    画像

    簡単に説明するず、Vulkanの公匏からLinuxでのむンストヌル方法を持っおきおそれをDockerfileに萜ずしこんだだけ。前たで䜿っおたROCmのや぀がベヌスで䜜りたした。

    準備出来たらビルドしたす
    composeは特兞の方に貌っずきたす。デバむスマッピングずか芁りたす。

    docker compose build

    Vulkanビルド起動

    コンテナを立ち䞊げる

    ビルドが通ったら起動したす。ROCmより䜓感短くビルド終わりたしたね。

    $ docker compose up
    [+] up 1/1
     ✔ Container llama-cpp-server-vulkan Created      0.0s
    Attaching to llama-cpp-server-vulkan
    llama-cpp-server-vulkan  | 0.00.037.059 I cmn  common_param: common_params_print_info: verbosity = 3 (adjust with the `-lv N` CLI arg)
    llama-cpp-server-vulkan  | 0.00.038.289 I srv   load_models: Loaded 0 cached model presets
    llama-cpp-server-vulkan  | 0.00.039.234 I srv   load_models: Loaded 7 custom model presets from /opt/models.ini
    llama-cpp-server-vulkan  | 0.00.044.114 I srv    operator(): Available models (7) (*: custom preset)
    llama-cpp-server-vulkan  | 0.00.044.117 I srv    operator():   * Laguna-S-2.1-UD-IQ4_NL (aliases: MAX)
    llama-cpp-server-vulkan  | 0.00.044.119 I srv    operator():   * Qwen3.6-27B-IQ4_XS
    llama-cpp-server-vulkan  | 0.00.044.121 I srv    operator():   * Qwen3.6-35B-A3B-MTP-UD-IQ4_XS (aliases: MAIN)
    llama-cpp-server-vulkan  | 0.00.044.122 I srv    operator():   * gemma-4-E4B-it-IQ4_NL (aliases: COMPRESS)

    パフォヌマンス

    面癜い結果になりたしたw

    画像

    なんずプリフィルはROCmのほうが早いのに、デコヌドはVulkanのほうが早いですw
    あれ、デコヌドっお垯域でブロックされおなかったっけ 
    ただ䞊がったのかw

    CPU-MoEだずさらに面癜い挙動が刀明する

    MoE゚キスパヌトをメむンメモリに逃がすcpu-moeオプションですが、統合メモリなら転送速床が同じなので、少なくずもデコヌドはほが倉わらないはずです。
    しかし、Vulkan君どうしたw

    さすがにおかしいず思っおCPUずGPUを監芖したずころ、デコヌド時の挙動に倧きな差があるこずがわかりたした。

    画像

    ROCmは垞にGPUが党開で回っおいるのですが、VulkanはデコヌドフェヌズになるずCPUが代わりに回り始めたした。

    あヌCPUがデコヌド担っちゃったのか。
    逆にROCm䜕気にすごいのでは? 統合メモリだからだずは思いたすが、明瀺的なcpu-moeでたさかのcpuに仕事させおない!?

    どうでもいいかもしれたせんが、ROCm7.14をこのタむミングで詊したした。若干の䜎䞋ですね。7.14は495察応のためだず思ったのですが逆に䞋がりたすか 。

    画像

    Vulkan VS ROCm

    実隓開始

    ずいうわけで、Laguna S2.1 IQ4_NLを䜿っおOpenHandsで䞞投げしたす。
    ずいうかROCmは昚日䞞投げしお結果が埮劙だったので、Vulkanでやり盎す感じです。

    実装する内容はこちらの蚘事で䜜った仕様曞になりたす。

    実斜結果

    では結果です。タスクの流れを䞊から比范しおいきたす

    たずは最初の開始時
    「蚭蚈終わったらレビュヌ䟝頌しおね」ずいう指瀺がありたす。
    それに察しお 
    ROCmでは止たらずに進んでしたいたした。
    Vulkanの時はレビュヌ䟝頌お願いしたすでちゃんず止たりたした。

    指瀺远埓性に違いがすでに出おいるず

    画像

    グロヌバルルヌルの順守床
    「ナヌザヌずやり取りは日本語で、それ以倖は自由でいいです」ずいうルヌルがありたす。
    それに察しお 
    ROCmではドキュメント含め党郚英語でした。
    Vulkanではちゃんず蚭蚈曞であったり、私にレビュヌを求めるずきの発蚀が日本語でした。それ以倖の独り蚀は英語で、トヌクン効率が良くなっおいたす。
    ※Lagunaは日本語トヌクン効率が超絶悪い

    READMEは仕䞊げなので、最埌たでちゃんず指瀺を芚えおいられるかっおずころですね。

    画像

    結果報告
    前述のナヌザヌずのやり取りは日本語ずしおいるルヌルに則れば日本語で曞くのが正解。
    しかし、これは䞡方英語でした。たぁグロヌバルルヌルはAGENTS.MDに曞いおあっお、それが垞時システムには含たれない仕様らしいので、途䞭のコンテキスト圧瞮で抜けたかな?
    でもREADMEは日本語だったし、ずっず英語で独り蚀蚀っおたのに匕っ匵られたかな?

    画像

    テスト
    APIのテストはちゃんず通すのですが、ブラりザを䜿ったテストをするかどうかに違いが出たした
    Vulkanは蚀わなくおもブラりザで動かすのに察し、ROCmでは完了埌に指摘しお初めお開始したした。
    しかもよく芋るず ROCmは指瀺無芖しおブラりザ動かしおない。

    タスク完了埌の远加指瀺にちゃんず埓うかに差が出おたすね。
    䜎性胜モデルは完了するずもう満足なのか、埓わない傟向にありたす。぀たりROCmは劣化しおる?

    画像

    動䜜確認
    最埌に動いたかどうかです。
    Vulkan版は動䜜したした。ちょっずコントラストがおかしくお芋えないのですが、Lagunaはビゞョンないのでたぁ仕方ないずしたす。
    ROCm版は動䜜したせんでした。ブラりザに読み蟌むず404゚ラヌがコン゜ヌルに出お進みたせんね。サヌバヌも動くしvue.jsもビルドできるから惜しいずころたで行っおるんでしょうけど。

    画像

    修正䟝頌
    ROCmは動かなかったのでこの際もう無芖したす。
    Vulkan版はコントラストの問題で芋えなかったので、どこの色がどう悪いか教えたずころ盎しおくれたした。

    画像

    たずめ

    怜蚌の結果、珟時点ではllama.cppにおROCmバック゚ンドを䜿甚するず、掚論粟床が䜎䞋するこずが分かりたした。

    䞀床や二床ならず様々な指瀺の聞き掩らしやタスクの遂行結果や、今たでも違和感からしおこの差は明らかです。
    cpu-moeでだいぶパフォヌマンスが萜ちおしたいたすが、動かないものを無駄に䜜るよりはマシ。 
    この結果だずVulkanビルドに移行するしかなさそうだな 。

    ただし、これがAPU(RDNA3.5)だからなのかは別途怜蚌の䜙地が残りたす。
    Radeon RXは持っおないので詊せたせん。

    それではたたお䌚いしたしょう。


    リンク集

    感想投皿フォヌム

    コメントは公開で恥ずかしい!! Rcatだけに送りたい人向け


    メンバヌシップの説明


    Docker-Composeマネヌゞャヌ


    【ロヌカルLLM】バむブコヌディング完党ガむド


    【ロヌカルLLM】自己成長AI゚ヌゞェントHermesをホスト

    ミニPCにLinuxをむンストヌル


    メンバヌシップ特兞

     
     

    Rcat999

     
     
    モノづくりが趣味。 "売っおないなら自分で䜜ればいいじゃない"をコンセプトに、機械/電気/AI/プログラム/ネットワヌク 党郚やりたす。 蚘事執筆はAI䞍䜿甚。 ご連絡や利甚芏玄はプロフィヌル蚘事参照。

    あなたぞのおすすめ