Di 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 path tertentu dalam kontainer. Anda juga dapat menggunakan OSS Connector for AI/ML dan kit pengembangan perangkat lunak (SDK) OSS untuk membaca data OSS. Pilih metode pembacaan data OSS sesuai skenario Anda.
Informasi latar belakang
Selama pengembangan artificial intelligence (AI), data sumber biasanya disimpan di Object Storage Service (OSS) lalu diunduh ke lingkungan pelatihan untuk pengembangan dan pelatihan model. Namun, metode ini memiliki beberapa kekurangan:
Waktu unduh dataset yang lama menyebabkan GPU idle.
Data harus diunduh ulang untuk setiap tugas pelatihan.
Pengambilan sampel data secara acak memerlukan seluruh dataset diunduh ke setiap node pelatihan.
Untuk mengatasi masalah tersebut, pertimbangkan saran berikut untuk membaca data dari OSS:
Metode pembacaan data OSS | Deskripsi | Skenario yang direkomendasikan |
Anda dapat menggunakan komponen JindoFuse untuk memasang dataset OSS ke path tertentu dalam kontainer sehingga memungkinkan pembacaan dan penulisan 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. Klien ini menyediakan kemampuan baca-tulis sekuensial yang sangat baik dan memanfaatkan bandwidth tinggi OSS secara optimal. | ossfs 2.0 cocok untuk skenario yang memerlukan akses penyimpanan berkinerja tinggi, seperti pelatihan AI, inferensi, pemrosesan big data, kendaraan otonom, dan beban kerja komputasi-intensif lainnya. Beban kerja ini terutama melibatkan operasi baca sekuensial dan acak serta operasi tulis sekuensial (append-only), dan tidak memerlukan semantik POSIX penuh. | |
PAI mengintegrasikan OSS Connector for AI/ML, yang memungkinkan Anda melakukan streaming dan membaca file OSS secara langsung dalam kode PyTorch. Metode ini menyediakan pembacaan data yang sederhana dan efisien serta memiliki keunggulan berikut:
| Metode ini memungkinkan Anda membaca dan menulis data OSS tanpa perlu memasangnya. Metode ini direkomendasikan jika Anda melakukan pelatihan dengan PyTorch, perlu membaca jutaan file kecil, dan memiliki persyaratan throughput tinggi. OSS Connector for AI/ML dapat mempercepat pembacaan dataset secara signifikan dalam skenario ini. | |
Anda dapat menggunakan OSS2 untuk melakukan streaming data dari OSS. OSS2 adalah solusi yang fleksibel dan efisien yang dapat mengurangi latensi permintaan data secara signifikan dan meningkatkan efisiensi pelatihan. | Metode ini cocok jika Anda memerlukan akses sementara ke data OSS tanpa memasangnya, atau perlu mengontrol akses data secara terprogram 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 path OSS ke path tertentu dalam kontainer menggunakan komponen JindoFuse. Hal 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 read-only yang didukung. |
Direct Mount | Langsung pasang path penyimpanan bucket OSS. Saat menggunakan kuota sumber daya Lingjun dengan cache lokal diaktifkan, Anda dapat mengaktifkan sakelar Use Cache untuk mengaktifkan fitur caching. |
Pasang OSS di DSW
Anda dapat memasang dataset OSS saat membuat instans DSW. Dua jenis pemasangan didukung. Untuk informasi lebih lanjut, lihat Buat instans DSW.

Jenis pemasangan | Deskripsi |
Mount Dataset | Pilih dataset Object Storage Service (OSS) dan konfigurasikan Mount Path. Dataset publik hanya dapat dipasang dalam mode read-only. |
Mount Storage Path | Langsung pasang path 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 keberadaannya, cache metadata menyebabkan setiap node mencoba membuat direktori tersebut. Hanya satu node yang berhasil membuat direktori, sedangkan node lainnya melaporkan error.
Secara default, API Multipart OSS digunakan untuk membuat file. Selama file ditulis, objek tersebut tidak terlihat di OSS. Anda hanya dapat melihat objek tersebut di halaman OSS setelah semua operasi penulisan selesai.
Operasi penulisan dan pembacaan file secara konkuren tidak didukung.
Operasi penulisan acak pada file tidak didukung.
Konfigurasi umum JindoFuse
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, ketidakkonsistenan data dapat terjadi selama pembacaan atau penulisan konkuren. Anda dapat memasang data pelatihan dan model ke path pemasangan mode ini. Kami menyarankan agar Anda tidak menggunakan path 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 inkremental. Jika data asli ditimpa, ketidakkonsistenan data dapat terjadi. Kecepatan pembacaan sedikit lebih 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 konkuren 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 mengizinkan 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 meliputi hal 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 mengatasi 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 thread untuk mengunggah atau mengunduh data: Anda dapat mengonfigurasi parameter berikut untuk menyesuaikan jumlah thread.
{ "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 OSS AppendObject. 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 menyarankan 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" }Konfigurasi 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 Advanced Configuration untuk menggunakan metode pemasangan ossfs.
Metode pemasangan
Memasang 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 bertipe Object Storage Service (OSS) dan konfigurasikan mount path. Saat menggunakan dataset publik, hanya mode pemasangan read-only yang didukung. |
Direct Mount | Langsung pasang path penyimpanan bucket OSS. Jika Anda menggunakan kuota sumber daya Lingjun dengan cache lokal diaktifkan, aktifkan sakelar Use Cache untuk mengaktifkan caching. |
Pasang OSS di DSW
Anda dapat memasang dataset OSS saat membuat instans DSW. Dua jenis pemasangan didukung. Untuk informasi lebih lanjut tentang metode konfigurasi, lihat Buat instans DSW.

Jenis pemasangan | Deskripsi |
Dataset Mount | Pilih dataset bertipe Object Storage Service (OSS) dan konfigurasikan mount path. Saat menggunakan dataset publik, hanya mode pemasangan read-only yang didukung. |
Storage Path Mount | Langsung pasang path penyimpanan bucket OSS. |
Konfigurasi umum ossfs
Di Advanced Configuration, 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 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 khas adalah membaca batch file yang ada lalu menghasilkan batch file baru setelah pemrosesan.
{ "mountType":"ossfs", "fs.ossfs.args": "-oattr_timeout=7200" }Pembacaan/penulisan cepat: Anda dapat menggunakan waktu cache metadata yang lebih singkat untuk menyeimbangkan efisiensi caching dan ketepatan waktu data.
{ "mountType":"ossfs", "fs.ossfs.args": "-oattr_timeout=3, -onegative_timeout=0" }Konsistensi baca/tulis untuk tugas terdistribusi: Secara default, ossfs memperbarui data file berdasarkan caching metadata. Anda dapat menggunakan konfigurasi berikut untuk mencapai tampilan yang tersinkronisasi 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 yang tinggi dapat menyebabkan banyak file dibuka secara bersamaan, yang dapat menyebabkan masalah kehabisan memori (OOM). Anda dapat menggunakan konfigurasi berikut untuk mengurangi tekanan memori.
{ "mountType":"ossfs", "fs.ossfs.args": "-oreaddirplus=false, -oinode_cache_eviction_threshold=300000" }Kegagalan saat menulis file besar: Parameter
-oupload_buffer_sizemengatur ukuran buffer dalam byte untuk unggah multi-bagian. Parameter ini menentukan ukuran file tertulis maksimum, dihitung dengan rumus berikut:upload_buffer_size * 10000.Secara default, ossfs 2.0 mengatur ukuran bagian untuk unggah multi-bagian menjadi 8 MiB. Hal ini mendukung penulisan file hingga 78,125 GiB. Menulis file yang melebihi batas ini akan gagal. Anda dapat meningkatkan ukuran bagian dengan mengonfigurasi opsi
-oupload_buffer_sizeuntuk mendukung file yang lebih besar. Misalnya, jika Anda mengatur ukuran bagian menjadi 32 MiB (33.554.432 byte), Anda dapat menulis file hingga 312,5 GiB. Perhatikan bahwa peningkatan nilai-upload_buffer_sizemengonsumsi lebih banyak memori. Anda dapat mengontrol penggunaan memori dengan mengonfigurasi opsi-total_mem_limit. Untuk informasi lebih lanjut, lihat opsi pemasangan.{ "mountType":"ossfs", "fs.ossfs.args": "-oupload_buffer_size=33554432" }
OSS Connector for AI/ML
OSS Connector for AI/ML adalah pustaka klien yang dikembangkan oleh tim OSS Alibaba Cloud untuk skenario AI dan pembelajaran mesin. Pustaka ini menyediakan pengalaman pemuatan data yang nyaman untuk pelatihan PyTorch skala besar, secara signifikan mengurangi waktu transmisi data dan kompleksitas, serta mempercepat pelatihan model. Hal ini meningkatkan efisiensi dengan mencegah operasi yang tidak perlu dan bottleneck pemuatan data. Untuk mengoptimalkan pengalaman pengguna dan mempercepat akses data, PAI mengintegrasikan OSS Connector for AI/ML. Integrasi ini memungkinkan Anda menggunakan kode PyTorch untuk membaca objek OSS secara efisien dalam mode streaming.
Batasan
Citra resmi: Anda hanya dapat menggunakan modul OSS Connector for AI/ML dengan citra PyTorch 2.0 atau yang lebih baru dalam pekerjaan DLC atau instans DSW.
Citra kustom: Hanya versi PyTorch 2.0 dan yang lebih baru yang didukung. Jika Anda menggunakan citra kustom yang memenuhi persyaratan ini, Anda dapat menjalankan perintah berikut untuk menginstal modul OSS Connector for 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 tanpa 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). Hal 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 dalam proyek kode Anda untuk mengelola informasi otentikasi. Berikut adalah contoh konfigurasi:
CatatanMengonfigurasi informasi AccessKey dalam teks biasa menimbulkan risiko keamanan. Kami menyarankan agar Anda menggunakan peran RAM untuk secara otomatis mengonfigurasi kredensial dalam instans DLC. Untuk informasi lebih lanjut, lihat Konfigurasikan peran RAM DLC.
Saat menggunakan antarmuka OSS Connector for AI/ML, Anda dapat menentukan path 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
Wajib
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 tersebut.
NTS****
AccessKeySecret
Ya
7NR2****
SecurityToken
Tidak
Token akses sementara. Saat menggunakan kredensial akses sementara yang diperoleh dari STS untuk mengakses OSS, Anda harus mengatur parameter ini.
STS.6MC2****
Expiration
Tidak
Waktu kedaluwarsa informasi otentikasi. Jika Expiration kosong, informasi otentikasi tidak pernah kedaluwarsa. Setelah informasi otentikasi kedaluwarsa, OSS Connector akan membaca ulang informasi otentikasi.
2024-08-20T00:00:00Z
Konfigurasikan file config.json. Berikut adalah contoh konfigurasi:
Anda dapat mengonfigurasi file config.json dalam proyek kode Anda untuk mengelola parameter inti, seperti jumlah proses konkuren dan pengaturan pra-ambil. Anda juga dapat menentukan lokasi penyimpanan file log. Saat menggunakan antarmuka OSS Connector for AI/ML, Anda dapat menentukan path file config.json. Sistem kemudian secara otomatis mengambil nilai pemrosesan konkuren dan pra-ambil untuk membaca serta mengeluarkan log terkait untuk 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
Wajib
Deskripsi
Nilai contoh
logLevel
Ya
Tingkat pencatatan log. Default adalah INFO. Nilai yang valid:
0: Debug
1: INFO
2: WARN
3: ERROR
1
logPath
Ya
Path log konektor. Path 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. Path 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-ambil data dari OSS. Nilai default adalah 24.
24
prefetchWorker
Ya
Jumlah vCPU yang dapat digunakan untuk pra-ambil data dari OSS menggunakan dataset. Nilai default adalah 4.
2
checkpointConfig
prefetchConcurrency
Ya
Jumlah tugas konkuren saat menggunakan pembacaan checkpoint untuk pra-ambil data dari OSS. Nilai default adalah 24.
24
prefetchWorker
Ya
Jumlah vCPU yang dapat digunakan untuk pra-ambil 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 for AI/ML menyediakan dua antarmuka akses dataset: OssMapDataset dan OssIterableDataset. Antarmuka ini merupakan ekstensi dari antarmuka PyTorch Dataset dan IterableDataset, masing-masing. OssIterableDataset dioptimalkan untuk pra-ambil, yang menghasilkan efisiensi pelatihan 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 data dalam jumlah besar, hanya memerlukan pembacaan sekuensial, dan tidak memerlukan pemrosesan paralel yang signifikan, gunakan OssIterableDataset untuk membangun dataset Anda.
Sebaliknya, jika Anda memiliki memori yang cukup, data dalam jumlah kecil, dan memerlukan operasi acak serta pemrosesan paralel, gunakan OssMapDataset untuk membangun dataset Anda.
OSS Connector for AI/ML juga menyediakan antarmuka OssCheckpoint untuk memuat dan menyimpan model. Saat ini, fitur OssCheckpoint hanya dapat digunakan dalam lingkungan sumber daya komputasi umum.
Isi berikut menjelaskan cara menggunakan ketiga antarmuka ini:
OssMapDataset
Antarmuka ini mendukung tiga mode akses dataset berikut:
Akses folder berdasarkan awalan path OSS
Metode ini lebih sederhana, intuitif, dan lebih mudah dipelihara serta diperluas karena Anda hanya perlu menentukan nama folder tanpa mengonfigurasi file indeks. Jika struktur folder OSS Anda seperti berikut, Anda dapat menggunakan metode ini untuk mengakses dataset:
dataset_folder/ ├── class1/ │ ├── image1.JPEG │ └── ... ├── class2/ │ ├── image2.JPEG │ └── ...Saat menggunakan metode ini, Anda perlu menentukan awalan path OSS dan menyesuaikan metode parsing untuk aliran file. Berikut adalah metode untuk parsing dan transformasi 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("gagal membaca", 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 menyediakan pendekatan manajemen data yang lebih fleksibel. Jika struktur folder OSS Anda seperti 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 dengan OssMapDataset. Contoh berikut menunjukkan cara menggunakan ketiga metode ini:
Akses folder berdasarkan awalan path 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 for AI/ML mendukung akses file model OSS dan menyimpan file model ke OSS melalui OssCheckpoint. Contoh berikut menunjukkan cara menggunakan 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 for 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" # Path kredensial default setelah mengonfigurasi informasi peran untuk pekerjaan DLC dan instans 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("gagal membaca", 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 Dataloader PyTorch standar.
Gunakan dataset ini untuk membangun Dataloader Torch standar. Kemudian, lakukan proses pelatihan standar dengan mengiterasi dataloader untuk memproses setiap batch, melatih model, dan menyimpan hasilnya.
Proses ini tidak mengharuskan Anda 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>')Modifikasi 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>
Path file yang akan dibaca atau ditulis. Masukkan path lengkap objek, tidak termasuk nama bucket, seperti
testfolder/exampleobject.txt.<your_object_content>
Konten yang akan ditambahkan. Modifikasi sesuai kebutuhan.
OSS Python API
Anda dapat menggunakan OSS Python API untuk dengan mudah menyimpan data pelatihan dan model di OSS. Sebelum memulai, 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).
Muat data pelatihan
Anda dapat menyimpan data di bucket OSS dan menempatkan path data serta 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 contoh 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
Path file indeks.
CatatanDalam contoh ini, setiap sampel dalam file indeks dipisahkan oleh koma (,), dan path sampel serta 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 contohnya:
Simpan model
from io import BytesIO import torch import oss2 from oss2.credentials import EnvironmentVariableCredentialsProvider auth = oss2.ProviderAuth(EnvironmentVariableCredentialsProvider()) # bucket_name 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())Di mana:
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 tidak boleh diawali dengan oss://.
<your_model_path> adalah path model. Modifikasi path 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))Di mana:
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 tidak boleh diawali dengan oss://.
<your_model_path> adalah path model. Modifikasi path ini sesuai kebutuhan.