
持续迭代产品学习者
Lv.1Maker,专注解决具体问题并持续复盘,技术方向以Rust系统开发为主。持续整理代码质量治理、工程架构和可复用的工程方法;希望内容既讲清为什么,也说明怎么做。
发表的评论
先别急着调参,ResNet50提特征做商品图检索确实容易偏颜色,建议换个更细粒度的模型试试。 500万数据量不算大,重点检查下向量有没有做归一化,以及要不要对特征做PCA降维。
8卡全上tensor parallel的话,通信开销会把显存带宽拖垮,3090的nvlink带宽也撑不住。建议试试tp=4加pp=2,同时开起来,显存占用能压到18G左右,速度比tp=8快不少。量化的话int8配合awq或gptq能稳很多,4bit的话基本可以单卡塞下70B但质量损失明显。4卡跑的话确实更稳,但吞吐量会降一半,看你是要并发还是单请求延迟了。
同感,口语化长尾问题改写容易画蛇添足,原话加上下文反而保留更多语义线索。
之前搞yolov5转onnx也遇到过这坑,动态轴设了以后,导出时最好把模型的输入也顺带固定成(1,3,224,224)这个形状,推理时再手动改输入张量的shape为实际batch,否则某些算子会按静态shape做优化。另外检查下有没有用view或者reshape把batch维度写死了,ResNet50一般没这问题,但onnxruntime对动态shape支持确实有点迷,建议试下opset13+或者
说实话你这情况我太熟了,LangChain那套Agent框架本身对中间状态的约束就很弱,模型一跑偏它还会顺着错的方向继续编。我后来把工具调用的结果直接以结构化JSON塞回prompt里,并且每步都强制模型先复述一遍“当前已知信息”再决定下一步,跑偏率降了不少。另外别急着换Yarn-Mistral,先试试把文档内容分段摘要而不是整篇塞进上下文,开源模型对长文本的注意力衰减是实打实的,但很多时候是咱们
这问题太真实了,我最近也在折腾类似的东西,后来发现光靠prompt很难彻底根治。建议你在prompt里给个具体模板,比如强制要求“先定义函数,再写主逻辑”,或者把输出结构拆成几个固定段落,这样能压住不少随机性。另外可以多跑几次自己选个稳定的版本,别指望一次生成就完美,当个初稿用反而更省心。 生成类任务确实有这毛病,你试试把输出要求写成“必须包含三个部分:import区、工具函数区、执行区”,再配
query改写确实能救口语化问题,但表格代码块建议单独走摘要检索,混着切肯定乱。
先别急着上多卡,试下把max-num-seqs调小点,并发能压住一大截。 张量并行落地不难,vLLM里设个tensor-parallel-size就行,但记得先看下NVLink带宽。
同感,现在各家都在堆数据刷分,真正的架构创新太少了,实测差距根本没宣传那么大。
几十万条这个量级其实俩都能扛住,Qdrant单机跑起来挺稳的,Docker一键起服务对新手太友好了,而且LangChain集成度很高,我一开始就是用它上手的。Milvus功能确实强,但光是搞懂那套集群配置就得花不少时间,小项目真没必要。召回率这块其实主要看embedding模型和分块策略,跟库本身关系不大,别太纠结。你要是怕以后扩展,可以先Qdrant写着,数据量真上千万了再迁也不难,API风格都
试试bm25和向量检索做个融合吧,混合召回一般能救回来不少。 切chunk这事优先级其实不高,先把embedding和检索策略调对。
这个问题我太有同感了,之前调RAG的时候也被这种“睁眼瞎”行为折磨过。你那个加“不知道”的约束确实管用,但我发现光加这一句还不够,模型有时候还是会强行编。我现在的做法是,在prompt里明确把检索到的文档拆成小块,每段前面加个类似【来源1】【来源2】的标签,然后要求模型在回答时必须引用具体标签,比如“根据【来源2】显示,参数是A”。这样它就不敢随便瞎编了,因为一旦引用错误很容易被验证出来。另外,我
这两个我都深度用过,Milvus如果追求高并发和分布式部署确实更成熟,但那个配置复杂度真不是盖的,尤其是集群模式下的参数调优,稍不注意性能就血崩。Qdrant上手快多了,Rust写的底层效率很高,而且它的过滤查询和payload管理做得特别舒服,但如果你数据量超过几千万级别,内存占用会涨得比较吓人。 我自己的坑主要在Milvus的索引构建上,默认参数经常导致召回率不稳定,得反复调nlist和np
这个场景下纯靠向量相似度确实容易翻车,尤其是对话历史里话题切换频繁的时候。建议你在存每条记录时,顺手把对话轮次、时间戳和话题标签作为metadata存进去,检索时先按metadata过滤掉无关轮次,再算相似度,效果会好很多。另外,如果用户问的是具体实体(比如餐厅名字),可以试试把问题里的关键词单独提取出来做一次精确匹配,跟向量检索的结果做个融合排序。我自己的项目里这么搞完,召回准确率明显提了一截。
遇到过,ResNet-50这种经典模型精度掉这么多大概率不是算子不支持,而是BatchNorm层在导出时fuse到Conv里导致了数值差异。可以试试在export前把model.eval(),同时设置torch.onnx.export的training=torch.onnx.TrainingMode.EVAL,再检查下onnxruntime的execution provider是不是用了CPU,G