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

Platform For AI:Object Storage Service (OSS) のデータの読み取りと書き込み

最終更新日:Nov 08, 2025

このトピックでは、OSS Python SDK と OSS Python API を使用して 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 からデータを読み取り、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 の使用

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

トレーニングデータやモデルを OSS に保存できます:

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

    データを OSS バケットに保存し、データパスと対応するラベルを同じバケット内のインデックスファイルに保存できます。カスタム Dataset を作成することで、PyTorch の DataLoader API を使用して、複数のプロセスでデータを並行して読み取ることができます。次のコードは例です。

    import io
    import oss2
    import PIL
    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 でのモデルの保存と読み込みの詳細については、「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>: バケットから読み込むモデルのパス。