Tous les produits
Search
Centre de documentation

Object Storage Service:Build an iterable dataset for sequential stream reading from OSS data

Dernière mise à jour :Aug 18, 2026

Un OssIterableDataset est idéal pour les scénarios impliquant une mémoire limitée ou de grands volumes de données. Il est principalement utilisé pour le traitement séquentiel lorsque l'accès aléatoire et le traitement parallèle ne sont pas requis. Cette rubrique décrit comment créer un jeu de données à l'aide d'OssIterableDataset.

Prérequis

OSS Connector for AI/ML est installé et configuré. Pour plus d'informations, consultez les rubriques Installer OSS Connector for AI/ML et Configurer OSS Connector for AI/ML.

Créer un jeu de données

Méthodes

Vous pouvez créer un jeu de données à l'aide d'OssIterableDataset de trois manières :

  • Préfixe d'URI OSS : utilisez cette méthode lorsque les chemins de stockage OSS suivent un modèle cohérent.

  • Liste d'URI OSS : privilégiez cette approche pour des chemins de stockage OSS spécifiques et non séquentiels.

  • Fichier manifeste : optez pour cette solution afin de réduire la surcharge liée à la liste des objets OSS. Elle convient aux jeux de données contenant de nombreux fichiers (des dizaines de millions) nécessitant un chargement répété. Elle est également adaptée aux buckets pour lesquels la fonctionnalité de récupération scalaire OSS est activée.

Créer un jeu de données à partir d'un préfixe d'URI OSS

L'exemple suivant illustre l'utilisation de la méthode from_prefix d'OssIterableDataset pour construire un jeu de données à partir d'un préfixe spécifié (URI OSS) dans OSS.

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

# Build a dataset using the from_prefix method of OssIterableDataset
iterable_dataset = OssIterableDataset.from_prefix(OSS_URI, endpoint=ENDPOINT, cred_path=CRED_PATH, config_path=CONFIG_PATH, region=REGION)

# Traverse the objects in the dataset
for item in iterable_dataset:
    print(item.key)
    print(item.size)
    content = item.read()
    print(len(content))
    item.close()

Créer un jeu de données à partir d'une liste d'URI OSS

L'exemple ci-dessous montre comment utiliser la méthode from_objects d'OssIterableDataset pour créer un jeu de données à partir d'une liste spécifiée d'URI OSS. Dans cet exemple, uris est un itérateur de chaînes contenant plusieurs URI OSS.

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

# Build a dataset using the from_objects method of OssIterableDataset
iterable_dataset = OssIterableDataset.from_objects(uris, endpoint=ENDPOINT, cred_path=CRED_PATH, config_path=CONFIG_PATH, region=REGION)

# Traverse the objects in the dataset
for item in iterable_dataset:
    print(item.key)
    print(item.size)
    content = item.read()
    print(len(content))
    item.close()

Créer un jeu de données à partir d'un fichier manifeste

Avant de créer un jeu de données à partir d'un fichier manifeste, vous devez d'abord créer ce fichier.

  1. Créez un fichier manifeste :

    Exécutez la commande touch manifest_file à n'importe quel emplacement pour créer un fichier manifeste. Ensuite, remplissez le fichier manifeste comme indiqué dans les exemples.

    Exemple de fichier manifeste avec des noms d'objets OSS :

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

    Exemple de fichier manifeste avec des noms d'objets OSS et des libellés :

    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. Créez le jeu de données à partir du fichier manifeste :

    L'exemple suivant montre comment utiliser la méthode from_manifest_file d'OssIterableDataset pour créer un jeu de données à partir d'un fichier manifeste spécifié.

    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/"
    
    # Build a dataset from a local file using the from_manifest_file method of OssIterableDataset
    # The manifest_file_path parameter specifies the local path of the manifest file.
    # The manifest_parser parameter is the method for parsing the manifest file. This example uses the built-in parsing method imagenet_manifest_parser.
    # The oss_base_uri parameter specifies the base OSS URI. It is used to concatenate with the URI parsed from the manifest to form a full OSS URI. FULL_OSS_URI = BASE_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()
    
    # Build a dataset from a manifest file in an OSS Bucket using the from_manifest_file method of OssIterableDataset
    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()

Types de données dans le jeu de données

Les objets du jeu de données sont d'un type de données qui implémente des interfaces d'E/S courantes. Pour plus d'informations, consultez la rubrique Types de données dans OSS Connector for AI/ML.

Description des paramètres

Configurez les paramètres suivants pour créer un jeu de données à l'aide d'OssMapDataset ou d'OssIterableDataset.

Paramètre

Type

Obligatoire

Description

endpoint

string

Oui

Paramètre commun :

Le point de terminaison pour accéder au service OSS. Pour plus d'informations, consultez Régions et points de terminaison.

region

string

Non

Paramètre commun :

La région OSS, par exemple cn-beijing. Si ce paramètre n'est pas défini, le connecteur le déduit automatiquement à partir du endpoint. Toutefois, l'inférence peut échouer si le point de terminaison ne contient pas d'informations sur la région. Spécifiez explicitement la région.

transform

object

Non

Paramètre commun :

Une fonction de transformation utilisée pour convertir un DataObject (objet OSS) en n'importe quel type. Vous pouvez personnaliser cette méthode selon vos besoins. Pour plus d'informations, consultez transform.

Important

Ne renvoyez pas directement un objet DataObject dans la fonction transform. Cela pourrait empêcher l'itérateur de fonctionner. Pour renvoyer un objet, appelez la méthode copy.

cred_path

string

Oui

Paramètre commun :

Le chemin par défaut du fichier d'authentification est /root/.alibabacloud/credentials. Pour plus d'informations, consultez Configurer les identifiants d'accès.

config_path

string

Oui

Paramètre commun :

Le chemin par défaut du fichier de configuration OSS Connector est /etc/oss-connector/config.json. Pour plus d'informations, consultez Configurer OSS Connector.

oss_uri

string

Oui

Paramètre de la méthode from_prefix :

Le chemin de la ressource OSS utilisé pour créer le jeu de données à partir d'un préfixe d'URI OSS. Seuls les URI OSS commençant par oss:// sont pris en charge.

object_uris

string

Oui

Paramètre de la méthode from_objects :

Une liste de chemins de ressources OSS utilisés pour créer le jeu de données. Seuls les URI OSS commençant par oss:// sont pris en charge.

manifest_file_path

string

Oui

Paramètre de la méthode from_manifest_file :

Le chemin du fichier manifeste. Les chemins de fichiers locaux et les URI OSS commençant par oss:// sont pris en charge.

manifest_parser

Callable Object

Oui

Paramètre de la méthode from_manifest_file :

Une méthode intégrée pour analyser le fichier manifeste. Elle accepte un fichier manifeste ouvert en entrée et renvoie un itérateur. Chaque élément de l'itérateur est un tuple de (oss_uri, label). Pour plus d'informations, consultez manifest_parser. Vous pouvez également personnaliser la méthode manifest_parser en fonction du format des différents fichiers manifestes de jeu de données.

oss_base_uri

string

Oui

Paramètre de la méthode from_manifest_file :

L'URI OSS de base. Il est utilisé pour créer un URI OSS complet en le concaténant avec un URI OSS potentiellement incomplet issu du fichier manifeste. S'il n'y a pas d'oss_base_uri, définissez ce paramètre sur "".

Méthodes intégrées

transform

Lorsque vous créez un jeu de données, celui-ci fournit un itérateur qui produit le résultat de transform(DataObject). DataObject est un type de données dans OSS Connector for AI/ML.

La méthode transform peut être personnalisée. Si vous ne spécifiez pas de méthode transform lors de la création du jeu de données, la méthode par défaut est utilisée.

Méthode transform par défaut

L'exemple suivant présente la méthode transform par défaut. Vous n'avez pas besoin de la spécifier lors de la création d'un jeu de données.

# Default transform function
def identity(obj: DataObject) -> DataObject:
    if obj is not None:
        return obj.copy()
    else:
        return None

Méthode transform personnalisée

L'exemple suivant montre comment utiliser une méthode transform personnalisée lors de la création d'un jeu de données.

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

# Define the transformation operations for image data
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])
])

# Create a transform method to process the input object
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

# Use the transform=transform parameter when building the dataset
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

Pour créer un jeu de données à l'aide de la méthode manifest_parser par défaut, importez-la comme indiqué dans l'exemple suivant.

from osstorchconnector import imagenet_manifest_parser

L'exemple suivant présente la méthode manifest_parser par défaut.

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}")

Créer un chargeur de données avec PyTorch à partir d'un jeu de données

L'exemple suivant montre comment créer un chargeur de données PyTorch en utilisant un jeu de données construit avec OssIterableDataset comme source de données.

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

# Build a dataset using the from_prefix method of OssIterableDataset
map_dataset = OssIterableDataset.from_prefix(OSS_URI, endpoint=ENDPOINT,transform=transform, cred_path=CRED_PATH, config_path=CONFIG_PATH, region=REGION)

# Create a PyTorch data loader based on map_dataset
loader = torch.utils.data.DataLoader(map_dataset, batch_size=256, num_workers=32, prefetch_factor=2)
# Use the data in the training loop
# for batch in loader:
     # Perform training operations

Références

OSS Connector for AI/ML peut également être utilisé pour les tâches d'entraînement de données dans un environnement conteneurisé. Pour plus d'informations, consultez la rubrique Créer une image Docker contenant l'environnement OSS Connector for AI/ML.