全部产品
Search
文档中心

对象存储 OSS:OSS Connector在AI/ML数据集处理中的性能表现

更新时间:Sep 02, 2024

在进行大规模机器学习或深度学习项目时,数据的高效加载与处理是提升整体训练效率的关键因素之一。本文通过对比分析在使用OSS内网域名与启用OSS加速器的情况下,不同数据集构建方法(OssIterableDataset、OssMapDataset、结合Ossfs和ImageFolder)的性能差异,旨在为用户提供数据访问策略的优化指南。

测试说明

测试场景:通过在使用OSS内网域名以及使用OSS加速器域名这两种场景下,针对以不同方式构建的数据集读取OSS数据的情况进行了性能以及性能上限测试。

测试数据:10,000,000张图片,平均每张100 KB,总量约1 TB。

测试环境:网络增强通用型实例规格族g7nex,128 VCPU,512G内存,160 Gbps内网带宽。

测试数据集构建方式:OssIterableDataset与OssMapDataset类型的数据集由OSS Connector for AI/ML构建;Ossfs with ImageFolder类型的数据集则使用ossfs挂载远程Bucket的方式构建。

性能测试

  • 测试参数

    参数

    值/操作

    说明

    dataloader batch size

    256

    每次处理的数据批次大小为256个样本。

    dataloader workers

    32

    使用32个工作进程来并行加载数据。

    transform

    trans = transforms.Compose([
        transforms.Resize(256),
        transforms.CenterCrop(224),
        transforms.ToTensor(),
        transforms.Normalize(mean=[0.485, 0.456, 0.406], std=[0.229, 0.224, 0.225])
    ])
    
    def transform(object):
        img = Image.open(io.BytesIO(object.read())).convert('RGB')
        val = trans(img)
        return val, object.label

    对数据进行了预处理。

  • 测试结果

    数据集构建方式

    数据集类型

    使用OSS内网域名

    启用OSS加速器预载数据,并使用加速域名访问

    OSS Connector for AI/ML方式构建

    OssIterableDataset

    4582 img/s

    4744 img/s

    OssMapDataset

    4010 img/s

    4370 img/s

    ossfs挂载远程Bucket方式构建

    Ossfs with ImageFolder

    56 img/s

    251 img/s

性能上限测试

  • 测试参数

    参数

    值/操作

    说明

    dataloader batch size

    256

    每次处理的数据批次大小为256个样本。

    dataloader workers

    32

    使用32 个工作进程来并行加载数据。

    transform

    def transform(object):
     data = object.read()
     return object.key, object.label

    未对数据进行预处理。

  • 测试结果

    数据集构建方式

    数据集类型

    使用OSS内网域名

    启用OSS加速器预载数据,并使用加速域名访问

    OSS Connector for AI/ML方式构建

    OssIterableDataset

    99920 img/s

    123043 img/s

    OssMapDataset

    56564 img/s

    78264 img/s

数据分析

从性能测试结果数据能够看到,使用OSS Connector构建的IterableDataset和MapDataset这两种类型的数据集性能,大约是传统数据集Ossfs with ImageFolder的80倍。即便在都启用OSS加速器的情况下,也相差约18倍。通过这样的对比,可以明显看出,使用OSS Connector能够极大地提高数据处理速度,提升模型训练效率。

从性能上限测试结果数据来看,启用OSS加速器之后的性能,大约是不启用OSS加速器的1.6倍左右。OSS Connector在不使用OSS加速器的情况下,能够轻松应对各种高并发、高带宽访问。而配合使用OSS加速器后,其性能则更为强大。

测试总结

在 Python代码中设置OSS Connector for AI/ML,就能轻松实现对OSS对象的流式访问。通常情况下,使用OSS Connector可以极大地提升我们在大数据量训练场景中的数据访问效率。倘若对性能有更高的要求,则可以采用OSS加速器与OSS Connector for AI/ML相结合的方式来进行数据训练。