为什么贪婪的 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

相关文章

SpringBoot3.X 整合 MinIO 存储原生方案

《SpringBoot3.X整合MinIO存储原生方案》本文详细介绍了SpringBoot3.X整合MinIO的原生方案,从环境搭建到核心功能实现,涵盖了文件上传、下载、删除等常用操作,并补充了... 目录SpringBoot3.X整合MinIO存储原生方案:从环境搭建到实战开发一、前言:为什么选择MinI

Python实现对阿里云OSS对象存储的操作详解

《Python实现对阿里云OSS对象存储的操作详解》这篇文章主要为大家详细介绍了Python实现对阿里云OSS对象存储的操作相关知识,包括连接,上传,下载,列举等功能,感兴趣的小伙伴可以了解下... 目录一、直接使用代码二、详细使用1. 环境准备2. 初始化配置3. bucket配置创建4. 文件上传到os

Java中调用数据库存储过程的示例代码

《Java中调用数据库存储过程的示例代码》本文介绍Java通过JDBC调用数据库存储过程的方法,涵盖参数类型、执行步骤及数据库差异,需注意异常处理与资源管理,以优化性能并实现复杂业务逻辑,感兴趣的朋友... 目录一、存储过程概述二、Java调用存储过程的基本javascript步骤三、Java调用存储过程示

MySQL之InnoDB存储引擎中的索引用法及说明

《MySQL之InnoDB存储引擎中的索引用法及说明》:本文主要介绍MySQL之InnoDB存储引擎中的索引用法及说明,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐... 目录1、背景2、准备3、正篇【1】存储用户记录的数据页【2】存储目录项记录的数据页【3】聚簇索引【4】二

MySQL之InnoDB存储页的独立表空间解读

《MySQL之InnoDB存储页的独立表空间解读》:本文主要介绍MySQL之InnoDB存储页的独立表空间,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1、背景2、独立表空间【1】表空间大小【2】区【3】组【4】段【5】区的类型【6】XDES Entry区结构【

SQLite3 在嵌入式C环境中存储音频/视频文件的最优方案

《SQLite3在嵌入式C环境中存储音频/视频文件的最优方案》本文探讨了SQLite3在嵌入式C环境中存储音视频文件的优化方案,推荐采用文件路径存储结合元数据管理,兼顾效率与资源限制,小文件可使用B... 目录SQLite3 在嵌入式C环境中存储音频/视频文件的专业方案一、存储策略选择1. 直接存储 vs

Python中Tensorflow无法调用GPU问题的解决方法

《Python中Tensorflow无法调用GPU问题的解决方法》文章详解如何解决TensorFlow在Windows无法识别GPU的问题,需降级至2.10版本,安装匹配CUDA11.2和cuDNN... 当用以下代码查看GPU数量时,gpuspython返回的是一个空列表,说明tensorflow没有找到

Linux如何快速检查服务器的硬件配置和性能指标

《Linux如何快速检查服务器的硬件配置和性能指标》在运维和开发工作中,我们经常需要快速检查Linux服务器的硬件配置和性能指标,本文将以CentOS为例,介绍如何通过命令行快速获取这些关键信息,... 目录引言一、查询CPU核心数编程(几C?)1. 使用 nproc(最简单)2. 使用 lscpu(详细信

SpringMVC高效获取JavaBean对象指南

《SpringMVC高效获取JavaBean对象指南》SpringMVC通过数据绑定自动将请求参数映射到JavaBean,支持表单、URL及JSON数据,需用@ModelAttribute、@Requ... 目录Spring MVC 获取 JavaBean 对象指南核心机制:数据绑定实现步骤1. 定义 Ja

Python打印对象所有属性和值的方法小结

《Python打印对象所有属性和值的方法小结》在Python开发过程中,调试代码时经常需要查看对象的当前状态,也就是对象的所有属性和对应的值,然而,Python并没有像PHP的print_r那样直接提... 目录python中打印对象所有属性和值的方法实现步骤1. 使用vars()和pprint()2. 使