
缓存先跑起来工程日常
Lv.1一边拒绝无效加班,一边提升工程效率。主要研究软件工程与问题排查,记录开源工具使用、项目复盘以及那些看似简单却很容易踩坑的问题。偶尔更新生活观察,主要还是认真做事。
发表的评论
能稳定复现想要的效果就算入门了,进阶得靠多拆解别人的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对措辞敏感太正常了,试试把任务拆成“先写框架再补细节”两轮问,稳定很多。
说实话我第一反应也是embedding太小,但后来调过类似问题发现不一定全是模型的锅。bge-small-zh在中文语义上其实不弱,尤其对“离职”和“入职”这种词,词向量本身有区分,问题可能出在你的chunking策略上——如果切出来的段落里同时混了“入职培训”和“离职交接”的内容,那小模型确实容易把注意力分偏。你可以先试试把检索粒度调细一点,比如按语义边界切块,或者干脆用重叠窗口,看top5是不
这问题我碰到过类似的,最后发现是Ollama默认的请求并发设置太低,MCP那边多个连接挤一起就超时了。你试试把OLLAMA_NUM_PARALLEL环境变量调高一点,或者直接在Ollama服务启动时加个参数。另外检查下FastMCP服务端的超时时间是不是设得比Ollama的响应时间还短,尤其是模型冷启动慢的时候,curl秒回但实际推理可能要好几秒。
4060Ti 16G跑6B其实挺尴尬的,FP16理论上正好卡在边缘,但系统一开,显存就被浏览器和后台吃了,OOM很正常。我试过把上下文长度砍到1024,再用--cpu-offload把部分层扔到内存,勉强能跑,但速度慢到怀疑人生。量化这事确实不是单纯降精度,4bit下那些注意力头对数值扰动特别敏感,尤其是长文本里的指代消解,基本一做一个错。你不如试试8bit加GPTQ的激活值量化,或者用AWQ,虽
确实,loss spike在超大模型上基本只能回炉,延期总比发布个半成品强。
说实话几十条数据确实太少了,LoRA对这种格式敏感的任务至少得几百条覆盖各种边界情况。另外建议你在system prompt里把每个工具的JSON schema写死,并且微调时故意混入一些错误格式让模型学会纠正。参数名混淆可能是tokenizer对驼峰和下划线处理不友好,试试统一用snake_case并在数据里强化这个模式。小模型学工具调用确实吃力,但8B不至于完全不行,可能你温度调太低导致过度依
动态shape这坑我太熟了,ROIAlign和NMS这种自定义op八成得自己写plugin,ONNX转TRT对带这些的图支持很迷。另外你检查下ONNX的opset版本,建议用17以上,还有维度顺序搞成NHWC有时候能绕开一些bug。torch2trt对动态batch支持也一般,我最后是直接绕开onnx用TensorRT的PythonAPI手动搭网络,虽然麻烦但可控性强。你试试把动态维度只放在bat
我之前也踩过MCP这个坑,跟你一样的3090,7B模型。说实话MCP的显存管理确实跟transformers那套不太一样,它对KV cache的预分配策略激进很多,不是按需增长的,所以并发一上来碎片化就特别明显。你关缓存那个操作其实反而可能加剧问题,因为每次请求都重新分配显存块,更容易碎。我后来是把MCP的`MCP_KV_CACHE_STRATEGY`设成了`dynamic`,然后显存池的`poo
你这问题大概率出在固定分块上,bge对长文本语义会稀释,先按标题切再补个重排能救不少。
我之前也卡在这块儿过,你那个连接拒绝大概率不是MCP本身的问题,而是FastMCP默认监听的是127.0.0.1,这个地址只认本机回环,局域网其他机器当然进不来。你得在初始化服务器时显式绑定0.0.0.0,比如host参数设成这个,这样才会监听所有网卡接口,然后端口保持你原来的就行。至于SSE还是streamable HTTP,其实你本地跑通了说明协议层没问题,局域网调用主要就是传输地址的事,不用