From 85732d4b1664caf7a13db624a244f23f20aae93e Mon Sep 17 00:00:00 2001 From: Yang Bowen <2110915639@buaa.edu.cn> Date: Thu, 8 Aug 2024 17:15:39 +0800 Subject: [PATCH] Site updated: 2024-08-08 17:15:37 --- about/index.html | 8 ++++---- archives/2024/06/index.html | 6 +++--- archives/2024/08/index.html | 6 +++--- archives/2024/index.html | 6 +++--- archives/index.html | 6 +++--- artitalk/index.html | 6 +++--- categories/index.html | 8 ++++---- .../index.html" | 6 +++--- .../index.html" | 6 +++--- .../index.html" | 6 +++--- comment/index.html | 8 ++++---- index.html | 14 +++++++------- link/index.html | 8 ++++---- music/index.html | 10 +++++----- photos/index.html | 8 ++++---- post/3a21a286.html | 8 ++++---- post/aa8ef5fe.html | 8 ++++---- post/d5823525.html | 14 +++++++------- post/f430acf6.html | 2 +- search.xml | 2 +- tags/MLLM-LLM/index.html | 6 +++--- tags/index.html | 8 ++++---- .../index.html" | 6 +++--- .../index.html" | 6 +++--- .../index.html" | 6 +++--- .../index.html" | 6 +++--- 26 files changed, 92 insertions(+), 92 deletions(-) diff --git a/about/index.html b/about/index.html index 03674f33..ee280a70 100644 --- a/about/index.html +++ b/about/index.html @@ -5,13 +5,13 @@ - + -

-
avatar
Yang
友链请私戳我
Follow Me
公告
归路何方
最新文章
+
avatar
Yang
友链请私戳我
Follow Me
公告
归路何方
最新文章
网站资讯
文章数目 :
4
本站总字数 :
8.9k
本站访客数 :
本站总访问量 :
最后更新时间 :
avatar
Yang
友链请私戳我
Follow Me
公告
归路何方
最新文章
+})()
avatar
Yang
友链请私戳我
Follow Me
公告
归路何方
最新文章
网站资讯
文章数目 :
4
本站总字数 :
8.9k
本站访客数 :
本站总访问量 :
最后更新时间 :
avatar
Yang
友链请私戳我
Follow Me
公告
归路何方
最新文章
+
avatar
Yang
友链请私戳我
Follow Me
公告
归路何方
最新文章
网站资讯
文章数目 :
4
本站总字数 :
8.9k
本站访客数 :
本站总访问量 :
最后更新时间 :
-
-
avatar
Yang
友链请私戳我
Follow Me
公告
归路何方
最新文章
+
+
avatar
Yang
友链请私戳我
Follow Me
公告
归路何方
最新文章
网站资讯
文章数目 :
4
本站总字数 :
8.9k
本站访客数 :
本站总访问量 :
最后更新时间 :
avatar
Yang
友链请私戳我
Follow Me
公告
归路何方
目录
  1. 1. 计网实验期末考试常用指令
    1. 1.1. 配置NAT(关键)
      1. 1.1.1. 当于OSPF结合时,需要通告默认路由
    2. 1.2. VLAN:数据链路层
      1. 1.2.1. VLAN端口分类
      2. 1.2.2. 默认VLAN
      3. 1.2.3. 带标签(tagged)和不带标签(untagged)
      4. 1.2.4. 创建VLAN
      5. 1.2.5. VLAN添加端口
        1. 1.2.5.1. 指定端口类型(trunk)
        2. 1.2.5.2. 指定/删除Trunk端口可以通过的VLAN数据帧
      6. 1.2.6. 配置VLAN IP
    3. 1.3. 三个数据链路层协议
      1. 1.3.1. PPP协议
      2. 1.3.2. PAP验证
      3. 1.3.3. CHAP验证
      4. 1.3.4. 查看路由表
    4. 1.4. OSPF协议
      1. 1.4.1. 配置Router ID
      2. 1.4.2. 启动OSPF
      3. 1.4.3. 显示OSPF调试信息
      4. 1.4.4. 配置回环地址(LoopBack)
      5. 1.4.5. 配置串口(Serial)
      6. 1.4.6. 配置OSPF Cost
      7. 1.4.7. 配置缺省路由
      8. 1.4.8. 查看OSPF LSDB(五类LSA如何查看)
      9. 1.4.9. 排查故障指令
      10. 1.4.10. 路由引入(重点中的重点)
      11. 1.4.11. tracert
      12. 1.4.12. OSPF的五种报文以及其交互过程
      13. 1.4.13. 路由器和交换机相连是某个网段相连,在这个网段下会选举路由器的接口作为DR,产生三类LSA;而两台路由器之间是点对点连接,无网段,无DR,BDR。
      14. 1.4.14. BDR和DR选举过程:
    5. 1.5. BGP实验
      1. 1.5.1. 启动BGP,并配置邻居(以上图为例),注入回环路由信息
      2. 1.5.2. 强制下一跳为本身接口(next-hop-local)
        1. 1.5.2.1. BGP协议状态转移
      3. 1.5.3. 查看BGP路由表
      4. 1.5.4. 查看BGP邻居状态
      5. 1.5.5. debug信息,查看BGP协商过程
      6. 1.5.6. 路由引入
      7. 1.5.7. BGP路由聚合
      8. 1.5.8. 路由策略
        1. 1.5.8.1. 基于ACL的路由过滤
        2. 1.5.8.2. 配置基于AS-Path的路由过滤
        3. 1.5.8.3. 配置基于Route Policy的路由过滤
      9. 1.5.9. BGP四种报文
      10. 1.5.10. BGP配置LocalPre和Med
      11. 1.5.11. 模拟题1
    6. 1.6. 复杂组网de坑
最新文章
avatar
Yang
友链请私戳我
Follow Me
公告
归路何方
目录
  1. 1. 计网实验期末考试常用指令
    1. 1.1. 配置NAT(关键)
      1. 1.1.1. 当于OSPF结合时,需要通告默认路由
    2. 1.2. VLAN:数据链路层
      1. 1.2.1. VLAN端口分类
      2. 1.2.2. 默认VLAN
      3. 1.2.3. 带标签(tagged)和不带标签(untagged)
      4. 1.2.4. 创建VLAN
      5. 1.2.5. VLAN添加端口
        1. 1.2.5.1. 指定端口类型(trunk)
        2. 1.2.5.2. 指定/删除Trunk端口可以通过的VLAN数据帧
      6. 1.2.6. 配置VLAN IP
    3. 1.3. 三个数据链路层协议
      1. 1.3.1. PPP协议
      2. 1.3.2. PAP验证
      3. 1.3.3. CHAP验证
      4. 1.3.4. 查看路由表
    4. 1.4. OSPF协议
      1. 1.4.1. 配置Router ID
      2. 1.4.2. 启动OSPF
      3. 1.4.3. 显示OSPF调试信息
      4. 1.4.4. 配置回环地址(LoopBack)
      5. 1.4.5. 配置串口(Serial)
      6. 1.4.6. 配置OSPF Cost
      7. 1.4.7. 配置缺省路由
      8. 1.4.8. 查看OSPF LSDB(五类LSA如何查看)
      9. 1.4.9. 排查故障指令
      10. 1.4.10. 路由引入(重点中的重点)
      11. 1.4.11. tracert
      12. 1.4.12. OSPF的五种报文以及其交互过程
      13. 1.4.13. 路由器和交换机相连是某个网段相连,在这个网段下会选举路由器的接口作为DR,产生三类LSA;而两台路由器之间是点对点连接,无网段,无DR,BDR。
      14. 1.4.14. BDR和DR选举过程:
    5. 1.5. BGP实验
      1. 1.5.1. 启动BGP,并配置邻居(以上图为例),注入回环路由信息
      2. 1.5.2. 强制下一跳为本身接口(next-hop-local)
        1. 1.5.2.1. BGP协议状态转移
      3. 1.5.3. 查看BGP路由表
      4. 1.5.4. 查看BGP邻居状态
      5. 1.5.5. debug信息,查看BGP协商过程
      6. 1.5.6. 路由引入
      7. 1.5.7. BGP路由聚合
      8. 1.5.8. 路由策略
        1. 1.5.8.1. 基于ACL的路由过滤
        2. 1.5.8.2. 配置基于AS-Path的路由过滤
        3. 1.5.8.3. 配置基于Route Policy的路由过滤
      9. 1.5.9. BGP四种报文
      10. 1.5.10. BGP配置LocalPre和Med
      11. 1.5.11. 模拟题1
    6. 1.6. 复杂组网de坑
最新文章
avatar
Yang
友链请私戳我
Follow Me
公告
归路何方
最新文章
avatar
Yang
友链请私戳我
Follow Me
公告
归路何方
最新文章

Deepseek V2笔记

基于Decoder-Only架构,对FFN和Attention做出了改进

MLA(Multi-head Latent Attention):

  1. 传统MHA:需要 $2 \ast len \ast nhead \ast d_{nhead}$ 的空间存储 KV Cache

  2. MLA: 将KV进行低秩联合压缩,以减少KV缓存,类似LoRA。将KV以低维度缓存,使用时再通过投影层变换回去。减少内存占用的同时丢失部分精度。

  3. 旋转位置编码:待补充

FFN(MoE):

  1. MoE: 混合专家模型,在本模型架构中主要是在FFN层体现

  2. 将专家分为共享专家与路由专家,以token为粒度:

    1. 共享专家:每个 $input$ 必须要通过$N_s$个共享专家,无权重,直接相加。
    2. 路由专家:在$Nr$个路由专家中选取$Topk$个亲和度最高的专家激活,并计算每个激活专家归一化后的权重$g{i,t}$,将输出按权重分配相加。
    3. 如何选择专家:router的权重为$R^{n_routed_experts \ast gating_dim}$(gating_dim=h),对每个token($R^{(bsz \ast l)\ast h}$)计算一个门控分数,再对最后一维做softmax得到分数$R^{(bsz \ast l) \ast n_routed_experts}$,每个token各自排序得到前$topk$个亲和力最高的专家,进行后续传播。
    4. 专家通常分配到不同的硬件加速器上,为减少通信开销,额外要求每个token最多分布到$M$个设备上。

三个辅助损失函数

  1. 专家级负载平衡:减少路由崩溃的风险

    1. 理想情况下,每个专家的负载应该为 $seq \ast topk/n_router_experts$
    2. 统计现实情况下的负载(对于一个样本):$R^{n_router_experts}$统计每个experts使用的次数
    3. 现实负载除以理想负载,得到差异$f_i$,理想情况下应该为全1,现实情况应当部分大于1,部分小于1。
    4. 计算每个专家对于所有token的平均亲和度,记为$P_i \in R^{n_router_experts}$
    5. 二者点积后乘超参数得到损失
    6. 设计理念:既希望每个专家能够均衡负载,又需要考虑每个专家的贡献(负载均衡+贡献均衡)。

      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      13
      14
      15
      16
      scores_for_aux = scores
      aux_topk = self.top_k
      # always compute aux loss based on the naive greedy topk method
      topk_idx_for_aux_loss = topk_idx.view(bsz, -1)
      scores_for_seq_aux = scores_for_aux.view(bsz, seq_len, -1)
      ce = torch.zeros(
      bsz, self.n_routed_experts, device=hidden_states.device
      )
      ce.scatter_add_(
      1,
      topk_idx_for_aux_loss,
      torch.ones(bsz, seq_len * aux_topk, device=hidden_states.device),
      ).div_(seq_len * aux_topk / self.n_routed_experts)
      aux_loss = (ce * scores_for_seq_aux.mean(dim=1)).sum(
      dim=1
      ).mean() * self.alpha

  1. 设备级负载平衡:将专家分为D组,分配到D个设备上,类似于专家损失,此时负载差异值的计算仍是以专家为单位,只不过计算了每个设备上专家负载的均值

    1. 对于每台设备,计算$f_{i}^{‘}$,即一台设备上每个专家的负载差异均值
    2. 对于每台设备,计算$P^{‘}_{i}$,即一台设备上每个专家的平均亲和度之和
    3. 代码实现:

      1
      2
      3
      4
      5
      6
      7
      8
      9
      # TODO: 实现device_loss,假设按顺序将专家分组
      # [bsz, num_experts] -> [bsz, n_groups]
      alpha2 = self.alpha
      experts_per_device = self.n_routed_experts // self.n_group
      ce_groups = ce.view(bsz, self.n_group, experts_per_device).mean(dim=-1)
      # [bsz, seq_len, num_experts] -> [bsz, num_experts] -> [bsz, n_groups]
      p_groups = scores_for_seq_aux.mean(dim=1).view(bsz, self.n_group, experts_per_device).sum(dim=-1)
      # [bsz, num_groups] -> [bsz] -> value
      device_loss = (ce_groups * p_groups).sum(dim=1).mean() * alpha2

  2. 通信级负载平衡:保证各设备的通信均衡,每个设备接收到的token数量也应该保持均衡

    1. 理想情况下,由于设备限制,每个token最多被发送到$M$台设备,则每台设备的接收量大约应为$M \ast seqlen/D$个token。
    2. 计算现实情况下每台设备的实际token接收量
    3. 后续流程相同
    4. 代码实现:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    # TODO: 实现comm_loss
    alpha3 = self.alpha
    ce_comm = torch.zeros(
    bsz, self.n_routed_experts, device=hidden_states.device
    )
    # [bsz, n_groups]
    ce_comm = ce_comm.scatter_add_(
    1,
    topk_idx_for_aux_loss,
    torch.ones(bsz, seq_len * aux_topk, device=hidden_states.device),
    ).view(bsz, self.n_group, experts_per_device).sum(dim=-1).div_(seq_len * self.topk_group / self.n_group)
    p_comm = p_groups
    comm_loss = (ce_comm * p_comm).sum(dim=1).mean() * alpha3

总结

三个负载平衡机制层次由低至高,从底层的专家平衡、到中层的设备平衡、再到顶层的通信平衡共同作用,旨在优化MoE系统的资源利用并解决专家崩溃等问题,实现了强大的性能。

]]> +

Deepseek V2笔记

基于Decoder-Only架构,对FFN和Attention做出了改进

MLA(Multi-head Latent Attention):

  1. 传统MHA:需要 $2 \ast len \ast nhead \ast d_{nhead}$ 的空间存储 KV Cache

  2. MLA: 将KV进行低秩联合压缩,以减少KV缓存,类似LoRA。将KV以低维度缓存,使用时再通过投影层变换回去。减少内存占用的同时丢失部分精度。

  3. 旋转位置编码:待补充

FFN(MoE):

  1. MoE: 混合专家模型,在本模型架构中主要是在FFN层体现

  2. 将专家分为共享专家与路由专家,以token为粒度:

    1. 共享专家:每个 $input$ 必须要通过$N_s$个共享专家,无权重,直接相加。
    2. 路由专家:在$N_r$个路由专家中选取$Top_k$个亲和度最高的专家激活,并计算每个激活专家归一化后的权重$g_{i,t}$,将输出按权重分配相加。
    3. 如何选择专家:router的权重为$R^{n_routed_experts \ast gating_dim}$(gating_dim=h),对每个token($R^{(bsz \ast l)\ast h}$)计算一个门控分数,再对最后一维做softmax得到分数$R^{(bsz \ast l) \ast n_routed_experts}$,每个token各自排序得到前$topk$个亲和力最高的专家,进行后续传播。
    4. 专家通常分配到不同的硬件加速器上,为减少通信开销,额外要求每个token最多分布到$M$个设备上。

三个辅助损失函数

  1. 专家级负载平衡:减少路由崩溃的风险

    1. 理想情况下,每个专家的负载应该为 $seq \ast topk/n_router_experts$
    2. 统计现实情况下的负载(对于一个样本):$R^{n_router_experts}$统计每个experts使用的次数
    3. 现实负载除以理想负载,得到差异$f_i$,理想情况下应该为全1,现实情况应当部分大于1,部分小于1。
    4. 计算每个专家对于所有token的平均亲和度,记为$P_i \in R^{n_router_experts}$
    5. 二者点积后乘超参数得到损失
    6. 设计理念:既希望每个专家能够均衡负载,又需要考虑每个专家的贡献(负载均衡+贡献均衡)。

      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      13
      14
      15
      16
      scores_for_aux = scores
      aux_topk = self.top_k
      # always compute aux loss based on the naive greedy topk method
      topk_idx_for_aux_loss = topk_idx.view(bsz, -1)
      scores_for_seq_aux = scores_for_aux.view(bsz, seq_len, -1)
      ce = torch.zeros(
      bsz, self.n_routed_experts, device=hidden_states.device
      )
      ce.scatter_add_(
      1,
      topk_idx_for_aux_loss,
      torch.ones(bsz, seq_len * aux_topk, device=hidden_states.device),
      ).div_(seq_len * aux_topk / self.n_routed_experts)
      aux_loss = (ce * scores_for_seq_aux.mean(dim=1)).sum(
      dim=1
      ).mean() * self.alpha

  1. 设备级负载平衡:将专家分为D组,分配到D个设备上,类似于专家损失,此时负载差异值的计算仍是以专家为单位,只不过计算了每个设备上专家负载的均值

    1. 对于每台设备,计算$f_{i}^{‘}$,即一台设备上每个专家的负载差异均值
    2. 对于每台设备,计算$P^{‘}_{i}$,即一台设备上每个专家的平均亲和度之和
    3. 代码实现:

      1
      2
      3
      4
      5
      6
      7
      8
      9
      # TODO: 实现device_loss,假设按顺序将专家分组
      # [bsz, num_experts] -> [bsz, n_groups]
      alpha2 = self.alpha
      experts_per_device = self.n_routed_experts // self.n_group
      ce_groups = ce.view(bsz, self.n_group, experts_per_device).mean(dim=-1)
      # [bsz, seq_len, num_experts] -> [bsz, num_experts] -> [bsz, n_groups]
      p_groups = scores_for_seq_aux.mean(dim=1).view(bsz, self.n_group, experts_per_device).sum(dim=-1)
      # [bsz, num_groups] -> [bsz] -> value
      device_loss = (ce_groups * p_groups).sum(dim=1).mean() * alpha2

  2. 通信级负载平衡:保证各设备的通信均衡,每个设备接收到的token数量也应该保持均衡

    1. 理想情况下,由于设备限制,每个token最多被发送到$M$台设备,则每台设备的接收量大约应为$M \ast seqlen/D$个token。
    2. 计算现实情况下每台设备的实际token接收量
    3. 后续流程相同
    4. 代码实现:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    # TODO: 实现comm_loss
    alpha3 = self.alpha
    ce_comm = torch.zeros(
    bsz, self.n_routed_experts, device=hidden_states.device
    )
    # [bsz, n_groups]
    ce_comm = ce_comm.scatter_add_(
    1,
    topk_idx_for_aux_loss,
    torch.ones(bsz, seq_len * aux_topk, device=hidden_states.device),
    ).view(bsz, self.n_group, experts_per_device).sum(dim=-1).div_(seq_len * self.topk_group / self.n_group)
    p_comm = p_groups
    comm_loss = (ce_comm * p_comm).sum(dim=1).mean() * alpha3

总结

三个负载平衡机制层次由低至高,从底层的专家平衡、到中层的设备平衡、再到顶层的通信平衡共同作用,旨在优化MoE系统的资源利用并解决专家崩溃等问题,实现了强大的性能。

]]>
diff --git a/tags/MLLM-LLM/index.html b/tags/MLLM-LLM/index.html index c19afaa4..aaa486e6 100644 --- a/tags/MLLM-LLM/index.html +++ b/tags/MLLM-LLM/index.html @@ -54,7 +54,7 @@ isHome: false, isHighlightShrink: false, isToc: false, - postUpdate: '2024-08-08 17:12:03' + postUpdate: '2024-08-08 17:15:31' }