Hugging Face开源库accelerate详解

news2024/11/24 23:11:34

官网:https://huggingface.co/docs/accelerate/package_reference/accelerator

Accelerate使用步骤

  1. 初始化accelerate对象accelerator = Accelerator()
  2. 调用prepare方法对model、dataloader、optimizer、lr_schedluer进行预处理
  3. 删除掉代码中关于gpu的操作,比如.cuda()、.to(device)等,让accelerate自行判断硬件设备的分配
  4. 将loss.backbard()替换为accelerate.backward(loss)
  5. 当使用超过1片GPU进行分布式训练时,在主进程中使用gather方法收集其他几个进程的数据,然后在计算准确率等指标

Accelerator对象初始化参数

  1. device_placement (bool, optional, defaults to True) — 是否让accelerate来确定tensor应该放在哪个device
  2. split_batches (bool, optional, defaults to False) — 分布式训练时是否对dataloader产生的batch进行split,如果True,那么每个进程使用的batch size = batch size / GPU数量,如果是False,那么每个进程使用就是batch size,总的batch size = batch size * GPU数量
  3. mixed_precision (str, optional) — 是否使用混合精度训练
  4. gradient_accumulation_steps (int, optional, default to 1) — 梯度累加的步数,也可以使用GradientAccumulationPlugin插件进行详细配置
  5. cpu (bool, optional) — 是否强制使用CPU执行
  6. deepspeed_plugin (DeepSpeedPlugin, optional) — 使用此参数调整与DeepSpeed相关的参数,也可以使用accelerate config直接配置
  7. fsdp_plugin (FullyShardedDataParallelPlugin, optional) — 使用此参数调整FSDP(Fully Sharded Data Parallel)相关参数,也可以使用accelerate config直接配置
  8. megatron_lm_plugin (MegatronLMPlugin, optional) — 使用此参数调整与MegatronLM相关的参数,可以使用accelerate config直接配置
  9. step_scheduler_with_optimizer (bool, *optional, defaults to True) – lr_scheduler是否和optimizer同步更新
  10. gradient_accumulation_plugin (GradientAccumulationPlugin, optional) — 梯度累积插件

Accelerate常用高阶用法

  1. accelerator.print()
    当使用多片GPU训练时,打印每个进程的信息,替换python的print函数,这样在每个server上只打印一次,其实就是先使用is_local_main_process判断的print。
    在这里插入图片描述
  2. accelerator.is_local_main_process
    可以当做装饰器使用,在一个具有多片GPU的server上只执行一次,local表示每台机器。与is_local_main_process对应的是is_main_process,is_local_main_process每个server上的主进程,is_main_process是所有server的主进程。
    在这里插入图片描述
    在这里插入图片描述
  3. wait_for_everyone()
    同步控制,确保在后续操作之前所有前提操作已完成
  4. accelerator.save_model() / load_state_dict /
    load_checkpoint_in_model
    模型保存,自动去除掉由于分布式训练在模型上做的包装(调用unwrap_model),保存state_dict,并且可以对大模型文件进行分块存储。并加载保存的模型
  5. Accelerate与Transformers库搭配使用进行模型保存
    在这里插入图片描述
    在这里插入图片描述
  6. 使用accelerator做梯度裁剪:
    在这里插入图片描述
    在这里插入图片描述
  7. 梯度累加gradient accumulation
    尤其对于超大规模的模型,模型参数本来就已经很大了,如果再用很大的batch size进行训练,硬件资源吃不消,但是如果用很小的batch size训练的话模型稳定性很差,所以梯度累加gradient accumulation是一个这种的解决方案,其实就是连续执行多次forward前向过程,在多次执行期间不进行反向传播,每次都是很小的batch size,多次就累积成了比较大的batch size,然后在累积的结果上做反向传播。Accelerate在梯度累加期间暂停在不同GPU之间的梯度同步,进一步减少了通信数据量。
    在这里插入图片描述
    GradientAccumulationPlugin提供了更灵活梯度累加操作,除了能指定累加的步数,还能指定在累计过程中是否更新lr_scheduler调节器。
    在这里插入图片描述
  8. autocast混合精度训练
    对处于with上下文管理中的模块使用混合精度训练
    在这里插入图片描述
  9. gather、gather_for_metrics
    分布式训练时,在不同进程之间回收结果数据
  10. Prepare
    为分布式训练和混合精度做准备,然后以相同的顺序返回它们。
  11. reduce:跨进程做tensor的reduce操作
  12. save_state / load_state:保存、加载模型的状态数据
  13. unscale_gradients:混合训练过程中不对梯度进行缩放
    在这里插入图片描述
  14. unwrap_model
    去掉模型上由prepare加上的用于做分布式训练的包装层,在保存模型的时候比较有用
    在这里插入图片描述

4、使用accelerate执行分布式训练

  • 执行accelerate config根据提问和实际硬件情况设置配置文件
  • 执行accelerate test --config_file path_to_config.yaml验证环境配置是否正常
  • 执行进行命令进行分布式训练,accelerate launch --config_file path_to_config.yaml path_to_script.py --args_for_the_script

5、使用Accelerate在低资源环境下加载大的模型

  • 参考:https://huggingface.co/docs/accelerate/usage_guides/big_modeling

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

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

相关文章

使用Jmeter做性能测试的注意点

目录 一、性能测试注意点 二、性能指标分析 一、性能测试注意点 1. 用jmeter测试时使用BeanShell脚本获取随机参数值,会导致请求时间过长,TPS过低。应改为使用csv读取参数值,记录的TPS会更加准确。 注:进行性能测试时&#xff0…

EMC学习笔记(十七)PCB设计中的安规考虑

PCB设计中的安规考虑 1 概述2.安全标识2.1 对安全标示通用准则2.2 电击和能量的危险2.3 PCB上的熔断器2.4 可更换电池 3.爬电距离和电气间隙4.涂覆印制板4.1 PCB板的机械强度4.2 印制电路板的阻燃等级4.3 热循环试验与热老化试验4.4 抗电强度试验4.5 耐划痕试验 5.布线和供电 1…

C# 属性

文章目录 实例属性静态属性只读属性:内部只读属性:动态计算值的属性方式一:主动计算方式二:被动计算 快速生成属性的方法:输入propfull,按两下tab键,然后再按tab键一次修改有底纹的字段&#xf…

LeetCode141.环形链表

141.环形链表 目录 141.环形链表一、哈希表二、双指针 一、哈希表 最容易想到的方法就是遍历所有节点,每次遍历到一个节点的时候,判断该节点此前是否被访问过 我们可以使用哈希表来存储所有已经访问过的节点 每次到达一个节点,如果该节点已…

Cyber Triage 3.7 (Windows) - 数字取证和事件响应

Cyber Triage 3.7 (Windows) - 数字取证和事件响应 请访问原文链接:https://sysin.org/blog/cybertriage-3,查看最新版。原创作品,转载请保留出处。 作者主页:sysin.org 唯一专门用于事件响应的数字取证工具 快速、准确和简单地…

matlab使用教程(4)—数组类型

1多维数组 MATLAB 环境中的多维数组是具有多个下标的数组。创建多维数组的一种方法是调用具有多个参数的 zeros 、 ones 、 rand 或 randn 。例如, R randn(3,4,5); 创建一个 345 数组,共包含 3*4*5 60 个正态分布的随机元素。 三维数组可表示在矩…

数据库端口操作指南

数据库端口主要功能是允许用户通过从这些数据库端口推送或拉取数据,从而将各种数据库集成到用户的数据流中。 打开知行之桥 EDI 系统,在工作流界面右侧可以看到端口选项卡下有众多端口,我们打开数据库分类,可以看到知行之桥 EDI 系…

Linux文件处理命令

目录: linux系统与shell环境准备linux常用命令之文件处理Linux系统登录与文件操作 1.linux系统与shell环境准备 Linux 系统简介: Linux 内核最初只是由芬兰人林纳斯托瓦兹(Linus Torvalds)在赫尔辛基大学上学时出于个人爱好而…

电子病历编辑器源码

电子病历系统采取结构化与自由式录入的新模式,自由书写,轻松录入。化实现病人医疗记录(包含有首页、病程记录、检查检验结果、医嘱、手术记录、护理记录等等。)的保存、管理、传输和重现,取代手写纸张病历。不仅实现了…

如何使用Spring Boot实现分页和排序?

使用Spring Boot实现分页和排序需要借助Spring Data JPA。Spring Data JPA是Spring Data项目中的一个模块,提供了简化数据访问层的功能,包括分页和排序。 接下来我们通过一段Java代码,展示如何使用Spring Data JPA和Spring Boot实现分页和排…

电压放大器在超声波焊接中的作用以及应用

电压放大器是一种运用于电子设备中的信号放大器,主要作用是将小信号放大为更高幅度的信号。在超声波焊接中,电压放大器起到了重要的作用,它可以将从传感器采集到的微小信号放大为能够被检测和处理的合适大小的信号。 超声波焊接是现代工业生产…

畅游NLP海洋:HuggingFace的快速入门

目录 前言一、HuggingFace介绍1-1、HuggingFace的介绍1-2、安装 二、Tokenizer分词库:分词工具2-0、加载BertTokenizer:需要传入预训练模型的名字2-1、使用Tokenizer对句子编码:2-2、使用增强Tokenizer对句子编码:2-3、批量编码单…

事件传播机制和事件委托

DOM事件流 DOM事件流(event flow )存在三个阶段:事件捕获阶段、处于目标阶段、事件冒泡阶段。事件捕获(event capturing):通俗的理解就是,当鼠标点击或者触发dom事件时,浏览器会从…

数字孪生系统为何开始尝试融合GIS系统?

数字孪生是一种通过数字模型实时仿真现实世界的技术,而GIS(地理信息系统)则是用于收集、存储、处理和展示地理数据的工具。将数字孪生系统与GIS系统进行融合,可以为各行业带来诸多优势和创新。那么数字孪生系统如何将GIS系统进行融…

Java线程相关

线程优先级 在Java线程中,通过一个整型成员变量priority来控制优先级,优先级的范围从1~10,在线程构建的时候可以通过setPriority(int)方法来修改优先级,默认优先级是5,优先级高的线程分配时间片的数量要多于优先级低的…

[javascript核心-08] V8 内存管理机制及性能优化

V8 内存管理 V8 本身也是程序,它本身也会申请内存,它申请的内存称为常驻内存,而它又将内存分为堆和栈 栈内存 栈内存介绍 栈用于存放JS 中的基本类型和引用类型指针栈空间是连续的,增加删除只需要移动指针,操作速度…

自动收小麦机(牛客2023萌新)

题目链接 示例1 输入 复制 4 1 2 1 1 4 5 2 2 2 3 4 输出 复制 10 说明 在第4格放出水流后,水流会流向第3格,由于第3格高度比第4格低,所以水流继续向左流向第2格,因为平地水流只能流2格,所以到达第2格后水流停…

栈练习题(逆波兰表达式,有效括号,出入栈次序匹配,最小栈)

目录 基础知识: 中缀表达式和后缀表达式(逆波兰式) 中缀表达式转后缀表达式 后缀表达式求结果 有效括号 栈的压入,弹出序列 最小元素栈 基础知识: 栈:是一种先入后出的数据结构,它的底层是由数组实现的 入栈:push(),出栈pop(),查看栈顶元素peek() 中缀表达式和后缀表…

docker-compose搭建prometheus+grafana+钉钉告警

前言: 本文将介绍使用docker-compose部署搭建promtheus监控容器、主机、服务等相关状态; 配合granfana面板构建监控大屏; 由于grafana的报警不是很友好,使用dingtalk,配合altermanager,实现钉钉报警。 …

Crosswalk App UI 自动化

目录 前言: Crosswalk WebDriver 实现 Crosswalk app UI 自动化实现 前言: Crosswalk是一个基于Chromium的开源项目,它提供了一个跨平台的应用程序运行时环境,可以帮助开发人员在移动设备上构建高性能的Web应用程序。在Crossw…