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

Object Storage Service:OSS からマップデータセットを作成

最終更新日:Apr 01, 2026

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

前提条件

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

データセットの構築

メソッド

OssMapDataset を使用してデータセットを構築するには、次のいずれかのメソッドを使用できます。

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

  • OSS_URI リスト:OSS データのストレージパスが明確であるものの、散在しているシナリオに適しています。

  • マニフェストファイル:作成したいデータセットに数千万個などの大量のファイルが含まれており、データセットが頻繁にロードされ、バケットでデータインデックス作成が有効になっているシナリオに適しています。このメソッドは、API オペレーションを呼び出して 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)
content = item.read()
print(item.size)
print(len(content))

# データセット内のオブジェクトを反復処理します。
for item in map_dataset:
    print(item.key)
    print(item.size)
    content = item.read()
    print(len(content))

OSS_URI リストを使用したデータセットの構築

次のサンプルコードは、OssMapDataset の from_objects メソッドを使用して、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"

# 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))

# データセット内のオブジェクトを反復処理します。
for item in map_dataset:
    print(item.key)
    print(item.size)
    content = item.read()
    print(len(content))

マニフェストファイルを使用したデータセットの構築

マニフェストファイルを作成し、そのファイルを使用してデータセットを構築する必要があります。

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

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 の応答をカスタマイズするために使用される変換関数です。これは共通パラメーターです。ビジネス要件に基づいてカスタムメソッドを使用できます。詳細については、「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

はい

OSS リソースパスは、データセットを構築するための OSS_URI プレフィックスとして機能します。パスは oss:// で始まる必要があります。

object_uris

string

はい

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

manifest_file_path

string

はい

マニフェストファイルへのパスは、ローカルファイルパスまたは oss:// で始まる OSS URI のいずれかです。

manifest_parser

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

はい

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

oss_base_uri

string

はい

OSS ベース URI は、マニフェストファイル内の不完全な OSS_URI と結合されて、完全な OSS_URI を形成します。oss_base_uri が提供されていない場合は、このパラメーターを "" に設定します。

組み込みメソッド

transform

説明

データセットが構築されると、データセットは transform(DataObject) 関数のイテレータを返します。DataObject は、OSS Connector for AI/ML のデータの型です。

transform 関数では、カスタムメソッドを選択できます。データセットを構築する際にメソッドを指定しない場合、デフォルトのメソッドが使用されます。

デフォルトメソッド

次のサンプルコードは、デフォルトメソッドの使用例です。データセットを構築する際にこのメソッドを指定する必要はありません。

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

カスタムメソッド

次のサンプルコードは、カスタムメソッドの使用例です。

import sys
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])
])

# 入力オブジェクトを処理するための変換関数を作成します。
def transform(object):
    try:
        img = Image.open(io.BytesIO(object.read())).convert('RGB')
        val = trans(img)
    except Exception as e:
        raise e
    return val, object.label

# データセットを作成する際に transform パラメーターを使用します。
iterable_dataset = OssMapDataset.from_prefix(OSS_URI, endpoint=ENDPOINT, transform=transform, cred_path=CRED_PATH, config_path=CONFIG_PATH, region=REGION)
 

manifest_parser

デフォルトの manifest_parser メソッドを使用します。次のサンプルコードは、データセットを構築する際に manifest_parser メソッドをインポートする方法の例を示しています。

from osstorchconnector import imagenet_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 イメージの構築」をご参照ください。