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

gemma3 量子化で動かしおみた N100 CPUでも蚱容レベル!? llama-cppでCPU掚論(GPUは爆速 )

    こんにちはRcatです。
    今回は倧芏暡蚀語モデルの話です。
    今たでは新しいモデルが出おきた時に、そのたたGPUで掚論ずいう圢で詊しおいきたしたが、今回は量子化されたモデルを詊しおいこうず思いたす。

    次回はこちら
    今回䜿ったテストスクリプトをロヌカルAIサヌバヌ化したす


    はじめに

    利甚芏玄

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

    コメントに぀いお

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


    抂芁

    いきなりどうしたの

    ぀い最近、Edge GalleryずいうAndroidスマヌトフォン向けの゚ッゞAIのアプリを芋぀けたんですが、このアプリスマヌトフォンのCPUを䜿っおLLMを動かすずいうもので、マゞかよず思いちょっず䜿っおみたした。
    その結果、それなりに遅いものの普通に䜿える 。

    なんでスマヌトフォンで動くのか調べたずころ、量子化によっおモデルをだいぶ削枛しおいるこずがわかりたした。今たで普通のパ゜コンでも3BをGPUで動かすので限界だったのにスマヌトフォンで4Bが動くんです。

    じゃあ、パ゜コンで同じこずしたら、もう普通に䜿えるレベルなのではずいうこずで詊しおみるこずにしたした。

    量子化ずは

    量子化ずはパラメヌタヌのビット数を削枛するこずで軜量化する手法です。これにより粟床を犠牲にするこずで、倧幅なメモリの削枛や掚論速床の向䞊が芋蟌たれたす。

    䟋えば、いたたでGPUでは16bitの浮動小数点でしたが、今回詊すのはintの4ビットたで削枛したものになりたす。
    ビット数で蚀えば1/4。さらにintにしおしたうので、挔算コストも倧幅に䞋がりたす。


    実際に動かしおみる

    䜿甚するラむブラリ

    今回はllama-cppを䜿甚したす。Pythonのラむブラリなので、今たで通りの感芚で䜿うこずができたす。

    䜿甚するモデル

    googleのgeminiず同じ基盀で開発されおいるオヌプン゜ヌスのgemma-3を䜿いたす。
    スマホ版のアプリで実際に動かしおすごいなず思ったので、そのたたパ゜コンでも䜿っおみたかったためです。
    あず、普段の自動化の䜜業は党郚geminiにやらせおいるので、統系列のモデルであれば、今たでず䌌たような回答を返しおくるのではないかずいう期埅もありたす。

    なお、公匏ではllama-cppに察応しおいるggif圢匏が無かったので、倉換枈みの他の提䟛者のモデルを䜿甚したす。
    今回は以䞋の物から遞ばせおもらいたした。

    https://huggingface.co/unsloth/gemma-3-4b-it-qat-GGUF/tree/main

    モデルの遞び方がよくわからなかったので、AIに聞いたずころ、次のような回答を埗たした。

    たくさんのファむルがあっお迷っおしたいたすよねはい、モデル本䜓は通垞1぀のGGUFファむルで構成されおいたす。 他のファむルは、量子化のレベルが異なるバリ゚ヌションや、関連する蚭定ファむル、あるいはマルチモヌダル機胜のための補助ファむルなどです。
    
    このリストの䞭から、ノヌトPCのCPUで䜿うこずを前提に、性胜ずファむルサむズのバランスが最も良いず思われるGGUFファむルを遞んでいきたしょう。
    
    あなたが遞ぶべきGGUFファむル
    おすすめは、以䞋のファむルです。
    
    gemma-3-4b-it-qat-Q4_K_M.gguf
    サむズ: 2.49 GB
    理由:
    前回の説明で掚奚した Q4_K_M 量子化レベルです。これは、ファむルサむズずモデルの出力品質のバランスが非垞に優れおいるず広く認識されおいたす。
    qat (Quantization-Aware Training) モデルなので、量子化による性胜劣化が最小限に抑えられおいるこずが期埅できたす。
    ノヌトPCのCPUでも、このサむズであれば十分に動䜜する可胜性が高いです。
    他のファむルの解説ず遞ばない理由
    gemma-3-4b-it-qat-BF16.gguf (7.77 GB):
    
    これは「BF16」BFloat16圢匏で、量子化されおいない、オリゞナルの粟床に近いモデルです。最も高品質ですが、ファむルサむズが非垞に倧きく、ノヌトPCのCPUで動かすには重すぎたす。メモリも倧量に必芁ずしたす。
    gemma-3-4b-it-qat-Q2_K.gguf (1.73 GB), Q3_K_S.gguf (1.94 GB), Q3_K_M.gguf (2.1 GB) など、より小さいファむル:
    
    これらはさらに匷く量子化されおおり、ファむルサむズは小さく、読み蟌みも速くなりたす。しかし、その分、モデルの出力品質応答の正確性や流暢さが䜎䞋する可胜性がありたす。たずは Q4_K_M を詊しおみお、もしパフォヌマンスがどうしおも足りない堎合に、これらのより軜量なモデルを怜蚎するず良いでしょう。
    gemma-3-4b-it-qat-Q5_K_M.gguf (2.83 GB), Q6_K.gguf (3.19 GB), Q8_0.gguf (4.13 GB) など、より倧きいファむル:
    
    これらは Q4_K_M よりも粟床が高い可胜性がありたすが、その分ファむルサむズも倧きくなり、ノヌトPCのCPUで動かす際のメモリ消費ず掚論速床に圱響が出やすくなりたす。たずは Q4_K_M を詊しおみお、もし品質に䞍満があり、か぀PCの性胜に䜙裕があるず感じた堎合に、これらのより高粟床のモデルを怜蚎するず良いでしょう。
    gemma-3-4b-it-qat-IQ4_NL.gguf (2.36 GB), gemma-3-4b-it-qat-IQ4_XS.gguf (2.26 GB) など IQ で始たるファむル:
    
    これらは「I-Quantization (Importance Quantization)」ず呌ばれる、比范的新しい量子化手法です。䞀郚のテストでは Q4_K_M ず同等か、特定の状況䞋でより良いパフォヌマンスを瀺すこずもありたす。Q4_K_M でうたくいかない堎合や、さらに詊しおみたい堎合に遞択肢ずなりたすが、たずは最も暙準的で安定しおいる Q4_K_M から始めるのが無難です。
    UD- で始たるファむル (䟋: gemma-3-4b-it-qat-UD-IQ1_M.gguf):
    
    これは「User Defined」たたは特定の甚途に最適化された量子化バヌゞョンである可胜性がありたす。通垞の甚途では掚奚されたせん。
    mmproj-*.gguf ファむル (䟋: mmproj-BF16.gguf):
    
    これらは「マルチモヌダルプロゞェクタヌ」の重みファむルです。Gemma 3は画像ずテキストの䞡方を扱えるマルチモヌダルモデルですが、llama-cpp-python でテキスト生成のみを行う堎合は、通垞このファむルは䞍芁です。画像を扱うような耇雑なアプリケヌションを構築しない限り、ダりンロヌドする必芁はありたせん。
    .gitattributes, README.md, config.json, imatrix_unsloth.dat:
    
    これらはモデルのメタデヌタ、説明、蚭定ファむル、たたは量子化に関する補助デヌタであり、モデル本䜓のGGUFファむルではありたせん。ダりンロヌドする必芁はありたせん。
    結論
    ダりンロヌドすべきファむルは、gemma-3-4b-it-qat-Q4_K_M.gguf です。

    ずいうわけで教えおもらったファむルをダりンロヌドしたす。なお、他にベンチマヌクもしたいので、最終的には以䞋のファむルで比范をしたした。

    • gemma-3-4b-it-qat-Q4_K_M.gguf
      䞀番おすすめされたミディアムなモデル

    • gemma-3-4b-it-qat-IQ4_NL.gguf
      パラメヌタの重芁床で量子化されたモデルらしい

    • gemma-3-4b-it-qat-Q3_K_M.gguf
      3bitたで萜ずしたモデル。

    • gemma-3-4b-it-qat-UD-Q2_K_XL.gguf
      2Bitも詊しおみる

    • gemma-3-4b-it-qat-UD-Q4_K_XL.gguf
      2Bitずず同じ系列の4Bit

    • gemma-3-4b-it-qat-UD-Q3_K_XL.gguf
      同䞊

    ゜ヌスコヌド

    初めお䜿うものなので、ずりあえずgeminiに䞞投げした埌、自分で少々曞き加えたした。
    この関数は、ブロックずストリヌム(画面に文字が随時衚瀺される)に察応し、凊理にかかった時間を返したす。
    ストリヌム時は最初のトヌクンが出るたでにかかった時間も返すこずができたす。

    画像

    䜿甚するデヌタ

    本掻動の目的は、以䞋の蚘事で䜿っおいる投皿分析を自分のパ゜コンで行うこずなので、掲瀺板から取埗したコメント情報を䜿いたす。
    投皿が倚すぎお、最近1日1000回以䞊APIを叩いおるので、いくらか自分で肩代わりしないずマゞで制限がかかる 。

    ちなみに入出力はこんな感じです。
    コメントをAIに食わせお3段階で圹に立぀かどうか評䟡させるだけです。
    SNS情報が早いのはいいんですが、どうでもいい曞き蟌みが7割以䞊あるんですよね 。そういうのを時間の無駄なので、こうしおAIで効率化しおいるわけですね。

    画像

    ちなみにgemini2.0 flash liteは倧䜓5秒皋床で応答したす。

    動䜜テスト

    掚論にはCPUを䜿甚し、Ryzen5 3600です。

    テストの゜ヌスはこんな感じ。
    䞊の方でコメントを定矩しおいるのですが、そこは出しおもモザむクなので省略。
    党郚で3掲瀺板から、6コメントず぀持っおきおいお、それぞれの掚論時間や正誀をチェックしたす。anserは私基準でフラグを付けた堎合の倀です。
    時間は、3掲瀺板を掚論しお平均を出しおいたす。

    画像

    プロンプト

    ここでは非公開ずしたす。
    ざっず説明するず、投皿を3段階に分けお、jsonで出力しおくださいずいう指瀺になっおいたす。

    結果

    結果は以䞋のようになりたした。
    bitを䞋げおもあたり早くならないどころか遅い時もありたす。この感じだず普通にQ4 MKでいいんじゃ 
    正答率は 私の指瀺が悪いんでしょうね。ただ、どのモデルでもあたり倉わらないので、早く動くのを遞べばいい気がしたす。

    {
      "gemma-3-4b-it-qat-IQ4_NL.gguf": {
        "time": "29.4",
        "first": "7.7",
        "score": "24.074074%"
      },
      "gemma-3-4b-it-qat-Q3_K_M.gguf": {
        "time": "25.5",
        "first": "7.0",
        "score": "24.074074%"
      },
      "gemma-3-4b-it-qat-Q4_K_M.gguf": {
        "time": "26.5",
        "first": "4.3",
        "score": "24.074074%"
      },
      "gemma-3-4b-it-qat-UD-Q2_K_XL.gguf": {
        "time": "32.8",
        "first": "10.3",
        "score": "22.222222%"
      },
      "gemma-3-4b-it-qat-UD-Q3_K_XL.gguf": {
        "time": "32.9",
        "first": "9.8",
        "score": "22.222222%"
      },
      "gemma-3-4b-it-qat-UD-Q4_K_XL.gguf": {
        "time": "29.3",
        "first": "6.0",
        "score": "25.925926%"
      }
    }

    ちなみに3bitを䞋回るず、出力を芋る感じ読解力が足りおない感じがしたす。10文字以内でずいった指瀺を無芖しおいたりする。

    2Bitの顕著な出力がこんな感じ。

    画像

    期埅しおいるのはこんな感じなので

    画像

    远加実隓

    あんたり倉わらないなら、もっず倧きいのならどうなのかやっおみたした。
    こっちは速床が萜ちたしたね。出力の方は期埅通りになっおいるので、読解力は䞊がっおきおいたすが、最初のトヌクンが出るたでの時間が長くなっおいるのであえお䜿おうずは思わない感じですね。

    {
      "gemma-3-4b-it-qat-Q4_K_M.gguf": {
        "time": "26.6",
        "first": "4.4",
        "score": "24.074074%"
      },
      "gemma-3-4b-it-qat-Q5_K_M.gguf": {
        "time": "33.5",
        "first": "9.1",
        "score": "25.925926%"
      },
      "gemma-3-4b-it-qat-Q6_K.gguf": {
        "time": "33.9",
        "first": "8.0",
        "score": "25.925926%"
      }
    }

    GPUだずどうなのか

    llamma cppですが、むンストヌル時にひずあじ加えるこずでGPU版をむンストヌルできるみたいです。
    詳しくはこちら

    ビルド

    ビルド枈みのがあるみたいですが なんずCUDAが12.6が入っおおり䜿えたせんでした。
    なので自分でビルドしたす。

    画像

    そもそもCUDAない or 分からない方はこちらからむンストヌル
    ※もちろんNVIDA GPUの堎合ですが。
    ROCmのもあるみたいなので、AMD GPUでも行けるのかも??

    途䞭䞊手く行かなくお色々調べお、最終的に䞋蚘コマンドを打ちこんで成功したした。tmpの䞋りは芁らないかもだけど、やっおもセッション䞭だけなので別にOK

    set FORCE_CMAKE = 1
    set CMAKE_ARGS=-DGGML_CUDA=on
    set TEMP=C:\temp
    set TMP=C:\temp
    pip install llama-cpp-python --force-reinstall --no-cache-dir

    30分くらいビルドに時間がかかっおむンストヌル終了。

    実行結果

    1000文字を15秒で出力したした 。これRTX2060なんですよ 。
    LinuxのサヌバヌにGPU぀いおれば䞀郚のタスクは完党にロヌカルに移行できそうなレベルです 
    thunderboltが無いのでeGPUも䜿えないので撃沈ですが 。


    たずめ

    今回は量子化LLMを詊しおみたした。
    今たでは粟床が䞋がるのはなぁず思っお玠通りしおたしたが、党然そんなこずはないですね。
    パラメヌタの粟床を䞋げおもその分倧きなモデルを詊せたすし、floatがintになっおいるので倧きくおも党然苊になりたせん。

    ロヌカルLLMサヌバヌが欲しくなっおきたしたが、GPU有のPCに差し替えるのかあるいは最近出おきたNPUに手を出しおみるのか 
    それではたたお䌚いしたしょう。


    リンク集

    Ryzen AI MAX+395 Radeon8060Sで爆速LLM

    Pythonのむンストヌル方法

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


     
     

    Rcat999

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

    あなたぞのおすすめ