
重新出发增长成长记
Lv.1以项目为主线推进长期学习。当前重点关注产品增长,通过项目推进与复盘、需求分析与方案设计持续提升能力;重视可维护性、稳定性与协作效率,并把过程整理成可复用的学习记录。
发表的评论
loss降不代表模型学会了答内容,更可能学会了你的数据里那些高频套话模板。5000条里如果“好的我理解”这类回复占比高,模型很容易偷懒复读。建议先抽几十条推理结果和原数据对比,看看是不是格式没对齐(比如没加eos或response模板有问题)。中文占比70%其实不算低,但Llama3中文底子一般,可以试试换Yi或Qwen的底座对比下。另外2e-4对LoRA偏大,跑3epoch容易过拟合到套话上,降
我也踩过这坑,后来发现光加“输出完整代码”没啥用,得把结构直接写死。比如在prompt里明确说按“import区、常量区、函数def、main入口”四段输出,再给个一两行的示例模板,稳定性能好不少。另外temperature调低到0.2左右也有帮助,别默认让它自由发挥。不过说实话,生成类任务想100%一致不太现实,我一般会再加一步让模型自己检查格式再输出。
24G卡跑7B FP16确实紧,光是权重就14G了,KV cache再占点,长上下文直接给你干爆。我之前也踩过这坑,后来发现其实不一定非得量化到4bit,可以试试8bit或者AWQ,效果损失比GPTQ小不少,显存大概10G出头能稳住。中文长文本断逻辑这块,除了量化本身,跟你的prompt格式和max_new_tokens设置也有关系,有时候是截断导致的假象。llama.cpp那个Q4_K_M幻觉多
我之前也踩过类似的坑,后来发现embedding和生成模型之间其实没有绝对的适配偏好,更多是看你的分块策略和top_k怎么配。bge召回准但漏细节,很可能是chunk切得太碎,关键上下文被拆散了,试试把chunk size调大一点、overlap加大。另外生成端可以加个prompt约束,明确要求“只根据检索内容回答”,跑题会少很多。text2vec那套召回偏宽松,top_k别设太高,不然噪声文档一
我最近也是4070跑Qwen2.5-Coder,改老项目同样被上下文坑过。后来干脆不硬塞整份文件,改成按类拆开聊,每次只贴相关方法和接口签名,效果反而稳不少。RAG我也试过,用llama-index配本地向量库其实没那么吓人,半小时能跑通,但检索质量得自己调。你要是不想折腾,建议先把对话切小、手动喂关键上下文,等模型再长长再说。
4090跑AWQ 4bit的Llama 3 8B才6-7 token/s确实不正常,我这边同配置能到40+。你先看看vLLM启动日志里有没有报AWQ kernel fallback到慢路径,有时候量化版本和vLLM的CUDA kernel不匹配就会走通用实现。另外合并LoRA后建议检查一下config.json里的quantization_config还在不在,我之前合并完忘了保留量化配置,vLL
学到了,感谢分享!
我之前也遇到过类似问题,后来换了方案。
有没有更详细的教程推荐?
有没有更详细的教程推荐?
刚入门,这个对我帮助很大。
我遇到过类似情况,最后发现是ReAct的prompt里历史记忆权重太高,Agent老在旧对话里绕圈,压根没去调新文档的检索。你可以先把历史对话清空测一下,如果新数据能出来了,那就是思考链路的问题。另外chunk太大确实会让新文档的向量跟子查询对不上,建议切小一点、overlap拉到20%左右试试。Milvus那边也顺手确认下索引重建后collection有没有真正load,有时候是加载滞后骗了你。
我之前也踩过类似的坑,几百份文档全塞进一个向量库,检索质量确实很难稳住。你问“上次讨论的API设计修改”,这种查询其实带了两层信息:一是时间/对话上下文,二是主题。纯向量检索只看语义相似度,分不清“上次”和“这次”,所以翻出无关接口文档太正常了。我的做法是把记忆拆成两层,对话历史单独走一个带时间戳和session id的存储,项目文档才走RAG,检索时先按session过滤再算相似度。另外chun
7B模型在40G上跑10并发按理说不至于爆,你检查过是不是ab压测时请求的max_tokens设太大了?输出长度直接决定KV cache占用,如果每个请求都生成上千token,那显存涨得飞快。另外max_num_seqs没设的话默认是256,你可以显式压到32或64试试,配合enable_chunked_prefill减少峰值占用。还有个容易忽略的点,Qwen2.5的vocab有15万,logit
我最近也在踩这个坑,多轮RAG确实历史一长就容易跑偏。我的做法是别把原始对话全塞进去,而是每轮结束后抽一个精简的“对话状态”,比如只留实体、意图和关键结论,下一轮带着这个摘要去检索。另外可以按轮次做滑窗,只保留最近两三轮的完整内容,更早的压缩成一句话。这样token能砍掉一大半,召回也干净不少,你可以试试看效果。
JAX 对小 batch 微调确实不友好,jit 的编译开销在 step 数不够多的时候根本摊不平,你单卡慢 30% 太正常了。BERT 这种模型本身算子就碎,PyTorch 的 eager 模式反而跑得顺,换 JAX 等于把动态图的灵活全砍了。多卡没加速八成是 sharding 没写对,pmap 对参数切分要求挺细的,数据并行和模型并行混着来很容易踩坑。要么把 batch 拉大让编译开销摊薄,要
MCP本身走的是JSON-RPC,传输层确实以文本为主,但你可以把tensor序列化成base64或者用共享内存传引用,client端再反序列化回来。我之前试过让server把numpy数组存成.npy丢到临时目录,返回路径给client读,虽然绕但能用。真正卡脖子的其实是延迟,数据管道每步都走一次RPC,训练循环里根本扛不住。所以MCP更适合做编排层,比如让Agent决定用哪套增强策略、动态调参
撤销和版本回退才是多轮对话的命门,不然改崩了没法回溯,谁还敢放手让Agent调参数。
这个情况我遇到过类似的,但未必是框架本身的锅。PyTorch默认用动态图,很多操作在调试模式下不会主动帮你做数值检查,而TF的静态图加Keras封装有时会在内部默默做clip或者对除零更宽容。你那个NaN大概率是某层输出在某个batch上爆了,比如BN的running stats跑飞,或者分割任务里某个像素的loss权重异常大导致梯度爆炸。可以试试在forward里逐层打hook,看看到底哪一层的
固定500字符切块对PDF表格和页眉页脚确实很不友好,我踩过一模一样的坑。后来改成按标题层级递归切,再对表格单独做摘要处理,召回质量提升很明显。你这个问题大概率不是top_k的事,是脏块太多把真正相关的内容挤下去了,可以先加个页眉页脚过滤试试。混合BM25和向量检索也值得搞,关键词类问题BM25能兜住不少向量漏掉的case。