All Products
Search
Document Center

Object Storage Service:buat dataset bergaya peta untuk akses acak dari data di OSS

Last Updated:Apr 23, 2026

OssMapDataset cocok untuk skenario dengan volume data kecil dan memori yang mencukupi, yang memerlukan akses acak serta pemrosesan paralel intensif. Topik ini menjelaskan cara membuat dataset menggunakan OssMapDataset.

Prasyarat

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

Buat dataset

Metode

Anda dapat membuat dataset dengan OssMapDataset melalui tiga cara:

  • Awalan OSS_URI: Cocok untuk skenario di mana jalur penyimpanan OSS mengikuti pola seragam.

  • Daftar OSS_URIs: Cocok untuk skenario di mana jalur penyimpanan OSS bersifat spesifik namun tersebar.

  • File manifest: Mengurangi beban operasi list object OSS. Metode ini cocok untuk dataset dengan banyak file—misalnya puluhan juta—yang dimuat berulang kali, serta untuk bucket tempat fitur scalar retrieval OSS diaktifkan.

Buat dataset dari awalan OSS_URI

Contoh ini menunjukkan cara menggunakan metode from_prefix dari OssMapDataset untuk membuat dataset dari awalan tertentu (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 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 objek secara acak dalam dataset yang dibuat.
item = map_dataset[0]
print(item.key)
print(item.size)
content = item.read()
print(len(content))
item.close()

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

Buat dataset dari daftar OSS_URIs

Contoh ini menunjukkan cara menggunakan metode from_objects dari OssMapDataset untuk membuat dataset dari daftar OSS_URIs tertentu.

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 OSS_URIs.
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 OssMapDataset.
map_dataset = OssMapDataset.from_objects(object_uris=uris, endpoint=ENDPOINT, cred_path=CRED_PATH, config_path=CONFIG_PATH, region=REGION)

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

# Telusuri objek-objek dalam dataset.
for item in map_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 membuat file manifest tersebut terlebih dahulu.

  1. Buat file manifest.

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

    Contoh file manifest 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 berisi 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 ini menunjukkan cara menggunakan metode from_manifest_file dari OssMapDataset untuk membuat dataset dari file manifest tertentu.

    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/"
    
    # Buat dataset dari file lokal menggunakan metode from_manifest_file dari OssMapDataset.
    # Parameter manifest_file_path menentukan jalur lokal file manifest.
    # Parameter manifest_parser menentukan metode untuk mengurai file manifest. Contoh ini menggunakan parser bawaan imagenet_manifest_parser.
    # Parameter oss_base_uri menentukan OSS_URI dasar. Nilai ini digabungkan dengan URI yang diurai dari manifest untuk membentuk OSS_URI lengkap. Formatnya: FULL_OSS_URI = BASE_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()
    
    # Buat dataset dari file manifest di bucket OSS menggunakan metode from_manifest_file dari OssMapDataset.
    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()

Tipe data di OSS Connector for AI/ML

Tipe data untuk objek dalam dataset mengimplementasikan antarmuka I/O umum. Untuk informasi selengkapnya, lihat Tipe data di OSS Connector for AI/ML.

Parameter

Saat membuat dataset menggunakan OssMapDataset atau OssIterableDataset, Anda dapat mengonfigurasi parameter berikut.

Parameter

Tipe

Wajib

Deskripsi

endpoint

string

Ya

Parameter umum:

Titik akhir publik layanan OSS. Untuk informasi selengkapnya, lihat Wilayah dan titik akhir.

region

string

Tidak

Parameter umum:

Wilayah OSS, misalnya cn-beijing. Jika Anda tidak mengatur parameter ini, wilayah akan diinferensi dari endpoint. Inferensi ini bisa gagal jika endpoint tidak berisi informasi wilayah. Kami menyarankan agar Anda menentukan wilayah secara eksplisit.

transform

object

Tidak

Parameter umum:

Fungsi transform yang mengonversi DataObject (objek OSS) menjadi tipe apa pun. Anda dapat menyesuaikan metode ini sesuai kebutuhan. Untuk informasi selengkapnya, lihat transform.

Penting

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

cred_path

string

Ya

Parameter umum:

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

config_path

string

Ya

Parameter umum:

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

oss_uri

string

Ya

Parameter untuk metode `from_prefix`:

Jalur resource OSS. Gunakan parameter ini untuk membuat dataset dari awalan OSS_URI. Hanya OSS_URIs yang diawali dengan oss:// yang didukung.

object_uris

string

Ya

Parameter untuk metode `from_objects`:

Daftar jalur resource OSS. Gunakan parameter ini untuk membuat dataset dari jalur-jalur dalam daftar. Hanya OSS_URIs yang diawali dengan oss:// yang didukung.

manifest_file_path

string

Ya

Parameter untuk metode `from_manifest_file`:

Jalur file manifest. Anda dapat menggunakan jalur file lokal atau OSS_URI yang diawali dengan oss://.

manifest_parser

Callable Object

Ya

Parameter untuk 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 berupa tupel (oss_uri, label). Untuk informasi selengkapnya, lihat manifest_parser. Anda juga dapat membuat metode `manifest_parser` kustom yang sesuai dengan format file manifest dataset Anda.

oss_base_uri

string

Ya

Parameter untuk metode `from_manifest_file`:

OSS_URI dasar. Nilai ini digabungkan dengan OSS_URI yang mungkin tidak lengkap dari file manifest untuk membentuk OSS_URI lengkap. Jika Anda tidak memiliki OSS_URI dasar, atur parameter ini ke "".

Metode bawaan

transform

Catatan

Saat membuat dataset, dataset menyediakan iterator yang menghasilkan hasil dari transform(DataObject). DataObject merupakan tipe data di 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 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 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.
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

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

from osstorchconnector import imagenet_manifest_parser

Kode berikut menunjukkan metode manifest_parser default.

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

Buat data loader PyTorch dari dataset

Contoh berikut menunjukkan cara membuat data loader PyTorch yang menggunakan dataset yang dibuat oleh 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 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

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