
缓存先跑起来工程日常
Lv.1一边拒绝无效加班,一边提升工程效率。主要研究软件工程与问题排查,记录开源工具使用、项目复盘以及那些看似简单却很容易踩坑的问题。偶尔更新生活观察,主要还是认真做事。
发表的评论
我也被chunk坑过一阵,后来发现别死磕固定值,先看文档类型。论文和代码块可以按语义切,段落超长的再二级切,重叠留个10%到15%就行。bge-large-zh对512左右比较友好,太长反而稀释语义。判断好坏我一般看召回前5里有没有答案,再人工扫一遍,比瞎调参数靠谱。
空input确实容易让模型学岔,我试过alpaca模板里input为空还硬塞个空标签,loss直接起飞。建议把instruction和input合并成一段不带字段的文本,或者干脆换成只有instruction/output的两段式。另外1个epoch两万条用2e-4的lr偏高了,LoRA一般1e-4到2e-4但得配合warmup,你检查下scheduler。eos_token没加也会让模型不知道在
同步调用这个点其实挺容易踩坑的,我之前也遇到过类似的情况,卡在工具调用那里半天没反应。你日志里只有 timeout 的话,可以先确认一下 MCP server 那边是不是真的收到请求了,有时候问题出在 server 内部某个 handler 阻塞住了,比如它自己在等一个 IO 或者子进程没退出来。另外 PyTorch 训练流程里如果是在主线程做同步调用,GIL 加上 dataloader 那些后台
工具描述一定要带上,不然模型根本不知道参数怎么填。建议把正确调用和错误纠正都做成样本,光喂对的学不会避坑。
我之前也踩过类似的坑,后来发现chunk大小其实得看查询的粒度。像“API鉴权”这种偏概念的问题,大chunk保留了更多上下文,ada本身语义捕捉也强,所以容易命中;而“如何配置超时”更像找具体操作,小chunk切得细反而定位准。bge-small虽然轻量,但对长文本的语义压缩能力确实弱一些,配小chunk容易丢信息。我现在习惯按文档结构切,再拿几个典型query做小批量对比测试,比死磕固定参数管
这个问题我也遇到过,感觉根子上还是模型生成代码时的“默认模式”在作怪——它倾向于先给一个能跑通的主流程,异常处理这种防御性代码天然优先级就低。你光在Prompt里说“要健壮”,它理解得太抽象了,落不到具体分支上。我后来试过一个办法,就是不让它一次性写完整脚本,而是先让它列出所有可能出错的点,比如文件为空、编码不对、字段类型不匹配、网络超时,列完之后再让它逐个补处理逻辑,这样它就不容易跳过。另外把错
你这个问题不一定是量化引起的,YOLOv5转ONNX最常见的坑其实是预处理没对齐,比如letterbox的padding值、归一化方式或者BGR/RGB顺序。另外后处理里anchor解码和NMS如果直接搬PyTorch逻辑,有些算子onnxruntime实现会有细微差异,置信度整体偏低很可能是某一步数值精度掉了。建议先把预处理和后处理都固定成numpy手动实现,排除掉算子影响,再对比中间层特征图差
这个坑我也踩过,LLM生成Prompt时确实容易把硬约束当“建议”而不是“铁律”。后来我试了个办法,把那些必须出现的规则单独拎出来,写成校验清单,生成完再让另一个模型逐条核对,缺了就重写。另外业务背景别一次性塞太多,按场景拆成小块喂给它,命中率会高不少。
我之前也遇到过类似问题,后来换了方案。
能稳定复现想要的效果就算入门了,进阶得靠多拆解别人的prompt再自己动手改。
你描述的这个现象其实挺典型的,我踩过类似的坑。表面看是“换问法就崩”,根子上大概率是数据分布太窄——3万轮听着不少,但如果都是标准退换货流程,模型根本没学过“同一个意图的多种表达”和“多轮里话题跳转”该怎么接。LoRA本身不太会改坏基座的中文能力,但rank和lr调来调去收益有限,恰恰说明瓶颈不在参数上。你验证集BLEU高也可能是假象,因为验证集跟训练集同分布,测不出真实泛化。建议先做个badca
微调别碰检索内容,只教它怎么组织话术就行,不然肯定背串。
按标题层级切确实更靠谱,代码块建议整块保留别硬拆,不然语义全散了。
分块别只调大小,试试按标题或段落切,再配个重排模型,苹果手机和种植手册就能分开了。
32B的AWQ权重本身大概就占18-20G,剩下的显存全被KV cache吃了。你把gpu_memory_utilization从默认0.9降到0.85左右,再设max_model_len=4096、max_num_seqs=4试试,QPS不高的话这样基本够跑demo了。另外确认下你用的vLLM版本,新版对量化模型支持好很多,老版本有时候权重加载方式就不对。实在不行加个enforce_eager,
先别急着换模型,加个rerank试试,bge-reranker对这类语义漂移挺管用的。
ResNet50在ImageNet上预训练,学到的特征更偏语义分类,对“猫狗毛绒玩具”这种细粒度区分确实不敏感,检索时混进来太正常了。你可以在特征层面直接做L2归一化,再换成余弦距离,效果通常比不归一化好一截,因为Milvus里内积和余弦在归一化后基本等价。但光靠归一化救不了语义鸿沟,建议试试CLIP或DINOv2这类图文对齐/自监督模型,512维换成它们的embedding,同类图片的聚集性会明
我踩过一模一样的坑,后来发现关键不在长度,而在信息密度。你那1000字里估计有一半是模型不需要的废话,反而稀释了真正的指令。我现在习惯用分隔符把任务、字段定义、示例切成独立块,每个字段只说一次,效果比堆一堆背景描述稳多了。另外抽取任务里示例别给太多,一两个就够,给多了模型容易照抄示例内容而不是真读输入。
这情况挺典型的,我前阵子用Qwen做类似任务也踩过一模一样的坑。loss降到1.2不代表模型学会了“只输出标签”,它可能只是学会了训练集里那句话的分布,而你的数据里如果标签前后还有点解释性前缀,它就会照搬那种语气。5000条里哪怕只有一两百条带“我认为”“根据描述”这种句式,模型也会当成模式学进去。你可以先抽样看看训练集的completion部分是不是真的纯净,很多人preprocess的时候把p
7B对措辞敏感太正常了,试试把任务拆成“先写框架再补细节”两轮问,稳定很多。