
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圢åŒã«å€æããïŒçŸåšãã¡ããäž»æµã®ããä»ã®åœ¢åŒã¯å²æïŒã
ã䜿çšããã¢ãã«ãšããŠäžèšãéžã³ãŸããã
rinnaïŒGemma 2 Baku 2B InstructïŒrinna/gemma-2-baku-2b-itïŒ
æ¬èšäºã§ã¯ãåäœç¢ºèªã«ãã¡ããå©çšããŸããQwenïŒQwen2.5-3B-InstructïŒQwen/Qwen2.5-3B-InstructïŒ
GGUF圢åŒãžã®å€æå ãšããŠå©çšããŸããMETAïŒLlama-3.2-3B-InstructïŒmeta-llama/Llama-3.2-3B-InstructïŒ
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ãã®ã倿Žããã¯ãªãã¯ãããšé·ç§»ããŸãã

⌠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ããã£ã¬ã¯ããªãåé€ããŸãã

ãã³ãã³ãããã³ããã¯ããã®ãŸãŸåå©çšããŠãéããŠãæ§ããŸããã以éã®äœæ¥ã¯åŸã§è¡ãããšãã§ããŸãã
⌠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ããã£ã¬ã¯ããªãåé€ããŸãã

ãã³ãã³ãããã³ããã¯ããã®ãŸãŸåå©çšããŠãéããŠãæ§ããŸããã以éã®äœæ¥ã¯åŸã§è¡ãããšãã§ããŸãã
⌠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.7GBCPUåäœæ
CPUïŒ66%
ã¡ã€ã³RAMïŒ10.2GBGPUåäœæ
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ãŸã§ãé¡ãããŸãã