All Products
Search
Document Center

Platform For AI:Gunakan OSS

Last Updated:Aug 01, 2026

Produk PAI seperti Deep Learning Containers (DLC) dan Data Science Workshop (DSW) memungkinkan Anda memasang sumber data dari Object Storage Service (OSS) ke path tertentu dalam kontainer menggunakan ossfs 2.0 atau JindoFuse dari Alibaba Cloud E-MapReduce. Anda juga dapat membaca data OSS menggunakan OSS Connector for AI/ML atau OSS SDK. Pilih metode akses data yang paling sesuai dengan kasus penggunaan Anda.

Latar Belakang

Dalam pengembangan AI, data sumber sering disimpan di OSS dan diunduh ke lingkungan pelatihan untuk pengembangan dan pelatihan model. Namun, praktik umum ini menimbulkan beberapa tantangan:

  • Waktu unduh dataset yang lama dapat membuat GPU menganggur.

  • Data harus diunduh berulang kali untuk setiap pekerjaan pelatihan.

  • Pengambilan sampel data secara acak memerlukan pengunduhan seluruh dataset ke setiap node pelatihan.

Untuk mengatasi masalah tersebut, pertimbangkan metode berikut untuk membaca data OSS:

Metode akses

Deskripsi

Kasus penggunaan

JindoFuse

Memasang dataset OSS ke path tertentu dalam kontainer menggunakan komponen JindoFuse, sehingga memungkinkan pembacaan dan penulisan data secara langsung.

  • Anda ingin mengakses data OSS seolah-olah merupakan dataset lokal, atau dataset Anda cukup kecil sehingga dapat memanfaatkan cache lokal JindoFuse.

  • Framework Anda bukan PyTorch.

  • Anda perlu menulis data ke OSS.

ossfs 2.0

ossfs 2.0 adalah klien untuk akses terpasang berkinerja tinggi ke OSS. Fitur ini unggul dalam operasi baca dan tulis sekuensial, memungkinkan Anda 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 pembacaan sekuensial dan acak, penulisan sekuensial (append-only), serta tidak memerlukan semantik POSIX penuh.

OSS Connector for AI/ML

PAI mengintegrasikan OSS Connector for AI/ML untuk mengalirkan file dari OSS secara langsung dalam kode PyTorch, menyederhanakan dan mempercepat akses data. Keunggulan utamanya meliputi:

  • Pemuatan streaming: Menghilangkan kebutuhan untuk mengunduh data terlebih dahulu ke lingkungan pelatihan, menghemat waktu idle GPU dan mengurangi biaya.

  • Antarmuka ramah pengembang: Selaras dengan pola penggunaan PyTorch Dataset. Menawarkan abstraksi yang lebih baik daripada OSS SDK dan lebih mudah dikustomisasi serta diperluas.

  • Pembacaan berdaya guna tinggi: Memberikan kinerja pembacaan data yang lebih tinggi dibandingkan OSS SDK untuk pemuatan data yang lebih efisien.

Gunakan konektor ini untuk akses non-mounted guna mempercepat pembacaan dataset untuk pelatihan PyTorch, terutama saat membaca jutaan file kecil atau memerlukan throughput tinggi.

OSS SDK

Mengalirkan data dari OSS menggunakan OSS SDK. Solusi ini fleksibel dan efisien, secara signifikan mengurangi waktu permintaan data dan meningkatkan efisiensi pelatihan.

Gunakan OSS Python SDK atau OSS Python API untuk akses sementara dan non-mounted ke data OSS, atau saat logika aplikasi Anda menentukan kapan harus mengakses OSS.

Penting

Saat Anda menggunakan JindoFuse atau ossfs 2.0 untuk memasang OSS, Anda dapat menentukan peran RAM untuk akses OSS guna mencapai kontrol izin yang lebih terperinci. Anda juga dapat mengaktifkan OSS Mount Requires RAM Role dalam konfigurasi umum ruang kerja. Setelah mengaktifkan opsi ini:

  • Saat membuat mount OSS di fitur seperti DSW, DLC, dan EAS, Anda harus memilih peran RAM. Peran RAM default tidak diizinkan.

  • Saat membuat dataset lanjutan atau logis yang melibatkan mount OSS, peran RAM juga diberlakukan berdasarkan konfigurasi ini.

  • Saat membuat instans DSW, pekerjaan DLC, atau layanan EAS, Anda tidak dapat memilih peran default PAI sebagai peran RAM.

JindoFuse

DLC dan DSW memungkinkan Anda menggunakan komponen JindoFuse untuk memasang dataset OSS atau path OSS ke path tertentu dalam kontainer. Hal ini memungkinkan Anda membaca dan menulis langsung data yang disimpan di OSS selama proses pelatihan.

Metode pemasangan

DLC

Saat membuat pekerjaan pelatihan terdistribusi (DLC), Anda dapat memasang data OSS. Dua jenis pemasangan berikut didukung: Untuk petunjuk konfigurasi terperinci, lihat Buat pekerjaan pelatihan.

Di kedua bagian Datasets dan Directly Mount, Anda dapat mengklik Expand Advanced Configuration untuk melihat lebih banyak opsi pemasangan dan menggunakan toggle Read-Only untuk mengontrol mode pemasangan.

Jenis pemasangan

Deskripsi

Datasets

Pilih dataset bertipe OSS dan konfigurasikan Mount Path. Untuk dataset publik, hanya mode read-only yang didukung.

Directly Mount

Memasang langsung path bucket OSS.

Jika Anda menggunakan kuota sumber daya komputasi cerdas Lingjun dengan cache lokal diaktifkan, Anda dapat mengaktifkan sakelar Use Cache untuk mengaktifkan caching.

DSW

Saat membuat instans DSW, Anda dapat memasang data OSS. Dua jenis pemasangan berikut didukung: Untuk petunjuk konfigurasi terperinci, lihat Buat instans DSW.

Kedua jenis pemasangan menyediakan opsi Expand Advanced Configuration. Jenis penyimpanan yang didukung oleh Storage Path Mounting meliputi OSS, NAS tujuan umum, Extreme NAS, CPFS, dan Intelligent Computing CPFS.

Jenis pemasangan

Deskripsi

Dataset Mounting

Pilih dataset bertipe OSS dan konfigurasikan Mount Path. Saat menggunakan dataset publik, hanya mode read-only yang didukung.

Storage Path Mounting

Memasang langsung path bucket OSS.

Batasan konfigurasi default

Jika Anda membiarkan parameter Advanced Configurations kosong, konfigurasi default akan diterapkan. Konfigurasi default memiliki batasan berikut:

  • Untuk mempercepat pembacaan file OSS, metadata (daftar direktori dan file) di-cache saat OSS dipasang.

    Dalam pelatihan terdistribusi, jika beberapa node mencoba membuat direktori yang sama, cache metadata dapat menyebabkan setiap node mencoba membuatnya. Hanya satu node yang berhasil, sedangkan yang lain melaporkan error.

  • Secara default, API MultiPart OSS digunakan untuk membuat file. Objek baru terlihat di OSS hanya setelah operasi penulisan selesai.

  • Operasi baca dan tulis konkuren pada file yang sama tidak didukung.

  • Operasi tulis acak pada file tidak didukung.

Konfigurasi JindoFuse umum

Anda juga dapat menyesuaikan parameter JindoFuse dalam konfigurasi lanjutan berdasarkan kasus penggunaan Anda.

Topik ini memberikan saran konfigurasi JindoFuse untuk beberapa skenario umum. Pengaturan ini mungkin tidak memberikan kinerja optimal untuk semua beban kerja. Untuk opsi konfigurasi yang lebih fleksibel, lihat Panduan Pengguna JindoFuse.
  • Quick Read/write: memastikan pembacaan dan penulisan cepat. Namun, inkonsistensi 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": "Twice the number of CPU cores",
      "fs.oss.upload.thread.concurrency": "Twice the number of CPU cores",
      "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, inkonsistensi data dapat terjadi. Kecepatan pembacaan sedikit lambat. Anda dapat menggunakan mode ini untuk menyimpan file bobot model untuk data pelatihan.

    {
      "fs.oss.upload.thread.concurrency": "Twice the number of CPU cores",
      "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 tanpa 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": "Twice the number of CPU cores",
      "fs.jindo.args": "-oro -oattr_timeout=7200 -oentry_timeout=7200 -onegative_timeout=7200 -okernel_cache -ono_symlink"
    }

Operasi konfigurasi umum lainnya meliputi:

  • Pilih versi JindoFuse yang berbeda:

    {
      "fs.jindo.fuse.pod.image.tag": "6.7.0"
    }
  • Nonaktifkan cache metadata: Saat menjalankan pelatihan terdistribusi di mana beberapa node mencoba menulis ke direktori yang sama secara bersamaan, cache dapat menyebabkan operasi tulis pada beberapa node gagal. Untuk mengatasi masalah ini, tambahkan argumen -oattr_timeout=0 -oentry_timeout=0 -onegative_timeout=0 ke baris perintah JindoFuse.

    {
      "fs.jindo.args": "-oattr_timeout=0 -oentry_timeout=0 -onegative_timeout=0"
    }
  • Atur jumlah thread unggah/unduh: Sesuaikan jumlah thread dengan menggunakan parameter berikut.

    {
      "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"
    }
  • Gunakan AppendObject untuk penulisan: Semua file yang dibuat secara lokal pada mount dibuat sebagai objek di OSS dengan memanggil API AppendObject. Ukuran objek yang dibuat menggunakan AppendObject tidak boleh melebihi 5 GB. Untuk batasan penggunaan lebih lanjut, lihat AppendObject. Berikut contoh konfigurasinya:

    {
      "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 informasi tentang cara mengaktifkan OSS-HDFS, lihat Apa itu Layanan OSS-HDFS? Dalam skenario pelatihan terdistribusi, kami merekomendasikan 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 mengatur parameter fs.jindo.fuse.pod.mem.limit untuk menyesuaikan batas memori. Contoh kodenya sebagai berikut:

    {
      "fs.jindo.fuse.pod.mem.limit": "10Gi"
    }

Gunakan Python SDK untuk memodifikasi parameter JindoFuse untuk dataset

Anda juga dapat menggunakan Python SDK untuk memodifikasi parameter JindoFuse.

  1. Lengkapi prasyarat berikut.

    1. Instal SDK untuk AI Workspace.

      !pip install alibabacloud-aiworkspace20210204
    2. Konfigurasikan variabel lingkungan. Untuk informasi lebih lanjut, lihat Instal Credentials Tool dan Konfigurasikan variabel lingkungan di Linux, macOS, dan Windows.

  2. Modifikasi parameter JindoFuse.

    Fast read/write

    import json
    from alibabacloud_tea_openapi.models import Config
    from alibabacloud_credentials.client import Client as CredClient
    from alibabacloud_aiworkspace20210204.client import Client as AIWorkspaceClient
    from alibabacloud_aiworkspace20210204.models import UpdateDatasetRequest
    
    
    def change_config():
        # Gunakan wilayah tempat pekerjaan DLC berjalan. Misalnya, gunakan cn-hangzhou untuk China (Hangzhou).
        region_id = 'cn-hangzhou'
        # AccessKey Akun Alibaba Cloud memiliki izin untuk memanggil semua API. Kami menyarankan Anda menggunakan Pengguna RAM untuk panggilan API dan O&M harian.
        # Kami sangat menyarankan agar Anda tidak menyimpan ID AccessKey atau Secret AccessKey dalam kode Anda. Jika tidak, AccessKey Anda dapat bocor dan membahayakan semua sumber daya dalam akun Anda.
        # Dalam contoh ini, Credentials SDK membaca AccessKey dari variabel lingkungan secara default untuk otentikasi. Anda harus menginstal Credentials tool dan mengonfigurasi variabel lingkungan terlebih dahulu.
        cred = CredClient()
        dataset_id = 'YOUR_DATASET_ID'
    
        workspace_client = AIWorkspaceClient(
            config=Config(
                credential=cred,
                region_id=region_id,
                endpoint="aiworkspace.{}.aliyuncs.com".format(region_id),
            )
        )
        # 1. Dapatkan konten dataset.
        get_dataset_resp = workspace_client.get_dataset(dataset_id)
        options = json.loads(get_dataset_resp.body.options)
        # Nilai yang direkomendasikan: dua kali jumlah core CPU.
        options['fs.oss.download.thread.concurrency'] = 32
        options['fs.oss.upload.thread.concurrency'] = 32
        options['fs.jindo.args'] = '-oattr_timeout=3 -oentry_timeout=0 -onegative_timeout=0 -oauto_cache -ono_symlink'
    
        update_request = UpdateDatasetRequest(
            options=json.dumps(options)
        )
        # 2. Perbarui opsi.
        workspace_client.update_dataset(dataset_id, update_request)
        print('new options is: {}'.format(update_request.options))
    
    
    change_config()

    Incremental read/write

    import json
    from alibabacloud_tea_openapi.models import Config
    from alibabacloud_credentials.client import Client as CredClient
    from alibabacloud_aiworkspace20210204.client import Client as AIWorkspaceClient
    from alibabacloud_aiworkspace20210204.models import UpdateDatasetRequest
    
    
    def change_config():
        # Gunakan wilayah tempat pekerjaan DLC berjalan. Misalnya, gunakan cn-hangzhou untuk China (Hangzhou).
        region_id = 'cn-hangzhou'
        # AccessKey Akun Alibaba Cloud memiliki izin untuk memanggil semua API. Kami menyarankan Anda menggunakan Pengguna RAM untuk panggilan API dan O&M harian.
        # Kami sangat menyarankan agar Anda tidak menyimpan ID AccessKey atau Secret AccessKey dalam kode Anda. Jika tidak, AccessKey Anda dapat bocor dan membahayakan semua sumber daya dalam akun Anda.
        # Dalam contoh ini, Credentials SDK membaca AccessKey dari variabel lingkungan secara default untuk otentikasi. Anda harus menginstal Credentials tool dan mengonfigurasi variabel lingkungan terlebih dahulu.
        cred = CredClient()
        dataset_id = 'YOUR_DATASET_ID'
    
        workspace_client = AIWorkspaceClient(
            config=Config(
                credential=cred,
                region_id=region_id,
                endpoint="aiworkspace.{}.aliyuncs.com".format(region_id),
            )
        )
        # 1. Dapatkan konten dataset.
        get_dataset_resp = workspace_client.get_dataset(dataset_id)
        options = json.loads(get_dataset_resp.body.options)
        # Nilai yang direkomendasikan: dua kali jumlah core CPU.
        options['fs.oss.upload.thread.concurrency'] = 32
        options['fs.jindo.args'] = '-oattr_timeout=3 -oentry_timeout=0 -onegative_timeout=0 -oauto_cache -ono_symlink'
    
        update_request = UpdateDatasetRequest(
            options=json.dumps(options)
        )
        # 2. Perbarui opsi.
        workspace_client.update_dataset(dataset_id, update_request)
        print('new options is: {}'.format(update_request.options))
    
    
    change_config()

    Consistent read/write

    import json
    from alibabacloud_tea_openapi.models import Config
    from alibabacloud_credentials.client import Client as CredClient
    from alibabacloud_aiworkspace20210204.client import Client as AIWorkspaceClient
    from alibabacloud_aiworkspace20210204.models import UpdateDatasetRequest
    
    
    def change_config():
        # Gunakan wilayah tempat pekerjaan DLC berjalan. Misalnya, gunakan cn-hangzhou untuk China (Hangzhou).
        region_id = 'cn-hangzhou'
        # AccessKey Akun Alibaba Cloud memiliki izin untuk memanggil semua API. Kami menyarankan Anda menggunakan Pengguna RAM untuk panggilan API dan O&M harian.
        # Kami sangat menyarankan agar Anda tidak menyimpan ID AccessKey atau Secret AccessKey dalam kode Anda. Jika tidak, AccessKey Anda dapat bocor dan membahayakan semua sumber daya dalam akun Anda.
        # Dalam contoh ini, Credentials SDK membaca AccessKey dari variabel lingkungan secara default untuk otentikasi. Anda harus menginstal Credentials tool dan mengonfigurasi variabel lingkungan terlebih dahulu.
        cred = CredClient()
        dataset_id = 'YOUR_DATASET_ID'
    
        workspace_client = AIWorkspaceClient(
            config=Config(
                credential=cred,
                region_id=region_id,
                endpoint="aiworkspace.{}.aliyuncs.com".format(region_id),
            )
        )
        # 1. Dapatkan konten dataset.
        get_dataset_resp = workspace_client.get_dataset(dataset_id)
        options = json.loads(get_dataset_resp.body.options)
        options['fs.jindo.args'] = '-oattr_timeout=0 -oentry_timeout=0 -onegative_timeout=0 -oauto_cache -ono_symlink'
    
        update_request = UpdateDatasetRequest(
            options=json.dumps(options)
        )
        # 2. Perbarui opsi.
        workspace_client.update_dataset(dataset_id, update_request)
        print('new options is: {}'.format(update_request.options))
    
    
    change_config()

    Read-only

    import json
    from alibabacloud_tea_openapi.models import Config
    from alibabacloud_credentials.client import Client as CredClient
    from alibabacloud_aiworkspace20210204.client import Client as AIWorkspaceClient
    from alibabacloud_aiworkspace20210204.models import UpdateDatasetRequest
    
    
    def change_config():
        # Gunakan wilayah tempat pekerjaan DLC berjalan. Misalnya, gunakan cn-hangzhou untuk China (Hangzhou).
        region_id = 'cn-hangzhou'
        # AccessKey Akun Alibaba Cloud memiliki izin untuk memanggil semua API. Kami menyarankan Anda menggunakan Pengguna RAM untuk panggilan API dan O&M harian.
        # Kami sangat menyarankan agar Anda tidak menyimpan ID AccessKey atau Secret AccessKey dalam kode Anda. Jika tidak, AccessKey Anda dapat bocor dan membahayakan semua sumber daya dalam akun Anda.
        # Dalam contoh ini, Credentials SDK membaca AccessKey dari variabel lingkungan secara default untuk otentikasi. Anda harus menginstal Credentials tool dan mengonfigurasi variabel lingkungan terlebih dahulu.
        cred = CredClient()
        dataset_id = 'YOUR_DATASET_ID'
    
        workspace_client = AIWorkspaceClient(
            config=Config(
                credential=cred,
                region_id=region_id,
                endpoint="aiworkspace.{}.aliyuncs.com".format(region_id),
            )
        )
        # 1. Dapatkan konten dataset.
        get_dataset_resp = workspace_client.get_dataset(dataset_id)
        options = json.loads(get_dataset_resp.body.options)
        # Nilai yang direkomendasikan: dua kali jumlah core CPU.
        options['fs.oss.download.thread.concurrency'] = 32
        options['fs.jindo.args'] = '-oro -oattr_timeout=7200 -oentry_timeout=7200 -onegative_timeout=7200 -okernel_cache -ono_symlink'
    
        update_request = UpdateDatasetRequest(
            options=json.dumps(options)
        )
        # 2. Perbarui opsi.
        workspace_client.update_dataset(dataset_id, update_request)
        print('new options is: {}'.format(update_request.options))
    
    
    change_config()

    Versi JindoFuse

    Contoh kodenya sebagai berikut:

    import json
    from alibabacloud_tea_openapi.models import Config
    from alibabacloud_credentials.client import Client as CredClient
    from alibabacloud_aiworkspace20210204.client import Client as AIWorkspaceClient
    from alibabacloud_aiworkspace20210204.models import UpdateDatasetRequest
    
    
    def change_version():
        # Gunakan wilayah tempat pekerjaan DLC berjalan. Misalnya, gunakan cn-hangzhou untuk China (Hangzhou).
        region_id = 'cn-hangzhou'
        # AccessKey Akun Alibaba Cloud memiliki izin untuk memanggil semua API. Kami menyarankan Anda menggunakan Pengguna RAM untuk panggilan API dan O&M harian.
        # Kami sangat menyarankan agar Anda tidak menyimpan ID AccessKey atau Secret AccessKey dalam kode Anda. Jika tidak, AccessKey Anda dapat bocor dan membahayakan semua sumber daya dalam akun Anda.
        # Dalam contoh ini, Credentials SDK membaca AccessKey dari variabel lingkungan secara default untuk otentikasi. Anda harus menginstal Credentials tool dan mengonfigurasi variabel lingkungan terlebih dahulu.
        cred = CredClient()
        dataset_id = 'YOUR_DATASET_ID'
    
        workspace_client = AIWorkspaceClient(
            config=Config(
                credential=cred,
                region_id=region_id,
                endpoint="aiworkspace.{}.aliyuncs.com".format(region_id),
            )
        )
        # 1. Dapatkan konten dataset.
        get_dataset_resp = workspace_client.get_dataset(dataset_id)
        options = json.loads(get_dataset_resp.body.options)
        # Atur versi JindoFuse. Versi yang didukung meliputi 6.4.4, 6.7.0, dan 6.6.0. Untuk catatan rilis, lihat https://aliyun.github.io/alibabacloud-jindodata/releases/.
        options['fs.jindo.fuse.pod.image.tag'] = "6.7.0"
    
        update_request = UpdateDatasetRequest(
            options=json.dumps(options)
        )
        # 2. Perbarui opsi.
        workspace_client.update_dataset(dataset_id, update_request)
        print('new options is: {}'.format(update_request.options))
    change_version()

    Cache metadata

    Saat menjalankan pelatihan terdistribusi dan beberapa node mencoba menulis ke direktori yang sama secara bersamaan, cache dapat menyebabkan operasi tulis pada beberapa node gagal. Untuk mengatasi masalah ini, tambahkan argumen -oattr_timeout=0 -oentry_timeout=0 -onegative_timeout=0 ke baris perintah JindoFuse. Contoh kodenya sebagai berikut:

    import json
    from alibabacloud_tea_openapi.models import Config
    from alibabacloud_credentials.client import Client as CredClient
    from alibabacloud_aiworkspace20210204.client import Client as AIWorkspaceClient
    from alibabacloud_aiworkspace20210204.models import UpdateDatasetRequest
    
    
    def turnOffMetaCache():
        region_id = 'cn-hangzhou'
        # AccessKey Akun Alibaba Cloud memiliki izin untuk memanggil semua API. Kami menyarankan Anda menggunakan Pengguna RAM untuk panggilan API dan O&M harian.
        # Kami sangat menyarankan agar Anda tidak menyimpan ID AccessKey atau Secret AccessKey dalam kode Anda. Jika tidak, AccessKey Anda dapat bocor dan membahayakan semua sumber daya dalam akun Anda.
        # Dalam contoh ini, Credentials SDK membaca AccessKey dari variabel lingkungan secara default untuk otentikasi. Anda harus menginstal Credentials tool dan mengonfigurasi variabel lingkungan terlebih dahulu.
        cred = CredClient()
        dataset_id = 'YOUR_DATASET_ID'
        workspace_client = AIWorkspaceClient(
          config=Config(
                credential=cred,
                region_id=region_id,
                endpoint="aiworkspace.{}.aliyuncs.com".format(region_id),
          )
        )
        # 1. Dapatkan konten dataset.
        get_dataset_resp = workspace_client.get_dataset(dataset_id)
        options = json.loads(get_dataset_resp.body.options)
    
        options['fs.jindo.args'] = '-oattr_timeout=0 -oentry_timeout=0 -onegative_timeout=0'
    
        update_request = UpdateDatasetRequest(
            options=json.dumps(options)
        )
        # 2. Perbarui opsi.
        workspace_client.update_dataset(dataset_id, update_request)
        print('new options is: {}'.format(update_request.options))
    
    
    turnOffMetaCache()
    

    Jumlah thread unggah/unduh

    Atur 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

    Contoh kodenya sebagai berikut:

    import json
    from alibabacloud_tea_openapi.models import Config
    from alibabacloud_credentials.client import Client as CredClient
    from alibabacloud_aiworkspace20210204.client import Client as AIWorkspaceClient
    from alibabacloud_aiworkspace20210204.models import UpdateDatasetRequest
    
    
    def adjustThreadNum():
        # Gunakan wilayah tempat pekerjaan DLC berjalan. Misalnya, gunakan cn-hangzhou untuk China (Hangzhou).
        region_id = 'cn-hangzhou'
        # AccessKey Akun Alibaba Cloud memiliki izin untuk memanggil semua API. Kami menyarankan Anda menggunakan Pengguna RAM untuk panggilan API dan O&M harian.
        # Kami sangat menyarankan agar Anda tidak menyimpan ID AccessKey atau Secret AccessKey dalam kode Anda. Jika tidak, AccessKey Anda dapat bocor dan membahayakan semua sumber daya dalam akun Anda.
        # Dalam contoh ini, Credentials SDK membaca AccessKey dari variabel lingkungan secara default untuk otentikasi. Anda harus menginstal Credentials tool dan mengonfigurasi variabel lingkungan terlebih dahulu.
        cred = CredClient()
        dataset_id = 'YOUR_DATASET_ID'
    
        workspace_client = AIWorkspaceClient(
            config=Config(
                credential=cred,
                region_id=region_id,
                endpoint="aiworkspace.{}.aliyuncs.com".format(region_id),
            )
        )
        # 1. Dapatkan konten dataset.
        get_dataset_resp = workspace_client.get_dataset(dataset_id)
        options = json.loads(get_dataset_resp.body.options)
    
        options['fs.oss.upload.thread.concurrency'] = 32
        options['fs.oss.download.thread.concurrency'] = 32
        options['fs.oss.read.readahead.buffer.count'] = 64
     
        update_request = UpdateDatasetRequest(
            options=json.dumps(options)
        )
        # 2. Perbarui opsi.
        workspace_client.update_dataset(dataset_id, update_request)
        print('new options is: {}'.format(update_request.options))
     
     
    adjustThreadNum()
    

    Penulisan AppendObject

    Semua file yang dibuat secara lokal pada mount dibuat sebagai objek di OSS dengan memanggil API AppendObject. Ukuran objek yang dibuat menggunakan AppendObject tidak boleh melebihi 5 GB. Untuk batasan penggunaan lebih lanjut, lihat AppendObject. Contoh kodenya sebagai berikut:

    import json
    from alibabacloud_tea_openapi.models import Config
    from alibabacloud_credentials.client import Client as CredClient
    from alibabacloud_aiworkspace20210204.client import Client as AIWorkspaceClient
    from alibabacloud_aiworkspace20210204.models import UpdateDatasetRequest
    
    
    def useAppendObject():
        # Gunakan wilayah tempat pekerjaan DLC berjalan. Misalnya, gunakan cn-hangzhou untuk China (Hangzhou).
        region_id = 'cn-hangzhou'
        # AccessKey Akun Alibaba Cloud memiliki izin untuk memanggil semua API. Kami menyarankan Anda menggunakan Pengguna RAM untuk panggilan API dan O&M harian.
        # Kami sangat menyarankan agar Anda tidak menyimpan ID AccessKey atau Secret AccessKey dalam kode Anda. Jika tidak, AccessKey Anda dapat bocor dan membahayakan semua sumber daya dalam akun Anda.
        # Dalam contoh ini, Credentials SDK membaca AccessKey dari variabel lingkungan secara default untuk otentikasi. Anda harus menginstal Credentials tool dan mengonfigurasi variabel lingkungan terlebih dahulu.
        cred = CredClient()
        dataset_id = 'YOUR_DATASET_ID'
    
        workspace_client = AIWorkspaceClient(
            config=Config(
                credential=cred,
                region_id=region_id,
                endpoint="aiworkspace.{}.aliyuncs.com".format(region_id),
            )
        )
        # 1. Dapatkan konten dataset.
        get_dataset_resp = workspace_client.get_dataset(dataset_id)
        options = json.loads(get_dataset_resp.body.options)
    
        options['fs.jindo.args'] = '-oattr_timeout=0 -oentry_timeout=0 -onegative_timeout=0'
        options['fs.oss.append.enable'] = "true"
        options['fs.oss.flush.interval.millisecond'] = "1000"
        options['fs.oss.read.buffer.size'] = "262144"
        options['fs.oss.write.buffer.size'] = "262144"
    
        update_request = UpdateDatasetRequest(
            options=json.dumps(options)
        )
        # 2. Perbarui opsi.
        workspace_client.update_dataset(dataset_id, update_request)
        print('new options is: {}'.format(update_request.options))
    
    
    useAppendObject()

    OSS-HDFS

    Untuk informasi tentang cara mengaktifkan OSS-HDFS, lihat Apa itu Layanan OSS-HDFS?. Contoh berikut menunjukkan cara membuat dataset yang menggunakan endpoint OSS-HDFS:

    import json
    from alibabacloud_tea_openapi.models import Config
    from alibabacloud_credentials.client import Client as CredClient
    from alibabacloud_aiworkspace20210204.client import Client as AIWorkspaceClient
    from alibabacloud_aiworkspace20210204.models import CreateDatasetRequest
    
    
    def createOssHdfsDataset():
        # Gunakan wilayah tempat pekerjaan DLC berjalan. Misalnya, gunakan cn-hangzhou untuk China (Hangzhou).
        region_id = 'cn-hangzhou'
        # AccessKey Akun Alibaba Cloud memiliki izin untuk memanggil semua API. Kami menyarankan Anda menggunakan Pengguna RAM untuk panggilan API dan O&M harian.
        # Kami sangat menyarankan agar Anda tidak menyimpan ID AccessKey atau Secret AccessKey dalam kode Anda. Jika tidak, AccessKey Anda dapat bocor dan membahayakan semua sumber daya dalam akun Anda.
        # Dalam contoh ini, Credentials SDK membaca AccessKey dari variabel lingkungan secara default untuk otentikasi. Anda harus menginstal Credentials tool dan mengonfigurasi variabel lingkungan terlebih dahulu.
        cred = CredClient()
        workspace_id = 'YOUR_WORKSPACE_ID'
    
        oss_bucket = 'YOUR_OSS_BUCKET'
        # Gunakan endpoint OSS-HDFS.
        oss_endpoint = f'{region_id}.oss-dls.aliyuncs.com'
        # Path OSS-HDFS yang akan dipasang.
        oss_path = '/'
        # Path mount lokal.
        mount_path = '/mnt/data/'
    
        workspace_client = AIWorkspaceClient(
            config=Config(
                credential=cred,
                region_id=region_id,
                endpoint="aiworkspace.{}.aliyuncs.com".format(region_id),
            )
        )
    
        response = workspace_client.create_dataset(CreateDatasetRequest(
            workspace_id=workspace_id,
            name="YOUR_DATASET_NAME",
            data_type='COMMON',
            data_source_type='OSS',
            property='DIRECTORY',
            uri=f'oss://{oss_bucket}.{oss_endpoint}{oss_path}',
            accessibility='PRIVATE',
            source_type='USER',
            options=json.dumps({
                'mountPath': mount_path,
                # Dalam skenario pelatihan terdistribusi, kami merekomendasikan 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",
            })
        ))
        print(f'datasetId: {response.body.dataset_id}')
    
    createOssHdfsDataset()
    
    

    Sumber daya memori

    Anda dapat mengatur parameter fs.jindo.fuse.pod.mem.limit untuk menyesuaikan batas memori. Contoh kodenya sebagai berikut:

    import json
    from alibabacloud_tea_openapi.models import Config
    from alibabacloud_credentials.client import Client as CredClient
    from alibabacloud_aiworkspace20210204.client import Client as AIWorkspaceClient
    from alibabacloud_aiworkspace20210204.models import UpdateDatasetRequest
    
    
    def adjustResource():
        # Gunakan wilayah tempat pekerjaan DLC berjalan. Misalnya, gunakan cn-hangzhou untuk China (Hangzhou).
        region_id = 'cn-hangzhou'
        # AccessKey Akun Alibaba Cloud memiliki izin untuk memanggil semua API. Kami menyarankan Anda menggunakan Pengguna RAM untuk panggilan API dan O&M harian.
        # Kami sangat menyarankan agar Anda tidak menyimpan ID AccessKey atau Secret AccessKey dalam kode Anda. Jika tidak, AccessKey Anda dapat bocor dan membahayakan semua sumber daya dalam akun Anda.
        # Dalam contoh ini, Credentials SDK membaca AccessKey dari variabel lingkungan secara default untuk otentikasi. Anda harus menginstal Credentials tool dan mengonfigurasi variabel lingkungan terlebih dahulu.
        cred = CredClient()
        dataset_id = 'YOUR_DATASET_ID'
    
        workspace_client = AIWorkspaceClient(
            config=Config(
                credential=cred,
                region_id=region_id,
                endpoint="aiworkspace.{}.aliyuncs.com".format(region_id),
            )
        )
        # 1. Dapatkan konten dataset.
        get_dataset_resp = workspace_client.get_dataset(dataset_id)
        options = json.loads(get_dataset_resp.body.options)
        # Sumber daya memori yang akan dikonfigurasi.
        options['fs.jindo.fuse.pod.mem.limit'] = "10Gi"
    
        update_request = UpdateDatasetRequest(
            options=json.dumps(options)
        )
        # 2. Perbarui opsi.
        workspace_client.update_dataset(dataset_id, update_request)
        print('new options is: {}'.format(update_request.options))
    
    
    adjustResource()
    

ossfs 2.0

Untuk memasang sumber data OSS menggunakan ossfs, atur {"mountType":"ossfs"} di Advanced Configuration.

Metode pemasangan

Pasang OSS di DLC

Saat membuat pekerjaan DLC, Anda dapat memasang data OSS. DLC mendukung dua jenis pemasangan berikut. Untuk detail konfigurasi, lihat Buat pekerjaan pelatihan.

Jenis pemasangan

Deskripsi

Datasets

Pilih dataset OSS dan konfigurasikan Mount Path. Dataset publik hanya mendukung mode read-only.

Directly Mount

Memasang langsung path penyimpanan bucket OSS.

Jika Anda menggunakan kuota sumber daya Lingjun dengan cache lokal diaktifkan, Anda dapat mengaktifkan Use Cache.

Pasang OSS di DSW

Saat membuat instans DSW, Anda dapat memasang data OSS. DSW mendukung dua jenis pemasangan berikut. Untuk detail konfigurasi, lihat Buat instans DSW.

Jenis pemasangan

Deskripsi

Dataset Mounting

Pilih dataset OSS dan konfigurasikan Mount Path. Dataset publik hanya mendukung mode read-only.

Storage Path Mounting

Memasang langsung path penyimpanan bucket OSS.

Konfigurasi ossfs umum

Di Advanced Configuration, Anda dapat mengatur parameter lanjutan menggunakan fs.ossfs.args. Pisahkan beberapa parameter dengan koma (,). Untuk informasi lebih lanjut tentang parameter lanjutan ini, lihat ossfs 2.0. Contoh berikut menunjukkan beberapa kasus penggunaan umum:

  • Sumber data statis selama pekerjaan: Untuk file yang tidak dimodifikasi selama pekerjaan, konfigurasikan timeout cache yang panjang untuk mengurangi permintaan metadata. Kasus penggunaan tipikal adalah membaca batch file yang ada dan menghasilkan kumpulan file baru setelah pemrosesan.

    {
        "mountType":"ossfs",
        "fs.ossfs.args": "-oattr_timeout=7200" 
    }
  • Pembacaan/penulisan cepat: Gunakan timeout cache metadata yang lebih pendek untuk menyeimbangkan efisiensi cache dan kesegaran data.

    {
        "mountType":"ossfs",
        "fs.ossfs.args": "-oattr_timeout=3, -onegative_timeout=0"
    }
  • Pembacaan/penulisan konsisten untuk pekerjaan terdistribusi: Secara default, ossfs memperbarui data file berdasarkan cache metadata. Gunakan konfigurasi berikut untuk memastikan tampilan yang konsisten di beberapa node.

    {   
        "mountType":"ossfs",
        "fs.ossfs.args": "-onegative_timeout=0, -oclose_to_open"
    }
  • Out-of-memory (OOM) akibat terlalu banyak file terbuka di DLC atau DSW: Konkurensi pekerjaan tinggi di DLC dan DSW dapat membuka banyak file secara bersamaan, berpotensi menyebabkan masalah Out-of-memory (OOM). Konfigurasi berikut dapat membantu mengurangi tekanan memori.

    {
        "mountType":"ossfs",
        "fs.ossfs.args": "-oreaddirplus=false, -oinode_cache_eviction_threshold=300000"
    }
  • Kegagalan menulis file besar: -oupload_buffer_size mengatur ukuran buffer (dalam byte) untuk unggah multi-bagian. Parameter ini menentukan ukuran file maksimum yang dapat ditulis, dihitung sebagai upload_buffer_size * 10000.

    Secara default, ossfs 2.0 menggunakan ukuran bagian 8 MiB, yang membatasi ukuran file maksimum yang dapat ditulis hingga 78,125 GiB. Saat Anda menulis file yang melebihi batas ini, operasi akan gagal. Untuk meningkatkan ukuran file maksimum yang didukung, konfigurasikan opsi -oupload_buffer_size untuk meningkatkan ukuran bagian. Misalnya, mengatur ukuran bagian menjadi 32 MiB (33.554.432 byte) mendukung ukuran file maksimum 312,5 GiB. Perhatikan bahwa -upload_buffer_size yang lebih besar mengonsumsi lebih banyak memori. Anda dapat mengontrol penggunaan memori dengan mengonfigurasi -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 dari tim OSS Alibaba Cloud untuk beban kerja AI dan pembelajaran mesin. Fitur ini menyederhanakan pemuatan data untuk pelatihan PyTorch skala besar, mengurangi waktu dan kompleksitas transfer data, serta mempercepat pelatihan model dengan menghilangkan hambatan pemuatan data. Untuk menyederhanakan akses data, platform PAI telah mengintegrasikan OSS Connector for AI/ML, memungkinkan Anda mengalirkan data langsung dari OSS dalam kode PyTorch Anda untuk pemuatan data yang efisien.

Batasan

  • Citra resmi: OSS Connector for AI/ML hanya tersedia di pekerjaan DLC dan instans DSW yang menggunakan citra resmi PyTorch 2.0 atau lebih baru.

  • Citra kustom: Hanya PyTorch 2.0 atau lebih baru yang didukung. Untuk citra kustom yang menggunakan versi yang didukung, instal OSS Connector for AI/ML dengan menjalankan perintah berikut:

    pip install -i http://yum.tbsite.net/aliyun-pypi/simple/ --extra-index-url http://yum.tbsite.net/pypi/simple/ --trusted-host=yum.tbsite.net osstorchconnector
  • Versi Python: Hanya Python 3.8–3.12 yang didukung.

Prasyarat

  1. Konfigurasikan file kredensial.

    Anda dapat mengonfigurasi kredensial dengan salah satu cara berikut:

    • Konfigurasikan akses tanpa kata sandi ke OSS untuk pekerjaan DLC Anda. Untuk informasi lebih lanjut, lihat Konfigurasikan peran RAM DLC. Dengan metode ini, pekerjaan DLC memperoleh kredensial sementara dari STS untuk mengakses OSS dan sumber daya cloud lainnya secara aman, menghilangkan kebutuhan informasi otentikasi eksplisit dan mengurangi risiko kebocoran kunci akses.

    • Konfigurasikan file kredensial dalam proyek kode Anda untuk mengelola informasi otentikasi. Contoh konfigurasinya sebagai berikut:

      Catatan

      Menyimpan informasi kunci akses dalam teks biasa menimbulkan risiko keamanan. Kami menyarankan menggunakan peran RAM untuk mengonfigurasi kredensial secara otomatis dalam instans DLC. Untuk informasi lebih lanjut, lihat Konfigurasikan peran RAM DLC.

      Saat menggunakan OSS Connector for AI/ML, Anda dapat menentukan path ke file kredensial untuk secara otomatis mengambil informasi otentikasi guna menandatangani permintaan data OSS.

      {
        "AccessKeyId": "<Access-key-id>",
        "AccessKeySecret": "<Access-key-secret>",
        "SecurityToken": "<Security-Token>",
        "Expiration": "2024-08-20T00:00:00Z"
      }

      Tabel berikut menjelaskan bidang-bidangnya.

      Parameter

      Wajib

      Deskripsi

      Contoh

      AccessKeyId

      Ya

      ID kunci akses dan rahasia kunci akses dari akun Alibaba Cloud atau Pengguna RAM.

      Catatan

      Saat menggunakan kredensial sementara dari STS untuk mengakses OSS, atur parameter ini ke ID kunci akses sementara dan rahasia kunci akses sementara.

      NTS****

      AccessKeySecret

      Ya

      7NR2****

      SecurityToken

      Tidak

      Token keamanan dari STS. Parameter ini wajib hanya saat Anda menggunakan kredensial sementara dari STS untuk mengakses OSS.

      STS.6MC2****

      Expiration

      Tidak

      Waktu kedaluwarsa kredensial. Jika bidang ini kosong, kredensial tidak kedaluwarsa. OSS Connector for AI/ML membaca ulang file kredensial saat kredensial kedaluwarsa.

      2024-08-20T00:00:00Z

  2. Konfigurasikan file config.json. Contoh konfigurasinya sebagai berikut:

    File ini digunakan untuk mengelola pengaturan dalam proyek Anda, seperti tingkat konkurensi, parameter prefetch, dan lokasi file log. Saat menggunakan OSS Connector for AI/ML, tentukan path ke file config.json ini. Konektor kemudian secara otomatis menerapkan pengaturan yang Anda konfigurasikan dan menulis 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 bidang-bidangnya.

    Parameter

    Wajib

    Deskripsi

    Contoh

    logLevel

    Ya

    Tingkat log. Nilai default adalah 1 (INFO). Nilai yang valid:

    • 0: DEBUG

    • 1: INFO

    • 2: WARN

    • 3: ERROR

    1

    logPath

    Ya

    Path log untuk konektor. Path default adalah /var/log/oss-connector/connector.log.

    /var/log/oss-connector/connector.log

    auditPath

    Ya

    Audit log untuk catatan I/O Konektor yang merekam permintaan baca dan tulis dengan latensi lebih dari 100 milidetik. Path default adalah /var/log/oss-connector/audit.log.

    /var/log/oss-connector/audit.log

    DatasetConfig

    prefetchConcurrency

    Ya

    Jumlah tugas konkuren untuk prefetch data dari OSS saat menggunakan dataset. Nilai default adalah 24.

    24

    prefetchWorker

    Ya

    Jumlah vCPU yang tersedia untuk prefetch data dari OSS saat menggunakan dataset. Nilai default adalah 2.

    2

    checkpointConfig

    prefetchConcurrency

    Ya

    Jumlah tugas konkuren untuk prefetch data dari OSS selama pembacaan checkpoint. Nilai default adalah 24.

    24

    prefetchWorker

    Ya

    Jumlah vCPU yang tersedia untuk prefetch data dari OSS selama pembacaan checkpoint. Nilai default adalah 4.

    4

    uploadConcurrency

    Ya

    Jumlah tugas konkuren untuk mengunggah data selama penulisan checkpoint. Nilai default adalah 64.

    64

Penggunaan

OSS Connector for AI/ML menyediakan dua antarmuka akses dataset, OssMapDataset dan OssIterableDataset, yang memperluas antarmuka PyTorch Dataset dan IterableDataset masing-masing. OssIterableDataset dioptimalkan dengan prefetching untuk efisiensi pelatihan yang lebih tinggi. Urutan pembacaan data OssMapDataset ditentukan oleh DataLoader dan mendukung operasi shuffle. Anda dapat memilih antarmuka akses dataset berdasarkan rekomendasi berikut:

  • Jika memori Anda terbatas, dataset besar, dan hanya memerlukan pembacaan sekuensial dengan paralelisme rendah, gunakan OssIterableDataset.

  • Jika memori Anda cukup, dataset lebih kecil, dan memerlukan akses acak serta pemrosesan paralel, gunakan OssMapDataset.

OSS Connector for AI/ML juga menyediakan antarmuka OssCheckpoint untuk memuat dan menyimpan model. Saat ini, fitur OssCheckpoint hanya tersedia di lingkungan sumber daya komputasi tujuan umum.

Bagian berikut menjelaskan cara menggunakan ketiga antarmuka ini.

OssMapDataset

Tiga metode akses dataset berikut didukung:

  • Akses folder berdasarkan awalan path OSS

    Anda dapat menentukan hanya nama folder tanpa perlu mengonfigurasi file indeks, yang menyederhanakan pemeliharaan dan skalabilitas. Gunakan metode ini jika folder OSS Anda tersusun sebagai berikut:

    dataset_folder/
        ├── class1/
        │   ├── image1.JPEG
        │   └── ...
        ├── class2/
        │   ├── image2.JPEG
        │   └── ...

    Saat menggunakan metode ini, Anda harus menentukan awalan path OSS dan mendefinisikan metode khusus untuk mengurai aliran file. Contoh berikut menunjukkan cara mengurai 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 dari file manifes

    Metode ini memungkinkan Anda mengakses data dari beberapa bucket OSS, memberikan manajemen data yang lebih fleksibel. Gunakan metode ini jika folder OSS Anda tersusun sebagai berikut dan Anda memiliki file manifes yang memetakan nama file ke label.

    dataset_folder/
        ├── class1/
        │   ├── image1.JPEG
        │   └── ...
        ├── class2/
        │   ├── image2.JPEG
        │   └── ...
        └── .manifest

    File manifes memiliki format berikut:

    {'data': {'source': 'oss://examplebucket.oss-cn-wulanchabu.aliyuncs.com/dataset_folder/class1/image1.JPEG'}}
    {'data': {'source': ''}}

    Saat menggunakan metode ini, Anda harus mendefinisikan metode khusus untuk mengurai file manifes. Contoh kodenya sebagai berikut:

    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 dari daftar URI OSS

    Anda dapat mengakses file OSS dengan menentukan URI OSS-nya tanpa perlu mengonfigurasi file indeks. Contoh kodenya sebagai berikut:

    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 dari file manifes

    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 dari 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 tersedia di lingkungan sumber daya komputasi tujuan umum. Anda dapat menggunakan antarmuka OssCheckpoint untuk mengakses dan menyimpan file model di OSS. Contoh kodenya sebagai berikut:

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

Kode berikut memberikan contoh lengkap cara menggunakan OSS Connector for AI/ML untuk mengakses data OSS:

from osstorchconnector import OssMapDataset, OssCheckpoint
import torchvision.transforms as transforms
import accimage
import torchvision.models as models
import torch

# Path kredensial default setelah Anda mengonfigurasi peran RAM untuk pekerjaan DLC atau instans DSW.
cred_path = "/mnt/.alibabacloud/credentials"  
config_path = "config.json"
checkpoint = OssCheckpoint(endpoint="{oss_endpoint}", cred_path=cred_path, config_path=config_path)
model = models.__dict__["resnet18"]()

epochs = 100  # Tentukan jumlah 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)

Poin-poin penting dalam contoh ini:

  • Buat dataset dengan OssMapDataset langsung dari URI OSS yang diberikan, mengikuti pola standar PyTorch DataLoader.

  • Gunakan dataset ini untuk membuat DataLoader PyTorch standar, dan jalankan loop pelatihan normal untuk memproses setiap batch, melatih model, dan menyimpan checkpoint.

  • Hal ini memungkinkan pemuatan sesuai permintaan, yang menghilangkan kebutuhan untuk memasang dataset di lingkungan kontainer atau mengunduhnya ke penyimpanan lokal terlebih dahulu.

OSS SDK

OSS Python SDK

Gunakan OSS Python SDK untuk membaca dan menulis data ke OSS:

  1. Instal OSS Python SDK. Untuk informasi lebih lanjut, lihat Instalasi (Python SDK V1).

  2. Konfigurasikan kredensial akses untuk OSS Python SDK. Untuk informasi lebih lanjut, lihat Konfigurasikan kredensial akses (Python SDK V1).

  3. Baca dan tulis data di OSS.

    # -*- coding: utf-8 -*-
    import oss2
    from oss2.credentials import EnvironmentVariableCredentialsProvider
    
    # Konfigurasikan kredensial akses menggunakan kunci akses Pengguna RAM 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 data ke file yang dapat ditambahkan.
    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 parameter berikut sesuai kebutuhan:

    Parameter

    Deskripsi

    <Endpoint>

    Titik akhir untuk wilayah bucket Anda. Misalnya, untuk wilayah China (Hangzhou), atur titik akhir ke https://oss-cn-hangzhou.aliyuncs.com. Untuk informasi lebih lanjut tentang cara mendapatkan titik akhir, lihat Wilayah dan titik akhir.

    <your_bucket_name>

    Nama bucket Anda.

    <your_file_path/your_file>

    Path file yang akan dibaca atau ditulis. Tentukan path lengkap objek tetapi tidak termasuk nama bucket. Misalnya, testfolder/exampleobject.txt.

    <your_object_content>

    Konten yang akan ditulis atau ditambahkan. Ganti sesuai kebutuhan.

OSS Python API

Anda dapat menggunakan OSS Python API untuk menyimpan data pelatihan dan model di OSS dengan mudah. Sebelum memulai, pastikan Anda telah menginstal OSS Python SDK dan mengonfigurasi kredensial akses Anda. Untuk informasi lebih lanjut, lihat Instalasi (Python SDK V1) dan Konfigurasikan kredensial akses (Python SDK V1).

  • Muat data pelatihan

    Anda dapat menyimpan data Anda di bucket OSS, dengan path data dan label yang sesuai dalam file indeks di bucket yang sama. Dengan membuat Dataset khusus, Anda dapat menggunakan API DataLoader di PyTorch untuk membaca data secara paralel di beberapa proses. Contoh kodenya sebagai berikut.

    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)
    

    Tabel ini menjelaskan parameter utamanya.

    Parameter

    Deskripsi

    endpoint

    Titik akhir untuk wilayah bucket Anda. Misalnya, untuk wilayah China (Hangzhou), atur titik akhir ke https://oss-cn-hangzhou.aliyuncs.com. Untuk informasi lebih lanjut tentang cara mendapatkan titik akhir, lihat Wilayah dan titik akhir.

    bucket

    Nama bucket Anda.

    index_file

    Path file indeks.

    Catatan

    Dalam contoh ini, file indeks menggunakan koma (,) untuk memisahkan setiap sampel, dan titik dua (:) untuk memisahkan path sampel dari label.

  • Simpan atau muat model

    Gunakan OSS Python API untuk menyimpan atau memuat model PyTorch. Untuk informasi lebih lanjut tentang cara menyimpan dan memuat model di PyTorch, lihat PyTorch. Contoh kodenya sebagai berikut:

    • 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 titik akhir untuk wilayah bucket Anda. Misalnya, untuk wilayah China (Hangzhou), atur titik akhir ke https://oss-cn-hangzhou.aliyuncs.com.

      • <your_bucket_name> adalah nama bucket OSS, tanpa awalan oss://.

      • <your_model_path> adalah path model. Ganti 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 titik akhir untuk wilayah bucket Anda. Misalnya, untuk wilayah China (Hangzhou), atur titik akhir ke https://oss-cn-hangzhou.aliyuncs.com.

      • <your_bucket_name> adalah nama bucket OSS, tanpa awalan oss://.

      • <your_model_path> adalah path model. Ganti sesuai kebutuhan.