
刚入门的机器学习玩家日常
Lv.1Developer,关注技术原理与工程落地,技术方向以AI应用开发、软件工程为主。持续整理模型选型与效果评估、提示词与上下文工程和可复用的工程方法;更关注能够真正落地的方法。
发表的评论
说实话bge-large在短文本上表现还行,但你这512字符切分对长文档真不太友好,语义容易被截断。我之前也踩过这坑,后来改成按语义段落切分,再配合sentence-window把相邻块一起送进向量库,召回率上来不少。另外你提到混合检索不稳定,建议试试在BM25和向量召回后加个cross-encoder重排,哪怕用个小模型也能过滤掉那些泛泛的概念段。不过你这情况我猜不全是embedding的锅,可
这问题我当初也踩过坑,vLLM默认的context window跟模型训练时的长度不一致,system prompt容易被截断或稀释。你可以先确认下启动参数里max-model-len是不是设成8192了,不够的话改成32768试试。另外,Qwen的chat template对system prompt的处理跟别的模型不太一样,最好检查下你是不是用了它自带的模板,别自己拼字符串。
LangGraph确实能搞,把状态机拆出来复用,token放全局池里按会话隔离就行。
T4瓶颈就是显存带宽,fp16硬跑7B确实吃力,建议直接上4bit量化,实测速度能翻倍。 量化用awq或gptq,效果崩不了多少,比现在慢吞吞强多了。
试试tp=4加AWQ量化,8卡dp跑两个实例,单卡占用能压到14G左右,吞吐还更高。
之前也遇到过类似的情况,后来发现是模型里用了太多中间变量没释放,尤其是DeepLabV3+的ASPP那块,建议用torch.cuda.memory_summary()看下分配细节,或者把backward的retain_graph关掉试试。另外检查下DataLoader的num_workers是不是开太多,有时候多进程缓存也会吃显存,我之前把workers从8降到2就好了。还有个笨办法,把模型输入换
这问题太真实了,我一开始也被它整得没脾气。后来在Cursor的Rules里写死了几条,比如“静态函数别用useCallback”“优先用type而不是interface”,代码风格一下就贴手了很多。不过跟同事一起用的话,还是得把这份规则同步到团队的.mdc文件里,不然换台机器又原形毕露了。对了,你们有试过让它模仿你们项目里某个老文件的结构吗?我用了这招觉得比单纯写规则好用,生成的东西一眼看去就是自
看到一个帖子说MemorySaver只管短时记忆,确实是这样,我这边做法是长期记忆单独用向量库存用户关键信息,对话时先检索再拼进State,这样State里就只放当前会话的上下文和检索结果。子图状态我一般每个子图只暴露必要的字段,用单独的TypedDict定义,父图传参时显式做映射,别图省事直接传整个State,不然改起来就是灾难。另外推荐看下LangGraph官方的agent例子,还有crawl
SGLang那个OOM调下--mem-fraction-static试试,我之前调低点就好了,vLLM可以开prefix-caching压首token延迟。
说实话你这配置单看没啥大问题,但生产环境翻车太常见了。chunk_size 500对中文其实偏大,尤其企业内部文档经常一段话里混着好几个主题,overlap 50又不足以把跨块语义接上,我建议你先试试200到300的块大小,overlap调到80左右,很多时候检索不准根本轮不到embedding的锅。另外bge-large-zh在通用领域还行,但你这是企业内部术语,比如“离职”和“招聘”在语义空间
直接给需求让它猜,错了再补一句就行,比反复雕琢prompt省心多了。 我都是先扔个大概需求,跑起来再针对报错修,比一开始就憋完美提示词快。
之前也卡这过,试试把reshape和flatten那几个层也加进dynamic_axes,光设输入没用。 我上次是模型里有个view写死了batch,改成-1就通了,你检查下有没有类似操作。
遇到过类似的坑,而且我怀疑问题不一定出在“过度记忆”上。你微调的时候只改了生成侧,但LLM的注意力模式是整个共享的,LoRA注入的低秩矩阵会潜移默化地重塑中间层的表征分布,哪怕检索embedding没动,模型对查询的编码也会受影响。我之前用Qwen做领域微调,检索器也是独立的bge,结果Top-10掉得更惨,后来做了个实验:把微调后的模型和基座模型分别拿去跑同一批query的向量相似度,发现微调模
试试在系统提示词里固定写“仅输出可运行代码,禁止注释和冗余变量”,比每次在prompt里说管用。
Agent的价值在复杂任务拆解和多步推理,简单查数真没必要上,先判断问题复杂度再决定要不要调度。
我之前也踩过这个坑,A100 80G跑32B AWQ其实完全够,但vLLM默认的gpu_memory_utilization是0.9,留给KV cache的余量太少了。你直接把环境变量设成0.7左右试试,或者指定--kv-cache-dtype fp8,能省不少显存。 另外max_num_seqs不用调太低,设成32就够demo用了,真正吃显存的是max_model_len,你如果输入输出长度不
实验室同门都默认PyTorch,你跟着大部队走准没错,图像生成这边生态也全。 PyTorch没跑了,HuggingFace都默认它,做生成模型省心一大截。
双卡48G跑32B FP16确实紧,但你这情况不一定非要上A100,可以先试试把max-model-len砍到8K或者4K,vLLM的显存占用大头在KV cache,chunked prefill配合起来能省不少。量化这块我自己测过,GPTQ在长文本上比AWQ稳一些,尤其多轮对话,但代码生成还得看量化粒度,4bit都掉点,建议拿你实际场景的数据跑个评测再定。FP8现在vLLM支持还不算成熟,别急着
DDP先跑通再说,loss怪多半是学习率没调,DeepSpeed等你把DDP吃透了再碰不迟。
显存持续上涨这个特征基本可以排除单纯中间变量没释放的问题,更像是有节点没从计算图里 detach 掉,导致反向时 graph 越积越长。你试试在 backward 里用 ctx.mark_non_differentiable 标记那些索引矩阵,这能让 autograd 不追踪它们。至于 scatter_add 反向,坑主要在重复索引的梯度累加顺序上,建议用 atomicAdd 而不是直接写回,同时