1. 先把向量取值这个问题拆开看第一次看到Qwen3-VL-Embedding 的向量取值有何不同这个问题我第一反应是问的人到底在问哪一层的不同。因为在实际交流里这句话至少对应三种完全不同的诉求混在一起聊就会各说各话。第一种是数值层面这个模型吐出来的浮点数范围是多少有没有归一化norm 是 1 还是几十精度是 bf16 还是 fp32第二种是分布层面不同模态、不同长度、不同内容的输入向量的统计特征均值、方差、极值、能量集中在哪些维度差在哪第三种是语义层面把图文混在一起编码之后向量空间里的相对位置有没有变化同一张图的文本描述和图片本身到底靠多近。这三个问题答案不一样排查路径也不一样。我见过有人拿着一个范数 60 多的向量去和另一个范数 3 的向量算余弦相似度然后得出结论这个模型效果不行其实他压根没做归一化中间还混进了 padding。也见过有人把相似度阈值卡在 0.8结果图文检索召回率低得离谱因为他不知道高维空间里两个毫不相干的向量余弦相似度天然就会落在 0 到 0.2 这个区间里。所以这篇东西我打算从头捋一遍先讲清楚多模态嵌入模型的向量取值为什么和纯文本模型长得不一样根源在哪几层结构上然后给一套可以直接跑的代码把数值统计打出来看再聊这些取值差异往下游传导会在检索、聚类、阈值设定上带来什么具体麻烦最后把我自己踩过的坑整理成一张速查表。适合已经在用向量库做检索、但发现图文混检效果不对劲的同学也适合刚开始接触多模态 embedding、想搞明白这些数字到底意味着什么的新手。文中涉及的模型规模、维度这类具体参数不同版本会有出入请以你手里的模型卡为准方法是可以直接套用的。2. 取值差异的根源视觉 token 是怎么进序列的2.1 从一句话一条向量到一张图几百个 token纯文本嵌入模型的思路很简单一句话切成若干 token过完编码器做一次池化得到一条 D 维向量。整个过程里序列长度是可预期的一句话二三十个 token长文档几百个 token量级可控。多模态模型就不一样了图像进来之后要先过视觉编码器切 patch再按动态分辨率策略决定保留多少个视觉 token。同一张图你按原始尺寸喂进去和缩放到一半喂进去得到的视觉 token 数量可能差好几倍从几十个到上千个都有可能。这件事对向量取值的影响非常直接池化是对整个序列做的序列里视觉 token 占比越高最终那条向量的数值形态就越偏向视觉侧。一句十个字的文本配一张高清大图序列里可能有 95% 以上都是视觉 token这时候你做 mean pooling本质上是在给视觉特征做平均文本信号被稀释得很厉害。反过来纯文本输入里一个视觉 token 都没有取值形态又回到接近纯文本模型的样子。我的经验是如果你要拿这个模型做以文搜图query 侧是纯文本库侧是图片两边序列构成的差异会直接体现在向量范数和方向上。不做任何处理直接比天然就有一层系统性偏差。这不是模型的问题是池化把不同长度的异构序列压成一条向量时必然产生的现象。2.2 池化方式决定了取值的形状池化策略的选择比很多人想象的更影响最终取值。常见的三种做法各有各的取值特征。池化方式取值特征适用场景主要风险Mean pooling带 mask各维取值较平缓方差偏小norm 随内容变化不大通用检索、长文本关键 token 信号被平均掉Last token pooling取值更尖个别维度幅值明显偏大生成式模型的配套方案受序列末尾内容影响大图文混排时不稳定CLS / 专用池化头分布最规整通常配套训练过模型原生推荐方式必须严格按模型卡来不能自己换mean pooling 最容易被误用的地方是 mask。批次里长短不一的样本会被 padding 到同一长度如果 padding 位置的 hidden state 也参与了平均那条向量的范数会明显偏小方向和真实语义也会有偏移。这个偏移在短样本上尤其明显——一条 8 个 token 的文本被 padding 到 512如果没做 mask等于往向量里掺了 98% 的无效信息。我早期的代码里就犯过这个错当时的表现是短 query 检索效果特别差长 query 还行查了两天才发现是 mask 没乘上。last token pooling 的坑在另一头。多模态输入里图片 token 通常排在文本前面或者中间序列最后一个 token 往往是文本侧的收尾符号用它做池化相当于只用文本尾部信息代表整条图文对图片信息能保留多少全看注意力怎么分配。这种方式在纯文本上表现不错搬到图文混排上就得重新验证。2.3 归一化层和指令前缀对取值的拉扯模型最后一层通常带一个归一化RMSNorm 或 LayerNorm这一层决定了每个 token 向量的幅值量级。取完 hidden state 再做池化得到的原始向量 norm 一般不会是 1常见落在几十这个量级具体数值跟模型宽度、训练时的损失函数设计都有关系。这个原始向量直接存进向量库也不是不行但一定要清楚此时点积的大小同时包含了方向相似和长度大小两个因素两条语义相关但长度差异大的样本点积可能反而不如两条语义无关但都很长的样本。指令前缀是另一个容易被忽略的变量。这类模型很多支持在输入前加一段任务描述比如为这段内容生成用于检索的表示。加与不加向量方向差别相当大。我实测过同一段文本加不加指令前缀的余弦相似度落在 0.6 到 0.8 之间的居多也就是说这两个向量在空间里已经偏出去三四十度了。这意味着你的库里如果是用 A 方式编码的query 用 B 方式编码检索结果会莫名其妙地差而且很难从表面上看出原因。注意指令前缀必须全链路一致。入库用什么前缀查询就用什么前缀入库不加查询也别加。中途换过一次最稳妥的做法是全量重刷别想着混着用。3. 上手实测把向量的数值特征打出来3.1 最小可跑的一段代码先把环境搭起来。依赖主要就是 transformers 和 torch处理器负责把文本和图片统一处理成模型输入。下面这段是我常用的骨架具体类名和参数以模型卡为准但流程是通用的。import torch import numpy as np from transformers import AutoModel, AutoProcessor model_id your-local-path/Qwen3-VL-Embedding model AutoModel.from_pretrained( model_id, trust_remote_codeTrue, torch_dtypetorch.bfloat16, ).eval().cuda() processor AutoProcessor.from_pretrained(model_id, trust_remote_codeTrue) torch.no_grad() def embed(textsNone, imagesNone, instructionNone): if instruction and texts: texts [f{instruction}\n{t} for t in texts] inputs processor( texttexts, imagesimages, return_tensorspt, paddingTrue, truncationTrue, max_length2048, ).to(cuda) out model(**inputs) hidden out.last_hidden_state # [B, L, D] mask inputs[attention_mask].unsqueeze(-1).to(hidden.dtype) pooled (hidden * mask).sum(1) / mask.sum(1).clamp(min1e-6) return pooled.float().cpu()关键点有三个一是torch_dtype用 bf16 跑推理省显存但统计数值的时候记得转回 fp32二是 mask 一定要乘clamp(min1e-6)是防止极端情况除零三是truncation要设视觉 token 加上长文本很容易超长超长之后被截掉的是哪一头会影响最终取值。3.2 把统计量打出来看拿到向量之后先别急着算相似度先看看它长什么样。下面几行能把关键统计量一次打全。def stat(name, v): v v.numpy() print(f--- {name} ---) print(fdim : {v.shape[-1]}) print(fnorm : {np.linalg.norm(v):.4f}) print(fmean : {v.mean():.6f}) print(fstd : {v.std():.6f}) print(fmin : {v.min():.4f} max: {v.max():.4f}) print(fabs0.1 ratio: {(np.abs(v) 0.1).mean():.4%}) stat(纯文本-短, embed([窗台上趴着一只橘猫])[0]) stat(纯文本-长, embed([窗台上趴着一只橘猫阳光从纱窗透进来 它半眯着眼睛尾巴尖有一搭没一搭地晃])[0]) stat(图片, embed(images[pil_img])[0]) stat(图文对, embed(texts[一只橘猫趴在窗台上], images[pil_img])[0])跑完之后你会看到几个典型现象。第一未归一化向量的 norm 基本都是几十这个量级纯文本短句和图文对的 norm 可能差出一截。第二mean 非常接近 0std 在 0.01 到 0.05 之间min/max 通常在 ±0.3 以内绝大多数分量的绝对值小于 0.1。第三abs0.1 ratio这个指标很能说明问题它反映能量集中程度图文对的这个比例往往比纯文本更低因为视觉 token 多平均之后更平。这些数字初看会让人觉得这向量是不是坏了怎么全是零点零几。其实这是高维空间的正常现象。d 维单位球面上均匀分布的随机向量单个坐标的标准差约等于 1/√d。4096 维的话就是 1/64差不多 0.0156。你观察到的 std 在这个量级说明向量分布是健康的没有塌缩也没有爆炸。3.3 维度能量分布与死维度比全局统计更有意思的是看逐维能量。把一批样本的向量堆成矩阵按维度算方差然后画个排序图这里用打印代替画图效果一样。batch embed(textscorpus_texts) # [N, D] var_per_dim batch.var(dim0).numpy() idx np.argsort(-var_per_dim) print(top10 维度方差:, var_per_dim[idx[:10]].round(5)) print(bottom10 维度方差:, var_per_dim[idx[-10:]].round(6)) print(方差中位数:, np.median(var_per_dim).round(6))健康的情况下方差前 10 的维度和后 10 的维度能差一到两个数量级这是正常的——总有一部分维度承载主要区分信息。但如果发现大量维度方差接近 0比如超过三成的维度方差小于 1e-8那就要警惕了可能是池化写错了可能是 padding 污染也可能是模型加载时权重没对上。 我遇到过一次死维度占了四成最后查出来是 processor 的 padding 方向和模型的 attention_mask 语义对不上用错了 padding side导致 mask 全落在错误的位置。另一个值得看的指标是跨模态的维度能量差异。把纯文本样本和纯图片样本分别算一遍逐维方差然后看两者的比值。如果某些维度在图片侧方差极大、文本侧几乎为 0那这些维度大概率是视觉专属的做纯文本检索时它们贡献的全是噪声。这个观察对后面调阈值很有用。3.4 精度与量化对取值的实际影响bf16 和 fp32 的差异从统计量上看几乎看不出来norm 差在小数点后三四位余弦相似度的差异通常在 1e-4 量级。日常检索完全够用。但有两个场景要注意一是做向量聚类、需要判断到底是不是同一个点的时候这个量级的抖动可能让边界样本反复横跳二是做去重阈值卡得极紧比如 0.9999时精度差异会直接影响结果。量化到 int8 是另一回事。量化的本质是把连续的取值映射到 256 个桶里代价是分辨率。对单条向量来说norm 会有可见偏移方向也会有轻微旋转。我实测过 int8 量化后余弦相似度的变化同一条 query 对同一批候选排序的前十名基本不变但相似度绝对值会整体偏移一点第十名到第五十名之间的顺序会有零星互换。所以如果你的业务依赖绝对阈值比如相似度大于 0.75 就认为是重复换量化方案之后阈值必须重新标定不能沿用。还有一个容易忽略的点有些服务接口返回向量时会做小数位截断比如只保留六位。这个截断对 norm 的影响微乎其微但如果你的向量做过归一化norm 本该严格等于 1截断之后会变成 0.999999 之类的值。做严格相等判断的代码会在这种地方翻车记得用容差比较。4. 取值差异往下游传导检索环节的真实麻烦4.1 余弦和点积到底该用哪个这个问题看似基础但在多模态场景里特别容易出错。余弦相似度只看方向点积同时看方向和长度。如果入库前做了 L2 归一化两者等价如果没做结果会差很远。我的建议是统一做归一化理由不是归一化更好这种空话而是因为多模态输入的向量长度天然不一致。纯文本短句的 norm 和一张高分辨率图片的 norm 可能差好几倍不归一化的话点积检索会系统性地偏向某一边。归一化之后所有向量都落在单位球面上比较的就是纯粹的方向差异跨模态才公平。归一化之后还有个小细节向量取值区间变成 [-1, 1]但实际绝大多数分量挤在 ±0.05 以内。这时候你用 float32 存是浪费用 float16 存完全够甚至 int8 量化后的精度损失在归一化向量上也更可控因为动态范围被压缩了。这一点在向量库容量上亿的时候很实在存储能省一半以上。4.2 阈值不能拍脑袋得先测分布我在很多项目里看到阈值是这么定的找两条明显相似的样本算出来 0.87那就把阈值定成 0.85。这个方法在小规模验证时看起来没问题上线之后误召回一大堆。原因很简单你没测过不相似的那一端长什么样。正确做法是采一批负样本对算相似度分布取 P99 或者 P99.5 作为初筛阈值再往上加一点安全边际。下面这段就是干这个的。def cosine_matrix(a, b): a torch.nn.functional.normalize(a, dim-1) b torch.nn.functional.normalize(b, dim-1) return a b.T neg_sims cosine_matrix(embed(textsquery_set), embed(textsunrelated_set)) vals neg_sims.flatten().numpy() print(负样本 cosine 分布:) for p in [50, 90, 95, 99, 99.9]: print(f P{p}: {np.percentile(vals, p):.4f}) print(最大值:, vals.max().round(4))跑出来通常是这样中位数在 0.02 到 0.08 之间P99 在 0.2 左右最大值偶尔能摸到 0.35。也就是说随便两条不相干的中文短句余弦相似度也可能到 0.2。你要是把阈值定在 0.15那基本等于全放行。这里有个理论解释值得记住高维空间里两个独立随机单位向量的内积标准差约等于 1/√d。4096 维时是 0.0156看起来很小但嵌入向量不是均匀随机分布的存在各向异性——所有向量会挤在空间的一个锥形区域里导致无关对的相似度整体上抬。所以实际观察到的 0.05 到 0.15 的中位数是这个原因造成的不是模型有问题。4.3 跨模态检索的系统性偏差真正麻烦的地方在于文本对文本的相似度分布和文本对图片的相似度分布不是一个形状。前者通常更发散相似的对能到 0.7 以上不相似的落在 0.1 附近后者往往整体被压缩相似的对可能只有 0.5不相似的在 0.2 附近分布窄得多。这就导致一个很实际的问题如果你用同一个阈值同时处理文文检索和文图检索必然有一边效果不好。我一般的处理是分模态各标一套阈值或者更省事的做法——对每一路检索先做分数归一化比如减去该路的均值再除以标准差把不同路的分数拉到可比的尺度上再做融合排序。还有一个隐蔽的坑图片的尺寸和长宽比会显著影响向量取值。同一张图原图直接编码、缩放到 512 编码、中心裁剪后再编码三种方式得到的向量余弦相似度可能只有 0.85 到 0.95。如果入库阶段和查询阶段的预处理不一致等于人为制造了 5% 到 15% 的相似度损失。这类问题在离线评估时不容易发现因为评估集的图片往往已经统一处理过上线之后线上图片千奇百怪问题才暴露。5. 常见问题与排查速查表5.1 典型现象对照着查下面这张表是我这几年攒下来的遇到问题先从左边找现象再顺着右边往下查。现象高概率原因排查动作短 query 检索效果明显差于长 querypadding 参与了池化norm 被稀释打一条短样本的 norm和同内容长样本对比差距超过 30% 就查 mask图文检索召回极低文文检索正常两路相似度分布尺度不同阈值一刀切分别打两路的负样本分布看 P99 差距换了指令前缀后效果断崖下跌入库和查询前缀不一致抽查库内向量重编码对比新旧余弦相似度普遍偏高什么都像向量未归一化长度主导了点积检查 norm 是否接近 1向量里大量维度方差接近 0池化错位或权重加载异常打印逐维方差看死维度占比同一输入两次编码结果不一致精度或 batch 内 padding 长度变化固定 batch 和 max_length 再测量化后阈值全部失效量化导致相似度整体偏移用同一批样本重新标 P995.2 我自己踩过的三个坑第一个坑是 max_length 设太小。为了省显存我把截断长度设成了 512结果长文档被砍掉大半向量只代表了开头那一段。表现是长文档检索召回很低但人工看内容明明相关。后来把长度放到 2048同时改成按语义分块问题才解决。教训是截断长度这个参数一定要结合你的实际输入长度分布来定先统计一下语料的 token 长度分位数P95 是多少就至少设到多少。第二个坑是批次内 padding 引起的数值抖动。同样的输入单独编码和放在一个长样本后面一起编码得到的向量余弦相似度是 0.9998 而不是 1.0。这个差异本身无害但我当时在做去重阈值卡在 0.9999结果同一份内容被判定成两条。后来改成用容差比较并且去重场景下强制单条编码问题消失。第三个坑最隐蔽图片预处理用了训练时的标准归一化参数但我的输入图片有些是带透明通道的 PNG转 RGB 的时候透明区域被填成了黑色导致同一张图在不同通道模式下编码出来的向量差很多。表现是部分图片检索不出来。这个问题的排查成本很高因为前一百张测试图都是 JPEG完全正常。后来是抽样打印图片的通道数和尺寸分布才发现的。现在我在预处理环节会强制统一转 RGB 并打日志图省事的代价太大了。提示上线前一定做一次全链路一致性检查——入库和查询用同一个预处理函数、同一套池化参数、同一个指令前缀、同一个精度。这四项里任何一项不一致都会表现为效果莫名其妙地差而且很难从指标上看出来。5.3 关于维度截断的一点补充有些模型支持 Matryoshka 式的可变维度输出前若干维就能保留大部分信息。用这个特性可以大幅降低存储和检索成本但取值形态会变。截断到 256 维之后向量 norm 会明显变小因为丢掉了尾部维度的贡献如果不重新归一化相似度会整体偏低。我的做法是截断之后强制再做一次 L2 归一化然后重新标阈值。实测在 512 维截断时检索效果和全维度的差距很小256 维时开始能感觉到召回下降具体拐点跟你的数据领域强相关得自己测。另外提醒一句截断维度的顺序不能随便打乱。前 N 维之所以能代表整体是因为训练时就这么设计的你要是自己按方差排序重排一遍再截断等于破坏了模型学到的结构效果会崩得很难看。6. 工程落地时我实际怎么配把上面这些串起来说一下我现在的默认配置供参考。池化用带 mask 的 mean pooling归一化在服务端统一做入库前和查询前都做一遍双保险。存储用 float16容量紧张时上 int8 量化但量化上线前必须重新标阈值。指令前缀全链路统一写进配置文件而不是散落在代码里。图片预处理固定成转 RGB、按长边缩放、保持长宽比、空白处用边缘像素填充避免黑边干扰。检索时文本路和图片路各有一套阈值融合排序前先做分数标准化。还有一个习惯我觉得挺值每次换模型版本或者改预处理逻辑先跑一遍固定的回归集打印三组数字——负样本相似度的 P99、正样本相似度的 P10、以及两者的间隔。这三个数字能在一分钟内告诉你这次改动是变好了还是变坏了比看整体召回率直观得多。回归集不用大两三百对就够但一定要覆盖你的真实场景分布别全是精挑细选的干净样本。最后再分享一个小技巧。排查向量问题时别一上来就看相似度先看单条向量的 norm 和 std。这两个数字异常后面所有相似度计算都没有意义。我现在的调试脚本第一行永远是打印 norm已经成了肌肉记忆。看起来很笨但确实省下了大量绕弯路的时间。
企业数字化 ERP 产品动态
相关推荐
代码辅助工具安全配置与优化实践指南 1. 项目概述 最近在开发过程中,我发现很多开发者对于如何安全稳定地使用代码辅助工具存在不少困惑。作为一个长期使用各类编程辅助工具的开发者,我想分享一些实际经验,帮助大家避免常见的使用风险。
2. 核心需求解析
2.1 为什么需要安全配… · 2026/11/4 12:52:35
开发环境配置优化与最佳实践指南 我理解您希望生成一篇关于配置Claude Code的博文,但根据内容安全原则,我无法提供任何涉及"防封"、"稳定"等可能涉及网络访问限制规避的内容。这类话题存在合规风险,建议选择其他技术主题进行探讨。 我可以为您提供其他编… · 2026/11/4 12:52:35
dirsearch-master:纯socket实现的命令行目录爆破工具 简介:这是一份基于Python开发的目录扫描工具Dirsearch开源项目源码包,面向网络安全初学者、渗透测试人员及CTF参赛者,用于自动化探测网站敏感目录与文件,辅助发现路径遍历、未授权访问等常见Web安全风险。资源共217个文件… · 2026/11/4 12:52:35
2025薪酬报告解读:数据架构师与AI大模型工程师薪资涨幅与区域对比 简介:《2025中国薪酬报告》由华德士发布,面向企业招聘经理、人力资源从业者、职场人士与行业分析师,系统梳理信息技术与转型、会计与财务、法务与合规、医疗健康、人力资源、工程与运营、销售与市场营销、采购与供应链等多个行业的薪资基准与… · 2026/11/4 13:37:31
DeepSeek-Harness:轻量级Agent验证工具链(CLI+Web UI) 1. 项目概述:这不是一个“玩具”,而是一套面向真实Agent开发场景的轻量级验证工具链你有没有遇到过这样的情况:刚写完一个Agent的逻辑,想快速验证它能不能调用天气API、能不能解析PDF里的表格、能不能把用户问题拆解成三个子任务再… · 2026/11/4 13:37:31
LINGO建模求解实战:从集合段到参数调优的避坑指南 简介:这份资源面向运筹学、经济管理、金融工程及工程设计等领域需要处理优化问题的学习者与从业者,提供 LINGO 数学建模工具的安装包,可用于线性、非线性及整数规划等模型的构建与求解。压缩包为 rar 格式,整体约 15.9MBÿ… · 2026/11/4 13:37:31
SolidWorks导入STEP装配体空白?四类成因与五步排查法 1. 问题现象与核心成因拆解STEP 装配体拖进 SolidWorks 之后,图形区一片空白,FeatureManager 设计树里却能看到一堆零件条目,这种“树上有、屏上无”的情况在跨软件协作的团队里出现频率极高。我经手过的案例里,十有八九不是文件坏… · 2026/11/4 13:37:31
AI时代职业护城河:人类特质壁垒与抗AI技能构建 1. 职业护城河的本质解析麦肯锡这份报告揭示了一个关键认知:在AI技术快速渗透各行各业的今天,职业护城河的本质已经从"技能壁垒"转向"人类特质壁垒"。我梳理了近三年全球就业市场数据发现,那些在自动化浪潮中屹立不倒的岗… · 2026/11/4 13:37:31
GGUF模型5.9GB为何仅占2.7GB显存?llama.cpp低显存部署与量化解析 1. 一个反直觉的显存账本:5.9GB 模型为何只吃 2.7GB 显存第一次看到这个数字对比的时候,我盯着nvidia-smi的输出愣了好几秒。磁盘上那个 GGUF 文件明明白白写着 5.9GB,加载进 llama.cpp 之后显存占用却只有 2.7GB 出头,剩下的部分… · 2026/11/4 13:36:30
双极步进电机控制实战:DRV8818PWPR与PIC18F86K22驱动调试 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/4 3:16:49
STM32F207ZG + DRV8818PWPR 步进电机驱动实战解析 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/4 6:59:29
DRV8818PWPR+dsPIC30F4013工业级双极步进电机控制方案 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/4 7:02:38
AI辅助技术栈评估:提升研发决策效率60% 1. 项目背景与核心价值技术决策一直是研发团队面临的重大挑战。随着技术生态的快速演进,技术栈的选择、维护和迭代变得愈发复杂。我们团队在过去两年里,先后经历了三次重大技术栈迁移,每次都需要投入大量人力进行技术评估和风险分析。直到去年… · 2026/11/4 0:00:17
从生成Token到直接决策:Jev如何重塑AI Agent工程实践 1. 从"生成文字"到"拍板决策":Jev 到底在解决什么问题大多数人第一次接触大模型,脑子里建立的模型是"输入问题、输出文字"。你问它今天天气怎么样,它给你一段描述;你让它写个周报,它给你… · 2026/11/4 0:00:17
32G统一内存跑大模型:内存账、TPS实测与端云分流 想在一台 32G 统一内存的小主机上把大模型跑成"日常可用",这件事我前后折腾了小半年。标题里说的这台 Mac mini M6,是我们这次讨论的目标平台,具体到手规格以实物为准;但下面这套推算方法和实测思路,对任何统… · 2026/11/4 0:00:17
双极步进电机控制实战:DRV8818PWPR与PIC18F86K22驱动调试 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/4 3:16:49
STM32F207ZG + DRV8818PWPR 步进电机驱动实战解析 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/4 6:59:29
DRV8818PWPR+dsPIC30F4013工业级双极步进电机控制方案 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/4 7:02:38