# Qwen3-Reranker-0.6B GGUF 安装与调优 本文档覆盖 `qwen3_gguf_06b` 后端,对应模型: - Hugging Face: `ggml-org/Qwen3-Reranker-0.6B-Q8_0-GGUF` - 文件: `qwen3-reranker-0.6b-q8_0.gguf` - 本地目录: `./models/reranker/qwen3-reranker-0.6b-q8_0-gguf` ## 结论先看 这个后端已经接入完成,也能正常使用 GPU offload,但不适合当前项目的在线主链路场景。 目标场景是: - 1 个 query - 400 个商品标题 - 追求最短响应时间 实测最优配置下: - GPU 显存占用约 `894 MiB` - 400 titles 单请求延迟约 `265318 ms` 因此它更适合作为: - 低显存 fallback - 功能验证 - 本地离线实验 不建议作为在线低延迟 reranker 主 backend。 ## 独立环境 `qwen3_gguf_06b` 使用独立 venv: - backend: `qwen3_gguf_06b` - venv: `.venv-reranker-gguf-06b` - requirements: `requirements_reranker_qwen3_gguf_06b.txt` 安装: ```bash ./scripts/setup_reranker_venv.sh qwen3_gguf_06b ``` 如果需要确认是 CUDA 版 `llama-cpp-python`: ```bash ./.venv-reranker-gguf-06b/bin/python - <<'PY' import llama_cpp print(llama_cpp.llama_supports_gpu_offload()) PY ``` 预期输出: ```python True ``` ## 模型下载 推荐预先下载到本地,避免首次服务启动时在线拉取: ```bash mkdir -p models/reranker/qwen3-reranker-0.6b-q8_0-gguf curl -L --fail -C - \ -o models/reranker/qwen3-reranker-0.6b-q8_0-gguf/qwen3-reranker-0.6b-q8_0.gguf \ 'https://huggingface.co/ggml-org/Qwen3-Reranker-0.6B-Q8_0-GGUF/resolve/main/qwen3-reranker-0.6b-q8_0.gguf?download=true' ``` 当前实测文件大小: - `639153184` bytes ## 推荐配置 `config/config.yaml` 中建议保留: ```yaml qwen3_gguf_06b: repo_id: "ggml-org/Qwen3-Reranker-0.6B-Q8_0-GGUF" filename: "qwen3-reranker-0.6b-q8_0.gguf" local_dir: "./models/reranker/qwen3-reranker-0.6b-q8_0-gguf" cache_dir: "./model_cache" instruction: "Rank products by query with category & style match prioritized" n_ctx: 256 n_batch: 256 n_ubatch: 256 n_gpu_layers: 999 main_gpu: 0 n_threads: 2 n_threads_batch: 4 flash_attn: true offload_kqv: true use_mmap: true use_mlock: false infer_batch_size: 32 sort_by_doc_length: true length_sort_mode: "char" reuse_query_state: false enable_warmup: true verbose: false ``` ## 调优结果 在当前机器上做了同机实测。标题文件来自 `/home/ubuntu/rerank_test/titles.1.8w`,查询为 `白色oversized T-shirt`。 80 titles: - `n_ctx=256, reuse_query_state=true` -> `60108 ms` - `n_ctx=256, reuse_query_state=false` -> `53383~56893 ms` - `n_ctx=320, reuse_query_state=true` -> `60961 ms` - `n_ctx=384, reuse_query_state=true` -> `56578 ms` - `n_ctx=384, reuse_query_state=false` -> `57272 ms` - `n_ctx=512, reuse_query_state=false` -> `60542 ms` - `n_ctx=256, reuse_query_state=false, n_threads=4, n_threads_batch=8` -> `61228 ms` 400 titles: - `n_ctx=256, n_batch=256, n_ubatch=256, n_gpu_layers=999, reuse_query_state=false` -> `265318 ms` ## 经验沉淀 这次接入最重要的结论不是“哪个小参数更快”,而是: 1. 这个 0.6B GGUF 权重虽然小,但当前后端实现仍是逐 doc 顺序打分。 2. 对在线 400-title 请求来说,串行打分本身就是主瓶颈。 3. `reuse_query_state` 在这个模型上没有带来收益,反而更慢。 4. `n_ctx` 拉大到 `384/512` 也没有带来实质收益,反而更慢或持平。 5. 这个 backend 的优势是低显存,不是低延迟。 如果目标是在线最短响应时间,优先级建议是: 1. `qwen3_vllm` 2. 其他真正支持高吞吐批处理的后端 3. `qwen3_gguf_06b` 仅作为低显存 fallback ## 验证命令 本地直连 backend 调优: ```bash PYTHONPATH=/data/saas-search ./.venv-reranker-gguf/bin/python \ benchmarks/reranker/benchmark_reranker_gguf_local.py --backend-name qwen3_gguf_06b --docs 400 ``` 按服务方式启动: ```bash RERANK_BACKEND=qwen3_gguf_06b ./scripts/start_reranker.sh ```