すべてのプロダクト
Search
ドキュメントセンター

Platform For AI:OSS でのデータの読み取りと書き込み

最終更新日:Aug 27, 2026

OSS Python SDK または OSS Python API を使用して、DSW で Object Storage Service (OSS) のデータを読み書きします。

推奨事項

大規模なデータに頻繁にアクセスする場合は、OSS をデータセットとして登録してマウントしてください。たまに、またはロジックに応じてアクセスする場合は、このトピックで説明する SDK と API の方法を使用してください。

OSS Python SDK の使用

DSW には oss2 Python パッケージが含まれています。OSS データを読み書きするには:

  1. クライアントを認証して初期化します。

    import oss2
    auth = oss2.Auth('<your_AccessKey_ID>', '<your_AccessKey_Secret>')
    bucket = oss2.Bucket(auth, '<your_oss_endpoint>', '<your_bucket_name>')

    次のプレースホルダーを置き換えてください:

    パラメーター

    説明

    <your_AccessKey_ID><your_AccessKey_Secret>

    Alibaba Cloud アカウントの AccessKey ID と AccessKey Secret。詳細については、「AccessKey の作成」をご参照ください。

    <your_oss_endpoint>

    OSS エンドポイント。インスタンスのリージョンに対応するエンドポイントを選択します:

    • 中国 (北京) リージョンの従量課金インスタンス: oss-cn-beijing.aliyuncs.com

    • 中国 (北京) リージョンのサブスクリプションインスタンス: oss-cn-beijing-internal.aliyuncs.com

    • 中国 (上海) リージョンの GPU P100 インスタンスまたは CPU インスタンス: oss-cn-shanghai.aliyuncs.com

    • 中国 (上海) リージョンの GPU M40 インスタンス: oss-cn-shanghai-internal.aliyuncs.com

    OSS のリージョンとエンドポイント

    <your_bucket_name>

    バケット名。oss:// プレフィックスは含めません。

  2. OSS データの読み取りと書き込み。

    # ファイル全体を読み取ります。
    result = bucket.get_object('<your_file_path/your_file>')
    print(result.read())
    # 範囲を指定してデータを読み取ります。
    result = bucket.get_object('<your_file_path/your_file>', byte_range=(0, 99))
    # OSS にデータを書き込みます。
    bucket.put_object('<your_file_path/your_file>', '<your_object_content>')
    # ファイルにデータを追加します。
    result = bucket.append_object('<your_file_path/your_file>', 0, '<your_object_content>')
    result = bucket.append_object('<your_file_path/your_file>', result.next_position, '<your_object_content>')

    次のプレースホルダーを置き換えてください:

    • <your_file_path/your_file>:読み書きするファイルのパス。

    • <your_object_content>:書き込みまたは追加するコンテンツ。

OSS Python API の使用

DSW は、PyTorch ユーザーが OSS データを直接読み書きするための OSS Python API を提供しています。

トレーニングデータまたはモデルを OSS に保存します:

  • トレーニングデータの読み込み

    パスをラベルにマッピングするインデックスファイルを含む OSS バケットにデータを保存します。カスタム Dataset を作成して、PyTorch DataLoader API を使用しマルチプロセス並列読み取りを実行します。例:

    import io
    import oss2
    from PIL import Image
    import torch
    class OSSDataset(torch.utils.data.dataset.Dataset):
        def __init__(self, endpoint, bucket, auth, index_file):
            self._bucket = oss2.Bucket(auth, endpoint, bucket)
            self._indices = self._bucket.get_object(index_file).read().split(',')
        def __len__(self):
            return len(self._indices)
        def __getitem__(self, index):
            img_path, label = self._indices[index].strip().split(':')
            img_str = self._bucket.get_object(img_path)
            img_buf = io.BytesIO()
            img_buf.write(img_str.read())
            img_buf.seek(0)
            img = Image.open(img_buf).convert('RGB')
            img_buf.close()
            return img, label
    dataset = OSSDataset(endpoint, bucket, auth, index_file)
    data_loader = torch.utils.data.DataLoader(
        dataset,
        batch_size=batch_size,
        num_workers=num_loaders,
        pin_memory=True)

    次のプレースホルダーを置き換えてください:

    • endpoint:OSS エンドポイント。

    • bucket:バケット名。

    • auth:認証オブジェクト。

    • index_file:インデックスファイルのパス。

    説明

    インデックスファイルの形式:カンマ (,) でサンプルを区切り、コロン (:) でパスとラベルを区切ります。

  • モデルの保存または読み込み

    oss2 Python API を使用して PyTorch モデルを保存または読み込みます。 (PyTorch シリアル化チュートリアル)

    • モデルの保存

      from io import BytesIO
      import torch
      import oss2
      bucket_name = "<your_bucket_name>"
      # バケット名を指定します。
      bucket = oss2.Bucket(auth, endpoint, bucket_name)
      buffer = BytesIO()
      torch.save(model.state_dict(), buffer)
      bucket.put_object("<your_model_path>", buffer.getvalue())

      次のプレースホルダーを置き換えてください:

      • auth:認証オブジェクト。

      • endpoint:OSS エンドポイント。

      • <your_bucket_name>:OSS バケット名。oss:// プレフィックスは含めません。

      • <your_model_path>:バケット内のモデルの保存先パス。

    • モデルの読み込み

      from io import BytesIO
      import torch
      import oss2
      bucket_name = "<your_bucket_name>"
      bucket = oss2.Bucket(auth, endpoint, bucket_name)
      buffer = BytesIO(bucket.get_object("<your_model_path>").read())
      model.load_state_dict(torch.load(buffer))

      次のプレースホルダーを置き換えてください:

      • auth:認証オブジェクト。

      • endpoint:OSS エンドポイント。

      • <your_bucket_name>:OSS バケット名。oss:// プレフィックスは含めません。

      • <your_model_path>:バケット内のモデルのパス。