
脚本保持在线的开发者
Lv.1接口可以超时,学习和复盘不能停。主要研究软件工程与问题排查,记录代码实现与工程实践、问题排查与调试以及那些看似简单却很容易踩坑的问题。技术会变化,解决问题的方法值得长期积累。
发表的评论
我也遇到过这个问题,说白了Cursor的默认行为就是把整个文件当上下文,你选中了代码它也知道,但它觉得“顺便优化一下”是帮你忙。后来我发现一个比较管用的做法是用Composer而不是Inline Edit,在Composer里明确说“只输出被选中函数的修改版本,其他代码原样返回”,然后把选中范围粘贴进去,这样它就没有机会去碰别的部分了。还有一个技巧是在项目根目录放一个.cursorrules文件,
同款4090跑7B的痛,我最后是换vLLM加AWQ量化解决的,显存压到13G左右,长文本崩的情况好了不少。你那个NF4掉质量估计跟量化粒度有关,可以试试GPTQ的4bit group_size调到128,比NF4稳一些。还有就是把KV cache的dtype设成fp8,能再省个1G多,vLLM里直接加--kv-cache-dtype fp8就行。实在不行就咬牙上24G吧,4090这卡跑7B确实卡在
FP16下PyTorch 2ms其实已经很快了,ONNX变慢一倍挺常见的,尤其ResNet这种带残差的结构。你试试导出时加do_constant_folding=True,然后runtime里把graph_optimization_level设成ORT_ENABLE_ALL,另外intra_op_num_threads手动设成物理核数,别用默认值。还有个坑是GPU上onnxruntime默认可能没
我试了下局部调整确实丝滑不少,但全局风格迁移那块也踩了跟你一样的坑——让它“统一圆角”,结果只改了卡片没动输入框。感觉问题出在它把“整体”理解成了“可见区域内的主要元素”,而不是设计系统的全局参数。你提的撤销和版本回退记忆我也好奇,要是多轮改完再回退,对话上下文会不会跟画布状态打架?这块没搞好的话,迭代几次就乱套了。
几百条数据训3个epoch,loss降了不代表模型真学到了东西,很可能只是在拟合那点样本。你rank=8配alpha=32其实scale挺大,加上lr 5e-4对LoRA来说偏高了,容易把原模型能力带偏或者干脆没学到有效模式。建议先拿训练集里的样本直接推理,看模型能不能复现出目标风格,如果连训练集都答不对,那基本是训练配置或数据格式的问题。另外Qwen2.5的chat模板要跟训练时严格对齐,格式错
你这个情况还挺典型的,暴力检索准说明embedding本身没问题,那大概率就是索引近似搜索的锅。IVF_FLAT和HNSW都是ANN算法,召回率天然会低于暴力计算,尤其HNSW如果efSearch设小了,实际扫的候选集不够,掉点很正常。想问下你nprobe调到多少了?50万条数据的话nlist一般设sqrt(N)≈700左右,但nprobe如果只给个位数,那基本等于只查了一小片,召回肯定拉胯,可以
我去年也纠结过这个问题,当时数据量八十多万条,用ES的dense_vector加knn检索跑得挺稳,延迟基本在几十毫秒。后来换成qdrant主要是被过滤场景逼的,ES做pre-filter再knn有时候会掉召回,尤其按用户ID或者时间范围过滤的时候,它那个过滤和向量检索的执行顺序不太可控。向量数据库在这块确实更原生,milvus的partition和标量过滤配合得比较顺,qdrant的payloa
量化后模型对prompt确实更敏感,建议先固定seed对比本地和线上输出,别急着调参数。
7B做多步Agent确实容易乱,先试试在每轮tool调用后强制重置上下文,别让它自己记历史。
工具返回后加个格式校验再喂给Agent,不然它老把正常JSON当报错。
MCP 本身不管进程编排,它只是工具调用层,你让它去传 rank 和 world_size 有点为难它了。我之前也踩过这个坑,torchrun 那套环境变量得在 MCP 调起的启动脚本里自己 export 好,别指望协议层帮你透传。更稳的做法是 MCP 只负责拉起一个 wrapper,DDP 的 rendezvous 还是交给 torchrun 或者你手写的 launcher 去管。你那个 ini
ChatGLM3-6B直接做rerank确实不太行,它的注意力机制在长文本上容易稀释关键信息,尤其是财报这种数字密集的。你可以试试换个思路,别让大模型直接打分,而是让它抽取关键片段再做匹配,或者用专门训练的reranker比如bge-reranker-v2-m3,效果会稳很多。另外query那边也可以做点扩展,长文档检索光靠原始query往往抓不住重点。
bge-m3对长文档确实吃亏,试试按段落切分再配BM25混合检索,差距能缩小不少。 中文场景GTE-large微调下效果不输闭源,预处理别偷懒,术语库和同义词替换得先搞起来。
说真的,Agent这块别被框架带偏了,PyTorch直接写推理完全够用,ReAct这种循环逻辑瓶颈根本不在框架上,而是LLM调用延迟和工具返回的解析。TensorFlow Serving那套更多是给高并发生产环境准备的,你本地搭个demo或者内部工具用不着上那么重的部署。我之前拿PyTorch跑过一个带记忆的Agent,只要把torchscript导出好,速度跟TF Serving差别不大,关键是
我最近也卡在这块,后来发现prompt写太细反而坏事,模型容易死抠字眼。我现在就留三行:角色设定、检索片段使用规则、再加一句“没有依据就直说不知道”。另外建议你把召回的前几段内容打印出来看看,有时候不是prompt问题,是检索回来的东西本身就对不上问题。
说实话我建议你主攻PyTorch,把底层原理吃透,TF会写能部署就够了。现在学术圈和工业界新项目的代码几乎都是PyTorch,你实习也验证了这点,而TF Serving那套东西用ONNX中转一下其实也没多难。torch.compile和XLA现在差距没那么大,尤其动态shape场景下PyTorch反而更省心。我踩过的坑是当年死磕TF的静态图,写自定义算子那叫一个痛苦,换PyTorch后纯Pytho
试试按语义切分吧,比如用文本分割器先找句子边界再合并,比固定长度稳得多。另外embedding模型确实有影响,小模型对长文本的语义捕捉弱一些。
看到你这情况我倒觉得挺正常的,LoRA在代码补全这种需要强逻辑连贯的任务上,往往学到的只是表面风格,深层语义还是得靠基座模型自身的先验。你可以试试把秩调到64或128,或者干脆用QLoRA全参数微调,虽然吃显存但4090也不是完全扛不住。另外FIM格式的训练,掩码策略和上下文比例很关键,你确认下是不是挖空位置太随机导致模型学到的是“猜”而不是“推”。要还是不行,建议换个思路,直接用基座模型加更好的
同感,尤其是多线程那块,它写出来的同步代码我每次都得盯着看半天,生怕哪个锁没放对。我的办法是把AI当结对编程的实习生,只让它出骨架或者单点实现,业务核心还是自己写,省得拆它那些花里胡哨的包装。另外提示词里明确写“保持简单,不要额外抽象”,能稍微治一下它的“封装瘾”,但真遇到复杂状态流转,还是别指望它了。
vLLM本身支持paged attention,你说的Flash Attention其实是另一码事,主要省的是计算时间不是显存。我建议先开下--enable-prefix-caching,把共享前缀的请求缓存住,小流量下能明显降峰值。另外4bit GPTQ建议用AWQ或者GPTQ-Marlin内核,显存能再挤出来一点。真不行就上两张A100做张量并行,但注意13B模型2卡TP通信开销不小,小并发反