全部产品
Search
文档中心

Object Storage Service:Gunakan data OSS untuk membangun dataset peta untuk pembacaan acak

更新时间:Jul 06, 2025

Dataset peta cocok untuk skenario di mana memori cukup dan akses acak yang sering serta pemrosesan paralel diperlukan untuk sejumlah kecil data. Topik ini menjelaskan cara membangun dataset menggunakan OssMapDataset.

Prasyarat

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

Membangun dataset

Metode

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

  • Prefiks OSS_URI: Cocok untuk skenario di mana jalur penyimpanan data OSS memiliki 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 dibuat berisi banyak file, seperti puluhan juta, dataset sering dimuat, dan pengindeksan data diaktifkan untuk bucket. Metode ini mengurangi biaya yang dihasilkan saat Anda memanggil operasi API untuk mencantumkan objek OSS.

Membangun dataset dengan menggunakan prefiks OSS_URI

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

from osstorchconnector import OssMapDataset

ENDPOINT = "http://oss-cn-beijing-internal.aliyuncs.com"
CONFIG_PATH = "/etc/oss-connector/config.json"
CRED_PATH = "/root/.alibabacloud/credentials"
OSS_URI = "oss://ai-testset/EnglistImg/Img/BadImag/Bmp/Sample001/"

# Gunakan metode from_prefix dari OssMapDataset untuk membangun dataset.
map_dataset = OssMapDataset.from_prefix(oss_uri=OSS_URI, endpoint=ENDPOINT, cred_path=CRED_PATH, config_path=CONFIG_PATH)

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

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

Membangun dataset dengan menggunakan daftar OSS_URI

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

from osstorchconnector import OssMapDataset

ENDPOINT = "http://oss-cn-beijing-internal.aliyuncs.com"
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"
]

# Gunakan metode from_objects dari OssMapDataset untuk membangun dataset.
map_dataset = OssMapDataset.from_objects(object_uris=uris, endpoint=ENDPOINT, cred_path=CRED_PATH, config_path=CONFIG_PATH)

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

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

Membangun dataset dengan menggunakan file manifest

Anda perlu membuat file manifest dan menggunakannya untuk membangun dataset.

  1. Buat file manifest:

    Jalankan perintah touch manifest_file untuk membuat file manifest dan tentukan file tersebut dengan merujuk pada contoh berikut:

    Contoh file manifest yang memiliki 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 memiliki 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. Bangun dataset dengan menggunakan file manifest.

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

    import io
    from typing import Iterable,Tuple,Union
    from osstorchconnector import OssMapDataset
    from osstorchconnector import imagenet_manifest_parser
    
    ENDPOINT = "http://oss-cn-beijing-internal.aliyuncs.com"
    CONFIG_PATH = "/etc/oss-connector/config.json"
    CRED_PATH = "/root/.alibabacloud/credentials"
    OSS_BASE_URI = "oss://ai-testset/EnglistImg/"
    MANIFEST_FILE_URI = "oss://manifest_fileai-testset/EnglistImg/manifest_file"
    
    # Gunakan metode from_manifest_file dari OssMapDataset untuk membangun dataset dari file lokal.
    # Parameter manifest_file_path menentukan jalur lokal file manifest.
    # Parameter manifest_parser menentukan metode yang digunakan untuk penguraian file manifest. Dalam contoh, metode penguraian bawaan imagenet_manifest_parser digunakan.
    # Parameter oss_base_uri menentukan BASE_OSS_URI, yang digunakan untuk menggabungkan URI yang diurai dari file manifest untuk membentuk FULL_OSS_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)
    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 membangun dataset dengan menentukan file manifest 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)

Tipe data di OSS Connector for AI/ML

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

Deskripsi parameter

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

Parameter

Tipe

Diperlukan

Deskripsi

endpoint

string

Ya

Endpoint yang digunakan untuk mengakses OSS. Ini adalah parameter umum. Untuk informasi lebih lanjut, lihat Wilayah dan endpoint.

transform

object

Tidak

Fungsi transform yang digunakan untuk menyesuaikan respons DataObject. Ini adalah parameter umum. Anda dapat menggunakan metode kustom berdasarkan kebutuhan bisnis Anda. Untuk informasi lebih lanjut, lihat transform.

Penting

Jika objek DataObject dikembalikan dalam fungsi transform, iterator mungkin gagal bekerja. Jangan langsung mengembalikan objek DataObject. Jika Anda ingin mengembalikan objek DataObject, gunakan metode copy.

cred_path

string

Ya

Jalur file autentikasi. Nilai default: /root/.alibabacloud/credentials. Ini adalah parameter umum. Untuk informasi lebih lanjut, lihat Konfigurasikan kredensial akses.

config_path

string

Ya

Jalur file konfigurasi konektor OSS. Nilai default: /etc/oss-connector/config.json. Ini adalah parameter umum. Untuk informasi lebih lanjut, lihat Konfigurasikan OSS Connector.

oss_uri

string

Ya

Jalur sumber daya OSS, yang digunakan untuk membangun dataset dengan menggunakan prefiks OSS_URI. Ini adalah parameter from_prefix. Hanya OSS_URIs yang dimulai dengan oss:// yang didukung.

object_uris

string

Ya

Daftar jalur sumber daya OSS. Anda dapat menggunakan jalur dalam daftar untuk membangun dataset. Ini adalah parameter from_objects. Hanya OSS_URIs yang dimulai dengan oss:// yang didukung.

manifest_file_path

string

Ya

Jalur file manifest. Jalur file lokal atau OSS_URI yang dimulai dengan oss:// didukung. Ini adalah parameter from_manifest_file.

manifest_parser

Callable Object

Ya

Metode bawaan yang mengurai file manifest. Metode bawaan menerima file manifest terbuka sebagai input, dan mengembalikan iterator dengan setiap elemen sebagai tuple (oss_uri,label). Ini adalah parameter from_manifest_file. Untuk informasi lebih lanjut, lihat manifest_parser. Anda juga dapat menyesuaikan metode manifest_parser berdasarkan format file manifest dari dataset yang berbeda.

oss_base_uri

string

Ya

URI dasar OSS, yang digunakan untuk menggabungkan OSS_URI yang mungkin tidak lengkap dalam file manifest untuk membentuk OSS_URI yang lengkap. Ini adalah parameter from_manifest_file. Jika oss_base_uri tidak ada, masukkan "".

Metode bawaan

transform

Catatan

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

Fungsi transform memungkinkan Anda memilih metode kustom. Jika Anda tidak menentukan metode saat membangun dataset, metode default digunakan.

Metode default

Kode contoh berikut menunjukkan cara menggunakan metode default. Anda tidak perlu menentukan metode ini saat membangun 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"
CONFIG_PATH = "/etc/oss-connector/config.test.json"
CRED_PATH = "/root/.alibabacloud/credentials"
OSS_URI = "oss://ai-testset/EnglistImg/Img/BadImag/Bmp/Sample001/"

# Tentukan operasi transform pada 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])
])

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

# Tentukan parameter transform=transform saat membangun dataset.
iterable_dataset = OssMapDataset.from_prefix(OSS_URI, endpoint=ENDPOINT, transform=transform, cred_path=CRED_PATH, config_path=CONFIG_PATH)
 

manifest_parser

Gunakan metode manifest_parser bawaan. Kode contoh berikut menunjukkan cara mengimpor metode manifest_parser saat membangun dataset:

from osstorchconnector import imagenet_manifest_parser

Contoh:

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 dengan menggunakan PyTorch berdasarkan dataset yang dibangun dengan OssMapDataset sebagai sumber data:

import torch
from osstorchconnector import OssMapDataset

ENDPOINT = "http://oss-cn-beijing-internal.aliyuncs.com"
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

# Gunakan metode from_prefix dari OssMapDataset untuk membangun dataset.
map_dataset = OssMapDataset.from_prefix(OSS_URI, endpoint=ENDPOINT, transform=transform,cred_path=CRED_PATH, config_path=CONFIG_PATH)

# Buat data loader dengan menggunakan 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 melakukan pekerjaan pelatihan data dalam lingkungan berbasis kontainer, OSS Connector for AI/ML juga cocok untuk lingkungan tersebut. Untuk informasi lebih lanjut, lihat Bangun citra Docker yang berisi lingkungan OSS Connector for AI/ML.