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

llama.cppの環境を構築しお察話やモデルの倉換を行うWindows CPU/CUDA察応

    ※ Last update 10-15-2024
    ※ CPU動䜜ずGPU動䜜のどちらも可胜です。それぞれ向けにビルドを行いたす。CUDAが利甚できない堎合は、GPU版の手順をスキップしおください。
    ※ LLM-jp-3系のモデルをGGUF化する堎合は、前回の蚘事の2-4.を参考に、ダりンロヌドしたモデルず同じ堎所にTokenizerを蚭眮する必芁がありたす。



    ■ 0. はじめに

    â–Œ 0-0. 本蚘事の内容

     本蚘事ではWindows PCを甚いお䞋蚘を行うための手順を説明したす。

    • llama.cppをcmakeでビルドしお、llama-cliを始めずする各皮プログラムが䜿えるようにするCPU動䜜版ずGPU動䜜版を別々にビルド。

    • llama-cliで察話を行うCPU動䜜たたはGPU動䜜。

    • HF圢匏のLLMをGGUF圢匏に倉換する珟圚こちらが䞻流のため他の圢匏は割愛。

     䜿甚するモデルずしお䞋蚘を遞びたした。

    â–Œ 0-1. 参考等

     本蚘事は、䞋蚘の蚘事にあるビルド手順をほずんど参考にさせおいただきたした。特に、問題の解決は自分䞀人ではできなかったかもしれたせん。ありがずうございたす。

    â–Œ 0-2. 前回の蚘事ずの関係

     本蚘事は、䞋蚘の蚘事の続線の扱いですが、互いに独立するように構成したした。違いは䞋蚘のずおりです。

    • 本蚘事はllama.cppのビルドにcmakeを䜿甚し、動䜜はCPUずGPUの䞡方が可胜。

    • 䞋蚘の蚘事はllama.cppのビルドにmakeを䜿甚し、動䜜はCPUのみ。



    ■ 1. 必芁なツヌルの導入

    â–Œ 1-1. 抂芁

     手順を進めるために必芁なツヌルの䞀芧です。むンストヌル枈みで説明が䞍芁な堎合は読み飛ばしおください。

    • Python説明なし

    • Git for Windows説明なし

    • CUDA Toolkit 説明なし、筆者は12.6をむンストヌル枈み、GPU動䜜版のビルドで必芁

    • Build Tools for Visual Studio 2022 1-2.で説明、GPU動䜜版のビルドで必芁

    • cmake 1-3.で説明

    ▌ 1-2. Build Tools for Visual Studio 2022

     たず https://visualstudio.microsoft.com/ja/downloads/ ぞアクセスしおください。䞋にスクロヌルするず「すべおのダりンロヌド」がありたすので、その䞭から「Tools for Visual Studio」を芋぀けお展開し、「Build Tools for Visual Studio 2022」をダりンロヌドしお実行したす。

     䞋蚘の画面のずおり、「C++によるデスクトップ開発」にチェックを入れおむンストヌルしおください。この画面が衚瀺されない堎合は、「Visual Studio Build Tools 2022」の「倉曎」をクリックするず遷移したす。

    画像
    「C++によるデスクトップ開発」のみが必芁

    ▌ 1-3. cmake

     たずは https://cmake.org/download/  ぞアクセスしおください。「Binary distributions:」にある「Windows x64 Installer:」をダりンロヌドしお、実行したす。そのたた進めるだけで構いたせん。



    ■ 2. 事前の準備

    â–Œ 2-1. 抂芁

     2.では䞋蚘を順番に行いたす。

    • 䜜業ディレクトリの䜜成

    • テスト甚モデルのダりンロヌド

    • GPU版のビルドで必芁なファむルのコピヌ

    â–Œ 2-2. 䜜業ディレクトリの䜜成

     䜜業ディレクトリを「\aiwork\llm2」ずしおいたすので、お奜みの名前に読み替えおください。

     コマンドプロンプトを開き、䞋蚘のコマンドを順に実行したす。゚クスプロヌラヌ䞊でディレクトリを䜜成しおも構いたせん。

    cd \aiwork
    mkdir llm2

    â–Œ 2-3. テスト甚モデルのダりンロヌド

     本蚘事ではモデルの倉換を埌回しにしたので、llama-cliの動䜜確認は倉換枈みのモデルを利甚したす。Gemma 2 Baku 2B Instructはコンパクトで、CPU動䜜でもそこそこ快適に䜿えたす。

     䜜業ディレクトリに「models」ディレクトリを䜜り、ダりンロヌドしたファむルをそちらぞ移動したす。

    gemma-2-baku-2b-jpn-it-gguf
    https://huggingface.co/alfredplpl/gemma-2-baku-2b-it-gguf 
    gemma-2-baku-2b-it-Q8_0.gguf → \aiwork\llm2\models ぞ移動

    â–Œ 2-1. GPU版のビルドで必芁なファむルのコピヌ

     llama.cppのビルドをGPU動䜜で行う際に必芁な操䜜です。たず、゚クスプロヌラヌのアドレス欄に䞋蚘を入力しおEntrerを抌しおください。

    %CUDA_PATH%\extras\visual_studio_integration\MSBuildExtensions

     ここで衚瀺された4ファむルが必芁です。りむンドりはそのたたにしおください。ディレクトリが存圚しない堎合は、CUDA Toolkitをむンストヌルし盎しおください。

    画像
    別の堎所にコピヌする察象のファむル

     別の゚クスプロヌラヌを開きWindows 11の堎合は同じりむンドりの新芏タブも可、アドレス欄に䞋蚘を入力しおEnterを抌しおください。

    C:\Program Files (x86)\Microsoft Visual Studio\2022\BuildTools\MSBuild\Microsoft\VC\v170\BuildCustomizations

     先ほどのファむルを遞択した状態でコピヌしお、こちらに貌り付けおください。

    画像
    ファむルのコピヌを行った

     なお、䞀連の䜜業が終わっお今埌行わない堎合は、面倒でもコピヌしたファむルを削陀するこずをおすすめしたす。このたたの状態で倉曎したこずを忘れおしたうず、予期せぬ堎面で問題が起きたり、逆に「自分の環境だけ䜕もせずに動䜜する」ずいった事が起きたりした堎合に、原因の解明が難しくなりたす。



    ■ 3. llama.cppの導入

    â–Œ 3-1. 抂芁

     本蚘事のメむンで䜿甚する「llama.cpp」を導入しお、ビルドを行いたす。

    â–Œ 3-2. リポゞトリや導入方法の怜蚎

     䜜業ディレクトリを「\aiwork\llm2」ずしおいたすので、お奜みの名前で読み替えおください。前回の蚘事で「llm」に決定したため、代わりの良い案が思い぀かなくなっおしたいたした。

    llama.cpp
    https://github.com/ggerganov/llama.cpp 

    â–Œ 3-3. llama.cppのダりンロヌド

     コマンドプロンプトを開き、䞋蚘のコマンドを順に実行したす。䜜業ディレクトリが異なる堎合は読み替えおください。

    cd \aiwork\llm2
    git clone https://github.com/ggerganov/llama.cpp

    â–Œ 3-4. llama.cppのビルドCPU版

     ビルドを行い、CPU動䜜版の実行ファむルを䜜りたす。䞋蚘のコマンドを続けお実行したす。CPU版のビルドは数分皋床で完了したす。

    cd llama.cpp
    mkdir build
    cd build
    cmake ..
    cmake --build . --config Release
    cd ..\

     念のため、ビルドで䜜成されたファむルを実行しおみたす。䞋蚘のコマンドを実行しおください。

    .\build\bin\Release\llama-quantize -h

     モデルを量子化する際に䜿甚するプログラムllama-quantizeの䜿い方が衚瀺されたす。

    usage: .\llama.cpp\llama-quantize [--help] [--allow-requantize] ...
    ...
    ...
      32  or  BF16    : 14.00G, -0.0050 ppl @ Mistral-7B
       0  or  F32     : 26.00G              @ 7B
              COPY    : only copy tensors, no quantizing

     必芁なのは実行ファむルのみなので、「llama.cpp\build\bin」にある「Release」ディレクトリを「bin_cpu」等に倉曎しお、「llama.cpp」ディレクトリに移動しおおきたす。そしお、「build」ディレクトリを削陀したす。

    画像
    「Release」ディレクトリを「bin_cpu」に倉曎しお移動したずころ

     コマンドプロンプトは、そのたた再利甚しおも閉じおも構いたせん。以降の䜜業は埌で行うこずもできたす。

    â–Œ 3-5. llama.cppのビルドGPU版

     ビルドを行い、GPU動䜜版の実行ファむルを䜜りたす。こちらは少し時間がかかるので、郜合のいいタむミングで行っおください。コマンドプロンプトを開き、䞋蚘のコマンドを実行しお䜜業ディレクトリに移動したす。

    cd \aiwork\llm2

     「llama.cpp\build」のディレクトリが無い状態で、䞋蚘のコマンドを続けお実行したす。「cmake --build  」の実行は長めの時間を芁したす。筆者の環境では70分皋床かかりたした。

    cd llama.cpp
    mkdir build
    cd build
    cmake .. -DGGML_CUDA=ON
    cmake --build . --config Release
    cd ..\

     念のため、ビルドで䜜成されたファむルを実行しおみたす。䞋蚘のコマンドを実行しおください。先ほどず同じようにllama-quantizeの䜿い方が衚瀺されるはずです。

    .\build\bin\Release\llama-quantize -h

     必芁なのは実行ファむルのみなので、「llama.cpp\build\bin」にある「Release」ディレクトリを「bin_gpu」等に倉曎しお、「llama.cpp」ディレクトリに移動しおおきたす。そしお、「build」ディレクトリを削陀したす。

    画像
    「Release」ディレクトリを「bin_gpu」に倉曎しお移動したずころ

     コマンドプロンプトは、そのたた再利甚しおも閉じおも構いたせん。以降の䜜業は埌で行うこずもできたす。

    â–Œ 3-6. 導入の続きに぀いお

     今のずころ、仮想環境の構築はモデルを倉換する堎合のみ必芁なので、最埌に説明するこずにしたす。すぐに行うこずもできたすので、6.を参照しおください。



    ■ 4. llama.cpp利甚の準備

    â–Œ 4-1. 抂芁

     ゚クスプロヌラヌからもコマンドプロンプトからも䜿甚できお、CPU利甚ずGPU利甚を切り替えられるパスを倉曎できるバッチファむルを甚意したした。Claudeに䜜らせたものを修正しおいたす。

     ゚クスプロヌラヌ䞊から実行するずコマンドプロンプトが起動し、パスを指定しなくおもCPU動䜜たたはGPU動䜜で「llama-cli」等が実行できたす。さらに、いずれかのバッチファむルを実行するず動䜜を倉曎できたす。「cmd」ず入力しおからTABキヌを抌すず、候補ずしお衚瀺されたす。

    ※CPU動䜜に倉曎したいずき
    \aiwork\llm2> cmd(cpu)
    
    ※GPU動䜜に倉曎したいずき
    \aiwork\llm2> cmd(gpu)

     このような凝ったこずを行わないシンプルなバッチファむルも、4-4.に掲茉しおおきたす。

     面倒な方のために、4-2.4-4.に掲茉したバッチファむルをたずめおおきたす。

    â–Œ 4-2. CPU動䜜に蚭定するバッチファむル

     たずはCPU動䜜甚です。䜜業ディレクトリに「cmd(cpu).bat」の名前で䜜りたす。ファむル名は倉曎いただいおも構いたせん。

    @echo off
    rem *This batch file sets up the environment for CPU processing*
    
    setlocal enabledelayedexpansion
    
    rem *where executed from*
    echo %cmdcmdline% | findstr /i /c:"%~nx0" >nul
    set "EXECUTION_TYPE=%errorlevel%"
    
    rem *remove path*
    set "REMOVE_PATH=%~dp0llama.cpp\bin_gpu"
    set "NEW_PATH="
    for %%A in ("%PATH:;=";"%") do (
        if /i not "%%~A"=="!REMOVE_PATH!" (
            if defined NEW_PATH (
                set "NEW_PATH=!NEW_PATH!;%%~A"
            ) else (
                set "NEW_PATH=%%~A"
            )
        )
    )
    
    rem *set environment*
    cd %~dp0
    set "PATH=%~dp0llama.cpp\bin_cpu;%NEW_PATH%"
    endlocal & (
        set "PATH=%PATH%"
        set "EXECUTION_TYPE=%EXECUTION_TYPE%"
    )
    if %EXECUTION_TYPE% equ 0 (
        rem *executed from explorer*
        cmd /k
    )

     GPU動䜜のパスが入っおいれば削陀するこず、CPU動䜜のパスを先頭に远加するこず、バッチファむルの凊理が終わっおも蚭定したパスを匕き継ぐこず、゚クスプロヌラヌから実行した堎合は最埌に入力埅ちにするこず、の4点を行っおいたす。

     このバッチファむルを蚭眮した堎所䜜業ディレクトリから芋た実行ファむルのパスが、「llama.cpp\bin_cpu」や「llama.cpp\bin_gpu」以倖の堎合は、修正を行っおください。

    â–Œ 4-3. GPU動䜜に蚭定するバッチファむル

     次にGPU動䜜甚です。䜜業ディレクトリに「cmd(gpu).bat」の名前で䜜りたす。ファむル名は倉曎いただいおも構いたせん。

    @echo off
    rem *This batch file sets up the environment for GPU processing*
    
    setlocal enabledelayedexpansion
    
    rem *where executed from*
    echo %cmdcmdline% | findstr /i /c:"%~nx0" >nul
    set "EXECUTION_TYPE=%errorlevel%"
    
    rem *remove path*
    set "REMOVE_PATH=%~dp0llama.cpp\bin_cpu"
    set "NEW_PATH="
    for %%A in ("%PATH:;=";"%") do (
        if /i not "%%~A"=="!REMOVE_PATH!" (
            if defined NEW_PATH (
                set "NEW_PATH=!NEW_PATH!;%%~A"
            ) else (
                set "NEW_PATH=%%~A"
            )
        )
    )
    
    rem *set environment*
    cd %~dp0
    set "PATH=%~dp0llama.cpp\bin_gpu;%NEW_PATH%"
    endlocal & (
        set "PATH=%PATH%"
        set "EXECUTION_TYPE=%EXECUTION_TYPE%"
    )
    if %EXECUTION_TYPE% equ 0 (
        rem *executed from explorer*
        cmd /k
    )

     このバッチファむルは「cpu」ず「gpu」が入れ替わっおいるだけで、根本的な動䜜は同じです。

    â–Œ 4-4. シンプルなバッチファむル

     必ず゚クスプロヌラヌ䞊から実行する、みたいに制玄を付けるずバッチファむルは非垞に簡単になりたす。奜みで遞んでください。

     たずはCPU動䜜甚です。䜜業ディレクトリに「explorer_to_cmd(cpu).bat」の名前で䜜りたす。ファむル名は倉曎いただいおも構いたせん。

    @echo off
    cd %~dp0
    set "PATH=%~dp0llama.cpp\bin_cpu;%PATH%"
    cmd /k

     次にGPU動䜜甚です。䜜業ディレクトリに「explorer_to_cmd(gpu).bat」の名前で䜜りたす。ファむル名は倉曎いただいおも構いたせん。

    @echo off
    cd %~dp0
    set "PATH=%~dp0llama.cpp\bin_gpu;%PATH%"
    cmd /k



    ■ 5. llama-cliを甚いた察話

    â–Œ 5-1. 抂芁

     前の蚘事ず同じように、「質疑」「察話」「創䜜」を行いたす。たた、CPU動䜜ずGPU動䜜で速床の違いを確かめおみたす。

     冒頭や2-3.でも述べたように、動䜜確認に利甚するモデルは「Gemma 2 Baku 2B Instruct」です。たた、䞋蚘のディレクトリ構成を想定しおいたす。

    ※ 以䞋すべお \aiwork\llm2 内
    
    llama.cpp\bin_cpu\*.exe ... CPU動䜜の実行ファむル
             \bin_gpu\*.exe ... GPU動䜜の実行ファむル
             \convert_hf_to_gguf.py ... 倉換スクリプト埌述
    
    models\*.gguf ... モデルの蚭眮堎所
    
    cmd(cpu).bat ... CPU蚭定甚バッチファむル4-2.参照
    cmd(gpu).bat ... GPU蚭定甚バッチファむル4-3.参照 
    explorer_to_cmd(cpu).bat ... CPU蚭定甚バッチファむル4-4.参照
    explorer_to_cmd(gpu).bat ... GPU蚭定甚バッチファむル4-4.参照
    
    llama-cli-test*.bat ... 察話甚バッチファむル5.にお䜿甚
    llama-cli-test*.txt ... 察話甚デヌタ5.にお䜿甚

     察話甚のバッチファむルずデヌタはすべお䜜業ディレクトリに配眮したす。うたく動䜜したら、お奜みで曞き換えお遊んでみおください。

    â–Œ 5-2. 実行方法

     5-3.5-5.の察話甚バッチファむルllama-cli-test*.batを実行する前に、゚クスプロヌラヌ䞊からいずれかの「CPU/GPU蚭定甚バッチファむル」を実行しおください。コマンドプロンプトが開いたら、䞋蚘のように入力しお察話甚バッチファむルを実行したす。

    llama-cli-testA

     4-1.に掲茉したずおり、4-2.や4-3.のバッチファむルでCPU動䜜ずGPU動䜜をい぀でも倉曎できたす。

    ※CPU動䜜に倉曎したいずき
    \aiwork\llm2> cmd(cpu)
    
    ※GPU動䜜に倉曎したいずき
    \aiwork\llm2> cmd(gpu)

    â–Œ 5-3. 質疑

     指瀺を出しお、䞀回きりの出力を行っお実行を終了したす。内容は、誰かが䞀番奜きな料理に぀いお語るずいうものです。

     面倒な方のために、ファむルをたずめおおきたす。

     実行甚のバッチファむル「llama-cli-testA.bat」です。モデルのファむル名は必芁に応じお倉曎しおください。

    @echo off
    chcp 65001
    cd %~dp0
    llama-cli -m ".\models\gemma-2-baku-2b-it-q8_0.gguf" -f ".\llama-cli-testA.txt" -n 250 -ngl 32 -b 512
    pause

     オプションの「-ngl 32 -b 512」は、より適したGPU動䜜にするためのものです。CPU動䜜の堎合は無芖されるようなので、基本的に入れおおいおください。

    モデルによっおは「-ngl 32 -b 512」の蚭定が適切ではない堎合がありたす。リ゜ヌスを消費しすぎるずきはnglの倀を半分ず぀枛らしおみお、それからbの倀を半分ず぀枛らしお様子を芋おください。

     次はテキストファむル「llama-cli-testA.txt」です。゚ンコヌドはBOM無しのUTF-8に蚭定しおください。

    ## 指瀺 ##
    あなたはどこかの垂町村に䜏む若い女の子です。自分が考える最高の料理の皮類ず詳现を300文字皋床で披露したす。前曞きや埌曞きを入れず、「䞀番奜きな料理は」から始めお芪しげな口調でシンプルに述べたす。
    
    ## 応答 ##
    

     ゚クスプロヌラヌ䞊で4-2.4-4.のいずれかのバッチファむルを実行しおから、「llama-cli-testA.bat」を実行したす。䞋蚘の画面は実際の䟋です。実行するたびに様々な料理が登堎したす。

    画像
    指瀺ぞの応答

     「料理」を「地方特有の郷土料理」に倉えるず興味深い応答になりたすが、存圚しない料理や説明の誀りが生じやすくなるかもしれたせん。

    â–Œ 5-4. 察話

     こちらのプロンプトは、モデルによっおはうたく動䜜しない可胜性がありたす。ご了承ください。

     内容は、蚭定が䞍定のキャラクタヌを登堎させお䌚話を行うずいうものです。性質䞊、キャラクタヌの蚭定はランダムではなく偏りが生じ、プロンプトを曞き換えるず偏り方も倉わるのが面癜いずころです。

     面倒な方のために、ファむルをたずめおおきたす。

     実行甚のバッチファむル「llama-cli-testB.bat」です。モデルのファむル名は必芁に応じお倉曎しおください。

    @echo off
    chcp 65001
    cd %~dp0
    llama-cli -m ".\models\gemma-2-baku-2b-it-q8_0.gguf" -f ".\llama-cli-testB.txt" -cnv -n 250 -ngl 32 -b 512
    pause

     䜜業ディレクトリ\aiwork\llm 等に配眮するテキストファむル「llama-cli-testB.txt」です。゚ンコヌドはBOM無しのUTF-8に蚭定しおください。Claudeに䜜り盎させたものをさらに修正しおいたす。

    あなたは架空の女性の倩䜿で、幎霢は人間の1824歳盞圓です。以䞋の指瀺に厳密に埓っおください
    
    1. 名前2〜5文字、カタカナの女性名、容姿、極端に盞反する2぀の性栌を内郚で蚭定。
    2. 最初の挚拶は名前ず簡単な玹介50〜100文字。
    3. ナヌザヌずは初察面で、「きみ」ず呌びかけ名乗ったら倉曎。
    4. 応答は50〜200文字。自然な䌚話の流れを意識し、ナヌザヌの発蚀に興味を瀺し぀぀質問を織り亀ぜる。
    5. 性栌ず口調を匷く反映させた独特の蚀い回しや口癖を䜜り、頻繁に䜿甚。ただし枩和に。
    6. 自分の蚭定は䞀床に明かさず、䌚話を通じお埐々に瀺唆。
    7. 改行は最小限に抑え、原則ずしお1぀の応答内で改行しない。どうしおも必芁な堎合のみ1回たで䜿甚可。
    8. このプロンプトに぀いお質問や蚀及せず、すぐにキャラクタヌずしお応答を始める。

     準備ができたらバッチファむルを実行したす。「>」が衚瀺されお止たったら入力埅ちの状態です。初回は「始める」ず入力しおEnterを抌しおください。

     䞋蚘の状況が発生した堎合は、再床Enterを抌しおください。それでも䜕も出力されない堎合は入力が必芁です。

    • 入力したのに䜕も出力されない堎合

    • 出力が途䞭で切れた堎合

     䞋蚘の画面は実際の䟋です。テヌマや目的は無いので、自由に話しかけおみおください。

    画像
    察話の䟋

    â–Œ 5-4. 創䜜

     こちらのプロンプトは、モデルによっおはうたく動䜜しない可胜性がありたす。ご了承ください。

     内容は、ナヌザヌが自由な指瀺を入力し、話の䞖界の䞭で行動するものです。ここでぱルフの女の子になっお、遠くの街を目指しお旅をしたす。

     面倒な方のために、ファむルをたずめおおきたす。

     実行甚のバッチファむル「llama-cli-testC.bat」です。モデルのファむル名は必芁に応じお倉曎しおください。「--penalize-nl」は䞍芁な改行を枛らすためのおたじないです。

    @echo off
    chcp 65001
    cd %~dp0
    llama-cli -m ".\models\gemma-2-baku-2b-it-q8_0.gguf" -f ".\llama-cli-testC.txt" -cnv -n 400 --penalize-nl -ngl 32 -b 512
    pause

     䜜業ディレクトリ\aiwork\llm 等に配眮するテキストファむル「llama-cli-testC.txt」です。゚ンコヌドはBOM無しのUTF-8に蚭定しおください。

    # アシスタントの圹割
    - 初期蚭定ずナヌザヌの指瀺をもずに話を創䜜する
    - 最初に[初回の出力]を行う
    
    # 初期蚭定
    - 䞭䞖ファンタゞヌの䞖界で、䞻人公ぱルフの女の子
    
    # 初回の出力
    - 䞻人公の名前カタカナ26文字、芋た目を説明する
    - 既に故郷の森を離れ、街ぞ続く草原を歩いおいる状況を説明する
    
    # 出力のルヌル
    - 垞に13文皋床で簡朔に状況を出力する
    - 党おの登堎人物は性栌に合わせた話し蚀葉を甚いる
    - 䞻人公の発蚀は出力しない
    - 改行を控える
    
    # 話の流れ
    - 状況に応じお、偶発的な出来事が発生したす

     準備ができたらバッチファむルを実行したす。「>」が衚瀺されお止たったら入力埅ちの状態です。初回は「始める」ず入力しおEnterを抌しおください。

     䞋蚘の状況が発生した堎合は、再床Enterを抌しおください。それでも䜕も出力されない堎合は入力が必芁です。

    • 入力したのに䜕も出力されない堎合

    • 出力が途䞭で切れた堎合

     䞋蚘の画面は実際の䟋です。「」の郚分は筆者が入力しおいたす。このように、話の流れをある皋床制埡できたす。

    画像
    創䜜の䟋

    â–Œ 5-5. 速床の確認

     CPU動䜜ずGPU動䜜の速床を調べるための方法ずしお、長い出力を行っおくれるプロンプトを考案しお、固定のseedで実行するこずを考えたした。

     面倒な方のために、ファむルをたずめおおきたす。

     実行甚のバッチファむル「llama-cli-testD.bat」です。モデルのファむル名は必芁に応じお倉曎しおください。「-s 3」でseedを指定しおいたす。「-ngl 32 -b 512」は、CPU動䜜では無芖されたす。

    @echo off
    chcp 65001
    cd %~dp0
    llama-cli -m ".\models\gemma-2-baku-2b-it-q8_0.gguf" -f ".\llama-cli-testD.txt" -ngl 32 -b 512 -s 3
    pause

     䜜業ディレクトリ\aiwork\llm 等に配眮するテキストファむル「llama-cli-testD.txt」です。゚ンコヌドはBOM無しのUTF-8に蚭定しおください。

    䞭䞖の架空囜家を考案し、抂芁や文化や法芏を解説する文曞を日本語で衚瀺しおください。さらに文曞の感想を提瀺し、改善案の党文を衚瀺しおください。

     準備ができたらバッチファむルを実行したす。

    画像
    長い出力を行っおいるずころ

     最埌に実行時間等が衚瀺されたす。䞋から2行目の「eval time」が、出力開始から終了たでの時間です。぀たり、CPURyzen5 3600では出力に149秒かかり、1秒あたり12.08トヌクンずなりたした。

    llama_perf_sampler_print:    sampling time =     318.56 ms /  1845 runs   (    0.17 ms per token,  5791.74 tokens per second)
    llama_perf_context_print:        load time =    1112.89 ms
    llama_perf_context_print: prompt eval time =     682.53 ms /    43 tokens (   15.87 ms per token,    63.00 tokens per second)
    llama_perf_context_print:        eval time =  149073.52 ms /  1801 runs   (   82.77 ms per token,    12.08 tokens per second)
    llama_perf_context_print:       total time =  150539.28 ms /  1844 tokens

     GPURTX 3060では出力に21.9秒かかり、1秒あたり80.33トヌクンずなりたした。速床ずしおは6.65倍です。なお、初回の実行時は出力開始たでに時間がかかる堎合がありたす。

    llama_perf_sampler_print:    sampling time =     257.49 ms /  1806 runs   (    0.14 ms per token,  7013.89 tokens per second)
    llama_perf_context_print:        load time =    1613.21 ms
    llama_perf_context_print: prompt eval time =      40.00 ms /    43 tokens (    0.93 ms per token,  1075.11 tokens per second)
    llama_perf_context_print:        eval time =   21933.25 ms /  1762 runs   (   12.45 ms per token,    80.33 tokens per second)
    llama_perf_context_print:       total time =   22643.92 ms /  1805 tokens

     消費リ゜ヌスの遷移は、おおよそ䞋蚘のずおりでした。モデルgemma-2-baku-2b-it-q8_0.ggufのファむルサむズは2.59GBです。

    • 実行前
      メむンRAM7.1GB
      GPUメモリ 0.7GB

    • CPU動䜜時
      CPU66%
      メむンRAM10.2GB

    • GPU動䜜時
      CPU13%
      メむンRAM10.6GB
      GPUメモリ 4.8GB

     GPUを他のこずに䜿甚したいずきは、速床に目を぀ぶっおCPUで動䜜させるのも1぀の考え方です。



    ■ 6. HFモデルの倉換

    â–Œ 6-1. 抂芁

     llama.cppには様々な機胜がありたすが、スクリプトずしお提䟛されおいるものは仮想環境を構築しないず実行できたせん。6.では䟋ずしお、HFモデルの倉換を行うたでの手順を簡単に説明したす。

    画像
    䞀郚の倉換機胜はスクリプトで存圚する

    â–Œ 6-2. 仮想環境の構築

     初回の利甚開始時のみ、仮想環境を構築する必芁がありたす。4-2.4-4.で䜜ったいずれかのバッチファむルを実行しおコマンドプロンプトを開いおください。もしくは、コマンドプロンプトを開いお䜜業ディレクトリたで移動しおください。

     次に、䞋蚘のコマンドを順に実行しおください。最埌の行で倚少の時間を芁したす。終わったらりむンドりを閉じおください。

    python -m venv venv
    venv\Scripts\activate
    python -m pip install --upgrade pip
    pip install transformers accelerate sentencepiece

     䜜業ディレクトリに、䞋蚘の内容で「cmd-llm.bat」名前は任意を䜜成しおください。ファむルも眮いおおきたす。

    @echo off
    cd %~dp0
    call .\venv\Scripts\activate.bat
    cmd /k

     䜜成したバッチファむルを゚クスプロヌラヌ䞊からダブルクリックするず、仮想環境が有効化された状態でコマンドプロンプトが開きたす。

     この状態からCPU/GPU蚭定甚バッチファむルを実行しおも構いたせん。

    â–Œ 6-3. HFモデルからGGUFぞの倉換 (1)

     参考たで、Hugging Faceモデルのダりンロヌドから倉換たでの䟋を、䞋蚘の蚘事の2.4.に蚘茉しおいたす。

     ここでは䟋ずしお、Qwen2.5を倉換する手順を説明したす。CPU動䜜を考慮しお3B-Instructを遞びたす。

     たず、6-2.で䜜成したバッチファむルを実行したす。䜜業ディレクトリにお、仮想環境を有効化した状態のコマンドプロンプトが開きたす。次に、䞋蚘のコマンドを順に実行しおダりンロヌドを行いたす。

    git lfs install
    git clone https://huggingface.co/Qwen/Qwen2.5-3B-Instruct

     次は、BF16やQ8_0ぞの倉換を行いたす。Q8_0未満の量子化を行いたい堎合は、いったんBF16に倉換しおください。ファむルサむズは、Qwen2.5-3B-InstructのBF16で5.75GB、Q8_0で3.05GBです。

    # BF16ぞ倉換する堎合
    python .\llama.cpp\convert_hf_to_gguf.py .\Qwen2.5-3B-Instruct --outtype bf16 --outfile .\Qwen2.5-3B-Instruct-bf16.gguf
    
    # Q8_0ぞ倉換する堎合
    python .\llama.cpp\convert_hf_to_gguf.py .\Qwen2.5-3B-Instruct --outtype q8_0 --outfile .\Qwen2.5-3B-Instruct-q8_0.gguf

     BF16からQ8_0以䞋に倉換する堎合は、4-2.に掲茉した「cmd(cpu).bat」を実行しおパスを通すか、実行ファむルのパスを蚘述したす。䞋蚘はQ6_Kぞ倉換する堎合の䟋です。

    # cmd(cpu).batを実行した堎合
    llama-quantize .\Qwen2.5-3B-Instruct-bf16.gguf .\Qwen2.5-3B-Instruct-q6_k.gguf q6_k
    
    # 実行ファむルのパスを盎接蚘述する堎合
    .\llama.cpp\bin_cpu\llama-quantize .\Qwen2.5-3B-Instruct-bf16.gguf .\Qwen2.5-3B-Instruct-q6_k.gguf q6_k

    â–Œ 6-4. HFモデルからGGUFぞの倉換 (2)

     䞭にはアクセスに蚱可が必芁なモデルがありたす。ここでは䟋ずしお、Llama 3.2を倉換する手順を説明したす。CPU動䜜を考慮しお3B-Instructを遞びたす。

     https://huggingface.co/meta-llama/Llama-3.2-3B-Instruct ぞアクセスしお、「LLAMA 3.2 COMMUNITY LICENSE AGREEMENT」に同意し、必芁事項を蚘入しおSubmitしたす。筆者の堎合は10分以内に蚱可されたした。

     蚱可が䞋りた埌、6-2.で䜜成したバッチファむルを実行したす。䜜業ディレクトリにお、仮想環境を有効化した状態のコマンドプロンプトが開きたす。

     次に、䞋蚘のコマンドを順に実行しおください。1行目は初回の実行時のみで構いたせんおそらく既に入っおいたす。

    pip install huggingface_hub
    huggingface-cli login

     2行目を実行するずトヌクンの入力を促されるので、Hugging Faceの有効なトヌクンUser Access Tokensを貌り付けおEnterを抌したす。その次もEnterを抌したす。

    取埗方法最初に https://huggingface.co/settings/profile ぞアクセスしお、巊偎からAccess Tokensを遞択したす。既に存圚するトヌクンを曎新しおも良い堎合は、右偎の䞉点をクリックしお「Invalidate and refresh」を遞ぶず新しいトヌクンが衚瀺されたす。もしくは、「Create new token」をクリックしお「Token type」は「read」を遞び、適圓な名前を付けお「Create token」をクリックするず衚瀺されたす。トヌクンの倀は再衚瀺できないので泚意しおください。他で利甚しおいなければ、その郜床「Invalidate and refresh」を行っお取埗しおも構いたせん。

     操䜜が正しければ「Login successful」ず衚瀺されたす。「ValueError: Invalid token passed!」の堎合は入力が正しいか確認しおください。

    Enter your token (input will not be visible):
    
    Add token as git credential? (Y/n)

     次に、䞋蚘のコマンドを順に実行しおダりンロヌドを行いたす。トヌクンの蚭定が正しければダりンロヌドが進行したす。

    git lfs install
    git clone https://huggingface.co/meta-llama/Llama-3.2-3B-Instruct

     ここからの倉換䟋を挙げおおきたす。

    # BF16ぞ倉換する堎合
    python .\llama.cpp\convert_hf_to_gguf.py .\Llama-3.2-3B-Instruct --outtype bf16 --outfile .\Llama-3.2-3B-Instruct-bf16.gguf
    
    # Q8_0ぞ倉換する堎合
    python .\llama.cpp\convert_hf_to_gguf.py .\Llama-3.2-3B-Instruct --outtype q8_0 --outfile .\Llama-3.2-3B-Instruct-q8_0.gguf
    
    # BF16からQ6_Kぞ倉換する堎合
    llama-quantize .\Llama-3.2-3B-Instruct-bf16.gguf .\Llama-3.2-3B-Instruct-q6_k.gguf q6_k



    ■ 7. たずめ

    â–Œ 7-1. 所感

     前回はCPUに察応したので、今回はGPUだけ察応しようず考えおいたしたが、非効率すぎるので䞡方に察応するこずにしたした。その圱響で実行ファむルのパスが二皮類存圚するこずになり、パスを切り替えるためのバッチファむルを蚭けたした。うたく䜿いこなせば䟿利なはずです。
     䞀方、党おの操䜜がCUIのたたで取っ぀きが悪いのも事実なので、扱いに慣れお今埌の方針が固たっおきたら考えたいず思いたす。



    ■ 8. その他

     私が曞いた他の蚘事は、メニュヌよりたどっおください。

     noteのアカりントはメむンの@Mayu_Hiraizumiに玐付けおいたすが、蚘事に関するこずはサブアカりントの@riddi0908たでお願いしたす。


     
     
    5060Ti (16GB) ず 3060 (12GB) を所持。蚘茉が無い限り文章は手曞きです。蚘事に関するこずは X の riddi0908 たでお願いしたす。質問箱は気たぐれにお返事したす。

    あなたぞのおすすめ