hy4 GGUF: ระดับ quantization การคำนวณหน่วยความจำ และคำสั่ง llama.cpp / Ollama
hy4 GGUF: ระดับ quantization การคำนวณหน่วยความจำ และคำสั่ง llama.cpp / Ollama
hy4 เป็นโมเดลที่ deploy เองได้ง่ายที่สุดในครอบครัว Hunyuan: โมเดล dense 4 พันล้านพารามิเตอร์ ทางการมี FP8, GPTQ-Int4 และ AWQ-Int4 พร้อมกัน และชุมชนยังมีผู้แปลง GGUF หลายคน สิ่งที่ซับซ้อนจริง ๆ ไม่ใช่ตัวโมเดล แต่เป็น สามการตัดสินใจที่คุณต้องเลือกเอง: ชั้น quantization ไหน จัดหน่วยความจำเท่าไร และรันบน framework ใด บทความนี้เรียงตามลำดับ ตัดสินใจ วัด ลงมือ และแก้ปัญหา พร้อมคำสั่งที่คัดลอกได้ทั้งหมด
สรุปใน 30 วินาที
ชุดที่แนะนำสำหรับการรันครั้งแรกคือ GGUF Q4_K_M จากชุมชน ร่วมกับ llama.cpp (llama-server เพื่อเปิด endpoint ที่เข้ากันได้กับ OpenAI) ประมาณการหน่วยความจำคือ 2.5GB สำหรับน้ำหนัก, 0.5GB สำหรับ KV cache และ 0.5GB สำหรับค่าใช้จ่ายระหว่างรัน ซึ่งการ์ด 6GB เพียงพอ ผู้ใช้ Mac ให้เปลี่ยนเป็นเวอร์ชัน 4bit ของ mlx-community จะสะดวกกว่า
ขั้นที่หนึ่ง: เลือกชั้น quantization
| ชั้น | ขนาด (วัดจากคลัง bartowski) | คุณภาพ | เหมาะกับ |
|---|---|---|---|
| IQ4_XS | 2.37 GB | ใกล้ Q4 | ทาง Q4 เมื่อหน่วยความจำแคบ |
| Q3_K_M | 2.17 GB | สูญเสียที่รู้สึกได้ | พอรันบนการ์ด 4GB |
| Q4_K_M | 2.61 GB | แทบไม่สูญเสีย | ค่าเริ่มต้น พอสำหรับงานส่วนใหญ่ |
| Q5_K_M | 3.03 GB | ใกล้ต้นฉบับ | เลือกเมื่อหน่วยความจำเหลือ |
| Q6_K | 3.47 GB | เกือบเทียบต้นฉบับ | ทางเลือกอนุรักษ์นิยมสำหรับงานสร้างข้อความยาว |
| Q8_0 | 4.49 GB | เทียบต้นฉบับได้ในระดับพื้นฐาน | ใช้เป็นเกณฑ์เปรียบเทียบความแม่นยำ |
| FP16 (ต้นฉบับ) | ราว 8.4 GB | ต้นฉบับ | เฉพาะเมื่อต้องการ stack การ infer แบบ FP16 |
ขนาดน้ำหนักดั้งเดิมมาจากพารามิเตอร์ใน model card: Hunyuan-4B-Instruct มีพารามิเตอร์ 4.22 พันล้าน ซึ่งในรูป BF16 มีขนาดประมาณ 8.4GB
ลำดับการเลือกที่เป็นรูปธรรม
เริ่มจาก Q4_K_M แล้วตรวจสอบว่าเส้นคำสั่ง ความยาวบริบท และการบริการทำงานครบวงจรหรือยัง หากงานของคุณไวต่อความแม่นยำ เช่น การสกัดข้อมูลที่มีโครงสร้างหรือการสร้างโค้ด ให้เปรียบเทียบกับผลของ Q5_K_M และเมื่อคุณต้องการวัดว่า quantization ทำให้ลดลงไปมากน้อยแล้วจึงเทียบกับ Q8_0 หรือ FP16 การเริ่มที่ FP16 มักเป็นการสูญเปล่าหน่วยความจำ
ผู้เผยแพร่ GGUF ของ hy4 ในชุมชน:
| ผู้เผยแพร่ | ลักษณะของคลัง |
|---|---|
| bartowski | ครบทุกชั้น มียอดดาวน์โหลดสูงสุด แหล่งเริ่มต้นที่ปลอดภัย |
| mradermacher | มีทั้ง quantization มาตรฐานและชุด i1 |
| gabriellarson | ส่วนใหญ่เป็น quantization มาตรฐาน |
| DevQuasar | ส่วนใหญ่เป็น quantization มาตรฐาน |
| Disya | ส่วนใหญ่เป็น Q8_0 เหมาะกับการเปรียบเทียบความแม่นยำสูง |
| Edge-Quant | ชั้นเดียว Q4_K_M สำหรับการเลือกที่เรียบง่าย |
เมื่อดาวน์โหลดให้ดูป้าย quantization ในชื่อไฟล์ (Q4_K_M, Q5_K_M, Q8_0) และคลังต้นทางให้ดี อย่ามองว่าไฟล์ชื่อเดียวกันจากคนละคลังคือของเดียวกัน
ขั้นที่สอง: คำนวณหน่วยความจำ อย่าคิดแค่น้ำหนัก
หน่วยความจำทั้งหมดคือสามส่วนรวมกัน:
หน่วยความจำรวม ≈ น้ำหนัก + KV cache + ค่าใช้จ่ายระหว่างรัน
น้ำหนัก: พารามิเตอร์ 4.22 พันล้านคูณจำนวนไบต์ต่อพารามิเตอร์ Q4_K_M ประมาณ 0.65 ไบต์ต่อพารามิเตอร์, Q8_0 ประมาณ 1.06 และ FP16 คือ 2
KV cache: โตตามความยาวบริบท โดยการตั้งค่าอย่างเป็นทางการของ hy4 คือ 36 ชั้น, KV head 8 ตัว และ head dimension 128 ซึ่งใน BF16 ใช้ประมาณ 144KB ต่อ token:
KV cache ≈ 2 × 36 ชั้น × 8 KV head × 128 head dim × ความยาวบริบท × 2 ไบต์
≈ 144KB × ความยาวบริบท
เทียบกัน: บริบท 4K ใช้ประมาณ 0.56GB และบริบท 32K ใช้ประมาณ 4.6GB ความยาวตำแหน่งสูงสุดอย่างเป็นทางการของ hy4 คือ 262144 (256K) แต่การเปิดเต็มหน้าต่างหมายความว่า KV cache ต้องกินหลายสิบ GB ดังนั้น บริบทที่ใช้ได้จริงต้องคำนวณย้อนจากหน่วยความจำ ไม่ใช่คัดลอกเลขบนป้าย
ตารางอ้างอิงด่วน
Q4_K_M (2.61GB) กับบริบท 4K: ประมาณ 2.6 + 0.6 + 0.5 = 3.7GB ซึ่งแคบแต่ทำได้บนการ์ด 4GB Q4_K_M กับบริบท 32K: ประมาณ 2.6 + 4.6 + 0.5 = 7.7GB ต้องใช้การ์ด 8GB ขึ้นไป Q5_K_M กับบริบท 8K: ประมาณ 3.0 + 1.1 + 0.5 = 4.6GB เหมาะกับการ์ด 6GB และ Q8_0 (4.49GB) กินพื้นที่การ์ดไปครึ่งใหญ่แล้ว ตัวเลขเป็นช่วงการประมาณการ ตัวเลขจริงคือสิ่งที่ nvidia-smi รายงานหลังการโหลดครั้งแรก
ขั้นที่สาม: รันด้วย llama.cpp
# 1. ดาวน์โหลด GGUF จากชุมชน (ตัวอย่างคลัง bartowski; ปรับชื่อไฟล์ตามรายการจริงในคลัง)
huggingface-cli download bartowski/tencent_Hunyuan-4B-Instruct-GGUF \
Q4_K_M.gguf --local-dir ./hunyuan4b
# 2. สนทนาตรง ๆ เพื่อตรวจว่าน้ำหนักโหลดได้จริง
./llama-cli -m ./hunyuan4b/Q4_K_M.gguf -p "อธิบาย MoE สามประโยค" -n 256
# 3. เปิดบริการที่เข้ากันได้กับ OpenAI
./llama-server -m ./hunyuan4b/Q4_K_M.gguf \
--host 127.0.0.1 --port 8080 \
--ctx-size 32768 \
--jinja
เมื่อบริการทำงานแล้ว โค้ด client เดิมเปลี่ยนเพียงสองพารามิเตอร์:
from openai import OpenAI
client = OpenAI(
base_url="http://127.0.0.1:8080/v1",
api_key="not-needed",
)
resp = client.chat.completions.create(
model="local-model",
messages=[{"role": "user", "content": "สวัสดี แนะนำตัวเองหน่อย"}],
)
print(resp.choices[0].message.content)
ตั้งชื่อ model ได้ตามใจ แต่อย่าใส่ ID ของ API จริง
llama-server ไม่ได้ตรวจสอบชื่อ model อย่างเข้มงวด ดังนั้นบริการในเครื่องใช้ชื่อ local-model ก็ได้ หาก client ของคุณนำชื่อ model ไปค้นในแคตตาล็อกระยะไกล ให้แยกให้ชัดระหว่างปลายทางในเครื่องและปลายทางบนคลาวด์
ขั้นที่สี่: รันด้วย Ollama เพื่อความเข้ากันได้กับเครื่องมือ
คุณค่าของ Ollama คือมันมีการจัดการโมเดลและระบบนิเวศของ API มาให้พร้อม ทำให้ Open WebUI, Dify และ Cursor เข้าใจมันทันที
# 1. สร้างโมเดลจาก GGUF ในเครื่องด้วย Modelfile
cat > Modelfile <<'EOF'
FROM ./hunyuan4b/Q4_K_M.gguf
TEMPLATE """{{ if .System }}<|im_start|>system
{{ .System }}<|im_end|>
{{ end }}{{ if .Prompt }}<|im_start|>user
{{ .Prompt }}<|im_end|>
{{ end }}<|im_start|>assistant
"""
PARAMETER num_ctx 8192
PARAMETER temperature 0.7
EOF
ollama create hy4-local -f Modelfile
# 2. ตรวจสอบ
ollama run hy4-local "เขียนฟังก์ชัน Python วิเคราะห์เวลาแบบ ISO 8601"
# 3. ดูและลบ
ollama list
ollama show hy4-local
ollama rm hy4-local
TEMPLATE ต้องคัดลอกจาก model card
นี่คือกับดักที่ซ่อนลึกที่สุดเวลา deploy เอง: โมเดลโหลดได้ ให้ข้อความได้ แต่คุณภาพคำตอบต่ำ จึงดูเหมือนโมเดลอ่อน สาเหตุเกือบทั้งหมดคือเทมเพลตการสนทนาไม่ตรง และเทมเพลตของ Hunyuan ไม่เหมือนกันระหว่างรุ่น ให้คัดลอกจากส่วน Usage ของ model card ที่ตรงกัน และอย่าลืมใส่พารามิเตอร์ stop มิฉะนั้นโมเดลจะไม่หยุดพูด
ขั้นที่ห้า: เส้นทางบน Mac และอุปกรณ์ปลายทาง
| แพลตฟอร์ม | เส้นทาง | หมายเหตุ |
|---|---|---|
| Apple Silicon | mlx-community/Hunyuan-4B-Instruct-4bit | โหลดตรง ๆ ด้วย mlx-lm หน่วยความจำแบบ unified ทำให้ประโยชน์ quantization ชัดเจน |
| อุปกรณ์ปลายทางและฝังตัว | taobao-mnn/Hunyuan-4B-Instruct-MNN | เครื่องยนต์ inference MNN ของ Alibaba สำหรับมือถือและอุปกรณ์ฝังตัว |
| CPU รุ่นเก่า | GGUF Q4/Q5 จากชุมชน | แบ็กเอนด์ CPU ของ llama.cpp โดย 4B คือขีดจำกัดที่สมจริง |
# ตรวจสอบอย่างรวดเร็วด้วย MLX
pip install mlx-lm
python -m mlx_lm.generate --model mlx-community/Hunyuan-4B-Instruct-4bit \
--prompt "อธิบายฐานข้อมูลเวกเตอร์ในหนึ่งประโยค" --max-tokens 128
วิธีได้ประมาณการความเร็วที่น่าเชื่อถือ
อย่าเชื่อตัวเลข token/s ของคนอื่น CPU ความกว้างบันทึกหน่วยความจำ ความยาวบริบท และเวอร์ชันการสร้าง engine ต่างก็เปลี่ยนผลลัพธ์ วิธีที่ถูกคือ วัดบนเครื่องของคุณเอง: ตรึง prompt ไว้ ตรึงความยาวการสร้าง รันสามรอบแล้วหาค่า median พร้อมบันทึกระดับหน่วยความจำสูงสุด เก็บตัวเลขนี้ไว้เพื่อเปรียบเทียบเมื่อเปลี่ยนชั้น quantization ครั้งต่อไป
ตารางแก้ปัญหา: ดูอาการหาสาเหตุ
| อาการ | สาเหตุที่เป็นไปได้มากที่สุด | วิธีจัดการ |
|---|---|---|
| โหลดไม่ได้เพราะสถาปัตยกรรมไม่รองรับ | บิลด์ llama.cpp เก่าเกินไป | อัปเกรด engine และคอมไพล์ใหม่ |
| โหลดได้แต่ได้ข้อความเป็นตัวอักษรแปลก ๆ | เทมเพลตการสนทนาไม่ตรง | แก้ TEMPLATE หรือใช้ --jinja ตาม model card |
| ถูกปิดเพราะหน่วยความจำไม่พอ | คิดแค่น้ำหนัก ลืม KV cache | ลดความยาวบริบท หรือใช้ quantization ต่ำกว่า |
| สำหรับ token ช้ามาก | บางส่วนของเลเยอร์ถูกไล่ลงสู่หน่วยความจำระบบ | ใช้ quantization เล็กลง หรือโมเดลเล็กลง |
| token แรกช้ามาก แล้วจึงปกติ | น้ำหนักโหลดเข้าหน่วยความจำในรอบแรก | ปกติแล้ว ลองให้ร้อนก่อนใช้งานจริง |
| รูปแบบการเรียกเครื่องมือไม่มีผล | เทมเพลตขาดส่วนเครื่องมือ | เพิ่มส่วน tool ตาม model card หรือเปลี่ยนเทมเพลต |
| ผลลัพธ์ซ้ำ ๆ และไม่จบ | พารามิเตอร์การสุ่มสุดโต่ง | ปรับ temperature และ top_p และตรวจว่ามี EOS token |
FAQ
hy4 มี GGUF อย่างเป็นทางการไหม?
การ deploy ครั้งแรกควรเลือก quantization แบบไหน?
จะรู้ได้อย่างไรว่าต้องใช้หน่วยความจำเท่าไร?
ควรเลือก llama.cpp หรือ Ollama?
ผลลัพธ์ไม่ดี แสดงว่าโมเดลอ่อนหรือไม่?
ผู้ใช้ Mac ควรใช้เส้นทางไหนกับ hy4?
มีเรียก Hunyuan ผ่าน API ได้ไหม?
อ่านต่อ
- หน้าโมเดล hy4 — สเปก เมทริกซ์ quantization และการคำนวณหน่วยความจำ
- คำอธิบายช่องทาง hy4-preview — ช่องทางบริบท 1M
- ภาพรวมครอบครัว Tencent Hunyuan — ทุกผลิตภัณฑ์ของ Hunyuan ในที่เดียว
- คู่มือเลือกโมเดล hy4 — ขนาดต่าง ๆ และที่ของ A13B
- การเชื่อมต่อ hy4 กับ Ollama — นำ endpoint ในเครื่องเข้ากับเครื่องมือพัฒนา
- Open WebUI กับ Hunyuan ในเครื่อง — ส่วนติดต่อสนทนาแบบ self-hosted
- คู่มือการคำนวณหน่วยความจำ VRAM — การคำนวณหน่วยความจำทั่วไป
- สมุดปฏิบัติการ deploy ในเครื่อง — จากตรวจสอบฮาร์ดแวร์จนถึงการต่อเครื่องมือ
แหล่งข้อมูล
รายการชั้น quantization และคลังจะเปลี่ยนไปตามการอัปเดตของชุมชน บทความนี้สะท้อนสถานะ ณ เวลาเก็บตัวอย่าง ตัวเลขหน่วยความจำเป็นค่าประมาณตามประสบการณ์ และผลการวัดบนเครื่องของคุณต่างหากที่สำคัญที่สุด