All Products
Search
Document Center

Object Storage Service:Gunakan OSS Connector for AI/ML untuk mempercepat tugas pelatihan data

Last Updated:Jun 22, 2026

Topik ini menjelaskan cara menggunakan OSS Connector for AI/ML untuk membuat dan melatih model data secara efisien.

Lingkungan penyebaran

  • Sistem operasi: Linux x86-64

  • glibc: >=2.17

  • Python: 3.8–3.12

  • PyTorch: >=2.0

  • Untuk menggunakan fitur OSS Checkpoint, kernel Linux harus mendukung userfaultfd.

    Catatan

    Sebagai contoh, pada sistem Ubuntu, Anda dapat menjalankan perintah sudo grep CONFIG_USERFAULTFD /boot/config-$(uname -r) untuk memeriksa apakah kernel Linux mendukung userfaultfd. Jika perintah mengembalikan CONFIG_USERFAULTFD=y, berarti kernel mendukungnya. Jika perintah mengembalikan CONFIG_USERFAULTFD=n, berarti kernel tidak mendukungnya, sehingga Anda tidak dapat menggunakan fitur OSS Checkpoint.

Instalasi cepat

Contoh berikut menunjukkan cara menginstal OSS Connector for AI/ML untuk Python 3.12.

  1. Pada sistem operasi Linux atau dalam kontainer yang dibuat dari image berbasis Linux, jalankan perintah pip3.12 install osstorchconnector untuk menginstal OSS Connector for AI/ML.

    pip3.12 install osstorchconnector
  2. Jalankan perintah pip3.12 show osstorchconnector untuk memverifikasi keberhasilan instalasi.

    pip3.12 show osstorchconnector

    Jika informasi versi osstorchconnector ditampilkan, instalasi telah berhasil.

    Name: osstorchconnector
    Version: 1.0.0rc1
    Summary: OSS connector for AI/ML
    Home-page: 
    Author: 
    Author-email: 
    License: 
    Location: /usr/local/lib/python3.12/dist-packages
    Requires: torch
    Required-by:

Konfigurasi

  1. Buat file konfigurasi untuk kredensial akses.

    mkdir -p /root/.alibabacloud && touch /root/.alibabacloud/credentials
  2. Tambahkan konfigurasi kredensial akses dan simpan file tersebut.

    Ganti <Access-key-id> dan <Access-key-secret> dalam contoh dengan ID AccessKey dan Rahasia AccessKey milik pengguna Resource Access Management (RAM). Untuk informasi lebih lanjut tentang cara membuat ID AccessKey dan Rahasia AccessKey, lihat Create an AccessKey. Untuk informasi lebih lanjut tentang item konfigurasi dan cara menggunakan kredensial akses temporary, lihat Configure access credentials.

    {
      "AccessKeyId": "LTAI************************",
      "AccessKeySecret": "At32************************"
    }
  3. Buat file konfigurasi OSS Connector.

    mkdir -p /etc/oss-connector/ && touch /etc/oss-connector/config.json
  4. Tambahkan konfigurasi OSS Connector dan simpan file tersebut. Untuk informasi lebih lanjut tentang item konfigurasi, lihat Configure OSS Connector.

    Dalam kebanyakan kasus, Anda dapat menggunakan konfigurasi default berikut.

    {
        "logLevel": 1,
        "logPath": "/var/log/oss-connector/connector.log",
        "auditPath": "/var/log/oss-connector/audit.log",
        "datasetConfig": {
            "prefetchConcurrency": 24,
            "prefetchWorker": 2
        },
        "checkpointConfig": {
            "prefetchConcurrency": 24,
            "prefetchWorker": 4,
            "uploadConcurrency": 64
        }
    }

Contoh

Contoh berikut menunjukkan cara membuat model pengenalan tulisan tangan menggunakan PyTorch. Model ini menggunakan set data MNIST yang dibangun dengan OssMapDataset dan menyimpan serta memuat checkpoint model menggunakan OssCheckpoint.

import io
import torch
import torch.nn as nn
import torch.optim as optim
import torchvision.transforms as transforms
from PIL import Image
from torch.utils.data import DataLoader
from osstorchconnector import OssMapDataset
from osstorchconnector import OssCheckpoint
# Definisikan hiperparameter.
EPOCHS = 1
BATCH_SIZE = 64
LEARNING_RATE = 0.001
CHECKPOINT_READ_URI = "oss://you_bucketname/epoch.ckpt"  # URI untuk membaca checkpoint dari OSS.
CHECKPOINT_WRITE_URI = "oss://you_bucketname/epoch.ckpt" # URI untuk menyimpan checkpoint ke OSS.
ENDPOINT = "oss-cn-hangzhou-internal.aliyuncs.com"       # Titik akhir internal untuk wilayah Anda. Untuk menggunakan titik akhir ini, instans ECS dan bucket OSS Anda harus berada di wilayah yang sama.
CONFIG_PATH = "/etc/oss-connector/config.json"           # Path ke file konfigurasi OSS Connector.
CRED_PATH = "/root/.alibabacloud/credentials"            # Path ke file konfigurasi kredensial akses.
OSS_URI = "oss://you_bucketname/mnist/"                  # Path ke resource Anda di bucket OSS.
# Buat objek OssCheckpoint untuk menyimpan checkpoint ke OSS dan memuatnya selama pelatihan.
checkpoint = OssCheckpoint(endpoint=ENDPOINT, cred_path=CRED_PATH, config_path=CONFIG_PATH)
# Definisikan jaringan saraf konvolusional (CNN) sederhana.
class SimpleCNN(nn.Module):
    def __init__(self):
        super(SimpleCNN, self).__init__()
        self.conv1 = nn.Conv2d(1, 32, kernel_size=3, stride=1, padding=1)
        self.conv2 = nn.Conv2d(32, 64, kernel_size=3, stride=1, padding=1)
        # Gunakan adaptive pooling untuk menyederhanakan penanganan dimensi.
        self.adaptive_pool = nn.AdaptiveAvgPool2d((7, 7))
        self.fc1 = nn.Linear(64 * 7 * 7, 128)
        self.fc2 = nn.Linear(128, 10)
    def forward(self, x):
        x = nn.ReLU()(self.conv1(x)) 
        x = nn.MaxPool2d(2)(x)
        x = nn.ReLU()(self.conv2(x))
        x = nn.MaxPool2d(2)(x)
        x = self.adaptive_pool(x)
        x = x.view(x.size(0), -1)
        x = nn.ReLU()(self.fc1(x))
        x = self.fc2(x)
        return x
# Definisikan pipeline pra-pemrosesan data.
trans = transforms.Compose([
    transforms.Resize(256),
    transforms.CenterCrop(224),
    transforms.ToTensor(),
    transforms.Normalize(mean=[0.5], std=[0.5])
])
def transform(object):
    try:
        img = Image.open(io.BytesIO(object.read())).convert('L')
        val = trans(img)
    except Exception as e:
        raise e
    # Ekstrak label dari path objek. Contoh ini mengasumsikan format path adalah oss://bucket/mnist/label/namafile.
    # Sesuaikan logika ekstraksi label berdasarkan struktur set data Anda.
    try:
        label = int(object.key.split('/')[-2])  # Ekstrak segmen path kedua dari belakang sebagai label.
    except (ValueError, IndexError):
        label = 0  # Gunakan label default. Sesuaikan ini berdasarkan struktur set data Anda.
    return val, torch.tensor(label)
# Muat set data menggunakan OssMapDataset.
train_dataset = OssMapDataset.from_prefix(OSS_URI, endpoint=ENDPOINT, transform=transform, cred_path=CRED_PATH, config_path=CONFIG_PATH)
train_loader = DataLoader(train_dataset, batch_size=BATCH_SIZE, num_workers=32, prefetch_factor=2, shuffle=True)
# Inisialisasi model, fungsi loss, dan pengoptimal.
model = SimpleCNN()
criterion = nn.CrossEntropyLoss()  
optimizer = optim.Adam(model.parameters(), lr=LEARNING_RATE)  
# Mulai loop pelatihan.
for epoch in range(EPOCHS):
    for i, (images, labels) in enumerate(train_loader):
        optimizer.zero_grad()  
        outputs = model(images)  
        loss = criterion(outputs, labels)  
        loss.backward()  
        optimizer.step()  
        if (i + 1) % 100 == 0:
            print(f'Epoch [{epoch + 1}/{EPOCHS}], Step [{i + 1}/{len(train_loader)}], Loss: {loss.item():.4f}')
    # Simpan checkpoint model menggunakan objek OssCheckpoint.
    with checkpoint.writer(CHECKPOINT_WRITE_URI) as writer:
        torch.save(model.state_dict(), writer)
        print("-------------------------")
        print("Checkpoint saved")
        print(model.state_dict())
# Muat state model dari checkpoint menggunakan objek OssCheckpoint.
try:
    with checkpoint.reader(CHECKPOINT_READ_URI) as reader:
        state_dict = torch.load(reader)
    # Buat instans model baru dan muat state-nya.
    model = SimpleCNN()
    model.load_state_dict(state_dict)
    model.eval()
    print("Checkpoint loaded successfully")
except Exception as e:
    print(f"Failed to load checkpoint: {e}")
    # Anda dapat melatih dari awal atau menggunakan checkpoint yang berbeda.