Appearance
采样、量化与部署 — 练习
练习 1:量化模型对比
将同一个模型分别量化为 Q4_0、Q5_1、Q8_0,对比文件大小和推理速度。
参考答案
bash
# 量化
./llama-quantize model-F16.gguf model-Q4_0.gguf Q4_0
./llama-quantize model-F16.gguf model-Q5_1.gguf Q5_1
./llama-quantize model-F16.gguf model-Q8_0.gguf Q8_0
# 性能测试
./llama-bench -m model-Q4_0.gguf
./llama-bench -m model-Q5_1.gguf
./llama-bench -m model-Q8_0.gguf预期观察:
- Q4_0 最快、最小,但质量损失最大
- Q8_0 接近 F16 质量,但体积约为 F16 的一半
- 推理速度主要受内存带宽限制,更小的量化 → 更快
练习 2:自定义采样器配置
使用 llama-cli 的参数配置不同的采样策略,观察生成结果的差异。
参考答案
bash
# 贪心解码(确定性)
./llama-cli -m model.gguf --temp 0 -p "The meaning of life is"
# 高温度(更随机)
./llama-cli -m model.gguf --temp 1.5 -p "The meaning of life is"
# 保守采样
./llama-cli -m model.gguf --temp 0.3 --top-k 10 --top-p 0.9 -p "The meaning of life is"
# Mirostat
./llama-cli -m model.gguf --mirostat 2 --mirostat-lr 5 -p "The meaning of life is"练习 3:启动 llama-server 并调用 API
启动 llama-server,使用 curl 调用 chat completion API。
参考答案
bash
# 启动服务器(后台)
./llama-server -m model.gguf --port 8080 &
# 调用 API
curl -s http://localhost:8080/v1/chat/completions \
-H "Content-Type: application/json" \
-d '{
"messages": [
{"role": "system", "content": "You are a helpful assistant."},
{"role": "user", "content": "What is llama.cpp?"}
],
"temperature": 0.7,
"max_tokens": 200
}' | jq .
# 流式响应
curl -s http://localhost:8080/v1/chat/completions \
-H "Content-Type: application/json" \
-d '{"messages":[{"role":"user","content":"Hello"}],"stream":true}'拓展挑战
- 使用 imatrix 优化量化质量,对比有无 imatrix 的 perplexity 差异
- 配置 Grammar 约束输出为 JSON 格式
- 使用 llama-server 的多 slot 功能实现并发推理
- 对比不同量化级别在特定任务(如代码生成)上的表现差异