利用Accelerate()进行pytorch的多GPU加速

简介

官方Github:https://github.com/huggingface/accelerate

Accelerate 是为喜欢编写PyTorch模型的训练循环但不愿意编写和维护使用多GPU/TPU/fp16所需的样板代码的PyTorch用户创建的。

它可以仅加速与多 GPU/TPU/fp16 相关的样板代码,并保持其余代码不变。

示例如下

  import torchimport torch.nn.functional as Ffrom datasets import load_dataset
+ from accelerate import Accelerator+ accelerator = Accelerator()
- device = 'cpu'
+ device = accelerator.devicemodel = torch.nn.Transformer().to(device)optimizer = torch.optim.Adam(model.parameters())dataset = load_dataset('my_dataset')data = torch.utils.data.DataLoader(dataset, shuffle=True)+ model, optimizer, data = accelerator.prepare(model, optimizer, data)model.train()for epoch in range(10):for source, targets in data:source = source.to(device)targets = targets.to(device)optimizer.zero_grad()output = model(source)loss = F.cross_entropy(output, targets)-         loss.backward()
+         accelerator.backward(loss)optimizer.step()

正如您在此示例中所看到的,通过向任何标准 PyTorch 训练脚本添加 5 行代码,您现在可以在任何类型的单节点或分布式节点设置(单 CPU、单 GPU、多 GPU 和 TPU)以及使用或不使用混合精度(fp8、fp16、bf16)上运行。

特别是,无需修改即可在本地计算机上运行相同的代码,以进行调试或训练环境。

Accelerate 甚至会为您处理设备放置(这需要对代码进行更多更改,但通常更安全),因此您甚至可以进一步简化训练循环:

  import torchimport torch.nn.functional as Ffrom datasets import load_dataset
+ from accelerate import Accelerator- device = 'cpu'
+ accelerator = Accelerator()- model = torch.nn.Transformer().to(device)
+ model = torch.nn.Transformer()optimizer = torch.optim.Adam(model.parameters())dataset = load_dataset('my_dataset')data = torch.utils.data.DataLoader(dataset, shuffle=True)+ model, optimizer, data = accelerator.prepare(model, optimizer, data)model.train()for epoch in range(10):for source, targets in data:
-         source = source.to(device)
-         targets = targets.to(device)optimizer.zero_grad()output = model(source)loss = F.cross_entropy(output, targets)-         loss.backward()
+         accelerator.backward(loss)optimizer.step()

启动脚本:

 accelerate launch my_script.py --args_to_my_script

此 CLI 工具是可选的,您仍然可以使用或在方便时使用。python my_script.pypython -m torchrun my_script.py

如果你不想运行,你也可以直接将你想要的参数作为参数传递给。torchrunaccelerate launch accelerate config

例如,以下是在两个 GPU 上启动的方法:

accelerate launch --multi_gpu --num_processes 2 examples/nlp_example.py

更多查看官方提供的CLI文档:https://huggingface.co/docs/accelerate/package_reference/cli

如果想指定GPU,可以通过在终端运行 accelerate config 命令进行配置,根据需求会最终生成一个 default_config.yaml 文件如下:

这里面就可以设置对应的gpu_ids。

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

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

相关文章

代码提交消息自动生成助手 | OPENAIGC开发者大赛高校组AI创新之星奖

在第二届拯救者杯OPENAIGC开发者大赛中,涌现出一批技术突出、创意卓越的作品。为了让这些优秀项目被更多人看到,我们特意开设了优秀作品报道专栏,旨在展示其独特之处和开发者的精彩故事。 无论您是技术专家还是爱好者,希望能带给…

hive建表指定列分隔符为多字符分隔符实战(默认只支持单字符)_hive row formate ###

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。 需要这份系统化资料的朋友,可以戳这里获取 一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎…

我国以人名命名的城市有哪些?

我国幅员辽阔,国内的城市非常多,每个城市的名字或许都有其背后的故事。 其中不乏一些以人物之名命名的城市,有些是上古传说中的人物,有些则是历史上有重要影响的人物。 湖北神农架林区,因炎帝神农氏而得名 而我国198…

【Linux网络 —— 网络基础概念】

Linux网络 —— 网络基础概念 计算机网络背景网络发展 初始协议协议分层协议分层的好处 OSI七层模型TCP/IP五层(或四层)模型 再识协议为什么要有TCP/IP协议?什么是TCP/IP协议?TCP/IP协议与操作系统的关系所以究竟什么是协议? 网络传输基本流程…

软件供应链安全管理实践之中国联通

软件供应链安全管理是保护软件开发和交付过程中所有组件的安全性和完整性的重要环节,软件供应链安全国家标准及政策的发布,为企业软件供应链安全管理提供了依据。 本文摘选自软件供应链安全推进工作组指导、苏州棱镜七彩信息科技有限公司主笔的《2023软…

编曲为什么这么难学 编曲应该从何下手,想要学习编曲,一定要有扎实的乐理基础知识

很多小伙伴在刚刚接触编曲的时候,可能会感觉只是学习怎么创作旋律,并不会很难。但在真正开始接触编曲的时候,却发现想要创作出好的曲目,要学习的知识实在是太多了,因此小伙伴也会感慨编曲太难学了。下面给大家详细讲解…

Python画笔案例-062 绘制彩花之太阳花

1、绘制彩花之太阳花 通过 python 的turtle 库绘制 彩花之太阳花,如下图: 2、实现代码 绘制 彩花之太阳花,以下为实现代码: """彩花之太阳花.py本程序需要coloradd模块支持,安装方法:pip install coloradd""" import turtle from coloradd…

【研赛D题成品论文】24华为杯数学建模研赛D题成品论文(第一问)+可运行代码丨免费分享

2024华为杯研究生数学建模竞赛D题精品成品论文已出! D题 大数据驱动的地理综合问题 一、问题分析 问题一:目标:利用1990-2020年的数据,针对降水量和土地利用的时空演化特征进行描述。数据:两个核心变量,一…

XBOX掌机和新主机或于26年推出

原文转载修改自(更多互联网新闻/搞机小知识): XBOX掌机和新主机或于2026年发布,比PS6“早点” XBOX掌机成真 关于下一代XBOX主机,微软相关负责人就曾坦言下一代 Xbox 将是该平台 “最大的技术飞跃”,在饱…

18722 稀疏矩阵的运算

思路: 快速转置算法的基本思想是预先计算出转置后的三元组在新数组中的位置,然后直接将元素放到对应的位置上。这样做的好处是只需要遍历一次原数组,就可以完成转置操作。 步骤如下: 1. 初始化一个新的三元组数组,用于…

“咨询+数智化”双剑合璧,毕马威与用友的“最强拍档” | 商业创新同行者

作为全球“四大”会计师事务所之一,毕马威被很多人熟知,是因为其为很多上市公司提供了财务报告的审计服务。 实际上,审计业务并不是毕马威的全部,甚至不是其最大的业务版块。在审计、税务和咨询这三大业务中,咨询的营…

ABB 机器人与 Profinet 转 EthernetIP 网关的高效连接

Profinet转EthernetIP网关在工业自动化领域发挥着至关重要的作用。它主要的功能就是实现不同网络协议之间的数据交互,为各种设备的连接与协同工作搭建了桥梁。 以连接ABB机器人为例,Profinet转EthernetIP网关能够将ABB机器人高效地接入到不同的网络系统…

基于Java的建筑节能监测系统+公共建筑能耗监测系统+建筑能耗监测系统+节能监测系统

建筑节能监测系统公共建筑能耗监测系统建筑能耗监测系统节能监测系统能耗监测建筑能耗监测能耗分析能耗管理能耗预测能耗监控能耗监测平台建筑能耗 介绍 建筑节能监测系统是基于计算机网络、物联网、大数据和数据可视化等多种技术融合形成的一套节能监测系统 系统实现了对建…

k8s中,pod生命周期,初始化容器,容器探针,事件处理函数,理解其设计思路及作用

k8s中,为什么要设计pod 平台直接管理容器不是挺好的吗 为什么要以pod为单位进行管理, 然后把容器放在pod里面 那么有pod和没pod的区别是什么 也就是pod提供了什么作用 这个可以考虑从pod生命周期管理的角度去思考 如图,pod主容器在运行…

2024.9.24 数据分析

资料 111个Python数据分析实战项目,代码已跑通,数据可下载_python数据分析项目案例-CSDN博客 【数据挖掘六大项目实战】敢说这是全B站讲的最详细最通俗易懂的数据挖掘教程!整整60集!学不会来找我!-数据挖掘、数据挖掘…

idea怎么快速生成get set方法,快捷键是什么?

idea怎么快速生成get set方法 参考文章:IntelliJ IDEA生成get/set方法的快捷键是什么 1、生成某个get set方法altenter 快捷键:altenter 2.生成整个类或者某个get set方法altinsert 快捷键:altinsert 点击后,会出现下图弹窗&…

工业边缘网关的应用及优势-天拓四方

工业边缘网关作为工业互联网架构中的关键组件,正逐渐成为工业自动化和智能化的必备设备。它位于工业现场与云端服务器之间,承担着数据采集、处理、传输和初步分析的重要任务。以下是工业边缘网关的应用、优势以及具体的应用举例。 一、工业边缘网关的应…

828华为云征文 | 云服务器Flexus X实例,Docker集成搭建Gitea私有仓库

828华为云征文 | 云服务器Flexus X实例,Docker集成搭建Gitea私有仓库 Gitea私有仓库是一款轻量级的自托管Git服务,它提供了与Github、Gitlab等类似的功能,但允许用户在自己的服务器上部署和运行,从而完全掌控代码的存储和访问权限…

城市污水管网流量在线监测系统解决方案

一、方案背景 随着城市化进程的快速推进,城市污水管理成为环境保护和城市可持续发展的重要议题。传统的人工巡查和间断性监测方式已无法满足现代城市污水管理的需求。目前城市污水管网在线监测中,液体的流速、水位、流量监测非常重要。很多管网都是地下密…

爬虫代理使用注意事项:避免踩雷的必备指南

在大数据时代,网络爬虫已经成为获取信息的重要工具。然而,使用爬虫代理并不是一件轻松的事,稍有不慎就可能踩雷。为了帮助大家更好地利用爬虫代理,我们整理了一些使用注意事项。无论你是新手还是老手,这些建议都能让你…