รายงานผลการทดสอบ: AMD Radeon RX 9070 XT 16GB กับการรัน Local LLM บน Windows — ประชัน ROCm vs Vulkan บน 8 โมเดล LLM พร้อมทดสอบขีดจำกัด Concurrency
ประเภท: Benchmark · วันที่ทดสอบ: 2026-08-20 · เครื่องมือ: PromptMark v0.4.0 & Concurrent Text Probe v0.2.0 (llama.cpp ROCm b10362 & Vulkan b10182/b10362)
ไฮไลท์และผลการทดสอบสำคัญ
หัวข้อที่มีชื่อว่า “ไฮไลท์และผลการทดสอบสำคัญ”AMD Radeon RX 9070 XT เป็นกราฟิกการ์ดสถาปัตยกรรมรุ่นเรือธงในกลุ่มเกมมิ่งของ AMD บนพื้นฐาน RDNA 4 (gfx1201) ที่มาพร้อมหน่วยความจำ 16GB GDDR6 (บัส 256-bit แบนด์วิดท์ 640 GB/s) ในการทดสอบรอบนี้ เรานำ RX 9070 XT มารันการประเมินผลเชิงลึกทั้งแบบผู้ใช้คนเดียว (Single-User 6 เวิร์กโหลด) และการทดสอบรองรับคำขอพร้อมกันหลายคน (Concurrent Multi-Client สเกลตั้งแต่ 1 ถึง 16 สล็อต) เพื่อค้นหาว่ารันไทม์ระหว่าง ROCm Native บน Windows กับ Vulkan Backend ใครคือผู้ชนะตัวจริง
- Vulkan ดันโมเดล MoE ทะลุ 71+ Tokens/s: สำหรับโมเดลสถาปัตยกรรม Mixture of Experts (MoE) ขนาด 26B และ 35B รันไทม์ Vulkan ทำผลงานได้อย่างยอดเยี่ยม โดยดันความเร็ว Decode สูงสุดถึง 71.34 tokens/s บน
gemma-4-26B-A4B-itและ 71.03 tokens/s บนQwen3.6-35B-A3Bเหนือกว่า ROCm ถึง +14.5% ถึง +40.7% - ROCm ครองอำนาจบนโมเดล Dense แท้ (เหนือกว่าสูงสุด +50%): ในทางกลับกัน เมื่อเปลี่ยนมาทดสอบโมเดลแบบ Dense ที่ต้องคำนวณ Matrix Multiplication เต็มเม็ดเต็มหน่วย ROCm บน Windows คอมไพล์ด้วย Clang 20.1.8 กลับพลิกมาชนะ Vulkan อย่างเด็ดขาด:
Muse-Glimmer-30B-UD: ROCm Decode ทำได้ 33.84 tokens/s เทียบกับ Vulkan ที่ได้เพียง 22.61 tokens/s (ROCm เร็วกว่า +49.7%)Qwen3.8-27B: ROCm Decode อยู่ที่ 20.86 tokens/s เทียบกับ Vulkan 14.85 tokens/s (ROCm เร็วกว่า +40.5%) พร้อมอัตรา Prefill ที่เร็วกว่าถึง +77%
- ความนิ่งของ Prefill บน ROCm (Zero Long-Context Penalty บน 12B): บนโมเดล
gemma-4-12B-itROCm รักษาความเร็ว Prefill ได้เฉลี่ย 1,880 – 1,985 tokens/s ตั้งแต่บริบท 512 ไปจนถึง 8,192 โทเค็นโดยแทบไม่สูญเสียความเร็ว ขณะที่ Vulkan เกิดการถดถอยอย่างรุนแรงจาก 1,363 tokens/s ร่วงลงเหลือ 711 tokens/s เมื่อเจอบริบท 8K (ช้ากว่า ROCm เกือบ 2.6 เท่าตัว) - กำแพง 16GB VRAM Boundary Wall (
gemma-4-31B-it): ด้วยขนาด VRAM 16,304 MiB โมเดล Dense ขนาด 31B ควอนไทซ์ Q4_K_M ไม่สามารถบรรจุลง VRAM ได้ครบ 100% ร่วมกับ Context 12K ส่งผลให้เกิดการ Spillover ข้ามบัสระบบ ความเร็ว Decode จึงลดฮวบลงมาเหลือเพียง 7.45 – 9.34 tokens/s เป็นเครื่องยืนยันว่า VRAM 16GB เหมาะกับ Dense ไม่เกิน 27B–30B - ความพร้อมของ NVFP4 บน RDNA 4: สถาปัตยกรรม RDNA 4 รองรับฟอร์แมตควอนไทซ์สุดล้ำอย่าง NVFP4 (
NVIDIA-Nemotron-3.5-Lightning-30B-A3B-NVFP4) ได้อย่างราบรื่นทั้ง ROCm (Decode นิ่งสนิทที่ 55.67 tokens/s ตลอดทุกความยาวบริบท) และ Vulkan (47.94 tokens/s) โดยไม่เกิดปัญหาแครช - การรับโหลดพร้อมกัน 16 ผู้ใช้ (16-Slot Multi-Tenant Serving): ในการทดสอบเซิร์ฟเวอร์ด้วย Context รวม 65,536 tokens (16 slots × 4K) การ์ด RX 9070 XT ใบเดียวสามารถสร้าง Throughput รวมได้สูงถึง 66.48 tokens/s บน Vulkan และรักษา Throughput ต่อผู้ใช้ไว้ที่ราว 5.0 – 6.0 tokens/s แม้จะโดนรุมยิงคำขอพร้อมกัน 16 งาน
สภาพแวดล้อมและวิธีทดสอบ
หัวข้อที่มีชื่อว่า “สภาพแวดล้อมและวิธีทดสอบ”การทดสอบนี้ดำเนินการบนเครื่องพีซีปฏิบัติการ Windows 11 Pro โดยใช้ซอฟต์แวร์มาตรฐานสำหรับการวัดประสิทธิภาพ LLM
| รายการ | รายละเอียดการตั้งค่าฮาร์ดแวร์และซอฟต์แวร์ |
|---|---|
| GPU | 1× AMD Radeon RX 9070 XT |
| สถาปัตยกรรม GPU | RDNA 4 (gfx1201), Compute Units 64 CUs (4,096 Stream Processors), 128 AI Accelerators |
| หน่วยความจำ VRAM | 16,304 MiB GDDR6 (บัส 256-bit แบนด์วิดท์สูงสุด 640 GB/s) |
| อินเทอร์เฟซ | PCIe 5.0 / 4.0 x16 |
| ระบบปฏิบัติการ | Windows 11 Pro |
| เครื่องมือทดสอบเดี่ยว | PromptMark v0.4.0 (รัน 6 เวิร์กโหลดมาตรฐาน, 1 Warm-up + 5 Measured Runs แบบ Round-Robin) |
| เครื่องมือทดสอบ Concurrent | Concurrent Text Benchmark v0.2.0 (ทดสอบสเกล Concurrency C=1, 2, 4, 8, 12, 16) |
| รันไทม์ ROCm | llama-server.exe build 10362 (commit 4801e3c56, Clang 20.1.8 for Windows x86_64) |
| รันไทม์ Vulkan | llama-server.exe build 10182 (commit afeebe103) และ build 10362 |
| พารามิเตอร์รันไทม์เดี่ยว | -c 12288 -ngl 999 -np 1 --no-cache-prompt --fit off --device ROCm0 (หรือ Vulkan0) |
| พารามิเตอร์ Concurrent | -c 65536 -ngl 999 -np 16 --no-cache-prompt --metrics --fit off (4,096 tokens context ต่อผู้ใช้) |
| นโยบายแคช | ปิด Prompt Cache (fresh_prompt_cache_off) ทุกการทดสอบเพื่อวัดพลังการคำนวณจริง |
รูปแบบเวิร์กโหลดทั้ง 6 หมวดใน PromptMark
หัวข้อที่มีชื่อว่า “รูปแบบเวิร์กโหลดทั้ง 6 หมวดใน PromptMark”- Content Generation (
content_generation_512): Context 512 tokens / Generation 256 tokens (การเขียนบทความและคอนเทนต์ทั่วไป) - Creative Writing (
creative_writing_512): Context 512 tokens / Generation 512 tokens (งานเขียนวรรณกรรมต่อเนื่องระยะยาว) - Summarization Light (
summary_2k): Context 2,048 tokens / Generation 256 tokens (สรุปอีเมลและบทความสั้น) - Summarization Moderate (
summary_4k): Context 4,096 tokens / Generation 256 tokens (สรุปรายงานและเอกสารวิชาการขนาดกลาง) - Summarization Long (
summary_8k): Context 8,192 tokens / Generation 256 tokens (สรุปเอกสารขนาดยาว วัดบทลงโทษ KV Cache) - Code Analysis (
code_analysis_4k): Context 4,096 tokens / Generation 256 tokens (การวิเคราะห์โครงสร้างโค้ดและตรวจจับบั๊ก)
ผลการทดสอบโดยละเอียด: Single-User Workloads
หัวข้อที่มีชื่อว่า “ผลการทดสอบโดยละเอียด: Single-User Workloads”1. กลุ่มโมเดลสถาปัตยกรรม Mixture of Experts (MoE)
หัวข้อที่มีชื่อว่า “1. กลุ่มโมเดลสถาปัตยกรรม Mixture of Experts (MoE)”โมเดลสถาปัตยกรรม MoE เป็นรูปแบบที่เปิดใช้งานเฉพาะบางพารามิเตอร์ย่อย (Active Parameters) ในระหว่างการสร้างคำ ทำให้มีความเร็ว Decode สูงมากแม้ขนาดพารามิเตอร์รวมจะใหญ่ถึง 26B–35B
1.1 Qwen3.6-35B-A3B-Q4_K_M (Total 35B / Active 3B)
หัวข้อที่มีชื่อว่า “1.1 Qwen3.6-35B-A3B-Q4_K_M (Total 35B / Active 3B)”โมเดล MoE ยอดนิยมขนาด 35B ที่ใช้พารามิเตอร์ประมวลผลจริงเพียง 3B ต่อโทเค็น
| เวิร์กโหลด (Workload) | Context/Gen | Backend | Prompt Speed (t/s) | Decode Speed (t/s) | TTFT (ms) | E2E Latency (ms) |
|---|---|---|---|---|---|---|
| Content Generation | 512 / 256 | ROCm / Vulkan | 833.81 / 1076.34 | 50.47 / 71.03 | 725.0 / 577.7 | 5799.9 / 4185.0 |
| Creative Writing | 512 / 512 | ROCm / Vulkan | 832.85 / 1029.14 | 50.25 / 70.73 | 691.3 / 563.4 | 10873.9 / 7805.3 |
| Summary 2K | 2048 / 256 | ROCm / Vulkan | 909.09 / 1326.02 | 48.93 / 70.64 | 2323.8 / 1607.2 | 7546.8 / 5226.6 |
| Summary 4K | 4096 / 256 | ROCm / Vulkan | 905.67 / 1378.67 | 47.08 / 70.10 | 4541.5 / 3014.8 | 9974.1 / 6669.8 |
| Summary 8K | 8192 / 256 | ROCm / Vulkan | 876.51 / 1388.03 | 43.69 / 69.39 | 9372.8 / 5944.8 | 15229.5 / 9635.8 |
| Code Analysis 4K | 4096 / 256 | ROCm / Vulkan | 899.41 / 1343.21 | 47.09 / 70.04 | 4610.5 / 3241.2 | 10048.9 / 6889.8 |
ข้อสังเกต: Vulkan แสดงความเป็นผู้นำอย่างโดดเด่นบน Qwen3.6-35B โดยทำความเร็ว Decode ได้ถึง 71.03 tokens/s (เร็วกว่า ROCm ที่ทำได้ 50.47 tokens/s ถึง +40.7%) ขณะที่ความเร็ว Prefill ในระดับ 8K context ทำได้ถึง 1,388 tokens/s ส่งผลให้ TTFT ในงานสรุปเอกสาร 8K เร็วกว่า ROCm เกือบ 3.5 วินาที
1.2 Ornith-1.0-35B-Q4_K_M (Total 35B / Active 3B)
หัวข้อที่มีชื่อว่า “1.2 Ornith-1.0-35B-Q4_K_M (Total 35B / Active 3B)”โมเดลสถาปัตยกรรม MoE 35B สำหรับงานวิเคราะห์ขั้นสูง
| เวิร์กโหลด (Workload) | Context/Gen | Backend | Prompt Speed (t/s) | Decode Speed (t/s) | TTFT (ms) | E2E Latency (ms) |
|---|---|---|---|---|---|---|
| Content Generation | 512 / 256 | ROCm / Vulkan | 825.75 / 1058.33 | 50.89 / 69.28 | 726.7 / 585.2 | 5759.4 / 4274.0 |
| Creative Writing | 512 / 512 | ROCm / Vulkan | 828.12 / 1032.77 | 50.67 / 68.72 | 706.6 / 550.9 | 10803.4 / 8004.4 |
| Summary 2K | 2048 / 256 | ROCm / Vulkan | 909.41 / 1308.31 | 49.38 / 66.02 | 2314.1 / 1624.8 | 7499.4 / 5505.6 |
| Summary 4K | 4096 / 256 | ROCm / Vulkan | 914.22 / 1358.72 | 47.61 / 62.17 | 4508.5 / 3039.8 | 9884.6 / 7161.8 |
| Summary 8K | 8192 / 256 | ROCm / Vulkan | 897.08 / 1364.95 | 44.16 / 56.35 | 9159.5 / 6035.4 | 14961.7 / 10578.1 |
| Code Analysis 4K | 4096 / 256 | ROCm / Vulkan | 906.99 / 1334.60 | 47.49 / 62.14 | 4576.9 / 3250.0 | 9968.7 / 7379.8 |
ข้อสังเกต: ผลลัพธ์ของ Ornith-1.0 สอดคล้องกับ Qwen3.6-35B โดย Vulkan ทำความเร็ว Decode แตะ 69.28 tokens/s (เร็วกว่า ROCm +36.1%) อย่างไรก็ตาม เมื่อบริบทขยายสู่ 8K โทเค็น ความเร็ว Decode ของ Vulkan ตกลง 18.6% (จาก 69.28 เหลือ 56.35 tokens/s) ขณะที่ ROCm ตกลงเพียง 13.2%
1.3 gemma-4-26B-A4B-it-Q4_K_M (Total 26B / Active 4B)
หัวข้อที่มีชื่อว่า “1.3 gemma-4-26B-A4B-it-Q4_K_M (Total 26B / Active 4B)”โมเดล MoE อัจฉริยะจากตระกูล Gemma 4 ใช้งาน 4B Active Parameters
| เวิร์กโหลด (Workload) | Context/Gen | Backend | Prompt Speed (t/s) | Decode Speed (t/s) | TTFT (ms) | E2E Latency (ms) |
|---|---|---|---|---|---|---|
| Content Generation | 512 / 256 | ROCm / Vulkan | 1123.91 / 1673.53 | 62.33 / 71.34 | 620.1 / 479.2 | 4728.6 / 4067.8 |
| Creative Writing | 512 / 512 | ROCm / Vulkan | 1123.03 / 1706.82 | 59.83 / 68.16 | 570.6 / 389.6 | 9127.7 / 7902.8 |
| Summary 2K | 2048 / 256 | ROCm / Vulkan | 1177.07 / 1723.65 | 49.92 / 59.88 | 1819.3 / 1265.1 | 6942.6 / 5540.2 |
| Summary 4K | 4096 / 256 | ROCm / Vulkan | 1183.08 / 1472.12 | 47.82 / 56.55 | 3489.9 / 2807.2 | 8843.8 / 7335.5 |
| Summary 8K | 8192 / 256 | ROCm / Vulkan | 1151.68 / 1088.25 | 44.09 / 50.76 | 7151.9 / 7561.7 | 12953.0 / 12601.0 |
| Code Analysis 4K | 4096 / 256 | ROCm / Vulkan | 1181.93 / 1479.85 | 47.83 / 56.54 | 3543.3 / 2830.7 | 8895.9 / 7363.7 |
ข้อสังเกต: โมเดลนี้ทำความเร็ว Decode สูงสุดในการทดสอบการ์ดใบเดียวที่ 71.34 tokens/s บน Vulkan ด้านการประมวลผลคำถามสั้น (512–2048 tokens) Vulkan ทำอัตรา Prefill พุ่งสูงถึง 1,723 tokens/s แต่ในระดับ 8K โทเค็น ROCm พลิกกลับมามี Prefill สูงกว่าเล็กน้อยที่ 1,151 tokens/s
1.4 NVIDIA-Nemotron-3.5-Lightning-30B-A3B-NVFP4 (Total 30B / Active 3B)
หัวข้อที่มีชื่อว่า “1.4 NVIDIA-Nemotron-3.5-Lightning-30B-A3B-NVFP4 (Total 30B / Active 3B)”โมเดล MoE ขนาด 30B ที่ใช้ฟอร์แมตควอนไทซ์ระดับ 4-bit Floating Point ยุคใหม่ (NVFP4)
| เวิร์กโหลด (Workload) | Context/Gen | Backend | Prompt Speed (t/s) | Decode Speed (t/s) | TTFT (ms) | E2E Latency (ms) |
|---|---|---|---|---|---|---|
| Content Generation | 512 / 256 | ROCm / Vulkan | 828.29 / 991.35 | 55.67 / 47.94 | 689.6 / 565.8 | 5283.6 / 5905.6 |
| Creative Writing | 512 / 512 | ROCm / Vulkan | 831.69 / 1007.86 | 55.62 / 47.84 | 672.0 / 558.6 | 9876.6 / 11261.0 |
| Summary 2K | 2048 / 256 | ROCm / Vulkan | 964.96 / 1288.11 | 55.72 / 47.84 | 2172.2 / 1633.0 | 6770.8 / 6980.3 |
| Summary 4K | 4096 / 256 | ROCm / Vulkan | 995.38 / 1346.48 | 55.58 / 47.75 | 4135.1 / 3049.8 | 8741.0 / 8410.9 |
| Summary 8K | 8192 / 256 | ROCm / Vulkan | 1009.24 / 1378.15 | 55.34 / 47.66 | 8134.5 / 5966.6 | 12767.2 / 11338.8 |
| Code Analysis 4K | 4096 / 256 | ROCm / Vulkan | 992.52 / 1324.09 | 55.58 / 47.77 | 4173.4 / 3128.2 | 8777.5 / 8486.4 |
ข้อสังเกตสำคัญ:
- แตกต่างจากฮาร์ดแวร์คู่แข่งที่มักประสบปัญหาแครชบนรันไทม์ Vulkan กับฟอร์แมต NVFP4 การ์ด RX 9070 XT สามารถรันโมเดลนี้บน Vulkan b10362 ได้อย่างราบรื่น ไม่มี Error แม้แต่รอบเดียว
- ROCm เหนือกว่าในด้าน Decode: ROCm ทำความเร็ว Decode ได้ถึง 55.67 tokens/s (เร็วกว่า Vulkan +16.1%) และที่น่าทึ่งคือ Decode Retention สูงถึง 99.4% แม้บริบทจะเพิ่มจาก 512 ไปเป็น 8,192 โทเค็น ความเร็วก็แทบไม่ตก (55.67 → 55.34 tokens/s)
2. กลุ่มโมเดลสถาปัตยกรรม Dense (คำนวณครบทุกเลเยอร์)
หัวข้อที่มีชื่อว่า “2. กลุ่มโมเดลสถาปัตยกรรม Dense (คำนวณครบทุกเลเยอร์)”โมเดล Dense ต้องส่งผ่านเมทริกซ์ทุกพารามิเตอร์ในทุกๆ สเต็ปของการสร้างคำ จึงเป็นบททดสอบ Memory Bandwidth (640 GB/s) และความสามารถในการประมวลผล Kernel GEMM ของการ์ดจออย่างแท้จริง
2.1 Qwen3.8-27B-Q4_K_M (Dense 27B)
หัวข้อที่มีชื่อว่า “2.1 Qwen3.8-27B-Q4_K_M (Dense 27B)”โมเดล Dense ระดับ 27 พันล้านพารามิเตอร์ ซึ่งถือเป็นขนาดเกือบเต็มความจุ VRAM 16GB
| เวิร์กโหลด (Workload) | Context/Gen | Backend | Prompt Speed (t/s) | Decode Speed (t/s) | TTFT (ms) | E2E Latency (ms) |
|---|---|---|---|---|---|---|
| Content Generation | 512 / 256 | ROCm / Vulkan | 410.38 / 231.66 | 20.86 / 14.85 | 1450.7 / 2397.0 | 13738.3 / 19636.5 |
| Creative Writing | 512 / 512 | ROCm / Vulkan | 409.04 / 235.29 | 20.73 / 14.77 | 1403.7 / 2320.8 | 26103.6 / 36989.8 |
| Summary 2K | 2048 / 256 | ROCm / Vulkan | 444.13 / 250.07 | 20.00 / 14.39 | 4703.0 / 8295.8 | 17500.3 / 26093.4 |
| Summary 4K | 4096 / 256 | ROCm / Vulkan | 442.35 / 252.63 | 19.02 / 13.85 | 9277.3 / 16257.9 | 22744.2 / 34739.0 |
| Summary 8K | 8192 / 256 | ROCm / Vulkan | 427.93 / 252.06 | 17.35 / 12.91 | 19157.6 / 32544.7 | 33918.9 / 52369.1 |
| Code Analysis 4K | 4096 / 256 | ROCm / Vulkan | 443.36 / 251.73 | 19.00 / 13.85 | 9342.0 / 16608.6 | 22812.1 / 35091.2 |
ข้อสังเกต: บนโมเดล Dense ขนาดใหญ่ ROCm มีชัยเหนือ Vulkan แบบเบ็ดเสร็จในทุกตัวชี้วัด:
- Decode Speed: ROCm ทำได้ 20.86 tokens/s เร็วกว่า Vulkan (14.85 tokens/s) ถึง +40.5%
- Prefill Speed: ROCm ทำได้ 410 – 444 tokens/s เร็วกว่า Vulkan (231 – 252 tokens/s) ถึง +77%
- ในงานบริบท 8K ตัว ROCm ช่วยลดเวลารอตอบแรก (TTFT) ลงจาก 32.5 วินาที เหลือ 19.1 วินาที และจบงาน E2E ได้เร็วกว่าเกือบ 18.5 วินาที
2.2 Muse-Glimmer-30B-UD-Q4_K_XL (Dense 30B)
หัวข้อที่มีชื่อว่า “2.2 Muse-Glimmer-30B-UD-Q4_K_XL (Dense 30B)”โมเดล Dense ขนาด 30B ควอนไทซ์ระดับ Extra-Large สำหรับงานเขียนและงานสร้างสรรค์
| เวิร์กโหลด (Workload) | Context/Gen | Backend | Prompt Speed (t/s) | Decode Speed (t/s) | TTFT (ms) | E2E Latency (ms) |
|---|---|---|---|---|---|---|
| Content Generation | 512 / 256 | ROCm / Vulkan | 587.45 / 393.21 | 33.84 / 22.61 | 1070.8 / 1521.7 | 8548.9 / 12712.2 |
| Creative Writing | 512 / 512 | ROCm / Vulkan | 586.64 / 409.57 | 33.73 / 22.55 | 1031.9 / 1427.4 | 16117.6 / 23996.7 |
| Summary 2K | 2048 / 256 | ROCm / Vulkan | 636.04 / 443.85 | 33.55 / 22.48 | 3360.0 / 4794.9 | 10899.0 / 16045.8 |
| Summary 4K | 4096 / 256 | ROCm / Vulkan | 643.47 / 446.75 | 33.49 / 22.45 | 6495.3 / 9329.4 | 14046.9 / 20595.0 |
| Summary 8K | 8192 / 256 | ROCm / Vulkan | 649.58 / 449.83 | 33.35 / 22.40 | 12737.5 / 18367.5 | 20322.1 / 29659.0 |
| Code Analysis 4K | 4096 / 256 | ROCm / Vulkan | 644.16 / 448.48 | 33.46 / 22.45 | 6515.8 / 9306.0 | 14072.2 / 20573.3 |
ข้อสังเกต: โมเดล Muse-Glimmer แสดงให้เห็นถึงประสิทธิภาพของ ROCm บน RDNA 4 ที่ชัดเจนที่สุด โดย ROCm Decode เร็วถึง 33.84 tokens/s เหนือกว่า Vulkan ที่ทำได้ 22.61 tokens/s ถึง +49.7% นอกจากนี้ ROCm ยังรักษา Decode Speed ได้นิ่งสนิทตั้งแต่ 512 ถึง 8K tokens (ลดลงเพียง 1.4%)
2.3 gemma-4-12B-it-Q4_K_M (Dense 12B)
หัวข้อที่มีชื่อว่า “2.3 gemma-4-12B-it-Q4_K_M (Dense 12B)”โมเดล Dense ขนาดยอดนิยมที่ลงตัวที่สุดกับ VRAM 16GB
| เวิร์กโหลด (Workload) | Context/Gen | Backend | Prompt Speed (t/s) | Decode Speed (t/s) | TTFT (ms) | E2E Latency (ms) |
|---|---|---|---|---|---|---|
| Content Generation | 512 / 256 | ROCm / Vulkan | 1837.02 / 1363.62 | 61.85 / 65.08 | 496.1 / 650.1 | 4635.4 / 4577.9 |
| Creative Writing | 512 / 512 | ROCm / Vulkan | 1883.47 / 1384.66 | 61.34 / 64.09 | 429.4 / 499.4 | 8775.6 / 8490.9 |
| Summary 2K | 2048 / 256 | ROCm / Vulkan | 1985.59 / 1247.14 | 59.69 / 60.47 | 1147.3 / 1748.3 | 5439.1 / 5982.5 |
| Summary 4K | 4096 / 256 | ROCm / Vulkan | 1974.07 / 1010.48 | 59.40 / 58.89 | 2104.4 / 4079.9 | 6415.4 / 8427.3 |
| Summary 8K | 8192 / 256 | ROCm / Vulkan | 1880.78 / 711.60 | 58.89 / 55.30 | 4387.9 / 11547.8 | 8737.2 / 16177.0 |
| Code Analysis 4K | 4096 / 256 | ROCm / Vulkan | 1980.31 / 1006.30 | 59.35 / 58.81 | 2152.6 / 4161.4 | 6475.6 / 8512.1 |
ข้อสังเกต: โมเดลขนาด 12B เปิดเผยจุดต่างอย่างมีนัยสำคัญ:
- Prefill Scaling: ROCm รัน Prefill ได้เฉลี่ย 1,880 – 1,985 tokens/s คงที่ในทุกบริบท
- Vulkan KV Cache Penalty: ฝั่ง Vulkan แม้บริบทสั้นจะทำ Decode ได้เร็วกว่าเล็กน้อย (65.08 vs 61.85 tokens/s) แต่เมื่อขยับบริบทไปที่ 4K และ 8K อัตรา Prefill ของ Vulkan ถดถอยลงอย่างรุนแรงจาก 1,363 เหลือ 711 tokens/s ส่งผลให้ในงาน Summary 8K ฝั่ง ROCm จบงานได้เร็วกว่าเกือบเท่าตัว (8.7 วินาที เทียบกับ 16.2 วินาที)
2.4 gemma-4-31B-it-Q4_K_M (Dense 31B — กำแพงขีดจำกัด 16GB)
หัวข้อที่มีชื่อว่า “2.4 gemma-4-31B-it-Q4_K_M (Dense 31B — กำแพงขีดจำกัด 16GB)”โมเดล Dense ขนาด 31B เพื่อทดสอบจุดชนเพดาน VRAM
| เวิร์กโหลด (Workload) | Context/Gen | Backend | Prompt Speed (t/s) | Decode Speed (t/s) | TTFT (ms) | E2E Latency (ms) |
|---|---|---|---|---|---|---|
| Content Generation | 512 / 256 | ROCm / Vulkan | 322.90 / 105.08 | 9.34 / 7.45 | 1993.4 / 5317.6 | 29386.3 / 39700.0 |
| Creative Writing | 512 / 512 | ROCm / Vulkan | 331.66 / 106.27 | 9.15 / 7.31 | 1783.4 / 5065.6 | 57709.7 / 75142.8 |
| Summary 2K | 2048 / 256 | ROCm / Vulkan | 338.47 / 105.19 | 8.26 / 6.97 | 6359.9 / 19796.3 | 37341.8 / 56540.7 |
| Summary 4K | 4096 / 256 | ROCm / Vulkan | 328.63 / 100.49 | 8.04 / 6.79 | 12484.9 / 40783.6 | 44323.7 / 78496.3 |
| Summary 8K | 8192 / 256 | ROCm / Vulkan | 303.60 / 91.20 | 7.67 / 6.50 | 27022.1 / 89859.8 | 60418.5 / 129218.0 |
| Code Analysis 4K | 4096 / 256 | ROCm / Vulkan | 328.74 / 100.53 | 8.05 / 6.79 | 13015.3 / 41271.8 | 44819.7 / 78962.4 |
บทเรียนเรื่อง VRAM Boundary: ตัวโมเดล
gemma-4-31B-it-Q4_K_Mมีขนาดไฟล์กว่า 18.2 GB ซึ่ง เกินขนาด VRAM 16GB ของ RX 9070 XT ทำให้ llama.cpp ต้องสลับหน่วยความจำบางส่วนหรือดึง System RAM ผ่านบัส PCIe สิ่งที่เกิดขึ้นคือความเร็ว Decode ตกลงสู่ระดับ 7.45 – 9.34 tokens/s (ลดลงฮวบฮาบถึง 70% เมื่อเทียบกับ Muse-Glimmer 30B ที่ฟิตพอดี VRAM) และในระดับบริบท 8K บน Vulkan การรอคำแรก (TTFT) พุ่งสูงถึงเกือบ 90 วินาที! นี่คือข้อพิสูจน์ที่ชัดเจนว่าการรัน Local LLM ต้องควบคุม Model Weights + KV Cache ไม่ให้เกินความจุ VRAM จริง
ผลการทดสอบ Concurrent Multi-Tenant (สเกล 1 ถึง 16 สล็อต)
หัวข้อที่มีชื่อว่า “ ผลการทดสอบ Concurrent Multi-Tenant (สเกล 1 ถึง 16 สล็อต)”ในการนำการ์ดจอไปใช้งานจริงเป็นเซิร์ฟเวอร์ Local AI ภายในองค์กร การทดสอบแบบผู้ใช้คนเดียว (Concurrency C=1) ไม่เพียงพอ การทดสอบชุดนี้ใช้ PromptMark Concurrent Text Benchmark v0.2.0 ตั้งค่าเซิร์ฟเวอร์เปิด 16 Parallel Slots (-np 16) และจอง Context Window รวม 65,536 tokens (เฉลี่ย 4,096 tokens ต่อผู้ใช้) รันเวิร์กโหลด summary_2k โดยยิงคำขอพร้อมกันตั้งแต่ 1, 2, 4, 8, 12 จนถึง 16 ผู้ใช้
1. การทดสอบ Concurrent บน Ornith-1.0-35B-Q4_K_M (MoE 35B)
หัวข้อที่มีชื่อว่า “1. การทดสอบ Concurrent บน Ornith-1.0-35B-Q4_K_M (MoE 35B)”| Concurrency (ผู้ใช้พร้อมกัน) | Backend | Aggregate TPS | Throughput Gain | User TPS | User Retention | TTFT (ms) | E2E Latency (ms) |
|---|---|---|---|---|---|---|---|
| C = 1 | ROCm / Vulkan | 34.57 / 41.90 | 1.00x / 1.00x | 49.47 / 57.28 | 100.0% / 100.0% | 2229.5 / 1634.8 | 7404.5 / 6110.4 |
| C = 2 | ROCm / Vulkan | 43.29 / 53.17 | 1.25x / 1.27x | 35.44 / 40.56 | 71.6% / 70.8% | 4620.1 / 3305.6 | 11825.7 / 9618.9 |
| C = 4 | ROCm / Vulkan | 45.31 / 59.83 | 1.31x / 1.43x | 19.97 / 24.97 | 40.4% / 43.6% | 9597.9 / 6816.3 | 22572.6 / 17087.2 |
| C = 8 | ROCm / Vulkan | 47.42 / 64.34 | 1.37x / 1.54x | 9.89 / 12.95 | 20.0% / 22.6% | 16911.3 / 11998.6 | 43004.9 / 31761.3 |
| C = 12 | ROCm / Vulkan | 48.47 / 59.28 | 1.40x / 1.42x | 6.36 / 7.23 | 12.9% / 12.6% | 22536.7 / 15905.4 | 63022.1 / 51417.6 |
| C = 16 | ROCm / Vulkan | 49.78 / 62.59 | 1.44x / 1.49x | 4.82 / 5.66 | 9.7% / 9.9% | 28168.4 / 19970.9 | 81629.7 / 65117.3 |
2. การทดสอบ Concurrent บน gemma-4-26B-A4B-it-Q4_K_M (MoE 26B)
หัวข้อที่มีชื่อว่า “2. การทดสอบ Concurrent บน gemma-4-26B-A4B-it-Q4_K_M (MoE 26B)”| Concurrency (ผู้ใช้พร้อมกัน) | Backend | Aggregate TPS | Throughput Gain | User TPS | User Retention | TTFT (ms) | E2E Latency (ms) |
|---|---|---|---|---|---|---|---|
| C = 1 | ROCm / Vulkan | 35.89 / 45.76 | 1.00x / 1.00x | 48.81 / 58.59 | 100.0% / 100.0% | 1881.8 / 1211.0 | 7132.6 / 5593.9 |
| C = 2 | ROCm / Vulkan | 44.95 / 54.81 | 1.25x / 1.20x | 34.01 / 38.41 | 69.7% / 65.6% | 3859.3 / 2659.3 | 11382.6 / 9332.5 |
| C = 4 | ROCm / Vulkan | 49.11 / 60.61 | 1.37x / 1.32x | 19.65 / 22.22 | 40.3% / 37.9% | 7535.8 / 5179.7 | 20803.6 / 16854.6 |
| C = 8 | ROCm / Vulkan | 52.04 / 64.26 | 1.45x / 1.40x | 9.98 / 11.40 | 20.4% / 19.5% | 13675.9 / 8889.6 | 39216.6 / 31743.9 |
| C = 12 | ROCm / Vulkan | 53.74 / 66.48 | 1.50x / 1.45x | 6.60 / 7.61 | 13.5% / 13.0% | 17345.6 / 11847.0 | 56798.6 / 45961.0 |
| C = 16 | ROCm / Vulkan | 53.09 / 65.76 | 1.48x / 1.44x | 5.06 / 5.98 | 10.4% / 10.2% | 26384.1 / 19200.1 | 76723.3 / 61963.3 |
การวิเคราะห์พฤติกรรม Concurrent Serving:
หัวข้อที่มีชื่อว่า “การวิเคราะห์พฤติกรรม Concurrent Serving:”- Throughput Scaling Peak: ประสิทธิภาพรวมของเซิร์ฟเวอร์ (Aggregate TPS) เพิ่มขึ้นตามจำนวนผู้ใช้อย่างชัดเจน โดยไต่จากระดับ 35–45 tokens/s ที่ C=1 ขึ้นไปแตะจุดสูงสุดที่ 66.48 tokens/s บน Vulkan (เพิ่มขึ้นถึง 1.45 เท่า) ที่ระดับ Concurrency C=12 ก่อนจะเริ่มอิ่มตัว (Saturate) ที่ C=16
- User Experience Stability: แม้จะมีผู้ใช้ยิงคำขอพร้อมกันถึง 8 คน ความเร็วการสร้างคำต่อผู้ใช้ (User TPS) ยังคงอยู่ที่ระดับ 11.4 – 12.9 tokens/s ซึ่งยังเร็วกว่าความเร็วการอ่านปกติของมนุษย์ (ประมาณ 5–7 คำ/วินาที)
- Vulkan ยังคงชนะในงาน MoE Multi-Tenant: Vulkan สามารถปั่น Throughput รวมได้สูงกว่า ROCm ราว 12 – 15 tokens/s ในทุกระดับการสเกล และมี Latency ในการตอบคำแรก (TTFT) สั้นกว่าอย่างเห็นได้ชัด
การวิเคราะห์เชิงลึกทางสถาปัตยกรรม
หัวข้อที่มีชื่อว่า “การวิเคราะห์เชิงลึกทางสถาปัตยกรรม”1. ทำไม Vulkan ถึงเร็วกว่าบน MoE แต่ ROCm ชนะขาดบน Dense?
หัวข้อที่มีชื่อว่า “1. ทำไม Vulkan ถึงเร็วกว่าบน MoE แต่ ROCm ชนะขาดบน Dense?”นี่คือหนึ่งในข้อค้นพบที่น่าสนใจที่สุดของการทดสอบชุดนี้:
- ในโมเดลแบบ MoE (Sparse Activation): ในแต่ละโทเค็น ตัวโมเดลจะกระตุ้นเฉพาะ Expert ย่อยเพียง 3B หรือ 4B เท่านั้น เมทริกซ์ที่ต้องคำนวณจึงมีขนาดเล็กและต้องเรียกใช้เคอร์เนลบ่อยครั้ง (High-frequency small kernel dispatches) รันไทม์ Vulkan ซึ่งทำงานผ่าน SPIR-V Pipeline ของไดรเวอร์ AMD มี Overhead ในการส่งคำสั่ง (Driver Dispatch Overhead) ที่ต่ำและจัดการ Branching ของ Expert ได้คล่องตัวกว่า จึงทำความเร็วพุ่งแตะ 71 tokens/s
- ในโมเดลแบบ Dense (Full Matrix Multiplication): ทุกๆ โทเค็นต้องคูณเมทริกซ์ขนาดใหญ่ยักษ์เต็ม 27B–30B สิ่งที่ตัดสินผลแพ้ชนะคือ ประสิทธิภาพเคอร์เนลคณิตศาสตร์บริสุทธิ์ (GEMM Kernel Optimization) และ Memory Bandwidth Saturation ซึ่งชุดคอมไพเลอร์ ROCm 10 Native (Clang 20.1.8) สำหรับสถาปัตยกรรม RDNA 4 มีการจูน Instruction Scheduling ในระดับ Wavefront32 ได้แนบเนียนกว่า Vulkan ส่งผลให้ ROCm ปั่นความเร็วบน Dense ได้สูงกว่า Vulkan ถึง +40.5% บน Qwen3.8-27B และ +49.7% บน Muse-Glimmer-30B
2. ปริศนา Prefill ถดถอยบน Vulkan กับ KV Cache ขนาดยาว
หัวข้อที่มีชื่อว่า “2. ปริศนา Prefill ถดถอยบน Vulkan กับ KV Cache ขนาดยาว”จากการทดสอบ gemma-4-12B-it และ Ornith-1.0-35B พบว่าเมื่อบริบทขยายจาก 512 สู่ 8K โทเค็น:
- ROCm: อัตรา Prefill แทบเป็นเส้นตรง (1,837 → 1,880 tokens/s)
- Vulkan: อัตรา Prefill ร่วงลงจาก 1,363 เหลือเพียง 711 tokens/s (ลดลงเกือบ 50%) สาเหตุมาจาก Memory Allocation Strategy ของ Vulkan Backend ใน llama.cpp ที่ยังจัดการ Non-contiguous KV Buffer ได้ไม่ยืดหยุ่นเท่า HIP Memory Management ของ ROCm เมื่อหน่วยความจำ KV Cache บวมขึ้นตามจำนวนโทเค็น Vulkan จะเกิด Cache Miss และ Memory Reallocation Overhead ในฝั่ง GPU Memory Controller ส่งผลให้เวลาประมวลผลคำแรก (TTFT) ของ Vulkan ในงาน Long Context นานขึ้นอย่างเห็นได้ชัด
3. ประสิทธิภาพของหน่วยความจำ 16GB GDDR6 (640 GB/s)
หัวข้อที่มีชื่อว่า “3. ประสิทธิภาพของหน่วยความจำ 16GB GDDR6 (640 GB/s)”แบนด์วิดท์ 640 GB/s ของ Radeon RX 9070 XT เทียบเท่ากับการ์ดเวิร์กสเตชันระดับมืออาชีพอย่าง Radeon AI PRO R9700 ทำให้เพดานความเร็ว Decode ทางทฤษฎีอยู่ที่:
Max Theoretical Decode (tok/s) ≈ Memory Bandwidth (GB/s) ÷ Model Weight Size (GB)
- สำหรับ
Qwen3.8-27B-Q4_K_M(ขนาด ~16.8 GB): เพดานทฤษฎีคือ640 ÷ 16.8 ≈ 38.1 tok/sในการรันจริง ROCm ทำได้ 20.86 tokens/s ซึ่งคิดเป็นประสิทธิภาพการดึง Bandwidth สูงถึง ~55% ของทฤษฎี (เมื่อรวม KV Cache Read/Write Overhead) ถือเป็นเกณฑ์ที่สูงมากสำหรับการรันบนการ์ดจอใบเดียว
สรุปผลและคำแนะนำการเลือกใช้งาน
หัวข้อที่มีชื่อว่า “ สรุปผลและคำแนะนำการเลือกใช้งาน”AMD Radeon RX 9070 XT (16GB) พิสูจน์ให้เห็นแล้วว่าเป็นหนึ่งในการ์ดจอระดับผู้บริโภคที่ทรงพลังที่สุดสำหรับการรัน Local LLM ด้วยจุดเด่นด้านแบนด์วิดท์ 640 GB/s และการรองรับชุดคำสั่งใหม่ของ RDNA 4
คำแนะนำเชิงปฏิบัติสำหรับผู้ใช้งาน:
หัวข้อที่มีชื่อว่า “คำแนะนำเชิงปฏิบัติสำหรับผู้ใช้งาน:”- ถ้าคุณเน้นโมเดล MoE (เช่น Qwen3.6-35B-A3B หรือ Gemma-4-26B-A4B):
- แนะนำให้เลือกใช้ Vulkan Backend เป็นหลัก: คุณจะได้ความเร็ว Decode ระดับ 70 – 71+ tokens/s อ่านและโต้ตอบได้ลื่นไหลเหมือนพิมพ์สด และในการแชร์เซิร์ฟเวอร์แบบ Concurrent Vulkan ก็ให้ Throughput สูงกว่า
- ถ้าคุณเน้นโมเดล Dense แท้ (เช่น Qwen3.8-27B หรือ Muse-Glimmer-30B-UD):
- ต้องเลือกใช้ ROCm Native (b10362 ขึ้นไป): ความเร็ว Decode จะพุ่งขึ้นจาก 14–22 tokens/s บน Vulkan ไปเป็น 20–34 tokens/s บน ROCm (เร็วขึ้นเกือบ 1.5 เท่าตัว) และประหยัดเวลารอ Prefill ได้มหาศาล
- ขอบเขตการเลือกขนาดโมเดลบน VRAM 16GB:
- กลุ่มที่รันได้อย่างสมบูรณ์แบบ (Sweet Spot): โมเดล MoE 26B–35B (Q4_K_M), โมเดล Dense 12B–14B (Q4/Q8), และโมเดล Dense 27B–30B (Q4_K_M ที่เปิด Context ไม่เกิน 8K–12K)
- กลุ่มที่ไม่แนะนำ: โมเดล Dense 31B ขึ้นไปในระดับควอนไทซ์ Q4 (เช่น Gemma-4-31B) เพราะจะชนกำแพง VRAM 16GB จนต้องแชร์แรมเครื่อง ส่งผลให้ประสิทธิภาพร่วงลงเหลือต่ำกว่า 10 tokens/s ทันที
- ศักยภาพในการเป็น Local AI Workgroup Server:
- RX 9070 XT ใบเดียวสามารถรองรับพนักงานในออฟฟิศขนาดเล็กหรือทีมนักพัฒนา 5–12 คนพร้อมกัน ได้สบาย โดยยังมี Throughput เฉลี่ยต่อคนเร็วกว่า 10 tokens/s ซึ่งคุ้มค่าอย่างยิ่งสำหรับการลงทุนทำ On-Premise LLM