All Products
Search
Document Center

Object Storage Service:Buat dataset map dari OSS

Last Updated:Apr 01, 2026

Dataset map cocok untuk skenario dengan memori mencukupi dan kebutuhan akses acak serta pemrosesan paralel pada volume data kecil. Topik ini menjelaskan cara membuat dataset menggunakan OssMapDataset.

Prasyarat

OSS Connector for AI/ML telah diinstal dan dikonfigurasi. Untuk informasi selengkapnya, lihat Install OSS Connector for AI/ML dan Configure OSS Connector for AI/ML.

Buat dataset

Metode

Anda dapat menggunakan salah satu metode berikut untuk membuat dataset dengan OssMapDataset:

  • Awalan OSS_URI: cocok untuk skenario di mana jalur penyimpanan data OSS mengikuti aturan yang seragam.

  • Daftar OSS_URI: cocok untuk skenario di mana jalur penyimpanan data OSS jelas tetapi tersebar.

  • File manifest: cocok untuk skenario di mana dataset yang ingin Anda buat berisi sejumlah besar file—misalnya puluhan juta—sering dimuat, dan pengindeksan data diaktifkan untuk bucket tersebut. Metode ini mengurangi biaya yang timbul saat Anda memanggil operasi API untuk mendaftar objek OSS.

Buat dataset dengan menggunakan awalan OSS_URI

Kode contoh berikut menunjukkan cara menggunakan metode from_prefix dari OssMapDataset untuk membuat dataset dengan menentukan awalan OSS_URI di OSS:

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

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

# Akses secara acak sebuah objek dalam dataset yang telah dibuat.
item = map_dataset[0]
print(item.key)
content = item.read()
print(item.size)
print(len(content))

# Iterasi objek-objek dalam dataset.
for item in map_dataset:
    print(item.key)
    print(item.size)
    content = item.read()
    print(len(content))

Buat dataset dengan menggunakan daftar OSS_URI

Kode contoh berikut menunjukkan cara menggunakan metode from_objects dari OssMapDataset untuk membuat dataset dengan menentukan daftar OSS_URI di OSS:

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 adalah iterator string yang berisi beberapa URI OSS.
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 dengan menggunakan metode from_objects dari OssMapDataset.
map_dataset = OssMapDataset.from_objects(object_uris=uris, endpoint=ENDPOINT, cred_path=CRED_PATH, config_path=CONFIG_PATH, region=REGION)

# Akses secara acak sebuah objek dalam dataset yang telah dibuat.
item = map_dataset[1]
print(item.key)
print(item.size)
content = item.read()
print(len(content))

# Iterasi objek-objek dalam dataset.
for item in map_dataset:
    print(item.key)
    print(item.size)
    content = item.read()
    print(len(content))

Buat dataset dengan menggunakan file manifest

Anda perlu membuat file manifest dan menggunakannya untuk membuat dataset.

  1. Buat file manifest:

    Jalankan perintah touch manifest_file di direktori mana pun untuk membuat file manifest, lalu isi file tersebut sesuai contoh berikut.

    Contoh file manifest yang berisi 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 yang berisi nama dan label objek 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. Buat dataset dengan menggunakan file manifest.

    Kode contoh berikut menunjukkan cara menggunakan metode from_manifest_file dari OssMapDataset untuk membuat dataset dengan menentukan file manifest:

    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"
    
    # Gunakan metode from_manifest_file dari OssMapDataset untuk membuat dataset dari file lokal.
    # Parameter manifest_file_path menentukan jalur lokal file manifest.
    # Parameter manifest_parser menentukan metode yang digunakan untuk mengurai file manifest. Contoh ini menggunakan parser bawaan, yaitu imagenet_manifest_parser.
    # Parameter oss_base_uri menentukan URI dasar OSS. URI ini ditambahkan di awal URI relatif dari manifest untuk membentuk URI OSS lengkap.
    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))
    
    # Gunakan metode from_manifest_file dari OssMapDataset untuk membuat dataset dari file manifest yang berada di bucket 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)
    

Tipe data di OSS Connector for AI/ML

Tipe data objek dalam dataset mendukung metode I/O. Untuk informasi selengkapnya, lihat Tipe data di OSS Connector for AI/ML.

Deskripsi parameter

Jika Anda menggunakan OssMapDataset atau OssIterableDataset untuk membuat dataset, Anda harus mengonfigurasi parameter-parameter berikut. Tabel berikut menjelaskan parameter tersebut.

Parameter

Tipe

Wajib

Deskripsi

endpoint

string

Ya

Endpoint yang digunakan untuk mengakses OSS. Ini merupakan parameter umum. Untuk informasi selengkapnya, lihat Wilayah dan endpoint.

region

string

Tidak

Parameter umum.

Wilayah OSS, seperti cn-beijing. Jika parameter ini tidak ditentukan, wilayah akan secara otomatis diinferensi dari endpoint. Namun, inferensi tersebut dapat gagal jika endpoint tidak berisi informasi wilayah. Kami menyarankan agar Anda secara eksplisit menentukan wilayah.

transform

object

Tidak

Fungsi transform yang digunakan untuk menyesuaikan respons DataObject. Ini merupakan parameter umum. Anda dapat menggunakan metode kustom sesuai kebutuhan bisnis Anda. Untuk informasi selengkapnya, lihat transform.

Penting

Jangan langsung mengembalikan objek DataObject dalam transform, karena hal ini dapat menyebabkan iterator berhenti bekerja. Jika Anda ingin mengembalikan objek, Anda harus memanggil metode copy.

cred_path

string

Ya

Jalur default file kredensial adalah /root/.alibabacloud/credentials. Untuk informasi selengkapnya, lihat Konfigurasikan kredensial akses.

config_path

string

Ya

Jalur default untuk file konfigurasi OSS Connector adalah /etc/oss-connector/config.json. Untuk informasi selengkapnya, lihat Konfigurasikan OSS Connector.

oss_uri

string

Ya

Jalur resource OSS berfungsi sebagai awalan OSS_URI untuk membuat Dataset. Jalur tersebut harus diawali dengan oss:// .

object_uris

string

Ya

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

manifest_file_path

string

Ya

Jalur ke file manifest dapat berupa jalur file lokal atau URI OSS yang diawali dengan oss://.

manifest_parser

Callable Object

Ya

Metode bawaan untuk mengurai file manifest menerima file manifest yang telah dibuka sebagai input dan mengembalikan iterator, di mana setiap elemen berupa tupel (oss_uri,label). Untuk informasi selengkapnya, lihat manifest_parser. Anda juga dapat menyesuaikan metode manifest_parser untuk mendukung format file manifest yang berbeda.

oss_base_uri

string

Ya

URI dasar OSS digabungkan dengan URI OSS yang tidak lengkap dalam file manifest untuk membentuk URI OSS lengkap. Jika oss_base_uri tidak disediakan, atur parameter ini ke "".

Metode bawaan

transform

Catatan

Saat dataset dibuat, dataset mengembalikan iterator untuk fungsi transform(DataObject). DataObject adalah tipe data OSS Connector for AI/ML.

Fungsi transform memungkinkan Anda menggunakan metode kustom. Jika tidak ditentukan saat membuat dataset, metode default akan digunakan.

Metode default

Kode contoh berikut menunjukkan cara menggunakan metode default. Anda tidak perlu menentukan metode ini saat membuat dataset.

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

Metode kustom

Kode contoh berikut menunjukkan cara menggunakan metode kustom:

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

# 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 fungsi 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 val, object.label

# Gunakan parameter transform saat membuat dataset.
iterable_dataset = OssMapDataset.from_prefix(OSS_URI, endpoint=ENDPOINT, transform=transform, cred_path=CRED_PATH, config_path=CONFIG_PATH, region=REGION)
 

manifest_parser

Gunakan metode manifest_parser default. Kode contoh berikut menunjukkan cara mengimpor metode manifest_parser saat membuat dataset:

from osstorchconnector import imagenet_manifest_parser

Contoh:

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

Buat data loader melalui dataset dengan menggunakan PyTorch

Kode contoh berikut menunjukkan cara membuat data loader menggunakan PyTorch berdasarkan dataset yang dibuat dengan OssMapDataset sebagai sumber data:

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

# Buat dataset dengan menggunakan metode from_prefix dari OssMapDataset.
map_dataset = OssMapDataset.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, shuffle=True)
# Gunakan data dalam loop pelatihan.
# for batch in loader:
    # Lakukan operasi pelatihan.

Referensi

Jika Anda menjalankan pekerjaan pelatihan data di lingkungan terkontainerisasi, OSS Connector for AI/ML juga cocok untuk lingkungan tersebut. Untuk informasi selengkapnya, lihat Buat image Docker yang berisi lingkungan OSS Connector for AI/ML.