调试和优化大型深度学习模型 - 0 技术介绍

ops/2024/9/22 16:52:28/

调试和优化大型深度学习模型 - 0 技术介绍

flyfish

LLaMA Factory

LLaMA Factory 是一个简单易用且高效的大型语言模型(Large Language Model)训练与微调平台。通过 LLaMA Factory,可以在无需编写任何代码的前提下,在本地完成上百种预训练模型的微调。

FastChat

FastChat 是一个用于训练、部署和服务大型语言模型(LLM)聊天机器人的开放平台。

FastChat 提供了一个全面的平台,不仅可以让开发者训练和评估先进的聊天机器人模型,还可以让这些模型通过易于集成的服务接口对外提供服务。Chatbot Arena 则是一个基于 FastChat 平台的应用实例,允许用户直接体验和比较不同聊天机器人的性能。

FastChat 支持 Chatbot Arena(网址:https://chat.lmsys.org/),为超过70种大型语言模型处理了超过1000万次聊天请求。
Chatbot Arena 已经通过一对一的模型对决收集了超过50万个人工投票,以此编制了一个在线的大型语言模型Elo排名榜。

FastChat 的核心特性包括:
训练和评估最先进的模型(例如 Vicuna、MT-Bench)的代码。
一个分布式的多模型服务系统,配备有网页界面和与 OpenAI 兼容的 RESTful API。

DeepSpeed

DeepSpeed 是一个易于使用的深度学习优化软件套件,它支持大规模的深度学习训练和推理,使世界上最强大的语言模型(如 MT-530B 和 BLOOM)得以实现。DeepSpeed 的主要特点如下:

训练和推理大型模型:DeepSpeed 可以支持训练和推理拥有数十亿甚至数万亿参数的密集型或稀疏型模型。
高效的系统吞吐量和扩展能力:能够实现优秀的系统吞吐量,并能高效地扩展到数千个 GPU。
资源受限环境下的训练和推理:即使在资源受限的 GPU 系统上也能进行训练和推理。
低延迟和高吞吐量的推理:实现了前所未有的低延迟和高吞吐量的推理性能。
极致压缩:能够实现极高的模型压缩率,大幅度降低推理延迟和模型大小,同时成本较低。

DeepSpeed 的四大创新支柱包括:
DeepSpeed-Training:提供了多种系统创新,如 ZeRO、3D-Parallelism、DeepSpeed-MoE 和 ZeRO-Infinity 等,极大地提高了大规模深度学习训练的效果和效率。
DeepSpeed-Inference:结合了张量并行、管道并行、专家并行以及 ZeRO-并行等多种并行技术,并利用高性能自定义推理内核、通信优化和异构内存技术,实现了前所未有的大规模推理能力。
DeepSpeed-Compression:提供了易于使用且灵活的压缩技术,帮助研究人员和实践者在保证性能的同时压缩模型,实现更快的速度、更小的模型大小以及显著降低压缩成本。
DeepSpeed4Science:通过人工智能系统技术创新帮助科学家们解锁当今最大的科学难题。

DeepSpeed ZeRO

DeepSpeed ZeRO(Zero Redundancy Optimizer)是一种用于分布式训练的优化器,它的设计目的是减少训练大型模型所需的内存消耗。ZeRO 提供了三个阶段(Stages),每个阶段都会采用不同的策略来减少内存占用:

 ZeRO-1:只对优化器状态进行分片,这意味着每个节点只存储一部分优化器的状态,而不是整个状态。ZeRO-2:除了优化器状态之外,还包括梯度的分片,这样每个节点只需要存储它负责更新的一部分梯度。ZeRO-3:除了优化器状态和梯度外,还包括模型参数的分片,这意味着每个节点只需要存储一部分模型参数,这进一步降低了内存需求。

ZeRO 的主要优势在于它能够在不牺牲训练性能的情况下显著减少内存占用,这对于训练超大模型尤其重要。此外,DeepSpeed 还支持将优化器状态、梯度和模型参数从 GPU 显存移动到 CPU 内存或硬盘上,从而实现不同程度的显存节省。

FSDP (Fully Sharded Data Parallelism)

FSDP 是 Facebook 开发的一种数据并行训练技术,它被设计用于解决在分布式环境中训练大型模型时出现的问题。FSDP 通过将模型参数、梯度和优化器状态在多个工作节点之间进行分片来实现内存和计算资源的有效利用。

FSDP 的关键特点包括:

Parameter Sharding:FSDP 采用参数分片机制,意味着模型参数、梯度和优化器状态会在各个 GPU 之间分片存储,这样每个 GPU 只需要处理一部分数据。
Efficient Communication:FSDP 实现了高效的跨节点通信机制,以最小化分片状态之间的同步开销。
Simplicity:尽管 FSDP 提供了高级功能,但它仍然保持了数据并行训练的简单性,使得用户可以轻松地将其应用于现有的 PyTorch 代码中。

SFT 训练

SFT 训练通常指的是 Supervised Fine-Tuning,即监督微调。这是一种在深度学习模型上进行微调的技术,使用标注数据对预训练模型进行进一步的训练,以便在特定任务上表现更好。

SFT 训练的主要步骤:

1 预训练模型:
先在大规模的无标注数据集上进行预训练,使模型学习通用的语言表示或其他相关特征。
2 微调数据:
收集并标注与特定任务相关的数据集。这些数据通常是由人类标注的,包含输入和对应的目标输出。
3 监督微调:
将预训练模型加载进来,并使用标注数据对模型进行微调。通过最小化训练集上的损失(如交叉熵损失),模型会逐渐学习到如何在特定任务上进行预测。

典型应用场景:

文本分类:在预训练语言模型(如BERT、GPT等)的基础上,使用标注的文本分类数据进行微调。
问答系统:使用标注的问答对数据,对预训练模型进行微调,以提高模型在问答任务上的表现。
对话系统:在特定领域或风格的对话数据上对模型进行监督微调,以适应特定的对话场景。

集成方法(Integrated methods)

  1. 预训练(Pre-training)
    预训练是指在大规模的文本数据上训练模型,以使其学习到通用的语言表示。这通常是模型训练的第一步,目的是让模型具备基本的语言理解能力。在这之后,模型可以通过微调来适应特定任务。

  2. (多模态)指令监督微调((Multimodal) Supervised Fine-tuning)
    指令监督微调是指在特定任务上使用标注数据进一步训练模型。这种训练方式使模型在特定任务或数据集上表现更好。如果是多模态(multimodal),则涉及到处理不同类型的数据(如文本和图像)的监督微调。

  3. 奖励模型训练(Reward Modeling)
    奖励模型训练是一种强化学习方法,通过奖励信号来优化模型的行为。训练过程中,模型会根据奖励信号调整其输出,以提高其在特定任务上的表现。奖励模型通常用于生成任务,如对话生成。

  4. PPO 训练(Proximal Policy Optimization Training)
    PPO(Proximal Policy Optimization)是一种强化学习算法,用于优化策略网络。PPO通过限制策略更新的幅度,来确保训练过程的稳定性和高效性。它常用于优化生成模型的输出质量。

  5. DPO 训练(Direct Preference Optimization Training)
    DPO(Direct Preference Optimization)是一种通过直接优化模型输出的偏好来进行训练的方法。与传统的强化学习方法不同,DPO直接使用人类反馈或偏好来调整模型的生成结果。

  6. KTO 训练(Knowledge Transfer Optimization Training)
    KTO(Knowledge Transfer Optimization)涉及从一个任务或领域中转移知识到另一个任务或领域。这种方法通常用于提高模型在新任务上的性能,利用在先前任务中学到的知识。

  7. ORPO 训练(Online Reinforcement Policy Optimization Training)
    ORPO(Online Reinforcement Policy Optimization)是一种强化学习方法,通过在线优化策略来提高模型的性能。这种方法通常用于动态环境中的决策优化。

可扩展资源(Scalable resources)

  1. 16比特全参数微调(16-bit Full-Tuning)
    这种方法使用16位浮点数(FP16)进行全参数微调。与传统的32位浮点数(FP32)相比,16位浮点数可以显著减少内存使用和计算量,同时保持足够的数值精度。这种方法适用于需要在较大模型上进行训练但计算资源有限的情况。

  2. 冻结微调(Freeze-Tuning)
    冻结微调是指在微调过程中,冻结模型的某些层或参数,只对其余部分进行训练。这通常用于保留预训练模型的基础知识,同时对特定任务进行适应。冻结某些层可以减少计算资源需求和训练时间。

  3. LoRA 微调(LoRA Fine-Tuning)
    LoRA(Low-Rank Adaptation)是一种通过引入低秩矩阵来进行模型微调的方法。通过在模型的权重矩阵中添加低秩矩阵,LoRA可以在不显著增加计算成本的情况下,调整模型以适应特定任务。这种方法适用于大规模模型的高效微调。

  4. 基于 AQLM/AWQ/GPTQ/LLM.int8/HQQ/EETQ 的 2/3/4/5/6/8 比特 QLoRA 微调
    这些方法涉及使用低精度量化技术来进一步减少模型训练和推理的内存和计算需求。QLoRA(Quantized LoRA)结合了LoRA和量化技术,通过将模型的权重和/或激活值量化为低精度(如 2、3、4、5、6 或 8 比特)来实现。以下是这些量化技术的简要说明:
    AQLMAWQGPTQLLM.int8HQQEETQ :这些是不同的量化方法,用于将模型的参数和/或计算转换为更低的位数,从而减少模型的存储和计算需求。

量化方法

AQLM (Activation Quantization for Large Models)
AQLM 指的是针对大型模型的激活量化技术。尽管具体的细节不多,但从名称上看,它主要侧重于对模型的激活值进行量化。激活量化是量化技术的一个重要方面,因为它可以减少模型在推理过程中需要处理的数据量,进而降低内存带宽需求并加快推理速度。

AWQ (Activation-aware Weight Quantization)
AWQ 是一种基于激活值分布挑选显著权重进行量化的方法。它不需要依赖于反向传播或重建,可以很好地保持模型在不同领域的泛化能力,避免过拟合到校准集。AWQ 属于训练后量化(Post-Training Quantization, PTQ)大类,已经被广泛应用于多个推理框架中,如 TensorRT-LLM、FastChat、vLLM、HuggingFace TGI 和 LMDeploy,并且得到了工业界的主要厂商如 NVIDIA、Google、Amazon 和 Intel 的支持。

GPTQ (GPT Quantization)
GPTQ 是一种针对 GPT 类型模型的量化方法。它通常用于量化大型语言模型,以减少模型大小并提高推断效率。GPTQ 方法的具体细节较少,但可以推测它可能是通过训练后量化或者其他特定的技术来实现模型的压缩。

LLM.int8
LLM.int8 可能是指将大型语言模型量化到 int8 精度级别的技术。int8 量化是一种常见的量化技术,它将模型的权重从 float32 或 float16 类型转换为 int8 类型,以减少模型大小并提高推理速度。这种技术通常适用于那些经过充分训练并且在量化后性能损失可接受的模型。

HQQ (High-Quality Quantization)
HQQ 可能是指一种高质量的量化技术,它旨在在保持模型性能的同时最大化量化的好处。具体细节未知,但可以推测 HQQ 致力于提供更好的量化效果,比如更高的精度保留或更低的计算资源消耗。

EETQ (Effective and Efficient Quantization)
EETQ 是一种有效且高效的量化技术。这个名字表明该技术旨在提供既高效又有效的模型量化方案,这意味着它可能在保持模型性能的同时,尽可能减少模型大小和计算资源的消耗。

先进算法(Advanced algorithms)

  1. GaLore
    GaLore 是一种优化算法,旨在改进梯度下降法的效率。它通过调整梯度的计算和更新方式来加速训练过程,并可能改善模型的收敛性。

  2. BDam
    BDam 是一种优化算法,可能是指一种改进的梯度优化方法。具体细节取决于具体的实现和论文,但通常这种方法涉及到对优化过程中的梯度和动量进行调整,以提高训练效果和速度。

  3. Adam-mini
    Adam-mini 是 Adam 优化器的一个变种,可能旨在减少计算资源的需求或调整优化算法的某些超参数,以适应不同的训练场景。Adam 优化器广泛用于深度学习,因为它结合了动量和自适应学习率的优点。

  4. DoRA
    DoRA(Dynamic Rank Adaptation)是一种优化算法,用于动态调整模型中参数的秩,以提高模型的训练效率和性能。DoRA 可能涉及到根据训练过程中的反馈来调整模型的结构或优化策略。

  5. LongLoRA
    LongLoRA 是 LoRA(Low-Rank Adaptation)的一个扩展版本,专注于处理长序列数据或任务。它通过改进低秩适应的方法来更好地处理长序列中的信息,从而提高模型在这些任务上的表现。

  6. LLaMA Pro
    LLaMA Pro 可能是 LLaMA 模型的一个高级版本或扩展,包含了额外的优化和改进,以提高其在实际应用中的表现和效率。

  7. Mixture-of-Depths
    Mixture-of-Depths 是一种模型架构策略,通过在网络的不同层级上使用不同的深度或宽度来提高模型的表示能力和计算效率。这种方法旨在结合不同深度网络的优点,以获得更好的性能。

  8. LoRA+
    LoRA+ 是 LoRA(Low-Rank Adaptation)的增强版本。它在原始 LoRA 的基础上进行改进,可能包括更多的适应技术或优化策略,以提高微调的效果或训练的效率。

  9. LoftQ
    LoftQ 可能是一种结合了 LoRA 和量化技术的方法,用于在训练过程中使用低精度计算。LoftQ 旨在通过低精度表示减少计算需求,同时保持模型性能。

  10. PiSSA
    PiSSA(Policy Improvement with Supervised and Self-Adaptation)是一种强化学习方法,通过结合监督学习和自适应机制来改进策略优化。它可以提高模型在特定任务中的表现,并使训练过程更加稳定。

实用技巧(Practical tricks)

  1. FlashAttention-2
    FlashAttention-2 是一种优化的自注意力机制,旨在提高Transformer模型中自注意力操作的计算效率。它通过减少内存占用和计算复杂度,加速自注意力的计算,通常用于大规模模型的训练和推理中。

  2. Unsloth
    Unsloth 是一种用于加速训练的技术或工具,可能涉及优化计算图或减少计算冗余。具体的实现细节可能包括改进的数据并行策略或优化模型的计算流程,以提高训练速度和效率。

  3. RoPE 缩放(RoPE Scaling)
    RoPE(Rotary Position Embeddings)是一种位置编码技术,用于改进Transformer模型中的位置表示。RoPE 缩放指的是对RoPE位置编码进行调整或缩放,以优化模型在不同任务中的表现。通过这种方式,可以提高模型对长序列数据的处理能力。

  4. NEFTune
    NEFTune 是一种模型调优技术,可能涉及对模型进行特定的调整或优化,以改善其在实际应用中的性能。NEFTune 可能包括对训练过程中的超参数进行调整,或在特定任务上进行微调,以提高模型的效果。

  5. rsLoRA
    rsLoRA(Reduced-Size Low-Rank Adaptation)是 LoRA(Low-Rank Adaptation)的一个变种,旨在减少适应过程中使用的低秩矩阵的大小。rsLoRA 通过减少参数量和计算需求,提高微调效率,同时保持模型的适应性和性能。


http://www.ppmy.cn/ops/94101.html

相关文章

Redis:缓存雪崩

缓存雪崩 ​ 缓存雪崩是指当缓存中有大量的key在同一时刻过期,或者Redis直接宕机了,导致大量的查询请求全部到达数据库,造成数据库查询压力骤增,甚至直接挂掉。 ​ 和缓存击穿不同的是,缓存击穿指并发查同一条数据&a…

django学习入门系列之第七点《案例 添加页面》

文章目录 7.6 前端整合标准引入格式案例 添加页面 往期回顾 7.6 前端整合 HTMLCSSjavaScript、jQueryBootStrap(动态效果依赖于jQuery) 标准引入格式 css在上面js动态效果放下面bootstrap依赖于jQuery,所以先要有jQuery,再有bo…

Mybatis-springBoot

MyBatis 是一个流行的 Java 持久层框架,它简化了与关系型数据库的交互。通过将 SQL 语句与 Java 代码进行映射,MyBatis 提供了一种方便、灵活的方式来执行数据库操作。它支持动态SQL、缓存机制和插件扩展,使得开发人员能够更高效地编写和管理…

vue计算白屏时间;vue计算首屏时间

文章目录 参考一、四个时间计算?1. 白屏时间2.首屏时间3. 页面可交互时间:即DOM完全渲染时间4. 加载完成时间 二、使用1.创建公共方法和在路由使用 参考 API:performance.timing 提供了从页面开始加载到页面完全加载的各种时间戳。 链接1 链接2 一、四…

优化大量数据导出到Excel的内存消耗(二):如果数据超出Excel单表上限,则进行分表

优化前:优化大量数据导出到Excel的内存消耗_大文件异步导出 内存占用高-CSDN博客 写Excel文件报错:Invalid row number (1048576) outside allowable range (0..1048575) 写入Excel时遇到IllegalArgumentException,原因是超出允许的最大行数…

Word转html并移植到web项目

1.打开对应word文件 建议使用web视图查看文档 这样可以提前预览转转成html样式 2.如果有图片修改图片大小及格式 在web视图下,把图片调制适当大小,不然导出的html可能图片较小 3.点击另存为 4.选择网页格式,同时将后缀修改为html(默认是h…

20240814软考架构-------软考51-55答案解析

每日打卡题51-55答案 51、【2017年真题】 难度:一般 系统移植也是系统构建的一种实现方法,在移植工作中, 需要最终确定移植方法。 A.计划阶段 B.准备阶段 C.转换阶段 D.验证阶段 答案:A 解析: 移植工作大体上分为计划…

C语言——预处理详解(下)

目录 前言 #和## 1.#运算符 2.##运算符 命名约定 #undef 命令行定义 条件编译 1.单分支条件编译 2.多分支条件编译 3.判断是否被定义 4.嵌套指令 头文件的包含 1.头文件被包含的方式 (1)本地文件包含 (2)库文件包含 2.嵌套文件包含 其他预处理指令 1.#error…