DeepSpeed MoE

MoE概念

模型参数增加很多;计算量没有增加(gating+小FNN,比以前的大FNN计算量要小);收敛速度变快;

效果:PR-MoE > 普通MoE > DenseTransformer

MoE模型,可视为Sparse Model,因为每次参与计算的是一部分参数;

Expert并行,可以和其他并行方式,同时使用:

 ep_size指定了MoE进程组大小,一个模型replica的所有MoE都分布在mp_size这些GPU卡上。

下例,启动2个DP replica,每个DP replica包含2个MoE rank,每个MoE rank包含4个MoE FFN,每个GPU放置一个MoE rank;

import torch
import deepspeed
import deepspeed.utils.groups as groups
from deepspeed.moe.layer import MoEWORLD_SIZE = 4
EP_WORLD_SIZE = 2
EXPERTS = 8fc3 = torch.nn.Linear(84, 84)
fc3 = MoE(hidden_size=84, expert=self.fc3, num_experts=EXPERTS, ep_size=EP_WORLD_SIZE, k=1)
fc4 = torch.nn.Linear(84, 10)

节约显存的方式:

1. 配置好ZeRo

2. 配置好fp16

    "fp16": {"enabled": true,"fp16_master_weights_and_grads": true,}

支持PR-MoE

Pyramid: 金字塔 ;前面的层,Experts数量少些,后面的层Experts数量多些;

Residual:每层都过一个固定的MLP,并和选中的Expert输出结果,相加;

支持Random Token Selection

推理

import deepspeed
import torch.distributed as dist# Set expert-parallel size
world_size = dist.get_world_size()
expert_parallel_size = min(world_size, args.num_experts)# create the MoE model
moe_model = get_model(model, ep_size=expert_parallel_size)
...# Initialize the DeepSpeed-Inference engine
ds_engine = deepspeed.init_inference(moe_model,mp_size=tensor_slicing_size,dtype=torch.half,moe_experts=args.num_experts,checkpoint=args.checkpoint_path,replace_with_kernel_inject=True,)
model = ds_engine.module
output = model('Input String')

如果Experts数目大于GPU数目, 均分在各个GPU上;如果小于,则Expert将被切片,均分到各个GPU上;

注意:ep_size, mp_size(模型并行),dtype为half, 优化版kernel的使用replace_with_kernel_inject=True;

generate_samples_gpt.py \--tensor-model-parallel-size 1 \--num-experts ${experts} \--num-layers 24 \--hidden-size 2048 \--num-attention-heads 32 \--max-position-embeddings 1024 \--tokenizer-type GPT2BPETokenizer \--load $checkpoint_path \--fp16 \--ds-inference \

PR-MoE, 前面那些层的experts个数少,后面的多:

experts="64 64 64 64 64 64 64 64 64 64 128 128"
generate_samples_gpt.py \--tensor-model-parallel-size 1 \--num-experts ${experts} \--mlp_type 'residual' \--num-layers 24 \--hidden-size 2048 \--num-attention-heads 16 \--max-position-embeddings 1024 \--tokenizer-type GPT2BPETokenizer \--load $checkpoint_path \--fp16 \--ds-inference \

--mlp_type指定使用PR-MoE,推理latency更块;

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/26037.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Qt之QAbstractSocketEngine

简介 QAbstractSocketEngine是网络中的基础,QTcpSocket和QTcpServer底层都依赖socket引擎 结构 #mermaid-svg-LrJAouZrtX0AxaPo {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-LrJAouZrtX0AxaPo .erro…

表的设计与查询

目录 一、表的设计 1.第一范式(一对一) 定义: 示例: 2.第二范式(一对多) 定义: 要求: 示例: 3.第三范式(多对多) 定义: 要求…

python类元编程示例-使用类型注解来检查转换属性值的类框架

用三种方式实现使用类型注解来检查转换属性值的类框架 1 __init_subclass__方式 1.1 代码实现 from collections.abc import Callable # <1> from typing import Any, NoReturn, get_type_hints from typing import Dict, Typeclass Field:def __init__(self, name: …

**《Linux/Unix系统编程手册》读书笔记24章**

D 24章 进程的创建 425 24.1 fork()、exit()、wait()以及execve()的简介 425 . 系统调用fork()允许父进程创建子进程 . 库函数exit(status)终止进程&#xff0c;将进程占用的所有资源归还内核&#xff0c;交其进行再次分配。库函数exit()位于系统调用_exit()之上。在调用fo…

ffmpeg常见命令

一、ffmpeg的安装 ffmpeg的安装 一、ffmpeg常用命令 二、ffprobe

排课系统1

参考:https://gitee.com/lequal/CourseArrange 软件技术栈 当然,我会逐一解释这些技术栈的含义:### 前端技术栈1. **Vue2.x**:- Vue.js 是一个流行的前端 JavaScript 框架,用于构建用户界面和单页应用程序(SPA)。- 2.x 表示 Vue.js 的第二个主要版本,它提供了一套响应…

浅解Reids持久化

Reids持久化 RDB redis的存储方式&#xff1a; rdb文件都是二进制&#xff0c;很小&#xff0c;里面存的是数据 实现方式 redis-cli链接到redis服务端 使用save命令 注&#xff1a;不推荐 因为save命令是直接写到磁盘里面&#xff0c;速度特别慢&#xff0c;一般都是redis…

遗传算法笔记:基本工作流程

1 介绍 遗传算法有5个主要任务&#xff0c;直到找到最终的解决方案 2 举例 2.1 问题描述 比如我们有 5 个变量和约束&#xff0c;其中 X1、X2、X3、X4 和 X5 是非负整数且小于 10&#xff08;0、1、2、4、5、6、7、8、9&#xff09;我们希望找到 X1、X2、X3、X4 和 X5 的最…

go语言后端开发学习(三)——基于validator包实现接口校验

前言 在我们开发模块的时候,有一个问题是我们必须要去考虑的&#xff0c;它就是如何进行入参校验&#xff0c;在gin框架的博客中我就介绍过一些常见的参数校验&#xff0c;大家可以参考gin框架学习笔记(四) ——参数绑定与参数验证&#xff0c;而这个其实也不是能够完全应对我…

Android JobService启动系统源码分析

以下就JobService的执行流程,系统层实现进行详解 入口点在JobScheduler.scheduler 系统层JobScheduler是个抽象类,它的实现类是JobScheduler mBinder,一看就知道这里面肯定是跨进程了。它的服务端在JobSchedulerService里面,具体 为什么请看系统服务器启动流程相关文章,…

Python算法于强化学习库之rlax使用详解

概要 在强化学习领域,开发和测试各种算法需要使用高效的工具和库。rlax 是 Google 开发的一个专注于强化学习的库,旨在提供一组用于构建和测试强化学习算法的基础构件。rlax 基于 JAX,利用 JAX 的自动微分和加速计算功能,使得强化学习算法的实现更加高效和简洁。本文将详细…

如何判断 是否 需要 CSS 中的媒体查询

以下是一些常见的使用媒体查询的场景&#xff1a; 响应式布局&#xff1a;当设备的屏幕尺寸变化时&#xff0c;我们可以使用媒体查询来调整布局&#xff0c;以适应不同的屏幕尺寸。 设备特性适配&#xff1a;我们可以使用媒体查询来检测设备的特性&#xff0c;如设备方向、分辨…

带你学习Mybatis之DataSource数据源

DataSource数据源 所有的数据源组件都实现了javax.sql.DataSource接口&#xff0c;Mybatis实现了两个接口实现&#xff0c;分别为PooledDataSource和UnpooledDataSource&#xff0c;使用不同的DataSourceFactory接口实现创建不同类型的DataSource UnpooledDataSource 每次通过U…

代码随想录——数组

给定一个n个元素有序&#xff08;升序&#xff09;的整型数组nums和一个目标值target&#xff0c;写一个函数搜索nums中的target&#xff0c;如果目标值存在返回下标&#xff0c;否则返回-1. //这个题说实话从逻辑上来看实在是太简单了&#xff0c;但是为什么每一次我写起来都感…

堡垒机的自动化运维,快速安全提升运维效率

随着信息技术的突飞猛进&#xff0c;企业对于IT系统的依赖程度日益加深&#xff0c;不仅希望可以提高运维效率&#xff0c;也希望能保障IT系统的安全。因此堡垒机与自动化运维技术的结合应运而生&#xff0c;堡垒机的自动化运维&#xff0c;快速安全提升运维效率。今天我们就来…

CTE-6作文

第一段 现象 引出原因 第二段 感受 举例 意义 危害 第三段 建议 展望

程序员怎么样找用户需求

需求&#xff0c;商业成功的启航点 今天&#xff0c;我想与大家探讨一个话题&#xff1a;作为一个程序员&#xff0c;我们应如何探索并把握商机&#xff1f; 通过生财&#xff0c;我们已经见识了多种赚钱的方式&#xff0c;但深入分析&#xff0c;任何项目的核心都逃不过一个…

MySQL中的一行记录是怎么存储的

MySQL数据存储位置 数据存储在磁盘上的文件中&#xff0c;由存储引擎实现。InnoDB是默认存储引擎&#xff0c;数据存放在/var/lib/mysql/目录下&#xff0c;每个数据库对应一个目录。 表空间文件结构 表空间由段&#xff08;segment&#xff09;、区&#xff08;extent&…

2024年数字化经济与智慧金融国际会议(ICDESF 2024)

2024 International Conference on Digital Economy and Smart Finance 【1】大会信息 大会时间&#xff1a;2024-07-22 大会地点&#xff1a;中国成都 截稿时间&#xff1a;2024-07-10(以官网为准&#xff09; 审稿通知&#xff1a;投稿后2-3日内通知 会议官网&#xff1a;h…

day27回溯算法part03| 39. 组合总和 40.组合总和II 131.分割回文串

39. 组合总和 题目链接/文章讲解 | 视频讲解 本题是 集合里元素可以用无数次&#xff0c;那么和组合问题的差别 其实仅在于 startIndex上的控制 class Solution { public:int sum;vector<int> path;vector<vector<int>> result;void backtracking(vector<…