llama-perplexityã§ãã°çºçã³ããããç¹å®ããŠã¿ã ïœllama.cpp ROCmã§LLMå£åã¯b10040?ïœ
ããã«ã¡ã¯Rcatã§ãã
äžèšã®ä»¶ã§ãçŸåšç§ã®ç°å¢ã§ã¯ROCmãã«ãã®llama.cppã§AIãšãŒãžã§ã³ããå®è¡ãããšåºåãå£åããŠé ããããæªããªããŸãã
Vulkanã«éããããšã§æ«å®å¯Ÿçäžã§ãããããã©ãŒãã³ã¹ãèãããšROCmã«è»é
ãäžãããŸãã
ããã§ããããããã®éåæã¯æ°å€ãšããŠåºãããã®ãªã®ã?åºããšãããçºçæºãç¹å®ã§ããã®ã?
ã¡ãã£ãšé 匵ã£ãŠã¿ãã®ã§èšäºã«ããŸãã
ã¯ããã«
å©çšèŠçŽ
æ å ±ãäœåã®æŽ»çšæã¯äºåã«å©çšèŠçŽãã確èªãã ããã
ã³ã¡ã³ãã«ã€ããŠ
å©çšèŠçŽã®ã¬ã€ãã©ã€ã³ã確èªã®äžã³ã¡ã³ãããŠãã ããã
åã£ãŠããªãã³ã¡ã³ãã¯åé€ããŸãã
æŠèŠ
llama-perplexityãšã¯
llama-perplexityã¯ãã¢ãã«ãéååããéã«ã©ã®çšåºŠå£åããã®ããæ°å€ã§èŠãããã®ããŒã«ã§ãã
llama.cppããã«ããããšå
¥ã£ãŠããŸãã
å
ã®BF16,éååã®Q8ãQ4ãªã©ã§åããŠãã®æ°å€ãæ¯èŒããŸãã
Geminiã«èãããšãããäžè¬çã«5ïœ15çšåºŠã®å€ã«ãªãããã§ãã
詊éšå 容ãšããŠã¯ãå ¥åããããã¹ããã©ããŸã§æ£ç¢ºã«äºæž¬ã§ãããã ããã§ãã
æ€èšŒ
wikitext2-rawãæã«å ¥ãã
ãµã³ããªã³ã°ããŒã¿ãšããŠãæšæºçãªwikitext2-rawã®ããã¹ããååŸããŸãã
llama.cppã®ãã©ã«ãã®äžã«scriptsãšãããã©ã«ããããããã®äžã®`get-wikitext-2.sh`ãå®è¡ããã ãã§æã«å ¥ããŸãã
rcat@rcat-EVO-X2:~/tmp$ ./get-wikitext-2.sh
ã¡ãªã¿ã«wgetãcurlãèŠãã®ã§ãã³ã³ãããšããŠåãããŠããç¶æ ã§ã¯ç¡çã ã£ãã®ã§ãã¹ã¯ãªããã ãåŒã£ãæããŠãã¹ããã·ã³ã§èµ°ãããŸãã
å®è¡(ROCm)
ãšããããROCmãšVulkanã§ã®å·®ç°ãèŠããã®ã§ãã¢ãã«ã¯è»œéã®ãã€ã§è¡ããŸãã
root@rcat-EVO-X2:/app/llama.cpp/build/bin# ./llama-perplexity -m /opt/models/Qwen3.6-35B-A3B-UD-IQ4_NL.gguf -f /opt/models/wikitext-2-raw/wiki.test.raw -c 32768 -ngl 999
0.02.814.025 I cmn init: llama threadpool init, n_threads = 16
0.02.905.619 I
0.02.905.743 I system_info: n_threads = 16 (n_threads_batch = 16) / 32 | ROCm : NO_VMM = 1 | CPU : SSE3 = 1 | SSSE3 = 1 | AVX = 1 | AVX_VNNI = 1 | AVX2 = 1 | F16C = 1 | FMA = 1 | BMI2 = 1 | AVX BF16 = 1 | LLAMAFILE = 1 | OPENMP = 1 | REPACK = 1 |
0.02.905.765 I perplexity: tokenizing the input ..
0.03.392.787 I perplexity: tokenization took 487.008 ms
0.03.392.939 I perplexity: calculating perplexity over 9 chunks, n_ctx=32768, batch_size=2048, n_seq=1
1.03.316.748 I perplexity: 59.92 seconds per pass - ETA 8.98 minutes
[1]1890.2290,[2]2906.1400,[3]3002.3720,[4]3046.2892,[5]3111.8808,[6]3060.3074,[7]3062.7044,[8]3182.3452,[9]3236.7434,
8.58.296.601 I Final estimate: PPL = 3236.7434 +/- 59.07391PPLãçµæã§ã5ïœ15ãæ®éã§ããã£ã?
ã ã ã ã 㣠㊠㪠ã«
å®è¡(Vulkan)
ãšããããåã®çµæã¯ã¬ã³ç¡èŠããŠãVulkanã®ã³ã³ããã«åãæ¿ããŠå床å®è¡
root@rcat-EVO-X2:/app/llama.cpp/build/bin# ./llama-perplexity -m /opt/models/Qwen3.6-35B-A3B-UD-IQ4_NL.gguf -f /opt/models/wikitext-2-raw/wiki.test.raw -c 32768 -ngl 999 --no-mmap
0.00.043.262 W DEPRECATED: --mmap and --no-mmap are deprecated. use --load-mode mmap instead
0.02.126.467 I cmn init: llama threadpool init, n_threads = 16
0.02.156.990 I
0.02.157.059 I system_info: n_threads = 16 (n_threads_batch = 16) / 32 | CPU : SSE3 = 1 | SSSE3 = 1 | AVX = 1 | AVX2 = 1 | F16C = 1 | FMA = 1 | BMI2 = 1 | AVX512 = 1 | AVX512_VBMI = 1 | AVX512_VNNI = 1 | AVX512_BF16 = 1 | LLAMAFILE = 1 | OPENMP = 1 | REPACK = 1 |
0.02.157.081 I perplexity: tokenizing the input ..
0.02.619.763 I perplexity: tokenization took 462.669 ms
0.02.619.891 I perplexity: calculating perplexity over 9 chunks, n_ctx=32768, batch_size=2048, n_seq=1
1.02.094.974 I perplexity: 59.48 seconds per pass - ETA 8.92 minutes
[1]6.1041,[2]6.0178,[3]6.3360,[4]6.0747,[5]6.0153,[6]6.3637,[7]6.3311,[8]6.2066,[9]6.1368,
8.53.140.381 I Final estimate: PPL = 6.1368 +/- 0.03836ãã¡ãã¯6ãªã®ã§æ£åžžç¯å²å ããã? ãããã?
ããäžåºŠ
IQ4ãšããç¹æ®ãªéååãïœãšGeminiãèšã£ãŠããã®ã§ããšããããQ4K_Mã®æ¹ãæã£ãŠããŸããã
Vulkan
ãŸã6ã§ãã
root@rcat-EVO-X2:/app/llama.cpp/build/bin# ./llama-perplexity -m /opt/models/Qwen3.6-35B-A3B-UD-Q4_K_M.gguf -f /opt/models/wikitext-2-raw/wiki.test.raw -c 32768 -ngl 999
0.02.670.119 I cmn init: llama threadpool init, n_threads = 16
0.02.752.512 I
0.02.752.587 I system_info: n_threads = 16 (n_threads_batch = 16) / 32 | CPU : SSE3 = 1 | SSSE3 = 1 | AVX = 1 | AVX2 = 1 | F16C = 1 | FMA = 1 | BMI2 = 1 | AVX512 = 1 | AVX512_VBMI = 1 | AVX512_VNNI = 1 | AVX512_BF16 = 1 | LLAMAFILE = 1 | OPENMP = 1 | REPACK = 1 |
0.02.752.608 I perplexity: tokenizing the input ..
0.03.225.597 I perplexity: tokenization took 472.975 ms
0.03.225.729 I perplexity: calculating perplexity over 9 chunks, n_ctx=32768, batch_size=2048, n_seq=1
1.02.977.945 I perplexity: 59.75 seconds per pass - ETA 8.95 minutes
[1]6.0508,[2]5.9490,[3]6.2369,[4]5.9855,[5]5.9249,[6]6.2735,[7]6.2098,[8]6.0934,[9]6.0270,
8.53.406.499 I Final estimate: PPL = 6.0270 +/- 0.03758ROCm
ã ã ã ã 㣠㊠㪠ã«
root@rcat-EVO-X2:/app/llama.cpp/build/bin# ./llama-perplexity -m /opt/models/Qwen3.6-35B-A3B-UD-Q4_K_M.gguf -f /opt/models/wikitext-2-raw/wiki.test.raw -c 32768 -ngl 999
0.03.796.326 I cmn init: llama threadpool init, n_threads = 16
0.03.890.932 I
0.03.891.061 I system_info: n_threads = 16 (n_threads_batch = 16) / 32 | ROCm : NO_VMM = 1 | CPU : SSE3 = 1 | SSSE3 = 1 | AVX = 1 | AVX_VNNI = 1 | AVX2 = 1 | F16C = 1 | FMA = 1 | BMI2 = 1 | AVX512 = 1 | AVX512_VBMI = 1 | AVX512_VNNI = 1 | AVX512_BF16 = 1 | LLAMAFILE = 1 | OPENMP = 1 | REPACK = 1 |
0.03.891.081 I perplexity: tokenizing the input ..
0.04.371.301 I perplexity: tokenization took 480.206 ms
0.04.371.436 I perplexity: calculating perplexity over 9 chunks, n_ctx=32768, batch_size=2048, n_seq=1
1.03.418.629 I perplexity: 59.05 seconds per pass - ETA 8.85 minutes
[1]1962.8753,[2]3092.0829,[3]3183.6765,[4]3191.3942,[5]3233.6071,[6]3193.9506,[7]3190.0359,[8]3317.2313,[9]3385.6207,
8.51.056.923 I Final estimate: PPL = 3385.6207 +/- 62.36581å€ããããROCmããããã
ãã®åŸãMoE以å€ã®Qwen3.5 9Bãšããã£ãšå€ãQwen2.5ãšãæã£ãŠããŸããããå€ãããROCmã¯3000å°ããããåºããŸãã
åžæã®å ãèŠãã?
ããããªãã®ã§ããœãŒã¹ãå
šéšAIã«é£ãããŠèšºæããŠããã£ãŠããŸãã
ãã®ãã¡ã«ãããã£ãŠã¿ãŠãšèšãããã³ãã³ãããããŸãã
ã³ã³ããã¹ãé·ã§ãããããå€ããŠãã£ãŠã¿ããšããã512ã®æã ãæšæºçãªæ°å€ãåºãŸããããã以é倧ãããªããšãŸãå£ããŠãããŸãã
# for C in 512 2048 8192 16384 32768; do echo "=== c=$C ==="; ./llama-perplexity -m $M -f $F -c $C -ngl 999 --chunks 1; done
=== c=512 ===
0.01.330.984 I cmn init: llama threadpool init, n_threads = 16
0.01.406.503 I
0.01.406.654 I system_info: n_threads = 16 (n_threads_batch = 16) / 32 | ROCm : NO_VMM = 1 | CPU : SSE3 = 1 | SSSE3 = 1 | AVX = 1 | AVX_VNNI = 1 | AVX2 = 1 | F16C = 1 | FMA = 1 | BMI2 = 1 | AVX512 = 1 | AVX512_VBMI = 1 | AVX512_VNNI = 1 | AVX512_BF16 = 1 | LLAMAFILE = 1 | OPENMP = 1 | REPACK = 1 |
0.01.406.676 I perplexity: tokenizing the input ..
0.01.874.206 I perplexity: tokenization took 467.516 ms
0.01.874.321 I perplexity: calculating perplexity over 1 chunks, n_ctx=512, batch_size=2048, n_seq=4
0.02.200.636 I perplexity: 0.33 seconds per pass - ETA 0.00 minutes
[1]6.1261,
0.02.213.682 I Final estimate: PPL = 6.1261 +/- 1.03751ããå£ããªãã£ããä»åºŠã¯ããããèŠãŠã¿ãŠããšãèšãããã®ã§ããããããã£ããšãããbãšubãæããæã¯å£ããæ°å€ãåºãªãããšãããããŸããã
# ./llama-perplexity -m $M -f $F -c 32768 -ngl 999 --chunks 1 -b 2048 -ub 2048
0.01.469.298 I cmn init: llama threadpool init, n_threads = 16
0.01.540.822 I
0.01.540.943 I system_info: n_threads = 16 (n_threads_batch = 16) / 32 | ROCm : NO_VMM = 1 | CPU : SSE3 = 1 | SSSE3 = 1 | AVX = 1 | AVX_VNNI = 1 | AVX2 = 1 | F16C = 1 | FMA = 1 | BMI2 = 1 | AVX512 = 1 | AVX512_VBMI = 1 | AVX512_VNNI = 1 | AVX512_BF16 = 1 | LLAMAFILE = 1 | OPENMP = 1 | REPACK = 1 |
0.01.540.964 I perplexity: tokenizing the input ..
0.02.012.875 I perplexity: tokenization took 471.898 ms
0.02.013.010 I perplexity: calculating perplexity over 1 chunks, n_ctx=32768, batch_size=2048, n_seq=1
0.39.878.318 I perplexity: 37.87 seconds per pass - ETA 0.62 minutes
[1]10.8289,
0.40.613.967 I Final estimate: PPL = 10.8289 +/- 0.24102llama.cppã¯ããã©ã«ãã ãšub=512,b=2048ã§ãããããµã€ãºãå€ããŠã人ã§ãubãŸã§ã¯ãããŸãå€ããŠãªãããšæããŸãã
ã€ãŸãubãšããããšããããŠåºåãå£ããã
å£ããã³ãããã®ç¹å®
ç¹å®éå§
ãããããšè©Šããçµæãclaudeã¯å°œãããããã³ããããç¹å®ãããšèšã£ãŠããŸããw
äžèšãããã£ãã®ã§ããããåãç¶ããŠã³ããããæ¢ããŸãã
cat > /app/bisect.sh <<'EOF'
#!/bin/bash
cd /app/llama.cpp
cmake -B build-bs -DGGML_HIP=ON -DGPU_TARGETS=gfx1151 -DCMAKE_BUILD_TYPE=Release \
-DCMAKE_C_COMPILER_LAUNCHER=ccache -DCMAKE_CXX_COMPILER_LAUNCHER=ccache >/dev/null 2>&1 || exit 125
cmake --build build-bs --target llama-perplexity -j$(nproc) >/dev/null 2>&1 || exit 125
PPL=$(./build-bs/bin/llama-perplexity -m /opt/models/llama-3.2-3b-q4_0.gguf \
-f /opt/models/wikitext-2-raw/wiki.test.raw -c 32768 -ngl 999 --chunks 1 2>&1 \
| grep -oP 'Final estimate: PPL = \K[0-9.]+')
echo "PPL=$PPL"
[ -z "$PPL" ] && exit 125
awk -v p="$PPL" 'BEGIN { exit (p < 100) ? 0 : 1 }'
EOF
chmod +x /app/bisect.sh倧éæãªæéã倿
7/15ïœ7/21ã®ã©ããã§å£ããŠã
7/1
/app/llama.cpp# git checkout b9850
/app/llama.cpp# /app/bisect.sh
PPL=7.7197
8/1
/app/llama.cpp# git checkout b10217
/app/llama.cpp# /app/bisect.sh
PPL=3008.9946
7/15
/app/llama.cpp# git checkout b10007
/app/llama.cpp# /app/bisect.sh
PPL=7.7241
7/21
/app/llama.cpp# git checkout b10075
/app/llama.cpp# /app/bisect.sh
PPL=3016.7824çµã蟌ã¿
ãšããããã§ã³ãããã¡ãã»ãŒãžãé£ãããŠæªããããªã³ããããçµããŸãã
Qwen3.6ã«é£ãããŠã£ãšâŠ 3.8?ããã¯éãããç¡çã
## b10007ãb10075 ç¯å²ã®ROCmé¢é£ã³ãããäžèЧ
### ãæåªå
ãROCm/HIPçŽæ¥é¢é£
| ã³ãããããã·ã¥ | 説æ |
|------------------|------|
| `c7d872292` | **ggml-cuda: restore prop.integrated on HIP builds (#24233)** â AMD APU/UMA Partsã®HIPãã«ãã§`prop.integrated`ããããã£ã埩å
ããã®ã³ãããããªããšãROCmã§çµ±åGPUãã¹ããããã¡äœ¿çšæã«äžå
·åãçºçãã |
### ãé«åªå
床ãCUDAç³»ïŒHIPãšå
±ééšåãå€ãïŒ
| ã³ãããããã·ã¥ | 説æ |
|------------------|------|
| `79bba02a6` | CUDA: Support CUDA Virtual Devices (#25228) |
| `5839ba352` | CUDA: dedup MoE gate/up activation quantization (#25441) |
| `f6f12e43f` | CUDA: tighter MMQ src1 buffer size for native fp4 (#25613) |
### ãäžåªå
åºŠãæŒç®ã»ã³ã¢å€æŽ
| ã³ãããããã·ã¥ | 説æ |
|------------------|------|
| `7d56da7e5` | sync : ggml (ggml/1568) â ggmlãµãã¢ãžã¥ãŒã«ã®åæ |
| `372740406` | ggml: bump version to 0.17.0 (ggml/1568) |
| `0dc74e332` | DeepseekV4: Add fused hyper-connection ops (#25585) |
| `f955e394b` | ggml: add f16 out_prod support for CPU and out_prod op for Vulkan (#23997) |
| `3f08ef2c5` | Enable CUDA graphs on volta+turing (#25749) |
| `602f828b4` | cuda: extract Q1_0 elements via __byte_perm (#25628) |
| `3b5321936` | CUDA: GGML_OP_LIGHTNING_INDEXER implementation (#25545) |
| `a3e5b96ac` | cuda: relax tensor contiguity requirements for quantized concat (#25678) |
| `56d6e9dde` | quant: allow using manual tensor types with --pure (#25716) |
### ãäœåªå
床ãOpenCL/ãã®ä»ã®GPUé¢é£
| ã³ãããããã·ã¥ | 説æ |
|------------------|------|
| `b85833e93` | opencl: add ABS op (#25115) |
| `76f46ad29` | hexagon: add CLAMP op (#25934) |
---
## æãçãããã³ããã
**[`c7d872292`](cc7d872292:ggml/src/ggml-cuda/ggml-cuda.cu)** â HIP/ROCmã®`prop.integrated`ããããã£ã«é¢ããä¿®æ£ã§ãããã®ã³ãããã¡ãã»ãŒãžã«ãããšããããŸã§CUDA/HIPããã€ã¹ãåºå¥ããã«`integrated = false`ãšããŠããã®ãåå ã§ãAMD APU/UMA Partsã§ãã¹ããããã¡äœ¿çšæã«äžå
·åãçºçããŠããŸãããROCmããã¯ãšã³ãã§æšè«ãå£ããçç¶ã«æãçŽçµããå¯èœæ§ããããŸãã
次ã«çãããã®ã¯**[`7d56da7e5`](7d56da7e5)** ã®ggmlåæã³ãããã§ãããµãã¢ãžã¥ãŒã«ã®å€æŽã¯ã³ã¢æŒç®ã«åœ±é¿ããå¯èœæ§ããããŸãããã³ãŽ!
b10040ã³ãããã§å£ããŠã
/app/llama.cpp# git checkout b10040
/app/llama.cpp# /app/bisect.sh
PPL=3024.3587
/app/llama.cpp# git checkout b10038
/app/llama.cpp# /app/bisect.sh
PPL=7.7241
#(b10039ã¯ãªãã®ã§ããã·ã¥ã§)
/app/llama.cpp# git checkout 5839ba352471b2a7b45e7ba401619a6896f10f8b
/app/llama.cpp# /app/bisect.sh
PPL=7.7241念ã®ããä»ã®æ®µéã§æ²»ã£ãŠããèŠã
âæ²»ã£ãŠãªã
/app/llama.cpp# git switch master
/app/llama.cpp# git pull
/app/llama.cpp# git log
commit bb4caa7540188872173c44d161602d9271386413 (HEAD -> master, origin/master, origin/HEAD)
Author: Georgi Gerganov <ggerganov@gmail.com>
Date: Fri Aug 21 15:01:24 2026 +0300
llama.cpp : bump version to 0.2.0 (#27498)
...
/app/llama.cpp# /app/bisect.sh
PPL=2177.3497ãŸãšã
ä»åã¯æšè«ã®éåæãããã°çºçã®ç¹å®ãŸã§ãè¡ããŸããã
Arduinoã¬ãã«ããCã¯ã§ããªãã®ã§ãã以äžã®è¿œåã¯äžå¯èœã§ãããã²ãšãŸãæ€èšŒçµæ(b10040ã³ãããã§ç Žæããã)ããšã¯å ±åããŠããããšæããŸãã
ã³ãŒãæäŸã§ããªããã©ãçç¶ãšãã®åé¡ãçºçããã³ããããŸã§çªãæ¢ããã°å ±åããŠã倧äžå€«ã ããâŠ? PPLã£ãŠããåãã¬æ°å€ããããã
æ²»ã£ãŠããããšãããªãã
ãªã³ã¯é
ææ³æçš¿ãã©ãŒã
ã³ã¡ã³ãã¯å ¬éã§æ¥ãããã!! Rcatã ãã«éããã人åã