You need to enable JavaScript to run this app.
文档中心
对象存储

对象存储

复制全文
下载 pdf
最佳实践
在 PyTorch 任务中访问和存储 TOS 数据
复制全文
下载 pdf
在 PyTorch 任务中访问和存储 TOS 数据
本文介绍如何在 PyTorch 任务中访问和存储 TOS 数据。​
前提条件​
  1. 在使用 TOS 之前,请确保您已注册火山引擎账号并完成实名认证。​
  1. 请确保您已开通 TOS 服务并创建 TOS 存储桶,具体步骤,请参见快速入门。​
  1. 必须使用 Linux x86-64 操作系统。​
  1. 已安装 Python 3.8 ~ 3.11 版本。​
环境准备​
  1. 对接 TOS 前,请先在 Python 3.8 ~ 3.11 环境安装 PyTorch。更多信息,请参见 PyTorch。​
注意​
PyTorch 暂不支持 Python 3.12 及以上版本,不建议使用 Python 3.12 及以上版本。​
  • ​
    # 安装 torch 基本依赖​
    pip3 install torch torchvision​
    ​
    # 安装 torch lighting​
    pip3 install lightning​
    ​
    # 安装 torchdata​
    pip3 install torchdata==0.9.0​
    ​
  1. 安装完成后,您可以通过以下示例验证是否安装成功。​
  • ​
    import torch​
    import torchvision​
    ​
    # 将 checkpoint 保存为本地文件​
    if __name__ == '__main__':​
    model = torchvision.models.resnet18()​
    ​
    with open('test.pt', 'wb') as writer:​
    torch.save(model.state_dict(), writer)​
    ​
    ​
    with open('test.pt', 'rb') as reader:​
    stat_dict = torch.load(reader)​
    ​
    model.load_state_dict(stat_dict)​
    print(model)​
    ​
对接方式​
​
对接方式​
说明​
使用 tosfsspec 对接​
tosfsspec 是火山引擎基于 fsspec 规范封装的 TOS 文件系统接口,用于将 TOS 桶对象封装为 Python 标准文件读写接口,可直接与 torchdata、PyTorch 等训练框架集成。更多信息,请参见 tosfsspec 概述。​
使用 FSX 对接​
  • FSX 支持将存储桶挂载到 Linux 系统作为本地文件系统使用,适用于需要按照文件系统语义使用存储桶中数据的场景,例如 AI 机器学习场景下需要按照文件系统语义训练模型数据。​
  • FSX 客户端处于邀测状态,如需试用,请提交工单。​
  • 支持的运行环境及约束限制详情,请参见 FSX 概述。​
使用 S3 Connector 对接​
  • S3 Connector 是 AWS 提供的 PyTorch 连接器,用于增强 torchdata 提供的 S3 相关访问能力,支持 map-style datasets、iterable-style datasets 以及 checkpointing 接口。更多信息,请参见 S3-connector-for-PyTorch。​
  • 当前仅支持 TOS FNS 桶,即扁平桶。更多信息,请参见存储桶类型。​
​
操作步骤​
不同对接方式的操作步骤如下。​
​
使用 tosfsspec 对接
使用 FSX 对接
使用 S3 Connector 对接
​
  1. 执行以下命令安装 tosfsspec。pip 会自动安装所需依赖(fsspec ≥ 2023.5.0、tos ≥ 2.8.0、tosnativeclient ≥ 1.1.13),无需手动安装。​
  • ​
    # 使用 pip 直接安装 tosfsspec。​
    pip install tosfsspec​
    ​
  1. 获取凭证信息。​
  • 地域(Region):您的 TOS 存储桶所在的地域,例如 cn-beijing。​
  • 访问密钥(Access Key):包含 Access Key ID (AK) 和 Secret Access Key (SK),是访问火山引擎 API 的身份凭证。​
  • 访问域名(Endpoint):可选参数。如果留空,tosfsspec 会根据您提供的 region 自动生成。​
说明​
  1. 配置长期访问凭证。​
  • 初始化 SDK 前,您需要先配置长期访问凭证,操作步骤如下:​
  • ​
    # 打开终端并执行以下命令打开文件。​
    sudo vim /etc/profile​
    ​
    # 在文件末尾添加 AKSK 信息。​
    export TOS_ACCESS_KEY=AKTPYmI1Z****​
    export TOS_SECRET_KEY=T1dJM01UU****​
    ​
    # 保存文件并退出,然后执行以下命令生效配置信息。​
    source /etc/profile​
    ​
    # 验证配置信息。​
    echo $TOS_ACCESS_KEY​
    echo $TOS_SECRET_KEY​
    ​
  1. 执行以下命令初始化客户端。 ​
  • ​
    import tosfsspec​
    import os​
    ​
    # 配置访问密钥等信息​
    if __name__ == '__main__':​
    fs = tosfsspec.TosFileSystem(​
    key=os.getenv('TOS_ACCESS_KEY'),​
    secret=os.getenv('TOS_SECRET_KEY'),​
    endpoint='your endpoint',​
    region='your endpoint',​
    )​
    ​
  1. 运行以下代码,使用 iterable-style datasets。​
  • 本文以使用北京地域的 bucketname 桶为例,建议您根据业务需求修改代码。​
  • ​
    from torchdata.datapipes.iter import FSSpecFileLister, FSSpecFileOpener​
    import os​
    ​
    if __name__ == '__main__':​
    kwargs = {​
    'key': os.getenv('TOS_ACCESS_KEY'),​
    'secret': os.getenv('TOS_SECRET_KEY'),​
    'endpoint':'your endpoint',​
    'region':'your region'​
    }​
    bucket = 'bucketname'​
    print('测试 iterable-style datasets')​
    file_lister = FSSpecFileLister(root='tos://' + bucket + '/shard-data/', **kwargs)​
    iterable_dataset = FSSpecFileOpener(file_lister, mode='rb', **kwargs)​
    # 遍历并读取 Dataset 中的对象​
    for _, item in iterable_dataset:​
    print(item.bucket, item.key)​
    data = item.read()​
    print(len(data))​
    ​
  1. 运行以下代码,保存或加载 checkpoint。​
  • 本文以使用北京地域的 bucketname 桶为例,建议您根据业务需求修改代码。​
  • ​
    import torch​
    import torchvision​
    import tosfsspec​
    import TosFileSystem​
    import os​
    ​
    if __name__ == '__main__':​
    fs = tosfsspec.TosFileSystem(​
    key=os.getenv('TOS_ACCESS_KEY'),​
    secret=os.getenv('TOS_SECRET_KEY'),​
    endpoint='your endpoint',​
    region='your region',​
    )​
    bucket = 'bucketname'​
    print('测试 checkpointing')​
    model = torchvision.models.resnet18()​
    ​
    # 将 TOS 封装为 Python 标准读写接口​
    with fs.open(f'tos://{bucket}/checkpoint/epoch1.ckpt', 'wb') as writer:​
    torch.save(model.state_dict(), writer)​
    ​
    with fs.open(f'tos://{bucket}/checkpoint/epoch1.ckpt', 'rb') as reader:​
    stat_dict = torch.load(reader)​
    model.load_state_dict(stat_dict)​
    print(model)​
    ​
​
​
最近更新时间:2026.11.04 11:22:55
这个页面对您有帮助吗?
有用
有用
无用
无用