本稿 · 2026-04-26 · 同专栏「小显存、长上下文、语义压缩」系列 第 2 篇(发布版;仓库另有完整长版时以仓库为准。)
系列位置:上篇为《INT4 与 Q4(GGUF)量化怎么选:两套话语、与工具怎么绑》;本篇测本机能不能扛——不展开 FastAPI、LangChain / LangGraph、业务里「怎么捞上下文」(下一篇)。
硬件口径:12GB 显存、32GB 内存;目标之一:约 8k 上下文 下,主对话 + 向量 + 重排 能同时以服务形式跑起并可用最小请求验收。
1. 先说明白:这是实验,不是标准答案
要测的是:本机能否跑通「完整上下文」依赖的链路——向量、重排,以及会话里的召回(从候选里捞出进 prompt 的那一段;不是本篇把知识库百万级混合检索全展开)。
想尽快做产品、对话与业务,更建议在线大模型 / 向量 / 重排 API;本地下权重、对 CUDA、转 GGUF、编 llama、调 OOM,又累又贵时间。有谱了再沉本机不迟。
2. 向量与重排选型
BAAI 各模型以 HuggingFace 模型卡与 License 为准。
2.1 向量(Embedding)优先档
| 模型(HuggingFace 主名) | 特点 | 备注 |
|---|---|---|
| BAAI/bge-base-zh-v1.5 | 平衡速度、体积与效果,第一颗优先 | 会话/短文本多够用;维度以官方模型卡为准 |
| BAAI/bge-large-zh-v1.5 | 比 base 强一档,更吃内存/算力 | 要质量再换 |
| BAAI/bge-m3 | 多语言、多检索形态(视框架支持) | 与 bge 重排同家配套时常用 |
- 本机、先跑通:
bge-base-zh-v1.5或更轻的bge-small-zh-v1.5。 - 与 GGUF 统一:单文件
.gguf+ 合适量化(如Q4_K_M),先能embed再换大。
2.2 重排(Rerank / Cross-Encoder)
| 模型(HuggingFace 主名) | 特点 | 备注 |
|---|---|---|
| BAAI/bge-reranker-base | 轻量、中文友好 | 候选几十条内、CPU 可跑、延迟自测 |
| BAAI/bge-reranker-v2-m3 | 与 bge-m3 同代 | 更重;主检索上 m3 再配 |
| BAAI/bge-reranker-large | 更强、更吃资源 | 跑通后再换 |
- 工程上多 HuggingFace + PyTorch 或 ONNX;不必和对话权重强行同格式。
2.3 一对「好搭配」
| 组合 | 向量 | 重排 | 适用 |
|---|---|---|---|
| 省资源、先通 | bge-base-zh-v1.5 | bge-reranker-base | 32G 内存、CPU / 单卡 12G 类试验 |
| bge-m3 全家桶 | bge-m3 | bge-reranker-v2-m3 | 中英混、同代 |
| 要质量 | bge-large-zh-v1.5 | bge-reranker-large 或 v2-m3 | 更吃资源,第二轮 |
2.4 本实验写死的组合
- 向量
BAAI/bge-base-zh-v1.5、重排BAAI/bge-reranker-base;GGUF 起服时与三进程同构即可(见 §4)。 - m3 / large 留升级轮。
3. 总路线:环境 → llama.cpp → 权重(HF → Q4 GGUF)→ 三服务
3.0 环境
- Ubuntu 类:没 CMake 往往编不动 llama.cpp;
cmake+build-essential为常见基线。 - 对话走 GPU:NVIDIA 驱动 + 能被构建系统找到的 CUDA;
-DGGML_CUDA类选项以 llama.cpp 官方docs/build.md为准。 - 其它系统、Windows、依赖版本,不在这篇展开——跟官方 README 和网上现成文即可。
3.1 为什么用 llama.cpp 收这一篇
llama-server 可 OpenAI 兼容 HTTP:聊天、向量、重排 用不同参数拆进程;对话占 GPU,向量+重排占 CPU,在 12G 上省显存给长上下文。
3.2 编出什么
clone 官方仓库后 CMake 编出 llama-server、llama-quantize;HF 转 GGUF 另有 Python 与 convert_hf_to_gguf.py,建议独立 venv。
3.3 HF 全精度 → F16/BF16 GGUF → Q4:是什么、本文不另发长教程
- 主线索:Hugging Face 全精度树 → 先出未 Q4 的高精度 GGUF → 再用
llama-quantize到Q4_K_M等。 - 不要在第一步 convert 时就把 4bit 和「给 llama 用的最终档」混为一谈。
- 4B 对话 本实验用 Q4_K_M 档 GGUF 一类即可;具体文件名随你本机。
这类逐步命令、本机排障、venv,作者有一份长笔记;不随本专栏另发长文。你需要时:搜 「llama.cpp convert hf gguf quantize」 或同专栏若后续有短文再跟。
3.4 BGE 的 GGUF 从哪来
- 常与 4B 对话 分开下、社区转好的 BGE GGUF 为主;embedding 用
--embedding --pooling cls,rerank 用--pooling rank+--reranking等与 当版本llama-server文档 对齐。 - F16 先跑通再换更狠量化。
4. 三进程:谁占 GPU、谁占 CPU + 唯一建议「对外可抄」的附录位
| 进程 | 设备 | 职责 | 示例端口 |
|---|---|---|---|
| A 对话 | GPU | …/v1/chat/completions | 如 28080 |
| B 向量 | CPU | …/v1/embeddings | 如 28081 |
| C 重排 | CPU | …/v1/rerank | 如 28082 |
- 主对话 开约 8192 上下文(如
-c 8192)对齐「8k 实验」;OOM 时先减-c或-ngl。 - B/C 进程 对应用 空
CUDA_VISIBLE_DEVICES+-ngl 0,避免和 A 抢显存。
教程:三进程启动——对话(GPU)/ 向量(CPU)/ 重排(CPU) (() 为占位;发布后 补 GitHub/文档内锚点或同专栏长文。)
一句提醒:主对话用 GPU、向量与重排用 CPU 分进程——是这套三服务的摆法,别和「重复起、叠多套」混在一块儿想。
5. 本篇止笔线
本机应能验收:三服务 + 8k 级对话 + 向量/重排 HTTP 正常。业务编排、Lang…、捞上下文 ——下一篇。
下一篇:《12GB 推理与编排:LangChain、LangGraph 与「捞上下文」
附:与「长教程、备忘」的边界(不随本文单独发布)
| 内容 | 读者怎么找 | 作者说明 |
|---|---|---|
| 三进程(分端口、curl、排障) | 同专栏搜索文章 | 目前只发这一个 |
| HF → F16 → Q4 全流程 | 搜 官方 llama.cpp + HuggingFace 模型页 | 长命令不占用本篇 |
| cmake、12G 上 int4 目录、执行排障 | 同左;或专栏后续短文 | 不单独发与本文同级的「执行手册体」 |
系列第 2 篇。勘误以 llama.cpp 与模型卡为准。