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

Object Storage Service:OSS データの逐次ストリーム読み取り用の反復可能なデータセットの構築

最終更新日:Apr 21, 2026

OssIterableDataset は、メモリが限られている場合やデータ量が大きいシナリオに最適です。主に、ランダムアクセスや並列処理が不要な逐次処理に使用されます。このトピックでは、OssIterableDataset を使用してデータセットを構築する方法について説明します。

前提条件

OSS Connector for AI/ML がインストールされ、設定済みであること。詳細については、「OSS Connector for AI/ML のインストール」および「OSS Connector for AI/ML の設定」をご参照ください。

データセットの構築

メソッド

OssIterableDataset を使用してデータセットを構築するには、3 つの方法があります:

  • OSS URI プレフィックス:OSS ストレージパスが一貫したパターンに従う場合に使用します。

  • OSS URI のリスト:特定の、非連続的な OSS ストレージパスに使用します。

  • マニフェストファイル:OSS オブジェクトをリスト化する際のオーバーヘッドを削減するために使用します。この方法は、数千万個など多数のファイルを含み、繰り返しロードする必要があるデータセットに適しています。また、OSS の スカラー取得 機能が有効になっているバケットにも適しています。

OSS URI プレフィックスからのデータセット構築

次の例は、OssIterableDataset の from_prefix メソッドを使用して、OSS 内の指定されたプレフィックス (OSS URI) からデータセットを構築する方法を示しています。

from osstorchconnector import OssIterableDataset

ENDPOINT = "http://oss-cn-beijing-internal.aliyuncs.com"
REGION = "cn-beijing"
CONFIG_PATH = "/etc/oss-connector/config.json"
CRED_PATH = "/root/.alibabacloud/credentials"
OSS_URI = "oss://ai-testset/EnglistImg/Img/BadImag/Bmp/Sample001/"

# OssIterableDataset の from_prefix メソッドを使用してデータセットを構築
iterable_dataset = OssIterableDataset.from_prefix(OSS_URI, endpoint=ENDPOINT, cred_path=CRED_PATH, config_path=CONFIG_PATH, region=REGION)

# データセット内のオブジェクトを走査
for item in iterable_dataset:
    print(item.key)
    print(item.size)
    content = item.read()
    print(len(content))
    item.close()

OSS URI のリストからのデータセット構築

次の例は、OssIterableDataset の from_objects メソッドを使用して、指定された OSS URI のリストからデータセットを構築する方法を示しています。この例では、uris は複数の OSS URI を含む文字列のイテレータです。

from osstorchconnector import OssIterableDataset

ENDPOINT = "http://oss-cn-beijing-internal.aliyuncs.com"
REGION = "cn-beijing"
CONFIG_PATH = "/etc/oss-connector/config.json"
CRED_PATH = "/root/.alibabacloud/credentials"

uris = [
    "oss://ai-testset/EnglistImg/Img/BadImag/Bmp/Sample001/img001-00001.png",
    "oss://ai-testset/EnglistImg/Img/BadImag/Bmp/Sample001/img001-00002.png",
    "oss://ai-testset/EnglistImg/Img/BadImag/Bmp/Sample001/img001-00003.png"
]

# OssIterableDataset の from_objects メソッドを使用してデータセットを構築
iterable_dataset = OssIterableDataset.from_objects(uris, endpoint=ENDPOINT, cred_path=CRED_PATH, config_path=CONFIG_PATH, region=REGION)

# データセット内のオブジェクトを走査
for item in iterable_dataset:
    print(item.key)
    print(item.size)
    content = item.read()
    print(len(content))
    item.close()

マニフェストファイルからのデータセット構築

マニフェストファイルからデータセットを構築する前に、まずマニフェストファイルを作成する必要があります。

  1. マニフェストファイルの作成:

    任意の場所で touch manifest_file コマンドを実行してマニフェストファイルを作成します。次に、例に示すようにマニフェストファイルにデータを入力します。

    OSS オブジェクト名を含むマニフェストファイルの例:

    Img/BadImag/Bmp/Sample001/img001-00001.png
    Img/BadImag/Bmp/Sample001/img001-00002.png
    Img/BadImag/Bmp/Sample001/img001-00003.png

    OSS オブジェクト名とラベルを含むマニフェストファイルの例:

    Img/BadImag/Bmp/Sample001/img001-00001.png label1
    Img/BadImag/Bmp/Sample001/img001-00002.png label2
    Img/BadImag/Bmp/Sample001/img001-00003.png label3
  2. マニフェストファイルからのデータセット構築:

    次の例は、OssIterableDataset の from_manifest_file メソッドを使用して、指定されたマニフェストファイルからデータセットを構築する方法を示しています。

    from osstorchconnector import OssIterableDataset
    from osstorchconnector import imagenet_manifest_parser
    
    ENDPOINT = "http://oss-cn-beijing-internal.aliyuncs.com"
    REGION = "cn-beijing"
    CONFIG_PATH = "/etc/oss-connector/config.json"
    CRED_PATH = "/root/.alibabacloud/credentials"
    OSS_BASE_URI = "oss://ai-testset/EnglistImg/"
    
    # OssIterableDataset の from_manifest_file メソッドを使用してローカルファイルからデータセットを構築
    # manifest_file_path パラメーターは、マニフェストファイルのローカルパスを指定します。
    # manifest_parser パラメーターは、マニフェストファイルを解析するメソッドです。この例では、組み込みの解析メソッド imagenet_manifest_parser を使用します。
    # oss_base_uri パラメーターは、ベースとなる OSS URI を指定します。これは、マニフェストから解析された URI と連結して完全な OSS URI を形成するために使用されます。完全な OSS URI = ベース OSS URI + URI。
    MANIFEST_FILE_LOCAL = "/path/to/manifest_file"
    iterable_dataset = OssIterableDataset.from_manifest_file(manifest_file_path=MANIFEST_FILE_LOCAL, manifest_parser=imagenet_manifest_parser, oss_base_uri=OSS_BASE_URI, endpoint=ENDPOINT, cred_path=CRED_PATH, config_path=CONFIG_PATH, region=REGION)
    for item in iterable_dataset:
        print(item.key)
        print(item.size)
        print(item.label)
        content = item.read()
        print(len(content))
        item.close()
    
    # OssIterableDataset の from_manifest_file メソッドを使用して OSS バケット内のマニフェストファイルからデータセットを構築
    MANIFEST_FILE_URI = "oss://ai-testset/EnglistImg/manifest_file"
    iterable_dataset = OssIterableDataset.from_manifest_file(manifest_file_path=MANIFEST_FILE_URI, manifest_parser=imagenet_manifest_parser, oss_base_uri=OSS_BASE_URI, endpoint=ENDPOINT, cred_path=CRED_PATH, config_path=CONFIG_PATH, region=REGION)
    for item in iterable_dataset:
        print(item.key)
        print(item.size)
        print(item.label)
        content = item.read()
        print(len(content))
        item.close()

データセット内のデータの型

データセット内のオブジェクトは、一般的な I/O インターフェイスを実装するデータの型です。詳細については、「OSS Connector for AI/ML のデータの型」をご参照ください。

パラメーターの説明

OssMapDataset または OssIterableDataset を使用してデータセットを構築するには、次のパラメーターを設定します。

パラメーター

必須

説明

endpoint

string

はい

共通パラメーター:

OSS サービスにアクセスするためのエンドポイント。詳細については、「リージョンとエンドポイント」をご参照ください。

region

string

いいえ

共通パラメーター:

OSS リージョン (例:cn-beijing)。設定しない場合、コネクタは endpoint から自動的に推論します。ただし、エンドポイントにリージョン情報が含まれていない場合、推論に失敗することがあります。リージョンを明示的に指定してください。

transform

object

いいえ

共通パラメーター:

DataObject (OSS オブジェクト) を任意の型に変換するために使用される変換関数。このメソッドは必要に応じてカスタマイズできます。詳細については、「transform」をご参照ください。

重要

transform 関数で DataObject オブジェクトを直接返さないでください。イテレータが動作を停止する可能性があります。オブジェクトを返すには、copy メソッドを呼び出してください。

cred_path

string

はい

共通パラメーター:

認証ファイルのデフォルトパスは /root/.alibabacloud/credentials です。詳細については、「アクセス認証情報の設定」をご参照ください。

config_path

string

はい

共通パラメーター:

OSS Connector の設定ファイルのデフォルトパスは /etc/oss-connector/config.json です。詳細については、「OSS Connector の設定」をご参照ください。

oss_uri

string

はい

from_prefix メソッドのパラメーター:

OSS URI プレフィックスからデータセットを構築するために使用される OSS リソースパス。oss:// で始まる OSS URI のみがサポートされます。

object_uris

string

はい

from_objects メソッドのパラメーター:

データセットを構築するために使用される OSS リソースパスのリスト。oss:// で始まる OSS URI のみがサポートされます。

manifest_file_path

string

はい

from_manifest_file メソッドのパラメーター:

マニフェストファイルのパス。ローカルファイルパスと oss:// で始まる OSS URI がサポートされます。

manifest_parser

呼び出し可能なオブジェクト

はい

from_manifest_file メソッドのパラメーター:

マニフェストファイルを解析するための組み込みメソッド。開かれたマニフェストファイルを入力として受け取り、イテレータを返します。イテレータの各要素は (oss_uri, label) のタプルです。詳細については、「manifest_parser」をご参照ください。異なるデータセットのマニフェストファイルのフォーマットに基づいて、manifest_parser メソッドをカスタマイズすることもできます。

oss_base_uri

string

はい

from_manifest_file メソッドのパラメーター:

ベースとなる OSS URI。マニフェストファイルからの不完全な可能性のある OSS URI と連結して、完全な OSS URI を作成するために使用されます。oss_base_uri がない場合は、このパラメーターを "" に設定します。

組み込みメソッド

transform

データセットを構築すると、データセットは `transform(DataObject)` の結果を生成するイテレータを提供します。`DataObject` は OSS Connector for AI/ML のデータの型です。

transform メソッドはカスタマイズ可能です。データセットの構築時に transform メソッドを指定しない場合、デフォルトのメソッドが使用されます。

デフォルトの transform メソッド

次の例は、デフォルトの transform メソッドを示しています。データセットを構築する際に指定する必要はありません。

# デフォルトの transform 関数
def identity(obj: DataObject) -> DataObject:
    if obj is not None:
        return obj.copy()
    else:
        return None

カスタム transform メソッド

次の例は、データセットを構築する際にカスタム transform メソッドを使用する方法を示しています。

import io
import torchvision.transforms as transforms
from PIL import Image
from osstorchconnector import OssIterableDataset

ENDPOINT = "http://oss-cn-beijing-internal.aliyuncs.com"
REGION = "cn-beijing"
CONFIG_PATH = "/etc/oss-connector/config.json"
CRED_PATH = "/root/.alibabacloud/credentials"
OSS_URI = "oss://ai-testset/EnglistImg/Img/BadImag/Bmp/Sample001/"

# イメージデータの変換操作を定義
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])
])

# 入力オブジェクトを処理する transform メソッドを作成
def transform(object):
    try:
        img = Image.open(io.BytesIO(object.read())).convert('RGB')
        val = trans(img)
    except Exception as e:
        raise e
    return object.key, val

# データセット構築時に transform=transform パラメーターを使用
iterable_dataset = OssIterableDataset.from_prefix(OSS_URI, endpoint=ENDPOINT, transform=transform, cred_path=CRED_PATH, config_path=CONFIG_PATH, region=REGION)
for item in iterable_dataset:
    print(item[0])
    print(item[1].shape)

manifest_parser

デフォルトの manifest_parser メソッドを使用してデータセットを構築するには、次の例に示すようにインポートします。

from osstorchconnector import imagenet_manifest_parser

次の例は、デフォルトの manifest_parser メソッドを示しています。

def imagenet_manifest_parser(reader: io.IOBase) -> Iterable[Tuple[str, str]]:
    lines = reader.read().decode("utf-8").strip().split("\n")
    for i, line in enumerate(lines):
        try:
            items = line.strip().split('\t')
            if len(items) >= 2:
                key = items[0]
                label = items[1]
                yield (key, label)
            elif len(items) == 1:
                key = items[0]
                yield (key, '')
            else:
                raise ValueError("format error")
        except ValueError as e:
            logging.error(f"Error: {e} for line {i}: {line}")

データセットから PyTorch でデータローダーを作成

次の例は、OssIterableDataset で構築したデータセットをデータソースとして使用し、PyTorch データローダーを作成する方法を示しています。

import torch
from osstorchconnector import OssIterableDataset

ENDPOINT = "http://oss-cn-beijing-internal.aliyuncs.com"
REGION = "cn-beijing"
CONFIG_PATH = "/etc/oss-connector/config.json"
CRED_PATH = "/root/.alibabacloud/credentials"
OSS_URI = "oss://ai-testset/EnglistImg/Img/BadImag/Bmp/Sample001/"


def transform(obj):
    return obj.key, obj.label

# OssIterableDataset の from_prefix メソッドを使用してデータセットを構築
map_dataset = OssIterableDataset.from_prefix(OSS_URI, endpoint=ENDPOINT,transform=transform, cred_path=CRED_PATH, config_path=CONFIG_PATH, region=REGION)

# map_dataset に基づいて PyTorch データローダーを作成
loader = torch.utils.data.DataLoader(map_dataset, batch_size=256, num_workers=32, prefetch_factor=2)
# トレーニングループでデータを使用
# for batch in loader:
     # トレーニング操作を実行

関連ドキュメント

OSS Connector for AI/ML は、コンテナ化された環境でのデータトレーニングタスクにも使用できます。詳細については、「OSS Connector for AI/ML 環境を含む Docker イメージの構築」をご参照ください。