Dalam layanan Platform for AI (PAI), seperti Deep Learning Containers (DLC) atau Data Science Workshop (DSW), Anda dapat menggunakan klien ossfs 2.0 atau komponen JindoFuse yang disediakan oleh Alibaba Cloud EMR untuk memasang sumber data Object Storage Service (OSS) ke jalur tertentu dalam sebuah kontainer. Anda juga dapat menggunakan OSS Connector untuk AI/ML dan software development kit (SDK) OSS untuk membaca data OSS. Pilih metode pembacaan data berdasarkan skenario Anda.
Informasi latar belakang
Selama pengembangan artificial intelligence (AI), data sumber biasanya disimpan di Object Storage Service (OSS) dan kemudian diunduh ke lingkungan pelatihan untuk pengembangan model dan pelatihan. Namun, metode ini sering kali memiliki beberapa kelemahan:
Lama waktu unduh dataset menyebabkan GPU menganggur.
Data harus diunduh ulang untuk setiap tugas pelatihan.
Pengambilan sampel data acak memerlukan seluruh dataset diunduh ke setiap node pelatihan.
Untuk menyelesaikan masalah-masalah ini, pertimbangkan saran-saran berikut untuk membaca data dari OSS:
Metode Pembacaan Data OSS | Deskripsi | Skema yang Direkomendasikan |
Anda dapat menggunakan komponen JindoFuse untuk memasang dataset OSS ke jalur tertentu dalam sebuah kontainer. Ini memungkinkan Anda membaca dan menulis data secara langsung. |
| |
ossfs 2.0 adalah klien yang dirancang untuk akses berkinerja tinggi ke Object Storage Service (OSS) dengan memasangnya sebagai sistem file lokal. Ini memberikan kemampuan baca dan tulis berurutan yang sangat baik dan sepenuhnya memanfaatkan bandwidth tinggi dari OSS. | ossfs 2.0 ideal untuk skenario yang membutuhkan kinerja akses penyimpanan tinggi, seperti pelatihan AI, inferensi, pemrosesan big data, dan mengemudi otonom. Beban kerja komputasi-intensif ini terutama melibatkan pembacaan dan penulisan berurutan (append-only), serta tidak bergantung pada semantik POSIX penuh. | |
PAI mengintegrasikan OSS Connector untuk AI/ML, yang memungkinkan Anda melakukan streaming dan membaca file OSS secara langsung dalam kode PyTorch. Metode ini memberikan pembacaan data yang sederhana dan efisien dan memiliki keuntungan berikut:
| Metode ini memungkinkan Anda membaca dan menulis data OSS tanpa pemasangan. Direkomendasikan jika Anda sedang melatih dengan PyTorch, perlu membaca jutaan file kecil, dan memiliki persyaratan throughput tinggi. OSS Connector untuk AI/ML dapat secara signifikan mempercepat pembacaan dataset dalam skenario ini. | |
Anda dapat menggunakan OSS2 untuk melakukan streaming data dari OSS. OSS2 adalah solusi yang fleksibel dan efisien yang dapat secara signifikan mengurangi latensi permintaan data dan meningkatkan efisiensi pelatihan. | Metode ini cocok jika Anda memerlukan akses sementara ke data OSS tanpa pemasangan, atau untuk mengontrol akses data secara programatik berdasarkan logika bisnis Anda. Dalam kasus ini, Anda dapat menggunakan OSS Python SDK atau OSS Python API. |
JindoFuse
DLC dan DSW mendukung pemasangan dataset OSS atau jalur OSS ke jalur tertentu dalam sebuah kontainer menggunakan komponen JindoFuse. Ini memungkinkan Anda membaca dan menulis data yang disimpan di OSS secara langsung selama pelatihan.
Metode pemasangan
Pasang OSS di DLC
Anda dapat memasang dataset OSS saat membuat pekerjaan DLC. Dua jenis pemasangan didukung. Untuk informasi lebih lanjut, lihat Buat Pekerjaan Pelatihan.

Jenis Pemasangan | Deskripsi |
Dataset | Pilih dataset bertipe Object Storage Service (OSS) dan konfigurasikan Mount Path. Saat menggunakan dataset publik, hanya mode pemasangan baca-saja yang didukung. |
Direct Mount | Langsung pasang jalur penyimpanan Bucket OSS. Saat menggunakan kuota Sumber daya komputasi cerdas Lingjun dengan caching lokal diaktifkan, Anda dapat menghidupkan sakelar Use Cache untuk mengaktifkan fitur caching. |
Pasang OSS di DSW
Anda dapat memasang dataset OSS saat membuat instance DSW. Dua jenis pemasangan didukung. Untuk informasi lebih lanjut, lihat Buat Instance DSW.

Jenis pemasangan | Deskripsi |
Mount Dataset | Pilih dataset tipe Object Storage Service (OSS) dan konfigurasikan Mount Path. Saat menggunakan dataset publik, hanya mode pemasangan read-only yang didukung. |
Mount Storage Path | Pasang langsung jalur penyimpanan bucket OSS. |
Batasan konfigurasi default
Jika parameter Advanced Configuration kosong, konfigurasi default akan digunakan. Konfigurasi default memiliki batasan berikut:
Untuk membaca file OSS dengan cepat, metadata seperti daftar direktori dan file di-cache saat OSS dipasang.
Dalam tugas terdistribusi, jika beberapa node perlu membuat direktori yang sama dan memeriksa apakah itu ada, cache metadata menyebabkan setiap node mencoba pembuatan. Hanya satu node yang dapat berhasil membuat direktori, dan node lainnya melaporkan kesalahan.
Secara default, API Multipart OSS digunakan untuk membuat file. Saat file sedang ditulis, objek tidak terlihat di OSS. Anda dapat melihat objek di halaman OSS hanya setelah semua operasi penulisan selesai.
Operasi penulisan dan pembacaan file bersamaan tidak didukung.
Operasi penulisan acak pada file tidak didukung.
Konfigurasi JindoFuse umum
Anda juga dapat menyesuaikan parameter JindoFuse dalam konfigurasi lanjutan berdasarkan skenario Anda.
Topik ini memberikan saran tentang cara mengonfigurasi JindoFuse dalam skenario tertentu. Ini bukan konfigurasi optimal untuk semua skenario. Untuk konfigurasi yang lebih fleksibel, lihat Panduan Pengguna JindoFuse.
Quick Read/write: Memastikan pembacaan dan penulisan cepat. Namun, ketidaksesuaian data mungkin terjadi selama pembacaan atau penulisan bersamaan. Anda dapat memasang data pelatihan dan model ke jalur pemasangan mode ini. Kami sarankan Anda tidak menggunakan jalur pemasangan mode ini sebagai direktori kerja.
{ "fs.oss.download.thread.concurrency": "Dua kali jumlah core CPU", "fs.oss.upload.thread.concurrency": "Dua kali jumlah core CPU", "fs.jindo.args": "-oattr_timeout=3 -oentry_timeout=0 -onegative_timeout=0 -oauto_cache -ono_symlink" }Incremental Read/Write: Memastikan konsistensi data selama penulisan bertambah. Jika data asli ditimpa, ketidaksesuaian data mungkin terjadi. Kecepatan pembacaan sedikit lambat. Anda dapat menggunakan mode ini untuk menyimpan file bobot model untuk data pelatihan.
{ "fs.oss.upload.thread.concurrency": "Dua kali jumlah core CPU", "fs.jindo.args": "-oattr_timeout=3 -oentry_timeout=0 -onegative_timeout=0 -oauto_cache -ono_symlink" }Consistent Read/write: Memastikan konsistensi data selama pembacaan atau penulisan bersamaan dan cocok untuk skenario yang memerlukan konsistensi data tinggi dan tidak memerlukan pembacaan cepat. Anda dapat menggunakan mode ini untuk menyimpan kode proyek Anda.
{ "fs.jindo.args": "-oattr_timeout=0 -oentry_timeout=0 -onegative_timeout=0 -oauto_cache -ono_symlink" }Read-only: Hanya memungkinkan pembacaan. Anda dapat menggunakan mode ini untuk memasang dataset publik.
{ "fs.oss.download.thread.concurrency": "Dua kali jumlah core CPU", "fs.jindo.args": "-oro -oattr_timeout=7200 -oentry_timeout=7200 -onegative_timeout=7200 -okernel_cache -ono_symlink" }
Selain itu, operasi konfigurasi umum termasuk yang berikut:
Pilih versi JindoFuse yang berbeda:
{ "fs.jindo.fuse.pod.image.tag": "6.7.0" }Nonaktifkan cache metadata: Saat menjalankan tugas terdistribusi dan beberapa node mencoba menulis ke direktori yang sama secara bersamaan, cache dapat menyebabkan operasi penulisan pada beberapa node gagal. Anda dapat menyelesaikan masalah ini dengan memodifikasi parameter baris perintah JindoFuse dan menambahkan
-oattr_timeout=0-oentry_timeout=0-onegative_timeout=0.{ "fs.jindo.args": "-oattr_timeout=0-oentry_timeout=0-onegative_timeout=0" }Atur jumlah utas untuk mengunggah atau mengunduh data: Anda dapat mengonfigurasi parameter berikut untuk menyesuaikan jumlah utas.
{ "fs.oss.upload.thread.concurrency": "32", "fs.oss.download.thread.concurrency": "32", "fs.oss.read.readahead.buffer.count": "64", "fs.oss.read.readahead.buffer.size": "4194304" }Pasang file OSS menggunakan metode AppendObject: Semua file yang Anda buat secara lokal dibuat sebagai objek (file) dengan memanggil API AppendObject OSS. Ukuran akhir objek yang dibuat menggunakan metode AppendObject tidak boleh melebihi 5 GB. Untuk informasi lebih lanjut tentang batasan AppendObject, lihat AppendObject. Berikut adalah contoh konfigurasi:
{ "fs.jindo.args": "-oattr_timeout=0 -oentry_timeout=0 -onegative_timeout=0", "fs.oss.append.enable": "true", "fs.oss.flush.interval.millisecond": "1000", "fs.oss.read.readahead.buffer.size": "4194304", "fs.oss.write.buffer.size": "262144" }Pasang OSS-HDFS: Untuk mengaktifkan OSS-HDFS, lihat Apa itu layanan OSS-HDFS. Untuk skenario pelatihan terdistribusi, kami sarankan Anda menambahkan parameter berikut:
{ "fs.jindo.args": "-oattr_timeout=0 -oentry_timeout=0 -onegative_timeout=0 -ono_symlink -ono_xattr -ono_flock -odirect_io", "fs.oss.flush.interval.millisecond": "10000", "fs.oss.randomwrite.sync.interval.millisecond": "10000" }Konfigurasikan sumber daya memori: Anda dapat menyesuaikan sumber daya memori dengan mengonfigurasi parameter
fs.jindo.fuse.pod.mem.limit. Berikut adalah contoh konfigurasi:{ "fs.jindo.fuse.pod.mem.limit": "10Gi" }
ossfs 2.0
Saat memasang sumber data OSS, Anda dapat mengatur {"mountType":"ossfs"} di Konfigurasi Lanjutan untuk menggunakan metode pemasangan ossfs.
Metode pemasangan
Pasang OSS di DLC
Anda dapat memasang dataset OSS saat membuat pekerjaan DLC. Dua jenis pemasangan didukung. Untuk informasi lebih lanjut tentang metode konfigurasi, lihat Buat Pekerjaan Pelatihan.

Jenis pemasangan | Deskripsi |
Dataset | Pilih dataset tipe Object Storage Service (OSS) dan konfigurasikan Mount Path. Saat menggunakan dataset publik, hanya mode pemasangan read-only yang didukung. |
Direct Mount | Pasang langsung jalur penyimpanan bucket OSS. Saat menggunakan kuota Sumber daya komputasi cerdas Lingjun dengan caching lokal diaktifkan, Anda dapat menghidupkan saklar Use Cache untuk mengaktifkan fitur caching. |
Pasang OSS di DSW
Anda dapat memasang dataset OSS saat membuat instance DSW. Dua jenis pemasangan didukung. Untuk informasi lebih lanjut tentang metode konfigurasi, lihat Buat Instance DSW.

Jenis pemasangan | Deskripsi |
Mount Dataset | Pilih dataset tipe Object Storage Service (OSS) dan konfigurasikan Mount Path. Saat menggunakan dataset publik, hanya mode pemasangan read-only yang didukung. |
Mount Storage Path | Pasang langsung jalur penyimpanan bucket OSS. |
Konfigurasi ossfs umum
Di Konfigurasi Lanjutan, Anda dapat mengatur parameter lanjutan menggunakan fs.ossfs.args. Pisahkan beberapa parameter dengan koma ,. Untuk informasi lebih lanjut tentang parameter lanjutan, lihat ossfs 2.0. Contoh berikut menggambarkan skenario umum:
Sumber data tetap tidak berubah selama tugas: Jika file yang akan dibaca tidak akan dimodifikasi selama proses, Anda dapat mengonfigurasi waktu cache yang lebih lama untuk mengurangi jumlah permintaan metadata. Skenario tipikal adalah membaca sekelompok file yang ada dan kemudian menghasilkan sekelompok file baru setelah pemrosesan.
{ "mountType":"ossfs", "fs.ossfs.args": "-oattr_timeout=7200" }Baca/tulis cepat: Anda dapat menggunakan waktu cache metadata yang lebih pendek untuk menyeimbangkan efisiensi caching dan ketepatan waktu data.
{ "mountType":"ossfs", "fs.ossfs.args": "-oattr_timeout=3, -onegative_timeout=0" }Baca/tulis konsisten untuk tugas terdistribusi: Secara default, ossfs memperbarui data file berdasarkan caching metadata. Anda dapat menggunakan konfigurasi berikut untuk mencapai tampilan sinkron di beberapa node.
{ "mountType":"ossfs", "fs.ossfs.args": "-onegative_timeout=0, -oclose_to_open" }OOM karena terlalu banyak file terbuka dalam skenario DLC/DSW: Dalam skenario DLC atau DSW, konkurensi tugas tinggi dapat menyebabkan banyak file dibuka secara bersamaan, yang dapat menyebabkan masalah out-of-memory (OOM). Anda dapat menggunakan konfigurasi berikut untuk mengurangi tekanan memori.
{ "mountType":"ossfs", "fs.ossfs.args": "-oreaddirplus=false, -oinode_cache_eviction_threshold=300000" }
OSS Connector untuk AI/ML
OSS Connector untuk AI/ML adalah pustaka klien yang dikembangkan oleh tim OSS Alibaba Cloud untuk skenario AI dan pembelajaran mesin. Ini memberikan pengalaman pemuatan data yang nyaman untuk pelatihan PyTorch berskala besar, secara signifikan mengurangi waktu dan kompleksitas transmisi data, serta mempercepat pelatihan model. Ini meningkatkan efisiensi dengan mencegah operasi yang tidak perlu dan hambatan pemuatan data. Untuk mengoptimalkan pengalaman pengguna dan mempercepat akses data, PAI mengintegrasikan OSS Connector untuk AI/ML. Integrasi ini memungkinkan Anda menggunakan kode PyTorch untuk membaca objek OSS secara efisien dalam mode streaming.
Batasan
Gambar resmi: Anda hanya dapat menggunakan modul OSS Connector untuk AI/ML dengan gambar PyTorch 2.0 atau lebih baru dalam pekerjaan DLC atau instance DSW.
Gambar kustom: Hanya versi PyTorch 2.0 dan yang lebih baru yang didukung. Jika Anda menggunakan gambar kustom yang memenuhi persyaratan ini, Anda dapat menjalankan perintah berikut untuk menginstal modul OSS Connector untuk AI/ML.
pip install -i http://yum.tbsite.net/aliyun-pypi/simple/ --extra-index-url http://yum.tbsite.net/pypi/simple/ --trusted-host=yum.tbsite.net osstorchconnectorVersi Python: Hanya Python 3.8 hingga 3.12 yang didukung.
Persiapan
Konfigurasikan file kredensial.
Anda dapat mengonfigurasi kredensial dengan salah satu cara berikut:
Anda dapat mengonfigurasi file kredensial untuk akses bebas kata sandi ke OSS untuk pekerjaan Deep Learning Containers (DLC). Untuk informasi lebih lanjut, lihat Konfigurasikan Peran RAM DLC. Setelah Anda mengonfigurasi file kredensial, pekerjaan DLC dapat memperoleh kredensial akses sementara dari Security Token Service (STS). Ini memungkinkan akses aman ke OSS atau sumber daya cloud lainnya tanpa secara eksplisit mengonfigurasi informasi otentikasi, yang mengurangi risiko kebocoran kunci.
Konfigurasikan file kredensial di proyek kode Anda untuk mengelola informasi otentikasi. Berikut adalah contoh konfigurasi:
CatatanMengonfigurasi informasi AccessKey dalam teks biasa menimbulkan risiko keamanan. Kami sarankan Anda menggunakan peran RAM untuk mengonfigurasi kredensial secara otomatis dalam instance DLC. Untuk informasi lebih lanjut, lihat Konfigurasikan Peran RAM DLC.
Saat menggunakan antarmuka OSS Connector untuk AI/ML, Anda dapat menentukan jalur file kredensial untuk secara otomatis mengambil informasi otentikasi untuk permintaan data OSS.
{ "AccessKeyId": "<Access-key-id>", "AccessKeySecret": "<Access-key-secret>", "SecurityToken": "<Security-Token>", "Expiration": "2024-08-20T00:00:00Z" }Tabel berikut menjelaskan item konfigurasi.
Item konfigurasi
Diperlukan
Deskripsi
Nilai contoh
AccessKeyId
Ya
ID AccessKey dan rahasia AccessKey dari akun Alibaba Cloud atau Pengguna RAM.
CatatanSaat menggunakan kredensial akses sementara yang diperoleh dari STS untuk mengakses OSS, atur ini ke ID AccessKey dan rahasia AccessKey dari kredensial sementara.
NTS****
AccessKeySecret
Ya
7NR2****
SecurityToken
Tidak
Token akses sementara. Saat menggunakan kredensial akses sementara yang diperoleh dari STS untuk mengakses OSS, Anda harus menyetel parameter ini.
STS.6MC2****
Expiration
Tidak
Waktu kedaluwarsa informasi otentikasi. Jika Expiration kosong, informasi otentikasi tidak pernah kedaluwarsa. Setelah informasi otentikasi kedaluwarsa, OSS Connector membaca ulang informasi otentikasi.
2024-08-20T00:00:00Z
Konfigurasikan file config.json. Berikut adalah contoh konfigurasi:
Anda dapat mengonfigurasi file config.json di proyek kode Anda untuk mengelola parameter inti, seperti jumlah proses konkuren dan pengaturan pra-pengambilan. Anda juga dapat menentukan lokasi penyimpanan file log. Saat menggunakan antarmuka OSS Connector untuk AI/ML, Anda dapat menentukan jalur file config.json. Sistem kemudian secara otomatis mengambil nilai pra-pengambilan dan pemrosesan paralel untuk pembacaan dan menampilkan log terkait permintaan data OSS ke file log yang ditentukan.
{ "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 } }Tabel berikut menjelaskan item konfigurasi.
Item konfigurasi
Diperlukan
Deskripsi
Nilai contoh
logLevel
Ya
Tingkat pencatatan log. Defaultnya adalah INFO. Nilai valid:
0: Debug
1: INFO
2: WARN
3: ERROR
1
logPath
Ya
Jalur log konektor. Jalur default adalah
/var/log/oss-connector/connector.log./var/log/oss-connector/connector.log
auditPath
Ya
Log audit untuk I/O konektor, yang mencatat permintaan baca dan tulis dengan latensi lebih dari 100 ms. Jalur default adalah
/var/log/oss-connector/audit.log./var/log/oss-connector/audit.log
DatasetConfig
prefetchConcurrency
Ya
Jumlah tugas konkuren saat menggunakan dataset untuk pra-mengambil data dari OSS. Nilai default adalah 24.
24
prefetchWorker
Ya
Jumlah vCPU yang dapat digunakan untuk pra-mengambil data dari OSS menggunakan dataset. Nilai default adalah 4.
2
checkpointConfig
prefetchConcurrency
Ya
Jumlah tugas konkuren saat menggunakan pembacaan checkpoint untuk pra-mengambil data dari OSS. Nilai default adalah 24.
24
prefetchWorker
Ya
Jumlah vCPU yang dapat digunakan untuk pra-mengambil data dari OSS menggunakan pembacaan checkpoint. Nilai default adalah 4.
4
uploadConcurrency
Ya
Jumlah tugas konkuren saat menggunakan penulisan checkpoint untuk mengunggah data. Nilai default adalah 64.
64
Penggunaan
OSS Connector untuk AI/ML menyediakan dua antarmuka akses dataset: OssMapDataset dan OssIterableDataset. Ini adalah ekstensi dari antarmuka PyTorch Dataset dan IterableDataset, masing-masing. OssIterableDataset dioptimalkan untuk pra-pengambilan, yang menghasilkan efisiensi pelatihan yang lebih tinggi. Sebaliknya, urutan pembacaan data OssMapDataset ditentukan oleh DataLoader dan mendukung operasi shuffle. Oleh karena itu, Anda dapat memilih antarmuka akses dataset berdasarkan saran berikut:
Jika Anda memiliki memori terbatas atau sejumlah besar data, hanya memerlukan pembacaan berurutan, dan tidak memerlukan pemrosesan paralel yang signifikan, gunakan OssIterableDataset untuk membangun dataset Anda.
Sebaliknya, jika Anda memiliki memori yang cukup, sejumlah kecil data, dan memerlukan operasi acak dan pemrosesan paralel, gunakan OssMapDataset untuk membangun dataset Anda.
OSS Connector untuk AI/ML juga menyediakan antarmuka OssCheckpoint untuk memuat dan menyimpan model. Saat ini, fitur OssCheckpoint hanya dapat digunakan dalam lingkungan sumber daya komputasi umum.
Berikut adalah cara menggunakan ketiga antarmuka ini:
OssMapDataset
Mendukung tiga mode akses dataset berikut:
Akses folder berdasarkan prefix jalur OSS
Metode ini lebih sederhana, lebih intuitif, dan lebih mudah dipelihara serta diperluas karena Anda hanya perlu menentukan nama folder tanpa mengonfigurasi file indeks. Jika struktur folder OSS Anda sebagai berikut, Anda dapat menggunakan metode ini untuk mengakses dataset:
dataset_folder/ ├── class1/ │ ├── image1.JPEG │ └── ... ├── class2/ │ ├── image2.JPEG │ └── ...Saat menggunakan metode ini, Anda perlu menentukan prefix jalur OSS dan menyesuaikan metode parsing untuk aliran file. Berikut adalah metode untuk parsing dan mentransformasi file gambar:
def read_and_transform(data): normalize = transforms.Normalize(mean=[0.485, 0.456, 0.406], std=[0.229, 0.224, 0.225]) transform = transforms.Compose([ transforms.RandomResizedCrop(224), transforms.RandomHorizontalFlip(), transforms.ToTensor(), normalize, ]) try: img = accimage.Image((data.read())) val = transform(img) label = data.label # nama file except Exception as e: print("read failed", e) return None, 0 return val, label dataset = OssMapDataset.from_prefix("{oss_data_folder_uri}", endpoint="{oss_endpoint}", transform=read_and_transform, cred_path=cred_path, config_path=config_path)Akses file berdasarkan manifest_file
Metode ini mendukung akses data dari beberapa bucket OSS dan memberikan pendekatan manajemen data yang lebih fleksibel. Jika struktur folder OSS Anda sebagai berikut dan Anda memiliki manifest_file yang mengelola hubungan antara nama file dan label, Anda dapat menggunakan metode ini untuk mengakses dataset.
dataset_folder/ ├── class1/ │ ├── image1.JPEG │ └── ... ├── class2/ │ ├── image2.JPEG │ └── ... └── .manifestFormat manifest_file adalah sebagai berikut:
{'data': {'source': 'oss://examplebucket.oss-cn-wulanchabu.aliyuncs.com/dataset_folder/class1/image1.JPEG'}} {'data': {'source': ''}}Saat menggunakan metode ini, Anda perlu menyesuaikan metode parsing untuk manifest_file. Berikut adalah contoh penggunaan:
def transform_oss_path(input_path): pattern = r'oss://(.*?)\.(.*?)/(.*)' match = re.match(pattern, input_path) if match: return f'oss://{match.group(1)}/{match.group(3)}' else: return input_path def manifest_parser(reader: io.IOBase) -> Iterable[Tuple[str, str, int]]: lines = reader.read().decode("utf-8").strip().split("\n") data_list = [] for i, line in enumerate(lines): data = json.loads(line) yield transform_oss_path(data["data"]["source"]), "" dataset = OssMapDataset.from_manifest_file("{manifest_file_path}", manifest_parser, "", endpoint=endpoint, transform=read_and_trans, cred_path=cred_path, config_path=config_path)Akses file berdasarkan daftar URI OSS
Anda hanya perlu menentukan URI OSS untuk mengakses file OSS, tanpa mengonfigurasi file indeks. Berikut adalah contoh penggunaan:
uris =["oss://examplebucket.oss-cn-wulanchabu.aliyuncs.com/dataset_folder/class1/image1.JPEG", "oss://examplebucket.oss-cn-wulanchabu.aliyuncs.com/dataset_folder/class2/image2.JPEG"] dataset = OssMapDataset.from_objects(uris, endpoint=endpoint, transform=read_and_trans, cred_path=cred_path, config_path=config_path)
OssIterableDataset
OssIterableDataset mendukung tiga metode akses dataset yang sama seperti OssMapDataset. Contoh berikut menunjukkan cara menggunakan ketiga metode tersebut:
Akses folder berdasarkan prefix jalur OSS
dataset = OssIterableDataset.from_prefix("{oss_data_folder_uri}", endpoint="{oss_endpoint}", transform=read_and_transform, cred_path=cred_path, config_path=config_path)Akses file berdasarkan manifest_file
dataset = OssIterableDataset.from_manifest_file("{manifest_file_path}", manifest_parser, "", endpoint=endpoint, transform=read_and_trans, cred_path=cred_path, config_path=config_path)Akses file berdasarkan daftar URI OSS
dataset = OssIterableDataset.from_objects(uris, endpoint=endpoint, transform=read_and_trans, cred_path=cred_path, config_path=config_path)
OssCheckpoint
Saat ini, fitur OssCheckpoint hanya dapat digunakan dalam lingkungan sumber daya komputasi umum. OSS Connector untuk AI/ML mendukung akses file model OSS dan menyimpan file model ke OSS melalui OssCheckpoint. Berikut adalah contoh penggunaan antarmuka:
checkpoint = OssCheckpoint(endpoint="{oss_endpoint}", cred_path=cred_path, config_path=config_path)
checkpoint_read_uri = "{checkpoint_path}"
checkpoint_write_uri = "{checkpoint_path}"
with checkpoint.reader(checkpoint_read_uri) as reader:
state_dict = torch.load(reader)
model.load_state_dict(state_dict)
with checkpoint.writer(checkpoint_write_uri) as writer:
torch.save(model.state_dict(), writer)Contoh kode
Berikut adalah contoh kode untuk OSS Connector untuk AI/ML. Anda dapat menggunakan contoh kode ini untuk mengakses data OSS:
from osstorchconnector import OssMapDataset, OssCheckpoint
import torchvision.transforms as transforms
import accimage
import torchvision.models as models
import torch
cred_path = "/mnt/.alibabacloud/credentials" # Jalur kredensial default setelah mengonfigurasi informasi peran untuk pekerjaan DLC dan instance DSW.
config_path = "config.json"
checkpoint = OssCheckpoint(endpoint="{oss_endpoint}", cred_path=cred_path, config_path=config_path)
model = models.__dict__["resnet18"]()
epochs = 100 # Tentukan epoch
checkpoint_read_uri = "{checkpoint_path}"
checkpoint_write_uri = "{checkpoint_path}"
with checkpoint.reader(checkpoint_read_uri) as reader:
state_dict = torch.load(reader)
model.load_state_dict(state_dict)
def read_and_transform(data):
normalize = transforms.Normalize(mean=[0.485, 0.456, 0.406],
std=[0.229, 0.224, 0.225])
transform = transforms.Compose([
transforms.RandomResizedCrop(224),
transforms.RandomHorizontalFlip(),
transforms.ToTensor(),
normalize,
])
try:
img = accimage.Image((data.read()))
value = transform(img)
except Exception as e:
print("read failed", e)
return None, 0
return value, 0
dataset = OssMapDataset.from_prefix("{oss_data_folder_uri}", endpoint="{oss_endpoint}", transform=read_and_transform, cred_path=cred_path, config_path=config_path)
data_loader = torch.utils.data.DataLoader(
dataset, batch_size="{batch_size}",num_workers="{num_workers}", pin_memory=True)
for epoch in range(args.epochs):
for step, (images, target) in enumerate(data_loader):
# Pemrosesan batch
# Pelatihan model
# Simpan model
with checkpoint.writer(checkpoint_write_uri) as writer:
torch.save(model.state_dict(), writer)Langkah-langkah utama dalam kode di atas adalah sebagai berikut:
Gunakan OssMapDataset untuk membangun dataset dari URI OSS yang ditentukan. Dataset ini mengikuti paradigma penggunaan standar PyTorch Dataloader.
Gunakan dataset ini untuk membangun Torch Dataloader standar. Kemudian lakukan proses pelatihan standar dengan mengulangi dataloader untuk memproses setiap batch, melatih model, dan menyimpan hasilnya.
Proses ini tidak memerlukan Anda untuk memasang dataset ke lingkungan kontainer atau menyimpan data secara lokal terlebih dahulu, yang memungkinkan pemuatan data sesuai permintaan.
OSS SDK
OSS Python SDK
Anda dapat menggunakan OSS Python SDK untuk membaca dan menulis data di OSS. Prosedurnya adalah sebagai berikut:
Instal OSS SDK untuk Python. Untuk informasi lebih lanjut, lihat Instalasi (Python SDK V1).
Konfigurasikan kredensial akses untuk OSS SDK untuk Python. Untuk informasi lebih lanjut, lihat Konfigurasikan Kredensial Akses Menggunakan OSS SDK untuk Python 1.0.
Baca dan tulis data OSS.
# -*- coding: utf-8 -*- import oss2 from oss2.credentials import EnvironmentVariableCredentialsProvider # Konfigurasikan kredensial akses menggunakan pasangan AccessKey Pengguna RAM yang diperoleh dari variabel lingkungan. auth = oss2.ProviderAuth(EnvironmentVariableCredentialsProvider()) bucket = oss2.Bucket(auth, '<Endpoint>', '<your_bucket_name>') # Baca file lengkap. result = bucket.get_object('<your_file_path/your_file>') print(result.read()) # Baca data berdasarkan rentang. result = bucket.get_object('<your_file_path/your_file>', byte_range=(0, 99)) # Tulis data ke OSS. bucket.put_object('<your_file_path/your_file>', '<your_object_content>') # Tambahkan ke file Appendable. result = bucket.append_object('<your_file_path/your_file>', 0, '<your_object_content>') result = bucket.append_object('<your_file_path/your_file>', result.next_position, '<your_object_content>')Ubah item konfigurasi berikut sesuai kebutuhan:
Item konfigurasi
Deskripsi
<Endpoint>
Endpoint wilayah tempat bucket berada. Misalnya, jika bucket berada di wilayah China (Hangzhou), atur parameter ini ke https://oss-cn-hangzhou.aliyuncs.com. Untuk informasi lebih lanjut tentang cara mendapatkan endpoint, lihat Wilayah dan endpoint.
<your_bucket_name>
Masukkan nama bucket.
<your_file_path/your_file>
Jalur file yang akan dibaca atau ditulis. Masukkan jalur lengkap objek, tidak termasuk nama bucket, seperti
testfolder/exampleobject.txt.<your_object_content>
Isi yang akan ditambahkan. Ubah ini sesuai kebutuhan.
OSS Python API
Anda dapat menggunakan OSS Python API untuk dengan mudah menyimpan data pelatihan dan model di OSS. Sebelum Anda mulai, pastikan Anda telah menginstal OSS Python SDK dan mengonfigurasi kredensial akses dengan benar. Untuk informasi lebih lanjut, lihat Instalasi (Python SDK V1) dan Konfigurasikan Kredensial Akses (Python SDK V1).
Memuat data pelatihan
Anda dapat menyimpan data di bucket OSS dan meletakkan jalur data dan label yang sesuai dalam file indeks di bucket yang sama. Dengan menyesuaikan DataSet, Anda dapat menggunakan API
DataLoaderdi PyTorch untuk membaca data secara paralel menggunakan beberapa proses. Kode berikut memberikan contoh:import io import oss2 from oss2.credentials import EnvironmentVariableCredentialsProvider import PIL import torch class OSSDataset(torch.utils.data.dataset.Dataset): def __init__(self, endpoint, bucket, auth, index_file): self._bucket = oss2.Bucket(auth, endpoint, bucket) self._indices = self._bucket.get_object(index_file).read().split(',') def __len__(self): return len(self._indices) def __getitem__(self, index): img_path, label = self._indices(index).strip().split(':') img_str = self._bucket.get_object(img_path) img_buf = io.BytesIO() img_buf.write(img_str.read()) img_buf.seek(0) img = Image.open(img_buf).convert('RGB') img_buf.close() return img, label # Dapatkan kredensial akses dari variabel lingkungan. Sebelum menjalankan sampel kode ini, pastikan variabel lingkungan OSS_ACCESS_KEY_ID dan OSS_ACCESS_KEY_SECRET telah diatur. auth = oss2.ProviderAuth(EnvironmentVariableCredentialsProvider()) dataset = OSSDataset(endpoint, bucket, auth, index_file) data_loader = torch.utils.data.DataLoader( dataset, batch_size=batch_size, num_workers=num_loaders, pin_memory=True)Item konfigurasi utama dijelaskan di bawah ini:
Konfigurasi utama
Deskripsi
endpoint
Endpoint wilayah tempat bucket berada. Misalnya, jika bucket berada di wilayah China (Hangzhou), atur parameter ini ke https://oss-cn-hangzhou.aliyuncs.com. Untuk informasi lebih lanjut tentang cara mendapatkan endpoint, lihat Wilayah dan endpoint.
bucket
Masukkan nama bucket.
index_file
Jalur file indeks.
CatatanDalam contoh, setiap sampel dalam file indeks dipisahkan oleh koma (,), dan jalur file dan label dipisahkan oleh titik dua (:).
Simpan atau muat model
Anda dapat menggunakan OSS Python API untuk menyimpan atau memuat model PyTorch. Untuk informasi lebih lanjut tentang cara menyimpan atau memuat model PyTorch, lihat PyTorch. Berikut adalah contoh:
Simpan model
from io import BytesIO import torch import oss2 from oss2.credentials import EnvironmentVariableCredentialsProvider auth = oss2.ProviderAuth(EnvironmentVariableCredentialsProvider()) # nama_bucket bucket_name = "<your_bucket_name>" bucket = oss2.Bucket(auth, endpoint, bucket_name) buffer = BytesIO() torch.save(model.state_dict(), buffer) bucket.put_object("<your_model_path>", buffer.getvalue())Dimana:
endpoint adalah endpoint wilayah tempat bucket berada. Misalnya, untuk China (Hangzhou), masukkan https://oss-cn-hangzhou.aliyuncs.com.
<your_bucket_name> adalah nama bucket OSS. Nama tersebut tidak boleh dimulai dengan oss://.
<your_model_path> adalah jalur model. Ubah jalur ini sesuai kebutuhan.
Muat model
from io import BytesIO import torch import oss2 from oss2.credentials import EnvironmentVariableCredentialsProvider auth = oss2.ProviderAuth(EnvironmentVariableCredentialsProvider()) bucket_name = "<your_bucket_name>" bucket = oss2.Bucket(auth, endpoint, bucket_name) buffer = BytesIO(bucket.get_object("<your_model_path>").read()) model.load_state_dict(torch.load(buffer))Dimana:
endpoint adalah endpoint wilayah tempat bucket berada.Misalnya, untuk China (Hangzhou), masukkan https://oss-cn-hangzhou.aliyuncs.com.
<your_bucket_name> adalah nama bucket OSS. Nama tersebut tidak boleh dimulai dengan oss://.
<your_model_path> adalah jalur model. Ubah jalur ini sesuai kebutuhan.