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

Object Storage Service:OSS 内のデータからのランダムアクセス用マップ形式データセットの作成

最終更新日:Apr 21, 2026

`OssMapDataset` は、データ量が少なく、メモリが十分で、頻繁なランダムアクセスと並列処理が必要なシナリオに適しています。このトピックでは、`OssMapDataset` を使用してデータセットを構築する方法について説明します。

前提条件

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

データセットの構築

メソッド

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

  • OSS_URI プレフィックス:OSS ストレージパスが統一されたパターンに従うシナリオに適しています。

  • OSS_URI のリスト:OSS ストレージパスが特定されているものの、散在しているシナリオに適しています。

  • マニフェストファイル:OSS の `list object` 操作のオーバーヘッドを削減します。この方法は、数千万個など多数のファイルを持つデータセットを繰り返しロードする場合や、OSS のスカラー取得機能が有効になっているバケットに適しています。

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

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

from osstorchconnector import OssMapDataset

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/"

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

# 作成されたデータセット内のオブジェクトにランダムアクセスします。
item = map_dataset[0]
print(item.key)
print(item.size)
content = item.read()
print(len(content))
item.close()

# データセット内のオブジェクトを走査 (トラバース) します。
for item in map_dataset:
    print(item.key)
    print(item.size)
    content = item.read()
    print(len(content))
    item.close()

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

この例では、`OssMapDataset` の `from_objects` メソッドを使用して、指定された OSS_URI のリストからデータセットを構築する方法を示します。

from osstorchconnector import OssMapDataset

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_URI を含む文字列イテレーターです。
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"
]

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

# 作成されたデータセット内のオブジェクトにランダムアクセスします。
item = map_dataset[1]
print(item.key)
print(item.size)
content = item.read()
print(len(content))
item.close()

# データセット内のオブジェクトを走査 (トラバース) します。
for item in map_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. マニフェストファイルからデータセットを構築します。

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

    from osstorchconnector import OssMapDataset
    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/"
    
    # OssMapDataset の 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"
    map_dataset = OssMapDataset.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 map_dataset:
        print(item.key)
        print(item.size)
        print(item.label)
        content = item.read()
        print(len(content))
        item.close()
    
    # OssMapDataset の from_manifest_file メソッドを使用して、OSS バケット内のマニフェストファイルからデータセットを構築します。
    MANIFEST_FILE_URI = "oss://ai-testset/EnglistImg/manifest_file"
    map_dataset = OssMapDataset.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 map_dataset:
        print(item.key)
        print(item.size)
        print(item.label)
        content = item.read()
        print(len(content))
        item.close()

OSS Connector for AI/ML のデータの型

データセット内のオブジェクトのデータの型は、一般的な 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 リソースのパス。このパラメーターを使用して、OSS_URI プレフィックスからデータセットを構築します。oss:// で始まる OSS_URI のみがサポートされます。

object_uris

string

はい

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

OSS リソースパスのリスト。このパラメーターを使用して、リスト内のパスからデータセットを構築します。oss:// で始まる OSS_URI のみがサポートされます。

manifest_file_path

string

はい

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

マニフェストファイルのパス。ローカルファイルパスまたは oss:// で始まる OSS_URI を使用できます。

manifest_parser

Callable オブジェクト

はい

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

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

oss_base_uri

string

はい

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

ベースとなる OSS_URI。マニフェストファイルからの不完全な可能性のある OSS_URI と連結され、完全な OSS_URI を形成します。ベース OSS_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 OssMapDataset

ENDPOINT = "http://oss-cn-beijing-internal.aliyuncs.com"
REGION = "cn-beijing"
CONFIG_PATH = "/etc/oss-connector/config.test.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 パラメーターを使用します。
map_dataset = OssMapDataset.from_prefix(OSS_URI, endpoint=ENDPOINT, transform=transform, cred_path=CRED_PATH, config_path=CONFIG_PATH, region=REGION)
for item in map_dataset:
    print(item[0])
    print(item[1].shape)

manifest_parser

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

from osstorchconnector import imagenet_manifest_parser

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

import io
import logging
from typing import Iterable, Tuple


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 データローダーの作成

次の例は、`OssMapDataset` によって構築されたデータセットをデータソースとして使用する PyTorch データローダーを作成する方法を示しています。

import torch
from osstorchconnector import OssMapDataset

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


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

# OssMapDataset の from_prefix メソッドを使用してデータセットを構築します。
map_dataset = OssMapDataset.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, shuffle=True)
# トレーニングループでデータを使用します。
# for batch in loader:
    # トレーニング操作を実行します。

参考

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