首页 > 其他分享 >大模型-大模型训练框架-07

大模型-大模型训练框架-07

时间:2024-11-07 15:41:29浏览次数:5  
标签:07 训练 -- 模型 并行 框架 train model

目录

1. 训练框架概述


100亿 10^10 10B 参数量 是模型具备涌现能力的基本门槛

如何充分的利用显卡的能力 充分的使用显存
分布式训练框架对比
Megatron and DeepSpeed是目前主流的训练加速框架

训练框架地址:
Megatron-LM: https://github.com/NVIDIA/Megatron-LM
DeepSpeed: https://github.com/microsoft/DeepSpeed
mesh-tensorflow: https://github.com/tensorflow/mesh
fairscale: https://github.com/facebookresearch/fairscale

megatron - 英伟达
DeepSpeed - 微软

2. 重点 Deepspeed框架介绍

Deepspeed是由微软开发的一款开源深度学习优化库,旨在提高大规模模型训练的效率和可扩展性。该框架采用多种技术手段来加速训练,其中包括模型并行化、梯度累积、动态精度缩放、本地模式混合精度等。
Deepspeed还提供了一些辅助工具,如分布式训练管理、内存优化和模型压缩等,以帮助开发者更好地管理和优化大规模深度学习训练任务。该框架是基于PyTorch构建的,因此可以简单修改以便进行迁移使用。Deepspeed已经在许多大规模深度学习项目中得到了应用,包括语言模型、图像分类、目标检测等领域。在深度学习模型软件体系架构中,Deepspeed扮演着重要的角色。

Deepspeed软件架构主要分为三个部分:

  • APIs:提供简单易用的api接口,使用者只需要调用几个接口就能够完成模型训练和推理任务。
    其中最重要的接口是initialize,用于初始化引擎并配置训练参数和优化技术。配置参数通常保存在config.json文件中。

  • Runtime:运行时组件,是Deepspeed的核心组件,主要用于管理、执行和性能优化。该组件包括将训练任务部署到分布式设备、数据分区和模型分区、系统优化、微调、故障检测、checkpoints保存和加载等功能,并使用Python语言实现。

  • Ops 算子
    使用C++和CUDA优化计算和通信。此组件涵盖了许多关键技术。

Deepspeed是一款高效、可扩展的深度学习优化库,其中一些核心技术如下:

  • ZeRO(Zero Redundancy Optimizer)
    ZeRO是一种内存优化技术,用于大规模分布式深度学习。该技术可以消除数据并行进程中的内存冗余,通过在数据并行进程之间划分模型状态参数、梯度和优化器状态,而不是复制它们。此外,ZeRO还使用动态通信调度在分布式设备之间共享必要的状态,以保持数据并行的计算粒度和通信量。基于ZeRO,DeepSpeed实现了数据并行、流水线并行和张量切片模型并行等方式的训练,以提高显存和计算效率,并能够训练具有万亿个参数的模型。

  • 3D并行
    数据并行和模型并行可能会导致内存冗余,因此DeepSpeed采用基于ZeRO的3D并行来优化显存利用和计算效率。该技术将模型状态参数、梯度和优化器状态按照3D方式划分,并使用动态物理内存分配来减少内存占用。

  • 梯度累积
    DeepSpeed还使用梯度累积来提高批量大小,从而提高训练效率。梯度累积可以通过多次前向传递和反向传递来累积梯度,从而实现较大的批量大小。

3. DeepSpeed框架实践

DeepSpeed框架与ChatGLM微调模型相结合的实践案例

  1. 环境
conda install pytorch==1.12.0 \
torchvision==0.13.0 \
torchaudio==0.12.0 \
cudatoolkit=11.3 -c pytorch

pip install deepspeed==0.8.1
sudo yum install openmpi-bin libopenmpi-dev
pip install mpi4py
  1. 下载模型
https://huggingface.co/THUDM/chatglm-6b/tree/main
  1. 准备训练样本
    训练数据通常由三个部分组成:prompt、response和history。
{
    "prompt": "什么事。\n[姓名]:张三\n[年龄]:45.0\n[性别]:男士\n[省份]:湖北",
    "response": "打扰您了,给您介绍下近期的优惠活动?",
    "history": [
        [
            "",
            "您好,请问是张先生吗?"
        ],
        [
            "是。",
            "喂,您好,我这是您专属客服顾问。"
        ]
    ]
}    

  1. 代码准备
git clone https://github.com/THUDM/ChatGLM-6B.git
  1. 核心代码
import torch
import deepspeed
from torch.utils.data import RandomSampler, DataLoader
from torch.utils.data.distributed import DistributedSampler

...

# 一、初始化DeepSpeed引擎
model_engine, optimizer, _, _ = deepspeed.initialize(args=cmd_args,model=model,model_parameters=params)
# 二、分布式环境设置
deepspeed.init_distributed()

....

# 三、预加载模型和训练数据
model = ChatGLMForConditionalGeneration.from_pretrained(args.model_dir)
tokenizer = ChatGLMTokenizer.from_pretrained(args.model_dir)
# DataLoaders creation:
train_dataloader = DataLoader(train_dataset,
                              batch_size=conf["train_micro_batch_size_per_gpu"],
                              sampler=RandomSampler(train_dataset),
                              collate_fn=coll_fn,
                              drop_last=True,
                              num_workers=0)

....

# 四、训练循环
for step, batch in enumerate(train_dataloader):
    #用于向前传播和损失计算
    loss = model_engine(batch)
    #向后传播
    model_engine.backward(loss)
    #优化器更新
    model_engine.step()

  1. 注意
    启动训练前需要配置机器之间免登、.deepspeed_env环境变量、调整训练参数

  2. 启动

cd ./ChatGLM-6B/ptuning/

nohup deepspeed --hostfile=myhostfile --master_port 9000 main.py \
    --deepspeed deepspeed.json \
    --do_train \
    --train_file /data/train.json \
    --test_file /data/dev.json \
    --prompt_column prompt \
    --response_column response \
    --history_column history \
    --overwrite_cache \
    --model_name_or_path /data/pre_model/chatglm/chatglm-6b \
    --output_dir ./output/out-chatglm-6b-ft-le-4 \
    --overwrite_output_dir \
    --max_source_length 64 \
    --max_target_length 64 \
    --per_device_train_batch_size 4 \
    --per_device_eval_batch_size 1 \
    --gradient_accumulation_steps 1 \
    --predict_with_generate \
    --max_steps 50000 \
    --logging_steps 10 \
    --save_steps 10000 \
    --learning_rate $LR \
    --fp16 &

  1. 推理演示
pip install fastapi uvicorn
python api.py

调用

curl -X POST "http://127.0.0.1:8000" \
     -H 'Content-Type: application/json' \
     -d '{"prompt": "你好", "history": []}'

相应:

{
  "response":"你好

标签:07,训练,--,模型,并行,框架,train,model
From: https://www.cnblogs.com/cavalier-chen/p/18532453

相关文章

  • TBTA是一种配体标记蛋白质和酶|cas:510758-28-8
    TBTA(Tris[(1-benzyl-1H-1,2,3-triazol-4-yl)methyl]amine,三[(1-苄基-1H-1,2,3-三唑-4-基)甲基]胺)是一种化学物质,主要用于科研领域的点击化学(ClickChemistry)反应,特别是铜催化的叠氮-炔环加成反应(CuAAC)。以下是对TBTA的详细介绍:一、基本信息CAS号:510758-28-8分子式:C30H30N10分......
  • 适合才最美:Shiro安全框架使用心得
    大家好,我是V哥。ApacheShiro是一个强大且灵活的Java安全框架,专注于提供认证、授权、会话管理和加密功能。它常用于保护Java应用的访问控制,特别是在Web应用中。相比于SpringSecurity,Shiro的设计更简洁,适合轻量级应用,并且在许多方面具有更好的易用性和扩展性,今......
  • 惊呆!大模型工程师均薪达39607元/月,现在入还来得及吗?
    前言一年前的11月30日,在ChatGPT发布的夜里,一位软件创业者感叹:「过去20年白干了,我感觉全部都可以丢掉。」在2023年阿里云峰会上,阿里巴巴集团CEO张勇表示“AI时代,所有的产品都值得用大模型重新做一遍”。大模型的风刮了一年多,历经了百模大战、Llama3.2开源、GPTs发布等......
  • 关于离散概率模型的一些介绍
    离散概率模型是概率论中的一类重要模型,专门用于描述随机变量取离散值的情况。这类模型在许多领域都有广泛的应用,比如统计学、机器学习、数据挖掘等。在这篇文章中就将介绍离散概率模型有关的东西,具体包括:马尔科夫链、部件与系统的可靠性建模以及线性回归等内容。一、马尔科夫......
  • 1.0 RK3588上运行AI模型
    瑞星微是需要RKNN模型的,我们安装他的工具rknn-toolkit2,下面会将如何生成模型文件.1.模型转换当前系统是Ubuntu20.04使用python虚拟环境软件 Minicondasudoaptupdatesudoaptinstallwgetwgethttps://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64......
  • stable diffusion 大模型
    本节内容,给大家带来的是stablediffusion的基础模型课程。基础模型,我们有时候也称之为大模型。在之前的课程中,我们已经多次探讨过大模型,并且也见识过一些大模型绘制图片的独特风格,相信大家对stablediffusion大模型已经有了一定的了解。使用不同的大模型,绘制的图片风格,内容,精细......
  • 超详细解读:《中国人工智能大模型技术白皮书》,看完你算是学完了半个大模型!
    近期,中国人工智能协会发布了《中国人工智能大模型技术白皮书》,系统梳理了大模型技术演进,深入探讨关键技术要素,并剖析当前挑战及未来展望。我为大家做了简要总结,并附上原文供深入阅读。目录第1章大模型技术概述...................................51.1大模型技术的......
  • 程序员为什么要转行做大模型?中年危机?职场发展?升职加薪?
    最近研究了一下大模型相关的内容,决定从互联网的推荐算法转行做大模型推理工程化相关的工作。所以简单说说我在这个决定中的思考过程。1.推荐算法岗的现状我本来是一个在大厂做推荐算法的工程师。收入在行业里面算是中游水平,就这么一直干着似乎也没什么问题。但是互......
  • 王慧文回归带队美团探索 AI 应用;对话音频开源模型 Hertz-dev:120 毫秒超低延迟丨 RTE
       开发者朋友们大家好: 这里是「RTE开发者日报」,每天和大家一起看新闻、聊八卦。我们的社区编辑团队会整理分享RTE(Real-TimeEngagement)领域内「有话题的新闻」、「有态度的观点」、「有意思的数据」、「有思考的文章」、「有看点的会议」,但内容仅代表编......
  • java后端工程师转行AI大模型岗,工作、自我提升两不误!
    随着技术的不断进步,人工智能(AI)已经成为当今科技领域最热门的话题之一。许多开发者开始考虑从传统的软件开发领域,如Java,转向人工智能领域,今天小编和大家一起来探讨Java开发者是否可以转型到人工智能,转型的优势,薪资对比,以及转型所需的知识和学习路线等。01Java开发者能否转......