为什么贪婪的 GPU需要快速的对象存储?

2024-02-01 23:04

本文主要是介绍为什么贪婪的 GPU需要快速的对象存储?,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

一个链条的力量取决于其最薄弱的环节 - 同样,您的AI/ML基础设施的速度也只有您的最慢组件那么快。如果您使用GPU训练机器学习模型,那么您的薄弱环节可能是您的存储解决方案。结果就是我所说的“饥饿GPU问题”。

饥饿GPU问题发生在您的网络或存储解决方案无法快速向您的训练逻辑提供训练数据,以至于无法充分利用您的GPU时。症状相当明显。如果您在监控您的GPU,那么您会注意到它们从未接近充分利用。如果您已经对您的训练代码进行了 instrumentation,那么您会注意到总的训练时间主要由I/O主导。
不幸的是,对于那些正在处理这个问题的人来说,有一个坏消息。让我们来看看在使用GPU方面的一些进展,以了解这个问题在未来几年将如何变得更糟。

GPUs正在变得更快

GPU正在变得更快。不仅原始性能在提高,内存和带宽也在增加。让我们来看看NVIDIA最新GPU的三个特点:A100、H100和H200。

GPU性能内存内存带宽
A100624 TFLOPS40GB1,555GB/s
H1001,979 TFLOPS80GB3.35TB/s
H2001,979 TFLOPS141GB4.8TB/s

(注:上述表格使用与A100的PCIe(外围组件互连 Express)插槽解决方案和H100和H200的SXM(服务器PCI Express模块)插槽解决方案相对应的统计数据。SXM的统计数据对于A100不存在。关于性能,比较时使用了浮点16张量核心的统计数据。)

上述统计数据中的一些观察值得关注。首先,H100和H200的性能(1,979 TFLOPS)相同,是A100的3.17倍。H100的内存是A100的两倍,内存带宽增加了同样多 - 这是有意义的,否则GPU会饿死自己。H200可以处理高达141GB的内存,它的内存带宽也随着内存的增加而成比例地增加。
让我们更详细地探讨这些统计数据,并讨论它们对机器学习意味着什么。

  • 性能 - 一个teraflop(TFLOPS)是一万亿(10^12)浮点运算每秒。这是一个后面跟着12个零的1(1,000,000,000,000)。在模型训练期间发生的浮点运算包括简单的张量数学以及损失函数(即梯度)的一阶导数。然而,由于统计数据中的TFLOPs与I/O需求之间的相对比较,可以进行一些估计。从上面的统计数据来看,我们可以看到,H100和H200,这两者都表现出1,979 TFLOPS的性能,速度快了3倍 - 如果其他一切都能跟上,理论上数据处理速度可以提高3倍。

  • GPU内存 - 也称为视频内存或图形内存。GPU内存与系统的 main memory(RAM)是分开的,专门用于处理图形卡执行的密集图形处理任务。GPU内存决定了训练模型时的批量大小。在过去,当将训练逻辑从CPU迁移到GPU时,批量大小会减小。然而,随着GPU内存与CPU内存容量相当,GPU训练的批量大小将会增加。当性能和内存容量同时增加时,结果是更大的请求,每个吉字节的数据处理速度更快。

  • 内存带宽 - 将GPU内存和计算核心连接的“高速公路”。它决定了每单位时间内可以转移多少数据。正如更宽的高速公路可以让更多的汽车在给定的时间内通过一样,更高的内存带宽可以让更多的数据在内存和GPU之间移动。正如你所看到的,这些GPU的设计者增加了每个新版本内存带宽与内存的比例,因此芯片内部的数据显示不会成为瓶颈。

未来展望

2023年8月,NVIDIA宣布了其下一个用于加速计算和生成AI的GPU平台 - Grace Hopper超级芯片平台。这个新的平台使用了Grace Hopper超级芯片,通过NVIDIA NVLink可以连接额外的超级芯片,使它们在模型训练和推理时共同工作。
虽然所有关于Grace Hopper超级芯片的规格都代表了比之前芯片的改进,但对于AI/ML工程师来说,最重要的创新是其统一的内存。Grace Hopper让GPU完全访问CPU的内存。这对于过去希望使用GPU进行训练的工程师来说很重要。因为过去,工程师如果希望使用GPU进行训练,首先必须将数据拉入系统内存,然后从那里将数据移动到GPU内存。Grace Hopper消除了使用CPU内存作为数据到达GPU的回弹缓冲区的需要。
对于负责升级GPU并确保其他一切能够跟上进度的任何人来说,将几项关键的GPU统计数据以及Grace Hopper的能力进行简单比较,可能有点令人不安。一个存储解决方案绝对需要以更快的速度服务数据,以跟上这些GPU的改进。让我们来看一个常见的老虎GPU问题的解决方案。

一个常见的解决方案

这个问题有一个常见且明显的解决方案,不需要组织替换或升级现有的存储解决方案。您可以保持现有的存储解决方案不变,以便您可以利用贵组织所需的所有企业功能。这个存储解决方案很可能是包含贵组织所有非结构化数据的数据湖——因此,它可能相当大,总体拥有成本是一个考虑因素。它还具有许多为冗余、可靠性和安全性启用的特性,所有这些都会影响性能。
然而,可以做的就是在一个与计算基础设施相同的数据中心设置一个存储解决方案——理想情况下,这个解决方案应该与计算集群相同。确保您拥有高速网络和最佳的存储设备。从那里,只复制用于ML训练的数据。
亚马逊最近宣布的亚马逊S3 Express One Zone体现了这种方法。它是一种优化高吞吐量和小延迟的桶类型,仅限于单个可用区(没有复制)。亚马逊的意图是让客户用它来持有需要高速访问的数据的副本。因此,它是为模型训练而专门设计的。根据亚马逊的说法,它提供的是S3标准数据的10倍访问速度,成本是S3标准8倍。有关我们对亚马逊S3 Express One Zone的评估,请内容。

MinIO解决方案

我上面概述的常见解决方案要求亚马逊定制其S3存储解决方案,通过提供增加成本的专业桶。另外,一些组织(不是MinIO客户)正在购买专业的存储解决方案,以实现我上述描述的简单事情。不幸的是,这给现有的基础设施增加了复杂性,因为需要新产品来解决一个相对简单的问题。

所有这些讽刺的是,MinIO客户一直都有这种选择。您可以通过在高速网络上安装MinIO的新实例并使用NVMe驱动器来实现我描述的所有内容。MinIO是一个软件定义的存储解决方案-相同的产品可以在裸机或您选择的集群上运行,使用各种存储设备。如果您的企业数据湖在裸机上使用MinIO并通过HDD工作,且对所有非ML数据都很好,那么没有理由替换它。但是,如果用于ML的数据集需要更快的I/O,因为您使用GPU,那么请考虑我在本帖中概述的方法。确保制作一份您的ML数据副本,用于MinIO的高速实例-始终在MinIO的坚不可摧的安装中存在金副本。这将允许您在MinIO的高速实例中关闭诸如复制和加密之类的特性,进一步提高性能。使用MinIO的镜像功能复制数据非常简单。

MinIO具有满足饥饿的GPU所需性能的能力-最近的一项基准测试在GETs上实现了325 GiB/s,在PUTs上实现了165 GiB/s,仅用32个节点的标准NVMe SSD。

今天就下载MinIO,了解如何轻松构建数据湖屋。如果您有任何问题,一定要联系我们!

这篇关于为什么贪婪的 GPU需要快速的对象存储?的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/668755

相关文章

一文详解如何在idea中快速搭建一个Spring Boot项目

《一文详解如何在idea中快速搭建一个SpringBoot项目》IntelliJIDEA作为Java开发者的‌首选IDE‌,深度集成SpringBoot支持,可一键生成项目骨架、智能配置依赖,这篇文... 目录前言1、创建项目名称2、勾选需要的依赖3、在setting中检查maven4、编写数据源5、开启热

MySQL存储过程之循环遍历查询的结果集详解

《MySQL存储过程之循环遍历查询的结果集详解》:本文主要介绍MySQL存储过程之循环遍历查询的结果集,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录前言1. 表结构2. 存储过程3. 关于存储过程的SQL补充总结前言近来碰到这样一个问题:在生产上导入的数据发现

MySQL JSON 查询中的对象与数组技巧及查询示例

《MySQLJSON查询中的对象与数组技巧及查询示例》MySQL中JSON对象和JSON数组查询的详细介绍及带有WHERE条件的查询示例,本文给大家介绍的非常详细,mysqljson查询示例相关知... 目录jsON 对象查询1. JSON_CONTAINS2. JSON_EXTRACT3. JSON_TA

C#之List集合去重复对象的实现方法

《C#之List集合去重复对象的实现方法》:本文主要介绍C#之List集合去重复对象的实现方法,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录C# List集合去重复对象方法1、测试数据2、测试数据3、知识点补充总结C# List集合去重复对象方法1、测试数据

Spring中管理bean对象的方式(专业级说明)

《Spring中管理bean对象的方式(专业级说明)》在Spring框架中,Bean的管理是核心功能,主要通过IoC(控制反转)容器实现,下面给大家介绍Spring中管理bean对象的方式,感兴趣的朋... 目录1.Bean的声明与注册1.1 基于XML配置1.2 基于注解(主流方式)1.3 基于Java

C++/类与对象/默认成员函数@构造函数的用法

《C++/类与对象/默认成员函数@构造函数的用法》:本文主要介绍C++/类与对象/默认成员函数@构造函数的用法,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录名词概念默认成员函数构造函数概念函数特征显示构造函数隐式构造函数总结名词概念默认构造函数:不用传参就可以

C++类和对象之默认成员函数的使用解读

《C++类和对象之默认成员函数的使用解读》:本文主要介绍C++类和对象之默认成员函数的使用方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、默认成员函数有哪些二、各默认成员函数详解默认构造函数析构函数拷贝构造函数拷贝赋值运算符三、默认成员函数的注意事项总结一

conda安装GPU版pytorch默认却是cpu版本

《conda安装GPU版pytorch默认却是cpu版本》本文主要介绍了遇到Conda安装PyTorchGPU版本却默认安装CPU的问题,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的... 目录一、问题描述二、网上解决方案罗列【此节为反面方案罗列!!!】三、发现的根本原因[独家]3.1 p

MySQL 存储引擎 MyISAM详解(最新推荐)

《MySQL存储引擎MyISAM详解(最新推荐)》使用MyISAM存储引擎的表占用空间很小,但是由于使用表级锁定,所以限制了读/写操作的性能,通常用于中小型的Web应用和数据仓库配置中的只读或主要... 目录mysql 5.5 之前默认的存储引擎️‍一、MyISAM 存储引擎的特性️‍二、MyISAM 的主

Linux lvm实例之如何创建一个专用于MySQL数据存储的LVM卷组

《Linuxlvm实例之如何创建一个专用于MySQL数据存储的LVM卷组》:本文主要介绍使用Linux创建一个专用于MySQL数据存储的LVM卷组的实例,具有很好的参考价值,希望对大家有所帮助,... 目录在Centos 7上创建卷China编程组并配置mysql数据目录1. 检查现有磁盘2. 创建物理卷3. 创