All Products
Search
Document Center

Object Storage Service:Buat dataset iterable untuk pembacaan aliran sekuensial dari data OSS

Last Updated:Apr 23, 2026

OssIterableDataset sangat ideal untuk skenario dengan memori terbatas atau volume data besar. Dataset ini terutama digunakan untuk pemrosesan sekuensial yang tidak memerlukan akses acak maupun pemrosesan paralel. Topik ini menjelaskan cara membuat dataset menggunakan OssIterableDataset.

Prasyarat

OSS Connector for AI/ML telah diinstal dan dikonfigurasi. Untuk informasi lebih lanjut, lihat Instal OSS Connector for AI/ML dan Konfigurasi OSS Connector for AI/ML.

Buat dataset

Metode

Anda dapat membuat dataset menggunakan OssIterableDataset dengan tiga cara:

  • Awalan URI OSS: Gunakan metode ini jika jalur penyimpanan OSS mengikuti pola yang konsisten.

  • Daftar URI OSS: Gunakan metode ini untuk jalur penyimpanan OSS spesifik yang tidak berurutan.

  • File manifest: Gunakan metode ini untuk mengurangi overhead saat mendaftar objek OSS. Metode ini cocok untuk dataset dengan banyak file—misalnya puluhan juta file—yang perlu dimuat berulang kali. Metode ini juga sesuai untuk bucket tempat fitur scalar retrieval OSS diaktifkan.

Buat dataset dari awalan URI OSS

Contoh berikut menunjukkan cara menggunakan metode from_prefix dari OssIterableDataset untuk membuat dataset dari awalan (URI OSS) tertentu di 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/"

# Buat dataset menggunakan metode from_prefix dari OssIterableDataset
iterable_dataset = OssIterableDataset.from_prefix(OSS_URI, endpoint=ENDPOINT, cred_path=CRED_PATH, config_path=CONFIG_PATH, region=REGION)

# Telusuri objek-objek dalam dataset
for item in iterable_dataset:
    print(item.key)
    print(item.size)
    content = item.read()
    print(len(content))
    item.close()

Buat dataset dari daftar URI OSS

Contoh berikut menunjukkan cara menggunakan metode from_objects dari OssIterableDataset untuk membuat dataset dari daftar URI OSS tertentu. Dalam contoh ini, uris adalah iterator string yang berisi beberapa 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"
]

# Buat dataset menggunakan metode from_objects dari OssIterableDataset
iterable_dataset = OssIterableDataset.from_objects(uris, endpoint=ENDPOINT, cred_path=CRED_PATH, config_path=CONFIG_PATH, region=REGION)

# Telusuri objek-objek dalam dataset
for item in iterable_dataset:
    print(item.key)
    print(item.size)
    content = item.read()
    print(len(content))
    item.close()

Buat dataset dari file manifest

Sebelum membuat dataset dari file manifest, Anda harus terlebih dahulu membuat file manifest tersebut.

  1. Buat file manifest:

    Jalankan perintah touch manifest_file di lokasi mana pun untuk membuat file manifest. Kemudian, isi file manifest seperti pada contoh berikut.

    Contoh file manifest dengan nama objek OSS:

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

    Contoh file manifest dengan nama objek OSS dan label:

    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. Buat dataset dari file manifest:

    Contoh berikut menunjukkan cara menggunakan metode from_manifest_file dari OssIterableDataset untuk membuat dataset dari file manifest tertentu.

    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/"
    
    # Buat dataset dari file lokal menggunakan metode from_manifest_file dari OssIterableDataset
    # Parameter manifest_file_path menentukan jalur lokal file manifest.
    # Parameter manifest_parser adalah metode untuk mengurai file manifest. Contoh ini menggunakan metode penguraian bawaan imagenet_manifest_parser.
    # Parameter oss_base_uri menentukan URI dasar OSS. Parameter ini digunakan untuk menggabungkan dengan URI yang diurai dari manifest guna membentuk URI OSS lengkap. 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()
    
    # Buat dataset dari file manifest di Bucket OSS menggunakan metode from_manifest_file dari 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()

Tipe data dalam dataset

Objek dalam dataset memiliki tipe data yang mengimplementasikan antarmuka I/O umum. Untuk informasi lebih lanjut, lihat Tipe data dalam OSS Connector for AI/ML.

Deskripsi parameter

Konfigurasikan parameter berikut untuk membuat dataset menggunakan OssMapDataset atau OssIterableDataset.

Parameter

Tipe

Wajib

Deskripsi

endpoint

string

Ya

Parameter umum:

Endpoint untuk mengakses layanan OSS. Untuk informasi lebih lanjut, lihat Wilayah dan endpoint.

region

string

Tidak

Parameter umum:

Wilayah OSS, seperti cn-beijing. Jika tidak ditentukan, konektor akan secara otomatis menginferensi wilayah dari endpoint. Namun, inferensi dapat gagal jika endpoint tidak berisi informasi wilayah. Sebaiknya tentukan wilayah secara eksplisit.

transform

object

Tidak

Parameter umum:

Fungsi transform yang digunakan untuk mengonversi DataObject (objek OSS) ke tipe apa pun. Anda dapat menyesuaikan metode ini sesuai kebutuhan. Untuk informasi lebih lanjut, lihat transform.

Penting

Jangan langsung mengembalikan objek DataObject dalam fungsi transform. Hal ini dapat menyebabkan iterator berhenti bekerja. Untuk mengembalikan objek, panggil metode copy.

cred_path

string

Ya

Parameter umum:

Jalur default file autentikasi adalah /root/.alibabacloud/credentials. Untuk informasi lebih lanjut, lihat Konfigurasi kredensial akses.

config_path

string

Ya

Parameter umum:

Jalur default file konfigurasi OSS Connector adalah /etc/oss-connector/config.json. Untuk informasi lebih lanjut, lihat Konfigurasi OSS Connector.

oss_uri

string

Ya

Parameter metode from_prefix:

Jalur resource OSS yang digunakan untuk membuat dataset dari awalan URI OSS. Hanya URI OSS yang dimulai dengan oss:// yang didukung.

object_uris

string

Ya

Parameter metode from_objects:

Daftar jalur resource OSS yang digunakan untuk membuat dataset. Hanya URI OSS yang dimulai dengan oss:// yang didukung.

manifest_file_path

string

Ya

Parameter metode from_manifest_file:

Jalur file manifest. Jalur file lokal dan URI OSS yang dimulai dengan oss:// didukung.

manifest_parser

Callable Object

Ya

Parameter metode from_manifest_file:

Metode bawaan untuk mengurai file manifest. Metode ini menerima file manifest yang telah dibuka sebagai input dan mengembalikan iterator. Setiap elemen dalam iterator merupakan tupel (oss_uri, label). Untuk informasi lebih lanjut, lihat manifest_parser. Anda juga dapat menyesuaikan metode manifest_parser berdasarkan format file manifest dataset yang berbeda.

oss_base_uri

string

Ya

Parameter metode from_manifest_file:

URI dasar OSS. Digunakan untuk membuat URI OSS lengkap dengan menggabungkannya dengan URI OSS yang mungkin tidak lengkap dari file manifest. Jika tidak ada oss_base_uri, atur parameter ini ke "".

Metode bawaan

transform

Saat Anda membuat dataset, dataset tersebut menyediakan iterator yang menghasilkan hasil dari `transform(DataObject)`. `DataObject` adalah tipe data dalam OSS Connector for AI/ML.

Metode transform dapat disesuaikan. Jika Anda tidak menentukan metode transform saat membuat dataset, metode default akan digunakan.

Metode transform default

Contoh berikut menunjukkan metode transform default. Anda tidak perlu menentukannya saat membuat dataset.

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

Metode transform kustom

Contoh berikut menunjukkan cara menggunakan metode transform kustom saat membuat dataset.

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

# Definisikan operasi transformasi untuk data gambar
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])
])

# Buat metode transform untuk memproses objek input
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

# Gunakan parameter transform=transform saat membuat 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

Untuk membuat dataset menggunakan metode manifest_parser default, impor seperti pada contoh berikut.

from osstorchconnector import imagenet_manifest_parser

Contoh berikut menunjukkan metode manifest_parser default.

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} untuk baris {i}: {line}")

Buat data loader dengan PyTorch dari dataset

Contoh berikut menunjukkan cara membuat data loader PyTorch menggunakan dataset yang dibuat dengan OssIterableDataset sebagai sumber data.

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

# Buat dataset menggunakan metode from_prefix dari OssIterableDataset
map_dataset = OssIterableDataset.from_prefix(OSS_URI, endpoint=ENDPOINT,transform=transform, cred_path=CRED_PATH, config_path=CONFIG_PATH, region=REGION)

# Buat data loader PyTorch berdasarkan map_dataset
loader = torch.utils.data.DataLoader(map_dataset, batch_size=256, num_workers=32, prefetch_factor=2)
# Gunakan data dalam loop pelatihan
# for batch in loader:
     # Lakukan operasi pelatihan

Referensi

OSS Connector for AI/ML juga dapat digunakan untuk tugas pelatihan data di lingkungan terkontainerisasi. Untuk informasi lebih lanjut, lihat Buat image Docker yang berisi lingkungan OSS Connector for AI/ML.