性能提升21倍!pytorch加持macm1gpu训练

机器学习算法与Python学习-公众号 机器学习算法与Python学习-公众号     2022-12-02     228

关键词:

点击 机器学习算法与Python学习选择加星标

精彩内容不迷路

机器之心报道

对于 Mac 用户来说,这是令人激动的一天。

昨天,通过与苹果 Metal 团队工程师合作,PyTorch 官方宣布已正式支持在 M1 版本的 Mac 上进行 GPU 加速的 PyTorch 机器学习模型训练。

此前,Mac 上的 PyTorch 训练仅能利用 CPU,但随着即将发布的 PyTorch v1.12 版本,开发和研究人员可以利用苹果 GPU 大幅度加快模型训练。现在,人们可以在 Mac 上相对高效地执行机器学习工作,例如在本地进行原型设计和微调。

苹果芯片的 AI 训练优势

PyTorch GPU 训练加速是使用苹果 Metal Performance Shaders (MPS) 作为后端来实现的。MPS 后端扩展了 PyTorch 框架,提供了在 Mac 上设置和运行操作的脚本和功能。MPS 使用针对每个 Metal GPU 系列的独特特性进行微调的内核能力来优化计算性能。新设备将机器学习计算图和原语映射到 MPS Graph 框架和 MPS 提供的调整内核上。

每台搭载苹果自研芯片的 Mac 都有着统一的内存架构,让 GPU 可以直接访问完整的内存存储。PyTorch 官方表示,这使得 Mac 成为机器学习的绝佳平台,让用户能够在本地训练更大的网络或批大小。

这降低了与基于云算力的开发相关的成本或对额外的本地 GPU 算力需求。统一内存架构还减少了数据检索延迟,提高了端到端性能。

可以看到,与 CPU 基线相比,GPU 加速实现了成倍的训练性能提升:

上图是苹果于 2022 年 4 月使用配备 Apple M1 Ultra(20 核 CPU、64 核 GPU)128GB 内存,2TB SSD 的 Mac Studio 系统进行测试的结果。系统为 macOS Monterey 12.3、预发布版 PyTorch 1.12,测试模型为 ResNet50(batch size = 128)、HuggingFace BERT(batch size = 64)和 VGG16(batch size = 64)。性能测试是使用特定的计算机系统进行的,反映了 Mac Studio 的大致性能。

有开发者推测,鉴于谷歌云服务中使用的英伟达 T4 在 FP32 任务上的浮点性能为 8 TFLOPS,而 M1 Ultra 的图形计算能力大概在 20 TFLOPS 左右。在最有利情况下,可以期望的 M1 Ultra 速度提升或可达到 2.5 倍。

开发者亲测:加速效果显著

虽然官方已宣布提供支持,但目前还不是所有在 PyTorch 上的模型都能用 M1 芯片集成的 GPU 加速,你也可以花几分钟进行一下测试。

机器学习研究者,捷克理工大学博士 Dmytro Mishkin 对多个模型的推理进行了测试,结果显示,大多数图像分类架构都提供了很好的加速。对于一些自定义代码(比如 kornia),可能无法正常工作。

各个测试结果如下:

首先是经典的卷积神经网络 VGG16,从 2.23 秒提升到 0.5 秒:

接下来是大部分芯片发布会上都会跑的 Resnet50,它在 M1 GPU 上的速度较慢,不升反降,从 0.549 秒到 0.592 秒:

但 ResNet18 的提速惊人,从 0.243 秒到 0.024 秒:

AlexNet 的速度对比为 0.126 秒 vs0.005 秒,速度提升了几十倍:

尝试一下视觉 transformer 模型,在 M1 CPU 上的速度是 1.855 秒,在 M1 GPU 上则运行崩溃了……

EfficientNetB0 实现了 2.5 倍的加速:

EfficientNetB4 实现了 3.5 倍加速:

ConvMixer 运行良好,从 11 秒提速到 2.8 秒:

威斯康星大学麦迪逊分校助理教授 Sebastian Raschka 也对 M1 芯片的 GPU 机器学习能力进行了一番测试,他使用的芯片是 M1 和 M1 Pro。

看上去,M1 CPU 似乎比 M1 GPU 更快。但 LeNet-5 是一个非常小的网络,而 MNIST 是一个非常小的数据集。如果用 rescaled CIFAR-10 图像再试一次,结果如下:

与 M1 Pro CPU(正数第二行)和 M1 Pro GPU(倒数第二行)相比,M1 Pro GPU 训练网络的速度提高了一倍。

可见,M1 系列芯片的 GPU 加速结果非常可观,在部分情况下已能满足开发者的需求。不过我们知道在 M1 Ultra 这样的芯片中也有 32 核的神经网络引擎,目前却只有苹果自己的 Core ML 框架支持使用该部分获得加速。

不知启用了 Neural Engine 之后,M1 芯片的 AI 推理速度还能提升多少?

参考内容:

https://pytorch.org/blog/introducing-accelerated-pytorch-training-on-mac/

https://sebastianraschka.com/blog/2022/pytorch-m1-gpu.html

觉得不错,请点个在看呀

pytorch宣布支持苹果m1芯片gpu加速!训练快6倍,推理提升21倍!(代码片段)

点击上方“迈微AI研习社”,选择“星标★”公众号重磅干货,第一时间送达转载自:机器之心|编辑:泽南、蛋酱对于Mac用户来说,这是令人激动的一天。今年3月,苹果发布了其自研M1芯片的最终型号M1Ultr... 查看详情

英特尔至强新添七大算力神器,pytorch训练性能可提升至10倍!

英特尔、英特尔标识、以及其他英特尔商标是英特尔公司或其子公司在美国和/或其他国家的商标。©英特尔公司版权所有。* 文中涉及的其它名称及商标属于各自所有者资产点击阅读原文,了解更多内容! 查看详情

基于文件存储ufs的pytorch训练io五倍提升实践

...某AI客户排查一个UFS文件存储的性能case时发现,其使用的Pytorch训练IO性能和硬件的IO能力有很大的差距(后面内容有具体性能对比数据)。让我们感到困惑的是:UFS文件存储,我们使用fio自测可以达到单实例最低10Gbps带宽、IOPS也... 查看详情

重磅官宣:nacos2.0性能提升10倍

简介:​Nacos2.0作为一个跨代版本,彻底解决了Nacos1.X的性能问题,将性能提升了10倍。作者:席翁继Nacos1.0发布以来,Nacos迅速被成千上万家企业采用,并构建起强大的生态。但是随着用户深入使用,逐渐暴露一些性能问题,因... 查看详情

13倍性能,3倍稳定性提升!ucloud云硬盘做了这些事

近期,我们推出高性能SSD云盘,满足用户对高性能的场景需求。SSD云盘相比普通云盘,IOPS提升了13倍,稳定性提升了3倍,平均时延降低了10倍。为了做到这些,我们从去年10月份开始对云盘的架构进行了重新设计,充分减少时延... 查看详情

10倍,boostkit鲲鹏全局缓存3大创新技术助力ceph性能提升

...的痛点,采用三大创新技术,有效的提高了Ceph的性能,最高可以将Ceph性能提升10倍。本文分享自华为云社区《【云驻共创】BoostKit鲲鹏全局缓存技术助力Ceph性能提升10倍,真香》,作者: 查看详情

7-10倍写入性能提升:剖析wiredtiger数据页无锁及压缩黑科技

7-10倍写入性能提升:剖析WiredTiger数据页无锁及压缩黑科技导语:计算机硬件在飞速发展,数据规模在急速膨胀,但是数据库仍然使用是十年以前的架构体系,WiredTiger尝试打破这一切,充分利用多核与大内存时代来重新设计数据... 查看详情

tidb:向量化执行使表达式性能提升10倍成为可能

向量化执行使表达式性能提升10倍成为可能查询执行引擎对数据库系统性能非常重要。TIDB是一个开源兼容MySQL的HTAP数据库,部署广泛使用的火山模型来执行查询。不幸的是,当查询一个大库时,向量化模型会造成较高的解释开销... 查看详情

java中的5个代码性能提升技巧,最高提升近10倍(代码片段)

...已经收录,欢迎Star。这篇文章介绍几个Java开发中可以进行性能优化的小技巧,虽然大多数情况下极致优化代码是没有必要的,但是作为一名技术开发者,我们还是想追求代码的更小、更快,更强。如果哪天你发现... 查看详情

性能提升1400+倍,快来看mysqlvolcano模型迭代器的谓词位置优化详解(代码片段)

摘要:性能提升1400+倍,快来看MySQLVolcano模型迭代器的谓词位置优化详解。本文分享自华为云社区《华为云数据库内核专家为您揭秘MySQLVolcano模型迭代器性能提升千倍的秘密》,作者:GaussDB数据库。20年以上数... 查看详情

alijdk8.1.1的优化使ssl性能提升2倍以上

简单说如果你的java容器提供https服务的,性能可以提升两倍以上,这是一个非常非常非常非常非常值得升级的提升。在jdk8.0时摸高压测qps到3000时再也上不去,主要是ssl里面的一个锁效率低,优化后qps达到 8000也很... 查看详情

java中的5个代码性能提升技巧,最高提升近10倍(代码片段)

...已经收录,欢迎Star。这篇文章介绍几个Java开发中可以进行性能优化的小技巧,虽然大多数情况下极致优化代码是没有必要的,但是作为一名技术开发者,我们还是想追求代码的更小、更快,更强。如果哪天你发现... 查看详情

getrandom()将在新内核中得到80倍以上的性能提升

...Linux5.17中,SHA1在随机代码中被替换为BLAKE2,使其性能和安全性得到很大提升。在Linux5.18中他对随机代码作出了更多的改进。Donenfeld一直在进行更多随机数生成器增强功能,目标是在今年3月底内核合并窗口引入到Linux5.... 查看详情

从node转向go,性能提升5倍,内存减少40%

...官博发文称,随着用户数的增加,软件规模化的性能开始成为一个问题,于是他们用Go重写了一个Node.js微服务,结果显示,内存消耗减少至一半而服务请求数量却增加了5倍。为什么会选择Go?在可扩展需求... 查看详情

如何利用缓存机制实现java类反射性能提升30倍

1SSM框架简介SSM框架,即SpringMVC+Spring+Mybatis三个开源框架整合在一起的缩写。在SSM框架之前生产环境中SSH框架占据多数,即Struts2+Spring+Hibernate三个开源框架整合而成。后因Struts2爆出众多高危漏洞,导致目前SSM逐渐代替SSH成为主流... 查看详情

我用rust重写网站,性能居然提升了18倍!

摘要:对于构建中小型网站和个人博客来说,Hakyll是一个不错的静态网站生成器库,9年前的JonasHietala正是选择了Hakyll编写博客网站。但随着时间的推移,网站出现各种问题,考虑多种因素之后,JonasHietala... 查看详情

如何利用缓存机制实现java类反射性能提升30倍

一次性能提高30倍的JAVA类反射性能优化实践。文章来源:宜信技术学院&宜信支付结算团队技术分享第4期-支付结算部支付研发团队高级工程师陶红《JAVA类反射技术&优化》分享者:宜信支付结算部支付研发团队高级工程师... 查看详情

elasticsearch大文件检索性能提升20倍实践(干货)(代码片段)

少废话,直接开始。1、大文件是多大?ES建立索引完成全文检索的前提是将待检索的信息导入Elaticsearch。项目中,有时候需要将一些扫描件、PDF文档、Word、Excel、PPT等文档内容导入Elasticsearch。比如:将《深入理解Elasticsearch》这... 查看详情