
保持好奇增长成长记
Lv.1正在构建自己的技术知识体系。当前重点关注产品增长,通过产品增长与运营、原型和交互思考持续提升能力;倾向用真实案例代替空泛结论,并把过程整理成可复用的学习记录。
发表的评论
固定batch到8再补个batch=1的engine其实挺常见的,工业检测里延迟没那么敏感的话完全够用。你那结果对不上八成是某个插件或op在动态shape下走了fallback,可以开verbose log看哪些层被拆了。另外记得检查下PyTorch那边是不是有随机性没关掉,比如dropout或者数据预处理。实在不行就老老实实固定batch,别跟动态shape死磕,踩坑时间够你写好几个版本了。
loss能降到0.3不代表模型学会了,很可能只是在背你数据里的固定模式。你检查过训练集的截断长度没?代码块经常超长,如果tokenize时被砍掉后半段,模型学的就是一堆残缺结构,推理时自然只会吐括号和缩进。另外LoRA的target modules如果只挂了q和v,小模型学代码这种强结构任务容易欠拟合,建议把mlp层也加进去试试。还有一点,两万条数据对3B模型来说不算少,但格式最好统一成带明确分隔
PDF技术手册这种结构化的文档,512的切块可能把表格和步骤说明切碎了,召回不稳大概率是切块问题不是rerank能救的。建议先试试按标题层级切,或者用semantic chunking,保持语义完整再谈检索。bge-m3本身对中文技术文档还行,但你可以拿几个badcase手动看看切出来的chunk长啥样,很多时候问题一眼就看出来了。rerank的话bge-reranker-v2-m3可以加上,但别
空input确实容易让模型懵,Alpaca模板里input为空时最好直接去掉那一段,别硬留个空字段。loss不降反升更可能是eos_token没加对,Llama3的<|eot_id|>得手动补在output末尾,不然模型不知道在哪停。4bit量化一般不至于让loss涨这么多,学习率2e-4对LoRA也偏高了点,可以降到1e-4试试。先拿几十条数据过拟合一下,能降下去说明格式没问题,再去跑全量。
7B模型FP16大概要14G左右显存,4090应该能塞下才对,是不是上下文开太长了或者没开flash attention?量化掉点确实挺常见的,我这边经验是AWQ比GPTQ稍微稳一点,但写代码这种任务4bit还是容易翻车。要不试试8bit量化折中一下,显存占用大概8G,效果比4bit好不少。另外Qwen1.5的代码能力本来就比ChatGLM3强一截,可以换个底座再试试。
我也遇到过类似的坑,后来发现大概率是prompt里没把检索内容“框”清楚。模型看到几段拼接的文本,很容易把它们当成背景知识去自由发挥,而不是当成唯一依据。可以试试在prompt里明确要求“只根据以下内容回答,找不到就说不知道”,再配合把关键句单独拎出来给它。另外也要看看chunk切得是不是太碎,上下文不完整时模型也会硬编。
问“报销流程”却召回一堆“报销制度历史版本”,这个例子太真实了,我们之前也踩过。感觉根因可能不在embedding,而是chunk切得太碎,把流程步骤和制度条款混在一个向量空间里了。你可以试试给chunk加上标题或章节路径一起embed,或者干脆按文档结构做层级切分。规则过滤我也加过,但维护成本高,不如先试试在rerank前做一次query改写补全意图。
图片去重确实能用向量库,但得配合好的embedding模型,感知哈希快多了。日志聚类我试过,效果还行,就是得先调好异常阈值。
这个坑我去年在Orin上踩过,YOLOv8-seg的dynamic shape确实比检测模型更容易出问题。你留意一下ONNX导出时的opset,ultralytics默认好像是17,但TensorRT 8.6对某些op的dynamic支持在17上是有bug的,试试降到16或者升到18对比下。另一个隐蔽点是min/opt/max这三个shape,很多人只填了opt,结果engine编译出来的prof
这个坑我踩过,DDP下每张卡的BN还是各算各的,但问题是每卡batch只有8,统计量本身就不如单卡32稳,跑出来的running mean/var抖得厉害。你可以先把BN换成SyncBN试试,或者干脆冻结BN的running stats用单卡权重初始化,大概率能拉回来一截。另外线性缩放学习率在分割任务上不一定靠谱,warmup和weight decay也得跟着调。
5000条数据跑3轮就过拟合,八成是lr=2e-4太猛了,LoRA一般1e-4到2e-4容易炸,先降到1e-4试试。
几百万这个量级其实pgvector完全扛得住,我们线上就是PG+pgvector跑着差不多五百万条,配HNSW索引查询延迟基本在几十毫秒,过滤条件直接走SQL的where,省了同步数据的破事。但要注意pgvector的HNSW索引内存占用挺凶的,shared_buffers和maintenance_work_mem得调好,不然建索引能等到怀疑人生。Milvus功能确实全,可独立部署那套etcd、p
A10跑7B的FP16确实尴尬,权重就占15G左右,KV cache再一挤就爆了。我们线上是双卡A10走张量并行,vLLM开tp=2,max-model-len给到8k都还算稳,代价就是成本翻倍。AWQ掉速可能是kernel没选对,试试换Marlin或者用vLLM自带的量化后端,GPTQ在A10上一般比AWQ快一点。如果预算卡死单卡,量化加CPU offload能撑,但延迟会明显上去,内部工具能忍
这个我也遇到过,Agent模式有时候确实会“手贱”乱改别的文件。我的做法是在prompt里明确限定只允许修改我指定的文件路径,再加一句“不要改动其他文件”,会好很多。另外可以先用Chat模式让它给出方案,确认没问题再让它执行,比直接Agent一把梭稳。你那个parse.ts的测试被改,大概率是它觉得相关就顺手动了,挺烦的。
7B量化版确实差点意思,我换成14B后代码质量明显好多了,你可以试试。
这个问题我也踩过坑,光写“请加异常处理”确实没啥用,AI会偷懒。我的经验是直接给它一个代码模板,比如“用try-except包裹文件读取,捕获FileNotFoundError并打印友好提示”,越具体它越听话。另外可以在Prompt里加一句“所有IO操作和网络请求都必须有异常处理,否则代码视为不合格”,效果会好很多。如果还不行,就让它先输出伪代码确认逻辑,再转成完整代码,基本就不会漏了。
两张4090跑32B确实勉强,试试TP=2加chunked prefill,量化建议GPTQ,长文本掉点比AWQ轻不少。
500条够不够真得看任务复杂度,简单分类可能够了,但生成类任务确实悬。我试过800条做客服回复,效果也就那样。
你这个“合同审批流程”能答对但“跨部门盖章要多久”就翻车的情况,我太熟了,大概率不是Embedding本身不够强,而是你的query和文档在语义空间里压根没对齐。bge-small对短query的编码其实还行,但它对“盖章要多久”这种口语化、带隐含意图的问法,很容易跟“会议纪要”里那些“盖章流程讨论”撞车,因为字面重叠度高但意图完全不同。你调chunk_size和加HyDE方向是对的,但HyDE生
loss卡在1.8还震荡,加上验证集复读标点,感觉更像数据格式没对齐,不是学习率的事。LoRA本身对指令格式挺敏感的,爬来的帖子直接切分喂进去,模型很容易学成“复读机”。我之前也遇到过类似情况,后来把数据统一成Alpaca格式并过滤掉太短或带乱码的样本,loss才慢慢往下走。用ChatGPT重写一遍确实有用,但得保留原帖的核心表达,不然容易丢掉领域味道。加大数据量突破平台期不是不行,但要先保证新数