当前位置: 首页 > article >正文

从 GShard 到 DeepSeek-V3:回顾 MoE 大模型负载均衡策略演进

作者:小天狼星不来客
原文:https://zhuanlan.zhihu.com/p/19117825360

故事要从 GShard 说起——当时,人们意识到拥有数十亿甚至数万亿参数的模型可以通过某种形式的“稀疏化(sparsified)”来在保持高精度的同时加速训练。自那以后,我们见证了各种让人眼花缭乱的创新。本文将尝试把从 GShard 到 DeepSeek-V3 这一系列关键方案串联起来,看看每一次迭代都给我们带来了什么改进,又踩过哪些坑,还有哪些重要问题尚未解决。

简介

为什么要用稀疏专家(Sparse MoE)?

先说点背景吧。MoE 架构之所以瞬间火起来,是因为人们发现,你可以在不等比例增加计算开销(FLOPs)的前提下,让模型拥有极其庞大的参数量。核心思路在于:对每个 token,只激活少量的专家参与计算,而不是让所有参数统统上场。

但这种“只让部分专家工作”的做法,很快就暴露了一大问题:如果只把 token 分给几个专家,那怎么保证负载是均衡的?要是某个专家被一大堆 token 疯狂轰炸,而其他专家却闲得无聊怎么办?这就是负载均衡的本质,也是 MoE 要大规模应用时必须解决的一道难题。

这篇博文要讨论些什么?

我会带着大家依次走过几个标志性的 MoE 系统,从 GShard(最早把大规模 MoE 推向主流的方案)一直到最新的 DeepSeek-V3。在过程中,我们也会顺带聊聊 Switch Transformer、GLaM 这些经典“选手”,重点剖析它们在负载均衡上遇过的坑和后来的改进思路。

如果你想获得一些实践层面的启发——没问题,我会尽量保持足够的学术严谨,让研究人员或资深从业者也能从中受益。也希望我这篇文章能写得有点意思,让你不会看几段就昏昏欲睡——毕竟这是篇博客,又不是考试题嘛!

我注意到的一些关键主题

1.路由方式:top-2 gating、single-expert gating、top-K gating、correlation-aware gating……我们对 gating 的花式名词似乎永远都不嫌多。

2.辅助损失 (Auxiliary Loss):用来帮助专家均衡使用,但如果过于强势,也会让模型的性能受限。

3.容量约束(Capacity Constraints):所谓“capacity factor”,其实就是“每个专家最多能接收多少 token,超了就丢”。

4.实现细节:从“随机分配”到分层的 all-to-all 传输,高性能计算(HPC)的那一套在这里特别重要。

5.可扩展性:有时候我们要上千个专家,因此分布式计算的开销非常值得关注。

历史脉络:从 GShard 到 Switch

GShard:先锋之作

GShard(谷歌提出)通常被视为最早实现大规模超稀疏 MoE 的框架之一。它让人们真正意识到,只要把层和 token 智能拆分并均衡地分配给各个专家,训练几百亿甚至上千亿参数的模型是可以做到的。

GShard 的路由通常采用 top-2 的 gating 方式,即:

其中  是 token 的嵌入向量, 是路由器(router)的权重矩阵。只有排名前两名的专家会被激活。不过,为了防止某些专家超负荷,训练时一般会引入以下概念:

1.专家容量 (Expert Capacity),约为 (如果共有  个 token, 个专家)。一旦某个专家被分配的 token 超过了这个容量,就可能丢弃一些 token(或者在下一层再处理)。

2.辅助负载均衡损失 (Auxiliary Loss),形式通常如下:

其中  表示实际路由到专家  的 token 比例, 是专家  的平均 gating 概率。这个损失会“鼓励”各专家负载更加均衡。

3.本地分组 (Local Groups):不是所有 token 都在全局竞争,而是先进行分组后再分配给专家。这样能缩小混乱程度。

痛点:没错,token 被丢弃肯定不是什么好事——如果超容量了,就只好忍痛割爱。而且 top-2 gating 在规模很大时会带来不小的通信和计算开销,再加上依赖辅助损失有时会让路由分布变得“人为”偏均匀,反而牺牲了一定的性能。不过,GShard 为后续所有的 MoE 研究铺好了路:它证明了稀疏专家是有价值的,还为后来的方案指明了“容量因子”这些关键概念的重要性。

Switch Transformer:当“少就是多”

Switch Transformer 的思路很直接:“我们干脆只给每个 token 选一个专家得了。” 这样做一来简化了 gating 的逻辑(直接挑最高 logit 的专家),二来也极大降低了计算和通信负担。具体做法是:

然后我们选

.

Switch Transformer 最重要的创新点在于它的 单专家路由:每个 token 只走一个专家,代码好写,训练速度也快得多。为了保持负载均衡,还是会用类似 GShard 的辅助损失,并且提出了一个 capacity factor 的概念:

这就告诉模型每个专家能接收多少 token,多的就要丢(或者用 residual 旁路继续传递)。

利弊:从直觉上讲,单专家路由能带来更高的速度,因为每个 token 只过一个 FFN,少了大把计算开销。但问题也很明显:要是 capacity factor 调不好,某些专家可能被疯狂挤爆,造成大量 token overflow,或者路由又太松导致浪费。Switch Transformer 让我们看到,哪怕是只用 top-1 gating,也能成功扩展大规模模型——只要你肯下功夫调好那些超参。它也把问题抛给了业界:到底选 top-K 里的哪个 “K”才最优?overflow 又怎么处理才好?

进一步改进与变体:GLaM、DeepSpeed-MoE、ST-MoE、Mixtral

GLaM:带着效率回归 Top-2

GLaM(Generalist Language Model)在 Switch Transformer 之后又把 top-2 gating 搬了回来,但增加了对 能耗效率 的关注,并声称他们只用了大约 GPT-3 训练能耗的三分之一,却在 zero-shot 任务上表现更好。核心公式大概是:

,

其中  是 gating 权重, 是被选中的两个专家输出。同样,GLaM 也采用了一个精心设计的辅助损失来鼓励专家负载更均衡,损失函数类似:

,

并设置了一个容量约束:

.

超出这个容量的 token 还是要被丢弃,通过 residual 路径让网络继续往后走。一般会把 capacity factor 设为 1.25,来兼顾效率和 overflow 问题。

坑与经验:GLaM 让大家看到,真正只激活一小部分参数,就能在算力和能耗上吊打类似 GPT-3 的 dense 模型——这是一次在大规模模型的“能效”上非常耀眼的案例。但仍然需要提醒的是,如果真实数据分布不平衡,专家可能还是会出现负载不均,而 GLaM 也花了不少心思去调节 gating、capacity 等超参。

DeepSpeed-MoE:主打推理效率

DeepSpeed-MoE(由微软提出)算是将负载均衡做到了一个更成熟的层次,既解决了训练时如何把 token 分配给专家的问题,也兼顾了推理阶段如何让专家有效利用的挑战。它把之前很多 MoE 的坑都总结了,并提出一系列优化方案来应对。

核心思路:DeepSpeed-MoE 从 Switch Transformer 的 top-1 gating 出发,通过多专家并多数据并行的设计,让负载尽可能均匀,避免任何一个专家“堵车”。辅助损失的形式一般是:

,

用来鼓励各个专家的分配更加均匀。与之前最大的不同在于,它会 动态重分配 那些超容量的 token,而不是简单地丢弃。此外,它还提出了 Residual-MoE 结构,把 dense MLP 的输出和专家输出相加,类似一种“微调”式的组合,以便即使是被选中较少的专家也能对最终输出作出贡献。

跨 GPU 的负载均衡:DeepSpeed-MoE 也关注到,不同层数可能拥有不同数量的专家,导致如果用统一的并行度会不灵活。它会 动态调整并行度,让每张 GPU 都刚好处理一个专家的负载。例如,有些层有 32 个专家,就用 32 路专家并行加 4 路数据并行;有些层有 128 个专家,就 128 路专家并行加 1 路数据并行。这样可以保证每张 GPU 不会因为专家数不同而分配不均。

痛点与教训:DeepSpeed-MoE 整体的负载均衡做得相当不错,但要调对 capacity factor、辅助损失权重、并行度这些仍然是一门学问,而且真实世界的文本分布通常并不均匀,如果不针对性地调参,也可能在某些场景里栽跟头。不过它一再强调,无论训练多么牛,推理时也要有一套负载均衡策略,否则延迟可能非常糟糕。

ST-MoE:聚焦容量因子与路由器 Z-Loss

**ST-MoE (Stable and Transferable Mixture-of-Experts) **在稀疏专家模型中迈出了稳定性和可迁移性的一大步。像 Switch Transformer 和 GLaM 其实都打下了基础,但 ST-MoE 进一步在一些老大难问题上做了提升,包括路由稳定性与超参调优等。

ST-MoE 有个亮点叫 router z-loss ,主要是为了缓解训练过程中数值不稳定的问题。因为路由里的指数函数特别容易放大微小数值误差,z-loss 就是给那些过大的 logit 值加点惩罚:

这样能够抑制极端数值,也往往能带来一点点精度增益。

容量因子调优:ST-MoE 还强调了 capacity factor 的重要性,用辅助损失来让 token 尽量平均分布。相比之前的方法,它在训练稳定性和模型质量上找到了更平衡的点。当然,这些改进背后依然离不开超参的精细调试。换句话说,ST-MoE 告诉我们,通过合理的设计,你既能得到相对稳定的训练过程,也能保住最终的性能。

Mixtral 8x7B:时间局部性与专门的稀疏 Kernel

Mixtral 8x7B 是一个比较有意思的稀疏 MoE(SMoE)语言模型,针对负载均衡有一些独到见解。它还是用 Top-2 gating,每层 8 个专家,token 每次只用到其中两个专家,从而大大削减了激活的参数量(13B 级别,而不是像 Llama 2 70B 那样全部激活)。

时间局部性:Mixtral 在分析路由模式时发现,token 在相邻位置往往会被分配给同样的专家——尤其在网络的深层。也就是同一个专家常常连续处理好几步的 token,这就会带来“高重复率”现象。这有利于减少专家负载的突发波动,但也可能导致专家被局部数据“霸占”,对分布多样的数据集就需要留意一下。另外,它也采用类似 DeepSpeed-MoE 的 动态重分配:当某个专家容量满了,就把多余 token 分给其他忙得没那么厉害的专家。

稀疏 Kernel 优化:Mixtral 利用像 Megablocks 这样专为稀疏计算优化的 GPU kernel,让 token 分配更加高效。一边分配一边做并行处理,这需要在 GPU 的层面做好负载均衡,否则还是可能出现一些 GPU 过载的问题。

经验:Mixtral 强调,你需要了解数据集的“局部规律”,因为一旦数据分布换了(比如从新闻文本转到代码),它原先的路由模式就可能失效。要做大规模的 MoE,就得好好考虑数据特征和专家分配之间的关系。

新一代方案:OpenMoE、DeepSeekMoE、JetMoE、DeepSeek-V3 等等

OpenMoE:上下文无关的“专长化”与末端 Token 的“掉队”问题

OpenMoE 依旧遵循常见的 top-k gating + capacity constraints + 辅助负载损失这一整套,但它提出了两个在大规模训练中比较显著的现象:

  • • 上下文无关的专长化(Context-Independent Specialization):专家可能只根据 token 的表面特征或 ID 来决定路由,而不是更深层的语义。

  • • 末端 Token 掉队(Drop-Towards-the-End):在处理长序列时,如果前面 token 就把专家容量吃满了,那么后面的 token 更容易被丢弃。

OpenMoE 也是用 top-2 gating,用一个和 GShard、Switch 类似的负载均衡损失。还引入了 router loss 来惩罚过大的 logits,以稳定训练。和前辈们一样,它在容量因子和专家并行上做了细致的设计,但首次严肃讨论了序列末端被丢弃的问题,尤其在自回归结构里,后面 token 常常携带关键信息,如果被丢,性能就会打折。

结论:OpenMoE 提醒我们,如果你的任务特别依赖完整序列(例如指令跟随、对话系统),那就要小心这个末端 token 掉队的问题,而且要注意 gating 可能会学到一些“表面化”模式。

DeepSeekMoE:细粒度专家与共享专家

在正式介绍最新版本 DeepSeek-V3 之前,我们先来看看 DeepSeekMoE。该方法的最大特点之一,是将每个专家切分为更细粒度的子专家(sub-experts),并引入一部分“共享专家”(shared experts)。这些共享专家在推理过程中总是被激活,不需要经过 gating 判断。这样做的目标是减少参数冗余,同时又保留足够的多样性,让子专家可以针对不同模式或特征进行专门化学习。

细粒度专家拆分 (Fine-Grained Expert Segmentation)

DeepSeekMoE 提出了细粒度专家拆分的概念,以提升专家的专门化程度。具体而言,它将每个专家拆分成多个更小的单元,但总参数量和总体计算成本保持不变。如下所示:

,

其中, 表示所有子专家(细粒度专家)的总数, 是针对第  个专家在第  个 token 上的 gating 权值。路由机制会从所有细粒度专家中为每个 token 选出前  个得分最高的专家。

设想我们一共有 个子专家,其中一部分是“可路由的”(总数为),再加上个“共享专家”。在第层,对于第个 token,计算公式如下:

,

其中, 是第  个子专家在该 token 上的 gating 权值,通常从前  个得分最高的子专家中选出。

两级负载均衡损失

为了防止路由塌缩(routing collapse)以及在计算分配上出现瓶颈,DeepSeekMoE 同时设计了专家级别 (expert-level) 和设备级别 (device-level) 的负载均衡损失。

1.专家级负载均衡损失 (Expert-Level Balance Loss)
这部分损失用来保证在专家之间分配的均衡性:, 其中, 表示路由到专家  的 token 占比, 表示专家  的平均路由概率(gating probability)。 是损失系数。

2.设备级负载均衡损失 (Device-Level Balance Loss)

这部分损失用来确保在不同 GPU 或设备之间的计算负载也是均衡的: , 这里, 表示设备数, 与  分别表示设备  上所占的平均 token 比例和平均路由概率。 则是另一层的损失系数。

通过这种双重均衡损失设计,DeepSeekMoE 能在保证专家内部细粒度专长化的同时,尽量避免某些专家或某些设备被过度使用,进而减小路由不均带来的计算瓶颈。

JetMoE:无 Token 丢弃的 MoE 与流水线并行

大多数 MoE 都会在超容量时丢 token,而 JetMoE 则提出“dropless”策略,保证所有 token 都能被处理:

1.Dropless MoE:精心控制 gating,不让任何专家超过容量上限。

2.流水线并行 (Pipeline Parallelism):把每一层的专家都放在同一个设备上,分层排队处理,以此简化通信和分配逻辑。

JetMoE 仍然用 top-2 gating,负载均衡也离不开辅助损失和 z-loss 等手段。它借鉴 MegaBlocks 的做法,用块稀疏(block-sparse)的方式在 GPU 上实现“无丢弃”,不过实现起来也更复杂,需要随时管理各专家的接收量并进行动态调度。

经验教训:不丢 token 很理想,但实现门槛更高。尤其在大规模场景里,如何实时监控并重分配 token 不是个简单活儿。不过对那些对后续 token 极其敏感的任务(如问答系统、代码生成),dropless 模式确实很有吸引力。

Skywork-MoE:gating logit 归一化 & 自适应辅助损失

**Skywork-MoE **是一个 1460 亿参数、16 专家的大模型,建立在已有的 Skywork-13B dense 模型之上做的 MoE 化。它有两大特色来缓解专家不均衡问题:

1.gating logit 归一化:在做 softmax 之前先做标准化,控制输出分布的“尖锐度”。

2.自适应辅助损失系数:如果某层丢 token 太多,就自动调大该层的均衡惩罚;反之则调小。

它还是会加一个类似的均衡损失来避免路由塌缩,并在 gating 过程中针对 logits 做归一化处理,让模型更好地区分专家,同时又不会让概率分布过度极端。

痛点与收获:不同层的负载问题可能不一样,一刀切的超参不一定好,所以 Skywork-MoE 那套自适应机制很有启发意义。但同样,如果归一化或辅助损失的力度没调好,依然可能造成路由极端或专家专长度不足。

DeepSeek-V3:偏置加成与弱化辅助损失

终于说到 DeepSeek-V3。它是目前的前沿之作,主打“砍掉大的辅助损失,用更加直接的偏置调节 (bias-based) 来控制负载”。想深入了解负载均衡最前沿,DeepSeek-V3 是个很好的例子。

模型结构:DeepSeek-V3 延续了 DeepSeekMoE 在 FFN 结构上的思路,将专家拆分成更细粒度的子专家,并保留一些“共享专家”。对第  个 token  在第  层的输出可写作:

,

其中  来自对 token 与专家的亲和度  做 top-K 选择并归一化而得。

无辅助损失的负载均衡策略

传统 MoE 通常为了防止专家负载过度不均,都会引入一个或多个辅助损失,而这些损失可能会与语言建模本身的目标相冲突。DeepSeek-V3 则提出了一种 偏置 (bias) 调整策略:给每个专家定义一个偏置项 ,在路由打分时直接加到专家得分上:

如果在之内否则

如果某个专家频繁超载,就降低它的 ,让它在后续分配中被选中的概率下降;如果某个专家很闲,就提高它的  让它更有机会接收 token。通过这种简单、直接的调整来实现负载均衡,而不是依赖强力的全局辅助损失。

序列级别的辅助损失

DeepSeek-V3 并没有 100% 摒弃辅助损失。为了避免在同一个序列里出现极度不均衡的情况,它保留了一个序列级别的平衡损失,不过其权重相对较小:

,

这里  表示在该序列里,专家  被选中的 token 占比, 表示专家  的平均 gating 概率, 通常取一个比较小的值。

动态路由和节点上限

DeepSeek-V3 还进一步在并行体系中做了优化,提出 node-limited 路由方式,每个 token 最多只被送到  个节点,每个节点再选择若干专家处理其子集,减少通信开销。这对在大规模 GPU 集群上的并行效率有显著帮助。

风险与启示:如果偏置更新速度 () 过大,负载会在不同专家之间来回猛跳,不利于模型收敛;要是过小,又跟不上数据分布的变化。不过总体而言,这比在主损失上附加大量均衡惩罚要“温和”得多,也不会过多干扰语言建模本身的学习目标。

趋势与总结

从 GShard 到 DeepSeek-V3,我们看到 MoE 中的负载均衡 已经从一个“小问题”变成了整个架构设计中至关重要的一环。GShard 引领了 top-2 gating 和容量约束;Switch Transformer 用 top-1 gating 打开了更大规模的可能性;GLaM 让我们见识了训练能耗可以大幅下降;DeepSpeed-MoE 则深入挖掘了训练和推理层面的负载平衡;ST-MoE 用 z-loss 改善了稳定性;Mixtral 看到了专家分配的时间局部性;等等……最后到一些更灵活的思路,如 DeepSeek-V3 依靠偏置更新替代沉重的辅助损失。

核心教训:想要完美的负载均衡几乎是不可能的——做得过火,语言模型主任务会受损;不做又浪费资源。未来的研究可能还会借助更多 HPC 技巧,也会出现更自动化、更自适应的 gating 机制,帮助我们在训练和推理阶段都实现高效、均衡的专家分配。

经历的坑和总结的教训

负载均衡在 MoE 里就是双刃剑:过度追求均衡会压制模型的表达能力;对均衡不管不顾又会浪费一半专家。下面是一些常见的坑和应对思路:

  • • 路由塌缩 (Routing Collapse) 与过度专长化

如果几个专家接收了大部分 token,就等于浪费了其它专家。轻度的辅助损失或偏置修正有助于防止塌缩。

  • • 容量因子的调节

设置太高,几乎不丢 token,但算力浪费会高;设置太低,token 大批被丢,严重影响训练效果。这里没有固定公式,必须结合数据分布反复实验。

  • • 过度依赖辅助损失

有些 MoE 架构重度依赖均衡损失,最后的语言建模目标被削弱,导致专家学不到真正的专长。要拿捏好度。

  • • 推理时的瓶颈

训练时的负载均衡不一定能适配推理场景。一旦在推理中某些专家被频繁调用,会让延迟变高,所以需要类似分层路由、动态分组等技巧。

  • • 领域迁移的挑战

路由网络可能固化在某些训练数据模式上,如果应用场景的分布变了, gating 也可能变得不匹配,需要额外的微调或重新训练。

结语

从 GShard 到 DeepSeek-V3,我们不难发现负载均衡已经成为 MoE 模型能否取得成功的关键因素之一。

  • GShard 提出了 top-2 gating 和容量限制的雏形;

  • Switch 用 top-1 gating 证明了简单路由也能支撑大规模;

  • GLaM 强调能效;

  • DeepSpeed-MoE 则兼顾了训练和推理;

  • ST-MoE 用 z-loss 解决稳定性;Mixtral 强调路由的时间局部性;

  • OpenMoE 暴露了末端 token 掉队等问题;

  • JetMoE 尝试 dropless;

  • DeepSeekMoE 做了细粒度拆分和共享专家;

  • 最后,DeepSeek-V3 又带来了更“轻量级”的偏置调节策略。

主要启示:负载均衡永远在动态平衡——过度干预会损害模型本身的学习目标,完全无视则会出现专家闲置或拥堵。往后我们大概率会看到更多 HPC 技巧与更灵活的 gating 机制,以及更多针对推理部署的优化。MoE 研究还在不断前进,我对未来的发展方向也非常期待。

相关文章:

从 GShard 到 DeepSeek-V3:回顾 MoE 大模型负载均衡策略演进

作者:小天狼星不来客 原文:https://zhuanlan.zhihu.com/p/19117825360 故事要从 GShard 说起——当时,人们意识到拥有数十亿甚至数万亿参数的模型可以通过某种形式的“稀疏化(sparsified)”来在保持高精度的同时加速训…...

【番外篇】鸿蒙扫雷天纪:运混沌灵智勘破雷劫天局

大家好啊,我是小象٩(๑ω๑)۶ 我的博客:Xiao Xiangζั͡ޓއއ 很高兴见到大家,希望能够和大家一起交流学习,共同进步。 这一节课我们不学习新的知识,我们来做一个扫雷小游戏 目录 扫雷小游戏概述一、扫雷游戏分析…...

【反悔堆】力扣1642. 可以到达的最远建筑

给你一个整数数组 heights ,表示建筑物的高度。另有一些砖块 bricks 和梯子 ladders 。 你从建筑物 0 开始旅程,不断向后面的建筑物移动,期间可能会用到砖块或梯子。 当从建筑物 i 移动到建筑物 i1(下标 从 0 开始 )…...

字符串算法笔记

字符串笔记 说到字符串,首先我们要注意的就是字符串的输入以及输出,因为字符串的输入格式以及要求也分为很多种,我们就来说几个比较常见的格式 g e t s gets gets 我们先来说这个函数的含义...

AWTK 骨骼动画控件用法

创建骨骼动画控件 atlas 指定纹理图集文件,skeleton 指定骨骼动画数据文件。可以是相对路径或绝对路径。atlas 中引用的图片文件需要和 skeleton 文件在同一目录下。 scale_x 和 scale_y 指定缩放比例,根据实际情况调整。 scale_time 指定播放速度&am…...

解决Oracle SQL语句性能问题(10.5)——常用Hint及语法(7)(其他Hint)

10.5.3. 常用hint 10.5.3.7. 其他Hint 1)cardinality:显式的指示优化器为SQL语句的某个行源指定势。该Hint具体语法如下所示。 SQL> select /*+ cardinality([@qb] [table] card ) */ ...; --注: 1)这里,第一个参数(@qb)为可选参数,指定查询语句块名;第二个参数…...

如何写美赛(MCM/ICM)论文中的Summary部分

美赛(MCM/ICM)作为一个数学建模竞赛,要求参赛者在有限的时间内解决一个复杂的实际问题,并通过数学建模、数据分析和计算机模拟等手段给出有效的解决方案。在美赛的论文中,Summary部分(通常也称为摘要)是非常关键的,它是整个论文的缩影,能让评审快速了解你解决问题的思…...

DataWhale组队学习 fun-transformer task5

1. 词向量:单词的“身份证” 首先,我们定义了四个单词的词向量,每个向量维度为3。你可以把这些词向量想象成每个单词的“身份证”。每个身份证上有3个特征,用来描述这个单词的“性格”或“特点”。 word_1 np.array([1, 0, 0])…...

【huawei】云计算的备份和容灾

目录 1 备份和容灾 2 灾备的作用? ① 备份的作用 ② 容灾的作用 3 灾备的衡量指标 ① 数据恢复时间点(RPO,Recoyery Point Objective) ② 应用恢复时间(RTO,Recoyery Time Objective) 4…...

电力晶体管(GTR)全控性器件

电力晶体管(Giant Transistor,GTR)是一种全控性器件,以下是关于它的详细介绍:(模电普通晶体管三极管进行对比学习) 基本概念 GTR是一种耐高电压、大电流的双极结型晶体管(BJT&am…...

LQ1052 Fibonacci斐波那契数列

题目描述 Fibonacci斐波那契数列也称为兔子数列,它的递推公式为:FnFn-1Fn-2,其中F1F21。 当n比较大时,Fn也非常大,现在小蓝想知道,Fn除以10007的余数是多少,请你编程告诉她。 输入 输入包含一…...

Cursor 帮你写一个小程序

Cursor注册地址 首先下载客户端 点击链接下载 1 打开微信开发者工具创建一个小程序项目 选择TS-基础模版 官方 2 然后使用Cursor打开小程序创建的项目 3 在CHAT聊天框输入自己的需求 比如 小程序功能描述:吃什么助手 项目名称: 吃什么小程序 功能目标…...

【机器学习】嘿马机器学习(算法篇)第13篇:决策树算法,学习目标【附代码文档】

本教程的知识点为:机器学习算法定位、 K-近邻算法 1.4 k值的选择 1 K值选择说明 1.6 案例:鸢尾花种类预测--数据集介绍 1 案例:鸢尾花种类预测 1.8 案例:鸢尾花种类预测—流程实现 1 再识K-近邻算法API 1.11 案例2:预测…...

echo ‘export PATH=/usr/local/bin:$PATH‘ >> ~/.bashrc这个和直接添加到/etc/profile有什么区别

echo export PATH/usr/local/bin:$PATH >> ~/.bashrc 和直接添加到 /etc/profile 都是用于修改 PATH 环境变量,但它们适用的范围和效果有所不同: 1. 修改 ~/.bashrc 文件 作用范围:~/.bashrc 是针对当前用户的配置文件,它…...

菜鸟之路Day09一一集合进阶(二)

菜鸟之路Day09一一集合进阶(二) 作者:blue 时间:2025.1.27 文章目录 菜鸟之路Day09一一集合进阶(二)0.概述1.泛型1.1泛型概述1.2泛型类1.3泛型方法1.4泛型接口1.5泛型通配符 2.Set系列集合2.1遍历方式2.2HashSet2.3LinkedHashSet2.4TreeSet 0.概述 内…...

写在新年之际

各位关注我的小伙伴们,大家好! 在这新年来临之际,首先祝大家新年快乐!愿新的一年充满机遇与收获,愿我们在各自的领域中继续突破和成长! 回顾2024年,这是充满变革的一年,不仅世界局…...

【shell工具】编写一个批量扫描IP地址的shell脚本

批量扫描某个网段中的主机(并发) 创建目录编写脚本文件 mkdir /root/ip_scan_shell/ touch /root/ip_scan_shell/online_server.txt touch /root/ip_scan_shell/offline_server.txt touch /root/ip_scan_shell/ip_scan.sh写入下面shell到脚本文件中…...

分库分表后如何进行join操作

在分库分表后的系统中,进行表之间的 JOIN 操作比在单一数据库表中复杂得多,因为涉及的数据可能位于不同的物理节点或分片中。此时,传统的 SQL JOIN 语句不能直接用于不同分片的数据,以下是几种处理这样的跨分片 JOIN 操作的方法&a…...

004 mybatis基础应用之全局配置文件

文章目录 配置内容properties标签typeAlias标签mappers标签 配置内容 SqlMapConfig.xml中配置的内容和顺序如下: properties(属性) settings(全局配置参数) typeAliases(类型别名) typeHandler…...

vim如何设置制表符表示的空格数量

:set tabstop4 设置制表符表示的空格数量 制表符就是tab键,一般默认是四个空格的数量 示例: (vim如何使设置制表符表示的空格数量永久生效:vim如何使相关设置永久生效-CSDN博客)...

基于dlib/face recognition人脸识别推拉流实现

目录 一.环境搭建 二.推拉流代码 三.人脸检测推拉流 一.环境搭建 1.下载RTSP服务器MediaMTX与FFmpeg FFmpeg是一款功能强大的开源多媒体处理工具,而MediaMTX则是一个轻量级的流媒体服务器。两者结合,可以实现将本地视频或者实时摄像头画面推送到RTSP流,从而实现视频…...

LangChain:使用表达式语言优化提示词链

在 LangChain 里,LCEL 即 LangChain Expression Language(LangChain 表达式语言),本文为你详细介绍它的定义、作用、优势并举例说明,从简单示例到复杂组合示例,让你快速掌握LCEL表达式语言使用技巧。 定义 …...

多线程编程杂谈( 下)

问题 是否存在其它中途线程退出的方法? 通过调用Linux系统函数 pthread_cancel(...) 可中途退出线程 Linux 提供了线程取消函数 取消状态 接受取消状态: PTHREAD_CANCEL_ENABLE拒绝取消状态: PTHREAD_CANCEL_DISABLE 取消请求 延迟取消: PTHREAD_CANCEL_DEFERR…...

rdma-core debug

export MLX5_DEBUG_MASK0xff export MLX5_DEBUG_FILE/tmp/mlx5.txt git clone https://github.com/linux-rdma/rdma-core.git cd rdma-core ./build.sh 修改build/CMakeCache.txt MLX5_DEBUG:BOOLTRUE function install_rdma_core {local dir/swgwork/cmi/rdma-core/buil…...

电脑无法开机,重装系统后没有驱动且驱动安装失败

电脑无法开机,重装系统后没有驱动且驱动安装失败 前几天电脑突然坏了,电脑卡住后,强制关机,再开机后开机马上就关机。尝试无数次开机后失败,进入BIOS界面,发现已经没有Windows系统了。重新安装系统后&…...

【Java数据结构】了解排序相关算法

基数排序 基数排序是桶排序的扩展,本质是将整数按位切割成不同的数字,然后按每个位数分别比较最后比一位较下来的顺序就是所有数的大小顺序。 先对数组中每个数的个位比大小排序然后按照队列先进先出的顺序分别拿出数据再将拿出的数据分别对十位百位千位…...

机器学习-线性回归(对于f(x;w)=w^Tx+b理解)

一、𝑓(𝒙;𝒘) 𝒘T𝒙的推导 学习线性回归,我们那先要对于线性回归的表达公示,有所认识。 我们先假设空间是一组参数化的线性函数: 其中权重向量𝒘 ∈ R𝐷 …...

RAG与GraphRAG的区别

文章目录 前言RAG 的特点核心思想数据结构优势局限性应用场景 GraphRAG 的特点核心思想数据结构优势局限性应用场景 如何选型示例场景多跳推理问题推荐系统中的复杂关系社交网络中的影响力分析 总结 前言 RAG (Retrieval-Augmented Generation) 和 GraphRAG (Graph-Based Retr…...

Ubuntu环境通过Ollama部署DeepSeek-R1模型教程

Ollama 是一个专注于简化模型部署和推理的工具,特别适合在生产环境中快速部署和运行模型。 以下是如何使用 Ollama 来安装、部署和使用模型的步骤: 一. 安装 Ollama 首先,你需要安装 Ollama。Ollama 通常支持多种平台(如 Linux、…...

使用Ollama 在Ubuntu运行deepseek大模型:以deepseek-r1为例

deepseek大模型上热搜啦! 咱们来亲身感受下DeepSeek模型的魅力吧! 整个操作流程非常简单方便,只需要2步,先安装Ollama,然后执行大模型即可。 支持的deepseek-r1模型 deepseek-r1 DeepSeek-R1-Distill-Qwen-1.5B …...