元象4.2B参数 MoE大模型实战

2024-04-12 11:36
文章标签 实战 参数 模型 4.2 moe 元象

本文主要是介绍元象4.2B参数 MoE大模型实战,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

01 简介

近期,元象公司推出了其首个Moe大模型XVERSE-MoE-A4.2B。该模型采用了混合专家模型架构(Mixture of Experts),并拥有4.2B的激活参数,其性能可与13B模型相媲美。值得一提的是,这个模型是完全开源的,可以无条件免费商用,这对于中小企业、研究者和开发者来说无疑是一个巨大的福音。他们可以在元象高性能“全家桶”中按需选用,以推动低成本部署。

在元象自研的过程中,他们在相同的语料上训练了2.7万亿token。XVERSE-MoE-A4.2B的实际激活参数量为4.2B,其性能“跳级”超越了XVERSE-13B-2,仅用了30%的计算量,并且减少了50%的训练时间。在与多个开源标杆Llama的比较中,该模型超越了Llama2-13B,接近Llama1-65B的性能。

元象自主研发的MoE高效训练和推理框架,在三个方向实现创新:

  • 性能方面,围绕MoE架构中的专家路由和权重计算逻辑,研发了一套高效融合算子进行计算提效;针对MoE模型高显存和大通信量的挑战,设计出计算、通信和显存卸载的重叠操作,有效提高整体处理吞吐量。

  • 架构方面,为保障模型灵活性与性能,采用更细粒度专家设计,相对于传统MoE(如Mixtral 8x7B)将每个专家大小等同于标准FFN,元象的每个专家大小仅为标准FFN的四分之一;同时区分共享专家与非共享专家,共享专家在计算中保持激活中台,非共享专家需要选择性激活,有利于将通用知识压缩至共享专家参数中,减少非共享专家参数间的知识冗余。

  • 训练方面,引入负载均衡损失项,更好均衡专家间的负载;采用路由器z-loss项,确保训练高效和稳定。

02 环境配置与安装

  1. python 3.10及以上版本

  2. pytorch 1.12及以上版本,推荐2.0及以上版本

  3. 建议使用CUDA 11.8及以上

使用步骤

        本文主要演示的模型为XVERSE-MoE-A4.2B模型,在PAI-DSW使用(单卡A100)。 

下载模型的repo:

from modelscope import snapshot_download
model_dir1 = snapshot_download("xverse/XVERSE-MoE-A4.2B")

03 模型推理

import torch
from modelscope import AutoTokenizer, AutoModelForCausalLM
tokenizer = AutoTokenizer.from_pretrained("xverse/XVERSE-MoE-A4.2B")
model = AutoModelForCausalLM.from_pretrained("xverse/XVERSE-MoE-A4.2B", trust_remote_code=True, torch_dtype=torch.bfloat16, device_map='auto')
model = model.eval()
inputs = tokenizer('北京的景点:故宫、天坛、万里长城等。\n深圳的景点:', return_tensors='pt').input_ids
inputs = inputs.cuda()
generated_ids = model.generate(inputs, max_new_tokens=64, eos_token_id=tokenizer.eos_token_id, repetition_penalty=1.1)
print(tokenizer.batch_decode(generated_ids, skip_special_tokens=True))

资源消耗:

单卡A100可运行,如果自己的显卡显存不够,可以考虑使用多张3090显卡,或者对模型进行量化。

04 模型微调和微调后推理

微调代码开源地址: 

https://github.com/modelscope/swift/tree/main/examples/pytorch/llm

SWFIT是魔搭社区官方提供的LLM&AIGC模型微调推理框架,首先从github上将SWIFT clone下来


# 设置pip全局镜像和安装相关的python包
pip config set global.index-url https://mirrors.aliyun.com/pypi/simple/
git clone https://github.com/modelscope/swift.git
cd swift
pip install .[llm]

模型微调脚本 lora

·

# Experimental environment: A100
# 66GB GPU memory
CUDA_VISIBLE_DEVICES=0 \
swift sft \--model_type xverse-moe-a4_2b \--sft_type lora \--tuner_backend swift \--dtype fp16 \--dataset dureader-robust-zh \--train_dataset_sample -1 \--num_train_epochs 1 \--max_length 1024 \--check_dataset_strategy warning \--lora_dtype fp16 \--lora_rank 8 \--lora_alpha 32 \--lora_dropout_p 0.05 \--lora_target_modules DEFAULT \--gradient_checkpointing false \--batch_size 1 \--weight_decay 0.1 \--learning_rate 1e-4 \--gradient_accumulation_steps 16 \--max_grad_norm 0.5 \--warmup_ratio 0.03 \--eval_steps 100 \--save_steps 100 \--save_total_limit 2 \--logging_steps 10 \

   模型微调脚本 (lora+mp)

        可以在消费级显卡上进行训练


# Experimental environment: 4*A100
# 4*20GB GPU memory
PYTHONPATH=../../.. \
CUDA_VISIBLE_DEVICES=0,1,2,3 \
python llm_sft.py \--model_type xverse-moe-a4_2b \--sft_type lora \--tuner_backend swift \--dtype AUTO \--dataset dureader-robust-zh \--train_dataset_sample -1 \--num_train_epochs 1 \--max_length 1024 \--check_dataset_strategy warning \--lora_rank 8 \--lora_alpha 32 \--lora_dropout_p 0.05 \--lora_target_modules DEFAULT \--gradient_checkpointing false \--batch_size 1 \--weight_decay 0.1 \--learning_rate 1e-4 \--gradient_accumulation_steps 16 \--max_grad_norm 0.5 \--warmup_ratio 0.03 \--eval_steps 100 \--save_steps 100 \--save_total_limit 2 \--logging_steps 10 \

模型微调后推理脚本

请将下面--ckpt_dir的值改为--output_dir中实际存储的模型weights目录。


# Experimental environment: A100
# 4*18GB GPU memory
CUDA_VISIBLE_DEVICES=0,1,2,3 \
swift infer \--ckpt_dir "output/xverse-moe-a4_2b/vx-xxx/checkpoint-xxx" \--load_dataset_config true \--max_new_tokens 2048 \--temperature 0.7 \--top_p 0.7 \--repetition_penalty 1. \--do_sample true \--merge_lora false \

微调的可视化结果

训练损失: 

图片

 训练后生成样例

[PROMPT]Task: Question Generation
Context: 爬行垫根据中间材料的不同可以分为:XPE爬行垫、EPE爬行垫、EVA爬行垫、PVC爬行垫;其中XPE爬行垫、EPE爬行垫都属于PE材料加保鲜膜复合而成,都是无异味的环保材料,但是XPE爬行垫是品质较好的爬行垫,韩国进口爬行垫都是这种爬行垫,而EPE爬行垫是国内厂家为了减低成本,使用EPE(珍珠棉)作为原料生产的一款爬行垫,该材料弹性差,易碎,开孔发泡防水性弱。EVA爬行垫、PVC爬行垫是用EVA或PVC作为原材料与保鲜膜复合的而成的爬行垫,或者把图案转印在原材料上,这两款爬行垫通常有异味,如果是图案转印的爬行垫,油墨外露容易脱落。当时我儿子爬的时候,我们也买了垫子,但是始终有味。最后就没用了,铺的就的薄毯子让他爬。
Answer: XPE
Question:[OUTPUT]爬行垫什么材质好<|endoftext|>[LABELS]爬行垫什么材质的好
--------------------------------------------------
[PROMPT]Task: Question Generation
Context: 下载速度达到72mbp/s速度相当快。相当于500兆带宽。在网速计算中, b=bit,B=byte 8×b=1×B 意思是 8个小写的b 才是一个大写B。4M理论下载速度:4M就是4Mb/s 理论下载速度公式:4×1024÷8=512KB /s 请注意按公式单位已经变为 KB/s 依此类推: 2M理论下载速度:2×1024÷8=256KB /s 8M理论下载速度:8×1024÷8=1024KB /s =1MB/s 10M理论下载速度:10×1024÷8=1280KB /s =2M理论下载速度+8M理论下载速度 50M理论下载速度:50×1024÷8=6400KB /s 1Gb理论下载速度:1024×1024÷8=128MB /s 公式:几兆带宽×1024÷8=()KB/s。
Answer: 相当于500兆带宽
Question:[OUTPUT]72m等于多少兆<|endoftext|>[LABELS]72mbps是多少网速

资源消耗

训练lora

图片

训练(lora+mp)

图片

训练后推理

图片

这篇关于元象4.2B参数 MoE大模型实战的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/897018

相关文章

Java内存分配与JVM参数详解(推荐)

《Java内存分配与JVM参数详解(推荐)》本文详解JVM内存结构与参数调整,涵盖堆分代、元空间、GC选择及优化策略,帮助开发者提升性能、避免内存泄漏,本文给大家介绍Java内存分配与JVM参数详解,... 目录引言JVM内存结构JVM参数概述堆内存分配年轻代与老年代调整堆内存大小调整年轻代与老年代比例元空

从原理到实战深入理解Java 断言assert

《从原理到实战深入理解Java断言assert》本文深入解析Java断言机制,涵盖语法、工作原理、启用方式及与异常的区别,推荐用于开发阶段的条件检查与状态验证,并强调生产环境应使用参数验证工具类替代... 目录深入理解 Java 断言(assert):从原理到实战引言:为什么需要断言?一、断言基础1.1 语

Java MQTT实战应用

《JavaMQTT实战应用》本文详解MQTT协议,涵盖其发布/订阅机制、低功耗高效特性、三种服务质量等级(QoS0/1/2),以及客户端、代理、主题的核心概念,最后提供Linux部署教程、Sprin... 目录一、MQTT协议二、MQTT优点三、三种服务质量等级四、客户端、代理、主题1. 客户端(Clien

在Spring Boot中集成RabbitMQ的实战记录

《在SpringBoot中集成RabbitMQ的实战记录》本文介绍SpringBoot集成RabbitMQ的步骤,涵盖配置连接、消息发送与接收,并对比两种定义Exchange与队列的方式:手动声明(... 目录前言准备工作1. 安装 RabbitMQ2. 消息发送者(Producer)配置1. 创建 Spr

深度解析Spring Boot拦截器Interceptor与过滤器Filter的区别与实战指南

《深度解析SpringBoot拦截器Interceptor与过滤器Filter的区别与实战指南》本文深度解析SpringBoot中拦截器与过滤器的区别,涵盖执行顺序、依赖关系、异常处理等核心差异,并... 目录Spring Boot拦截器(Interceptor)与过滤器(Filter)深度解析:区别、实现

深度解析Spring AOP @Aspect 原理、实战与最佳实践教程

《深度解析SpringAOP@Aspect原理、实战与最佳实践教程》文章系统讲解了SpringAOP核心概念、实现方式及原理,涵盖横切关注点分离、代理机制(JDK/CGLIB)、切入点类型、性能... 目录1. @ASPect 核心概念1.1 AOP 编程范式1.2 @Aspect 关键特性2. 完整代码实

MySQL中的索引结构和分类实战案例详解

《MySQL中的索引结构和分类实战案例详解》本文详解MySQL索引结构与分类,涵盖B树、B+树、哈希及全文索引,分析其原理与优劣势,并结合实战案例探讨创建、管理及优化技巧,助力提升查询性能,感兴趣的朋... 目录一、索引概述1.1 索引的定义与作用1.2 索引的基本原理二、索引结构详解2.1 B树索引2.2

从入门到精通MySQL 数据库索引(实战案例)

《从入门到精通MySQL数据库索引(实战案例)》索引是数据库的目录,提升查询速度,主要类型包括BTree、Hash、全文、空间索引,需根据场景选择,建议用于高频查询、关联字段、排序等,避免重复率高或... 目录一、索引是什么?能干嘛?核心作用:二、索引的 4 种主要类型(附通俗例子)1. BTree 索引(

Java Web实现类似Excel表格锁定功能实战教程

《JavaWeb实现类似Excel表格锁定功能实战教程》本文将详细介绍通过创建特定div元素并利用CSS布局和JavaScript事件监听来实现类似Excel的锁定行和列效果的方法,感兴趣的朋友跟随... 目录1. 模拟Excel表格锁定功能2. 创建3个div元素实现表格锁定2.1 div元素布局设计2.

Redis 配置文件使用建议redis.conf 从入门到实战

《Redis配置文件使用建议redis.conf从入门到实战》Redis配置方式包括配置文件、命令行参数、运行时CONFIG命令,支持动态修改参数及持久化,常用项涉及端口、绑定、内存策略等,版本8... 目录一、Redis.conf 是什么?二、命令行方式传参(适用于测试)三、运行时动态修改配置(不重启服务