12G 显存跑 27B:NInfer + KVMem 推理引擎本地部署实战(sm_120 避坑全记录)
12G 显存跑 27B:NInfer + KVMem 推理引擎本地部署实战(sm_120 避坑全记录)一、背景与目标手里的机器是 RTX 5070 Ti Laptop(12GB 显存)+ 31GB 内存。目标很明确:在本地把 Qwen3-27B 跑起来,并且不是「能聊天」就行,还要满足两个硬需求: OpenAI 兼容 API——这样 ZCode、Codex、各种客户端可以直接接入; 对话 / 工具双模式——聊天时要发散,给 Agent 当工具时要收敛。 最终选型是 NInfer 推理引擎 + KVMem 改造版。这篇文章把完整部署过程、五个「缺一不可」的环境变量、12GB 显存下的选型账,以及那些「照抄默认配置就会炸」的坑,一次讲清。 二、架构硬约束:选错就直接拒NInfer 按 GPU 架构分发引擎包,没有回退机制,选错架构不是性能差,是根本起不来: 架构 对应显卡 引擎包 sm_86 30 系 infer-engine-sm86 sm_89 40 系 infer-engine-sm89 sm_120 50 系(Blackwell) infer-engine- ...
LoRA 微调显存测算与踩坑实录
经验驱动。微调前先算账——很多人显存爆了都不知道钱花在哪。下面是我本机按真实公式算出来的 7B 显存账,以及 27B 本机实战的踩坑。数字都是算出来的,不是拍脑袋。 先算账:7B 模型到底吃多少显存以 bf16 精度、7B 参数为基准,显存主要由四块构成:基座权重 + 优化器状态 + 梯度 + 激活值。前三项只和参数量有关,先算清楚: 部分 计算 显存 基座权重(bf16) 7e9 × 2 14.00 GB 全量微调·优化器(AdamW) 7e9 × 12 84.00 GB 全量微调·梯度 7e9 × 2 14.00 GB 全量微调合计 112.00 GB 关键认知:全量微调的显存大头不是权重,是 AdamW 的优化器状态(fp32 主副本 + 一阶矩 m + 二阶矩 v,共 12 字节/参数)。所以 7B 全量微调要 112GB,单卡 80GB(A100)都吃紧。 LoRA 把账砍到哪了LoRA 的核心思想:不训全量权重,只在权重旁挂一对低秩矩阵 A(r×d)、B(d×r),只训 A、B。以 r=8、目标模块 224 个(LLaMA 类每层 q/k/ ...
Scrapy 反爬实战:代理、UA 与限速的攻防
经验驱动。下面这套攻防是本机真跑的:我起了一个会”拦默认 Scrapy UA + 限速”的本地测试站,再用 Scrapy 蜘蛛绕过去。真实状态码和重试过程都贴在下面——不是我编的。 反爬站怎么拦(我写的测试逻辑)测试站两条规则:① User-Agent 含 Scrapy 或为空 → 返回 403;② 1.5 秒内重复请求 → 返回 429。 真跑证据先验证反爬是否生效(用 requests 直接打): 12默认 Scrapy UA 状态码: 403 (被拦)伪装浏览器 UA 状态码: 200 (通过),首页含标题: True 再上 Scrapy 蜘蛛(自定义 UA + DOWNLOAD_DELAY=2)。日志里能看到完整攻防: 1234567GET / HTTP/1.1 403 # 默认 UA 被拦(验证阶段)GET / HTTP/1.1 200 # 浏览器 UA 通过(验证阶段)GET / HTTP/1.1 429 # 蜘蛛首请求太快,触发限速GET / HTTP/1.1 200 # Scrapy 自动重试(延迟 2s 后)成功GET /ap ...
🤖 从文本到公众号草稿:一条全自动流水线,和它踩过的 12 个坑
这条流水线的目标很朴素:给一个主题,自动产出一篇文章 + 两张配图,直接躺进公众号草稿箱等人来扫二维码。 它最初的形态是从一段教学录屏里逐帧还原出来的。跑通之前我照着抄,跑通之后发现视频里教的三条关键做法,在这台机器和这个账号上全都不成立。下面记的是重写之后的版本,以及一路踩出来的坑。 一、整体链路123456Phase 0 素材获取 链接 / 纯文本 / 一句话主题 → 正文素材 + 数据出处清单Phase 1 解读 原文 → 观点改写,产出 3 组核心句Phase 2 选风格 + 配图 三套模板选一,生 2 张图(封面 2.35:1 + 插图)Phase 3 生成 HTML 微信兼容的全内联样式 HTMLPhase 4 注入后台 Playwright 打开编辑器 → 标题 → 正文 → 存草稿Phase 5 发表 弹窗链 → 二维码(人工扫码,绕不过) 前 4 个 Phase 全自动,第 5 步必须人来。这不是偷懒,是微信的硬性安全机制。 二、三条红线(踩过就别再踩)红线 1:整个 Phase 4 只允许开一次浏览器最早我用 ...
向量数据库选型实测:Milvus / Chroma / Qdrant
⚠️ 本文为公开资料整理版(占位):基于三者官方文档与社区对比梳理,用于建立选型框架;本人尚未在同一数据集上完成三方横向压测,真实性能数据待补实践后替换。面试时可以据此讲清「选型逻辑」,但写进简历前请亲手跑一遍。 一、先想清楚要什么选向量库前先问三个问题: 数据量多大?千级 / 百万级 / 亿级? 部署形态?单机嵌入式还是要分布式集群? 要不要和检索框架、重排、元数据过滤深度集成? 不同答案直接决定选型。 二、三者定位 Chroma:开发者友好,嵌入式起步,几行代码能跑,适合原型和小项目。代价是大规模下的运维能力弱。 Qdrant:Rust 实现,性能和内存效率高,过滤(payload)能力强,云托管成熟,适合中大型生产。 Milvus:面向海量(亿级)的分布式向量库,架构最重,运维成本高,但扩展性是三者最强。 三、对比速查 维度 Chroma Qdrant Milvus 起步成本 极低(pip 即用) 低(Docker) 高(分布式) 单机性能 中 高 高(规模取胜) 分布式 弱 中 强 元数据过滤 一般 强 强 适合阶段 原型/小项目 生产主力 ...
手搓生产级 RAG:不依赖 RAGFlow 的完整链路
我把 RAGFlow 摸透之后(见 RAGFlow 切片策略实战),反过来手搓了一套不依赖任何框架的 RAG。为什么还要手搓?三个理由:依赖轻、逻辑透明、能精细调每一环。这篇把完整链路和踩坑讲清楚。 一、链路全景1文档加载 → 切分 → 向量化 → 入库 → 检索 → 重排 → 拼 prompt → 生成 → 引用约束 框架帮我们封装了其中几步,但每步独立替换才是手搓的价值。 二、切分:比想象中重要切得不对,检索必崩。我的经验(和 RAGFlow 切片那篇一致): 不要固定字数硬切,按语义/标题层级切,保留上下文窗口; 中文要指定语言,否则按空格断词直接废; 重叠窗口(overlap)能救「答案被切断」的case; 改了切分策略,旧文档必须删了重传重切,否则新旧混着检索会乱。 三、向量化:选对句向量模型 中文场景优先用中文优化的 embedding(bge / m3e 系),别拿英文模型硬上; 维度不是越大越好,768 维通常够; 入库前先 normalize,检索时用内积等价于余弦,省算力。 四、检索:混合检索才是基线纯向量检索在「专有名词、精确匹配」上很弱。我的做法: 关 ...
命名实体识别 NER:从标注到上线
经验驱动。实体识别是信息抽取的第一步,也是搜索、知识图谱、风控的底层能力。本文用本机真实跑通的 bert4ner-base-chinese 讲清楚:模型怎么抽、真实输出长什么样、有哪些坑,以及一条能从”标注”走到”上线”的完整链路。 什么是 NER命名实体识别(Named Entity Recognition)是从文本里找出实体并给它们分类,比如人名、机构名、地名、时间。它是序列标注任务:给每个 token 打标签。 最常用两套标注体系: BIO:B-实体(开头)、I-实体(中间/结尾)、O(非实体)。例如 李/B-PER 明/I-PER。 BIOES:在 BIO 基础上加 E(结尾)、S(单字实体),边界更精确,评估时更不容易歧义。 中文 NER 比英文难在:没有空格分词,实体边界要靠模型自己学;还有大量未登录词(新公司名、英文名实体)。 真跑:用 bert4ner 抽实体bert4ner-base-chinese 是基于 bert-base-chinese 的中文 NER 模型,标签体系是 B/I-PER、B/I-ORG、B/I-LOC、B/I-TIME、O。本机推理代码: ...
🎥 视频提示词:写之前先答三个问题
分镜写完了,冻结关键帧也写完了,接下来是把它变成视频提示词。 这一步最容易出的错是没搞清这镜到底是文生还是图生就动笔。写错了基础假设,后面整段正文的写法都是反的——文生视频却只写”保持已有外观”,等于什么都没说,因为执行端根本没收到可供保持的图片。 一、先答三个问题拿到分镜的”输入参考图”字段,逐槽位回答: 路径回答”送哪一张图” 用途回答”它在本镜负责什么” 顺序回答”在可复制正文里叫哪个标签” 答不了这三问的槽位,不算准备好。 这三问同时也是自查表。很多”绑了图但提示词说不清画面里有谁”的文档,根子就在槽位里没写用途。 二、四种状态,只有一种能投产 分镜里的写法 实际含义 走哪条路 有可读的真实 REF-... 图在项目里 图生视频,可投产 PLAN-... 槽位 图在创作者自己的工具里 图生视频,项目内无文件,不能投产 无(创作者已明确选择文生视频) 明确不用图 文生视频 无(待补参考图:……) / 普通的”无” 未准备好 先补图,不是文生授权 第三行和第四行只差几个字,含义完全相反。**”没有图”不等于”不用图”**:前者是缺口,后者是选择。把 ...
ONNX 模型上线提速:从 sklearn 到 onnxruntime
经验驱动。下面这条提速链路是本机真跑的:sklearn 训练 RandomForest → 转 ONNX → onnxruntime 推理。结果很硬:单条推理从 4.55s 降到 0.029s,加速 157 倍,预测一致率 0.999。 为什么要把模型转 ONNX模型训完要上线,常卡在三件事:① 部署环境没装 sklearn/torch 整套 Python 依赖;② Python 推理慢、GIL 锁并发;③ 要跨语言(C++/C#/边缘设备)。ONNX 是”模型的中间表示”——把训练框架的模型导出成一个标准文件,再用 onnxruntime(纯 C++ 引擎,各平台都有)推理,去 Python 依赖、还能大幅提速。 真跑链路1234567891011121314# 1) sklearn 训练(略)clf.fit(Xtr, ytr)# 2) 导出 ONNXfrom skl2onnx import convert_sklearnfrom skl2onnx.common.data_types import FloatTensorTypeonx = convert_sklearn(clf, ...
句向量与文本相似度:用 sentence-transformers 实战语义检索
经验驱动。本文所有数字都来自本机真实运行:sentence-transformers + BAAI/bge-small-zh-v1.5,CUDA 可用(torch 2.12+cu128)。遇到什么坑、怎么解、bge 到底该怎么用,全写在这里。 为什么需要句向量做语义检索、文本去重、聚类、召回排序时,关键词匹配(BM25)不够——“怎么退款”和”如何申请退钱”字面不重叠但意思一样。句向量(sentence embedding)把整句话映射成一个稠密向量,语义相近的句子在向量空间里距离更近,用余弦相似度就能衡量。 它和词向量(Word2Vec/BGE 词向量)的区别:词向量是 token 级别,句向量是 sentence 级别,通常由”词向量 + 池化(mean-pooling / CLS)”得到,并且经过对比学习训练,专门优化句间距离。 真跑:加载与推理我用的是 sentence-transformers,模型是专门为中文语义检索训的 bge-small-zh-v1.5(维度 512,体积小、速度快): 1234567891011121314151617import osos.env ...
avatar
HYRX-TG
运维工程师 | AI算法学习者 | 热爱写作与技术分享
关注 河岳日星的 GitHub
公告
欢迎来到河岳日星的博客,记录技术与成长
最新文章
网站资讯
文章数目 :
122
已运行时间 :
本站总字数 :
171.6k
本站访客数 :
本站总访问量 :
最后更新时间 :
一言
:D 获取中...
:D 获取中...