使用亚马逊针对 PyTorch 和 MinIO 的 S3 连接器实现可迭代式数据集
2023 年 11 月,Amazon 宣布推出适用于 PyTorch 的 S3 连接器。适用于 PyTorch 的 Amazon S3 连接器提供了专为 S3 对象存储构建的 PyTorch 数据集基元(数据集和数据加载器)的实现。它支持用于随机数据访问模式的地图样式数据集和用于流式处理顺序数据访问模式的可迭代样式数据集。在上一篇文章中,我介绍了适用于 Pytorch 的 S3 连接器,并详细描述了它打算解决的问题。我还介绍了过去即将弃用的库,以支持 S3 连接器。具体而言,请勿使用适用于 PyTorch 的 Amazon S3 插件和基于 CPP 的 S3 IO DataPipe。最后,我介绍了地图样式的数据集。我不会在这里回顾所有这些介绍性信息,所以如果你还没有读过我之前的文章,请尽早查看。在这篇文章中,我将重点介绍可迭代样式的数据集。此连接器的文档仅显示了从 Amazon S3 加载数据的示例 – 在这里,我将向您展示如何对 MinIO 使用它。适用于 PyTorch 的 S3 连接器还包括一个检查点接口,用于将检查点直接保存和加载到 S3 存储桶中,而无需先保存到本地存储。如果您还没有准备好采用正式的 MLOps 工具,而只需要一种简单的方法来保存模型,那么这是一个非常好的选择。我将在以后的文章中介绍此功能。
手动构建 Iterable Style 数据集
可迭代样式的数据集是通过实现一个类来创建的,该类覆盖了 PyTorch 的 IterableDataset 基类中的 iter() 方法。与地图样式数据集不同,没有 len() 方法,也没有 getitem() 方法。如果使用 Python 的 len() 函数查询可交互数据集,则会收到错误,因为 len() 方法不存在。
在训练循环期间调用可迭代样式的数据集时,您可以返回多个样本。具体来说,您将返回一个迭代器对象,数据加载器将迭代该对象以创建所需的批处理。让我们构建一个非常简单的自定义可迭代样式数据集,以更好地了解它们的工作原理。下面的代码显示了如何覆盖 iter() 方法。完整的代码下载可以在这里找到。
class MyIterableDataset(IterableDataset):def __init__(self, start: int, end: int, transpose):self.start = startself.end = endself.transpose = transposedef __iter__(self):worker_info = torch.utils.data.get_worker_info()if worker_info is None: # single-process data loading, return the full iteratoriter_start = self.startiter_end = self.endworker_id = -1else: # in a worker processworker_id = worker_info.id# split workloadper_worker = int(math.ceil((self.end - self.start) / float(worker_info.num_workers)))iter_start = self.start + worker_id * per_workeriter_end = min(iter_start + per_worker, self.end)samples = []for sample in range(iter_start, iter_end):samples.append(sample)return map(self.transpose, samples)def my_transpose(x):return torch.tensor(x)
请注意,您必须自己跟踪分片。当您创建具有多个具有此数据集的工作程序的数据加载程序时,您需要确保确定每个工作程序要处理的数据份额(每个分片)。这是使用 worker_info 对象和一些简单的数学运算来完成的。我们可以创建这个数据集并使用下面的代码循环它,这类似于训练循环。
batch_size = 2
ds = MyIterableDataset3(start=0, end=10, transpose=my_transpose)
dl = DataLoader(ds, batch_size=batch_size, num_workers=2)for sample in dl:print(sample)
输出将为:
tensor([0, 1])
tensor([5, 6])
tensor([2, 3])
tensor([7, 8])
tensor([4])
tensor([9])
现在我们已经了解了可迭代数据集,让我们使用 S3 连接器的可迭代数据集。但在执行此操作之前,让我们看看如何让 S3 连接器连接到 MinIO。
将 S3 连接器连接到 MinIO
将 S3 连接器连接到 MinIO 就像设置环境变量一样简单。之后,一切都会顺利进行。诀窍是以正确的方式设置正确的环境变量。本文的代码下载使用 .env 文件来设置环境变量,如下所示。此文件还显示了我用于使用 MinIO Python SDK 直接连接到 MinIO 的环境变量。请注意,AWS_ENDPOINT_URL 需要 protocol,而 MinIO 变量不需要。此外,你可能会注意到 AWS_REGION 变量的一些奇怪行为。从技术上讲,访问 MinIO 时不需要它,但如果为此变量选择错误的值,则 S3 连接器中的内部检查可能会失败。如果您收到这些错误之一,请仔细阅读该消息并指定它请求的值。
AWS_ACCESS_KEY_ID=admin
AWS_ENDPOINT_URL=http://172.31.128.1:9000
AWS_REGION=us-east-1
AWS_SECRET_ACCESS_KEY=password
MINIO_ENDPOINT=172.31.128.1:9000
MINIO_ACCESS_KEY=admin
MINIO_SECRET_KEY=password
MINIO_SECURE=false
使用 S3 连接器创建可迭代样式的数据集
要使用 S3 连接器创建可迭代样式的数据集,您无需像以前那样编写和创建类。S3IterableDataset.from_prefix() 函数将为您完成所有工作。此函数假定您已设置环境变量以连接到 S3 对象存储,如上一节所述。它还要求可以通过 S3 前缀找到您的对象。下面是一个演示如何使用此函数的代码段。
from s3torchconnector import S3IterableDataseturi = f's3://{bucket_name}/{split}'
aws_region = os.environ['AWS_REGION']
dataset = S3IterableDataset.from_prefix(uri, region=aws_region, enable_sharding=True,transform=S3IterTransform(transform))
loader = DataLoader(dataset, batch_size=batch_size, num_workers=num_workers)
return loader, (time.perf_counter()-start_time)
请注意,URI 是 S3 路径。在路径 mnist/train 下可以递归找到的每个对象都应该是属于训练集的对象。如果要使用数据加载器中的多个工作程序(num_workers 参数),请务必在数据集上设置 enable_sharding 参数。上述函数还需要一个 transform 来将对象转换为张量并确定标签。这是通过如下所示的可调用类的实例完成的。
from s3torchconnector import S3Readerclass S3IterTransform:def __init__(self, transform):self.transform = transformdef __call__(self, object: S3Reader) -> torch.Tensor:content = object.read()image_pil = Image.open(BytesIO(content))image_tensor = self.transform(image_pil)label = int(object.key.split('/')[1])return (image_tensor, label)
这就是使用 S3 Connector for PyTorch 创建地图样式数据集所需要做的全部工作。
结论
适用于 PyTorch 的 S3 连接器易于使用,工程师在使用时编写的数据访问代码更少。在本文中,我展示了如何将其配置为使用环境变量连接到 MinIO。配置完成后,三行代码创建了一个可迭代的数据集对象,该对象使用简单的可调用类进行转换。
后续步骤
如果您的网络是训练管道中最薄弱的环节,请考虑创建包含多个样本的对象,您甚至可以对其进行 tar 或 zip 处理。遗憾的是,S3 连接器无法对地图样式或可迭代样式的数据集执行此操作。在以后的博文中,我将展示如何使用自定义构建的可迭代样式数据集来完成此操作。
相关文章:

使用亚马逊针对 PyTorch 和 MinIO 的 S3 连接器实现可迭代式数据集
2023 年 11 月,Amazon 宣布推出适用于 PyTorch 的 S3 连接器。适用于 PyTorch 的 Amazon S3 连接器提供了专为 S3 对象存储构建的 PyTorch 数据集基元(数据集和数据加载器)的实现。它支持用于随机数据访问模式的地图样式数据集和用于流式处理…...

TestMAX/DFT Compiler:时序单元的类型、连接顺序和后DFT优化
相关阅读 TestMAX/DFT Compilerhttps://blog.csdn.net/weixin_45791458/category_12865937.html?spm1001.2014.3001.5482 时序单元的状态 未映射的时序单元(Unmapped Sequential Cell) 在Design Compiler读取了一个RTL设计后,Design Compiler内置的HDL Compiler工…...

CAN201 Introduction to Networking(计算机网络)Pt.3 网络层
文章目录 4.Network Layter(网络层)4.1 Overview4.2 Router(路由器)4.3 Internet Protocol4.4 IPv4 addressing4.5 NAT(network address translation,网路地址转换)4.6 IPv64.7 Generalized For…...

App Factory:简化和加速私人应用开发
App Factory是Codigger提供的一套先进的开发工具、库和API,旨在帮助开发人员在现有的软件基础上添加特定的功能或扩展。它为私人应用的创建、开发和发布提供了一整套先进的工具集、集成的相关资源库以及强大的API接口,使开发者能够在现有的Codigger架构之…...

PHP语言laravel框架中基于Redis的异步队列使用实践与原理
在 Laravel 中,基于 Redis 的异步队列是通过 Laravel 的队列系统与 Redis 服务结合来实现的。这种队列机制允许你将任务推送到队列中,并由后台工作进程异步处理这些任务。这样,你就可以将耗时的操作(如发送邮件、处理视频、数据同…...

全面Kafka监控方案:从配置到指标
文章目录 1.1.监控配置1.2.监控工具1.3.性能指标系统相关指标GC相关指标JVM相关指标Topic相关指标Broker相关指标 1.4.性能指标说明1.5.重要指标说明 1.1.监控配置 开启JMX服务端口:kafka基本分为broker、producer、consumer三个子项,每一项的启动都需要…...

kipotix4靶机实战
信息收集 1.判断靶机ip 原理:开靶机之前nmap扫一次网段,再开靶机之后扫一次,查看多出来的ip就是靶机ip ip192.168.98.1742.判断端口服务,系统版本 a.确定端口 b.-p指定端口进一步收集 c.信息筛选 1.端口:22,80,139,…...

我的秋招总结
我的秋招总结 个人背景 双非本,985硕,科班 准备情况 以求职为目的学习Java的时间大概一年。 八股,一开始主要是看B站黑马的八股文课程,背JavaGuide和小林coding还有面试鸭。 算法,250,刷了3遍左右 项目&…...

广义线性模型(GLM)全面解析
引言 广义线性模型(Generalized Linear Model, GLM)是统计学中一种重要的建模工具,它扩展了传统线性回归模型,能够处理响应变量的非正态分布和非线性关系。GLM 的灵活性和广泛的应用范围使其在金融、医学、社会科学等领域中成为数…...

C++ OCR 文字识别
一.引言 文字识别,也称为光学字符识别(Optical Character Recognition, OCR),是一种将不同形式的文档(如扫描的纸质文档、PDF文件或数字相机拍摄的图片)中的文字转换成可编辑和可搜索的数据的技术。随着技…...

PHP实现登录和注册(附源码)
前言 本博客主要讲述利用php环境实现一个简单的前后端结合的用户登录和注册功能。phpstudy是PHP调试环境的集成包,该程序包集成了 ApachePHPMySQLphpMyAdmin 等多个工具,是很好用的调试环境的程序集成包。 目录 前言 1. 准备工作 1.1 工具 1.2 php…...

AEO海关认证的注意事项
AEO海关认证的注意事项繁多且至关重要,企业需细致准备,确保万无一失。 首先,企业需深入研读相关政策文件,如《中华人民共和国海关注册登记和备案企业信用管理办法》及《海关高级认证企业标准》,以政策为指引࿰…...
ElasticSearch 分布式部署
一、引言 在当今大数据时代,数据呈爆炸式增长,如何高效地存储、检索数据成为了众多企业面临的关键挑战。ElasticSearch 作为一款强大的分布式搜索引擎,凭借其卓越的性能、灵活的扩展性以及强大的全文检索能力,在日志分析、数据分…...

Vue中动态样式绑定+CSS变量实现切换明暗主题功能——从入门到进阶
1.直接借助Vue的动态绑定样式绑定 Vue动态样式绑定 在Vue中,动态样式绑定是一种强大的功能,它允许开发者根据数据的变化动态地更新元素的样式。以下是对Vue动态样式绑定的详细知识梳理与详解: 一、基础知识 Vue的动态样式绑定主要通过v-b…...
vue3 video 播放rtmp视频?(360浏览器支持)
** 注意:目前只能在360浏览器播放rtmp视频** 谷歌浏览器不支持Flash Player的问题 试过上面这个方法,目前没能实现(没解决),如果有更好的解决方法,告诉我一下 需要下载版本较低的video.js版本库࿰…...

RK356x bsp 7 - PCF8563 RTC调试记录
文章目录 1、环境介绍2、目标3、PCF85634、dts配置5、内核配置6、测试验证 1、环境介绍 硬件:飞凌ok3568-c开发板 软件:原厂rk356x sdk 2、目标 开发板断电后仍正常计时。 3、PCF8563 PCF8563 是由 NXP Semiconductors 公司生产的低功耗 CMOS 实时…...
定义Shape:打造属于你的独特图形
自定义Shape:打造属于你的独特图形 在Android开发中,自定义图形绘制是一个非常重要的技能,尤其是在需要实现复杂UI或特定设计需求时。Android提供了android.graphics.drawable.shapes包,其中包含了一些基本的形状类,如RectShape、OvalShape等。然而,有时这些基本形状无法…...

JavaWeb(一) | 基本概念(web服务器、Tomcat、HTTP、Maven)、Servlet 简介
1. 基本概念 1.1、前言 web开发: web,网页的意思,www.baidu.com静态 web html,css提供给所有人看的数据始终不会发生变化! 动态 web 淘宝,几乎是所有的网站;提供给所有人看的数据始终会发生变化…...

python学opencv|读取图像(二十一)使用cv2.circle()绘制圆形进阶
【1】引言 前序已经掌握了使用cv2.circle()绘制圆形的基本操作,相关链接为: python学opencv|读取图像(二十)使用cv2.circle()绘制圆形-CSDN博客 由于圆形本身绘制起来比较简单,因此可以自由操作的空间也就大&#x…...

CLIP:连接文本与图像, 从自然语言监督中学习可迁移的视觉模型
CLIP:连接文本与图像, 从自然语言监督中学习可迁移的视觉模型 flyfish Learning Transferable Visual Models From Natural Language Supervision https://github.com/OpenAI/CLIP 摘要 CLIP Contrastive Language-Image Pre-Training Contrastive&…...
k8s从入门到放弃之Ingress七层负载
k8s从入门到放弃之Ingress七层负载 在Kubernetes(简称K8s)中,Ingress是一个API对象,它允许你定义如何从集群外部访问集群内部的服务。Ingress可以提供负载均衡、SSL终结和基于名称的虚拟主机等功能。通过Ingress,你可…...

MongoDB学习和应用(高效的非关系型数据库)
一丶 MongoDB简介 对于社交类软件的功能,我们需要对它的功能特点进行分析: 数据量会随着用户数增大而增大读多写少价值较低非好友看不到其动态信息地理位置的查询… 针对以上特点进行分析各大存储工具: mysql:关系型数据库&am…...

ESP32读取DHT11温湿度数据
芯片:ESP32 环境:Arduino 一、安装DHT11传感器库 红框的库,别安装错了 二、代码 注意,DATA口要连接在D15上 #include "DHT.h" // 包含DHT库#define DHTPIN 15 // 定义DHT11数据引脚连接到ESP32的GPIO15 #define D…...

STM32标准库-DMA直接存储器存取
文章目录 一、DMA1.1简介1.2存储器映像1.3DMA框图1.4DMA基本结构1.5DMA请求1.6数据宽度与对齐1.7数据转运DMA1.8ADC扫描模式DMA 二、数据转运DMA2.1接线图2.2代码2.3相关API 一、DMA 1.1简介 DMA(Direct Memory Access)直接存储器存取 DMA可以提供外设…...
oracle与MySQL数据库之间数据同步的技术要点
Oracle与MySQL数据库之间的数据同步是一个涉及多个技术要点的复杂任务。由于Oracle和MySQL的架构差异,它们的数据同步要求既要保持数据的准确性和一致性,又要处理好性能问题。以下是一些主要的技术要点: 数据结构差异 数据类型差异ÿ…...
土地利用/土地覆盖遥感解译与基于CLUE模型未来变化情景预测;从基础到高级,涵盖ArcGIS数据处理、ENVI遥感解译与CLUE模型情景模拟等
🔍 土地利用/土地覆盖数据是生态、环境和气象等诸多领域模型的关键输入参数。通过遥感影像解译技术,可以精准获取历史或当前任何一个区域的土地利用/土地覆盖情况。这些数据不仅能够用于评估区域生态环境的变化趋势,还能有效评价重大生态工程…...
MySQL中【正则表达式】用法
MySQL 中正则表达式通过 REGEXP 或 RLIKE 操作符实现(两者等价),用于在 WHERE 子句中进行复杂的字符串模式匹配。以下是核心用法和示例: 一、基础语法 SELECT column_name FROM table_name WHERE column_name REGEXP pattern; …...
大语言模型(LLM)中的KV缓存压缩与动态稀疏注意力机制设计
随着大语言模型(LLM)参数规模的增长,推理阶段的内存占用和计算复杂度成为核心挑战。传统注意力机制的计算复杂度随序列长度呈二次方增长,而KV缓存的内存消耗可能高达数十GB(例如Llama2-7B处理100K token时需50GB内存&a…...

初探Service服务发现机制
1.Service简介 Service是将运行在一组Pod上的应用程序发布为网络服务的抽象方法。 主要功能:服务发现和负载均衡。 Service类型的包括ClusterIP类型、NodePort类型、LoadBalancer类型、ExternalName类型 2.Endpoints简介 Endpoints是一种Kubernetes资源…...

莫兰迪高级灰总结计划简约商务通用PPT模版
莫兰迪高级灰总结计划简约商务通用PPT模版,莫兰迪调色板清新简约工作汇报PPT模版,莫兰迪时尚风极简设计PPT模版,大学生毕业论文答辩PPT模版,莫兰迪配色总结计划简约商务通用PPT模版,莫兰迪商务汇报PPT模版,…...