12GB 本机实验:上下文链路先跑通——向量、重排与 llama.cpp 三进程

1 阅读5分钟

本稿 · 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-m3bge-m3 同代更重;主检索上 m3 再配
BAAI/bge-reranker-large更强、更吃资源跑通后再换
  • 工程上多 HuggingFace + PyTorchONNX不必和对话权重强行同格式。

2.3 一对「好搭配」

组合向量重排适用
省资源、先通bge-base-zh-v1.5bge-reranker-base32G 内存、CPU / 单卡 12G 类试验
bge-m3 全家桶bge-m3bge-reranker-v2-m3中英混、同代
要质量bge-large-zh-v1.5bge-reranker-large 或 v2-m3更吃资源,第二轮

2.4 本实验写死的组合

  • 向量 BAAI/bge-base-zh-v1.5、重排 BAAI/bge-reranker-baseGGUF 起服时与三进程同构即可(见 §4)。
  • m3 / large 留升级轮。

3. 总路线:环境 → llama.cpp → 权重(HF → Q4 GGUF)→ 三服务

3.0 环境

  • Ubuntu 类:没 CMake 往往编不动 llama.cppcmake + build-essential 为常见基线。
  • 对话走 GPUNVIDIA 驱动 + 能被构建系统找到的 CUDA-DGGML_CUDA 类选项llama.cpp 官方 docs/build.md 为准。
  • 其它系统、Windows、依赖版本,不在这篇展开——跟官方 README 和网上现成文即可。

3.1 为什么用 llama.cpp 收这一篇

llama-serverOpenAI 兼容 HTTP聊天、向量、重排 用不同参数拆进程对话占 GPU,向量+重排占 CPU,在 12G省显存给长上下文

3.2 编出什么

clone 官方仓库后 CMake 编出 llama-serverllama-quantizeHF 转 GGUF 另有 Python 与 convert_hf_to_gguf.py,建议独立 venv

3.3 HF 全精度 → F16/BF16 GGUF → Q4:是什么、本文不另发长教程

  • 主线索Hugging Face 全精度树先出未 Q4 的高精度 GGUF → 再用 llama-quantizeQ4_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 clsrerank--pooling rank + --reranking 等与 当版本 llama-server 文档 对齐。
  • F16 先跑通再换更狠量化。

4. 三进程:谁占 GPU、谁占 CPU + 唯一建议「对外可抄」的附录位

进程设备职责示例端口
A 对话GPU…/v1/chat/completions28080
B 向量CPU…/v1/embeddings28081
C 重排CPU…/v1/rerank28082
  • 主对话 开约 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 与模型卡为准。