全部产品
Search
文档中心

Platform For AI:Gunakan OSS

更新时间:Nov 05, 2025

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

JindoFuse

Anda dapat menggunakan komponen JindoFuse untuk memasang dataset OSS ke jalur tertentu dalam sebuah kontainer. Ini memungkinkan Anda membaca dan menulis data secara langsung.

  • Anda ingin membaca data OSS seolah-olah itu adalah dataset lokal, dan dataset tersebut cukup kecil untuk mendapatkan manfaat dari percepatan yang diberikan oleh cache lokal JindoFuse.

  • Kerangka kerja yang Anda gunakan bukan PyTorch.

  • Anda perlu menulis data ke OSS.

ossfs 2.0

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.

OSS Connector untuk AI/ML

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:

  • Stream loading: Anda dapat melakukan streaming data secara langsung tanpa mengunduhnya ke lingkungan pelatihan. Ini mengurangi waktu idle GPU dan menurunkan biaya.

  • Antarmuka asli PyTorch: Konektor ini kompatibel dengan antarmuka Dataset PyTorch, sehingga mudah digunakan. Ini juga memberikan enkapsulasi yang lebih baik daripada SDK OSS, yang membuatnya lebih mudah untuk disesuaikan dan dimodifikasi.

  • Pembacaan efisien: Konektor dioptimalkan untuk pembacaan data berkinerja tinggi, memberikan pemuatan data yang lebih efisien daripada SDK OSS standar.

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.

OSS SDK

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.

image

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.

image

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"
    }

Gunakan Python SDK untuk memodifikasi parameter JindoFuse untuk dataset

Anda juga dapat memodifikasi parameter JindoFuse menggunakan Python SDK.

  1. Selesaikan langkah-langkah berikut:

    1. Instal workspace SDK.

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

  2. Modifikasi parameter JindoFuse.

    Baca/tulis cepat

    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 berada. Misalnya, atur region_id ke 'cn-hangzhou' untuk China (Hangzhou).
        region_id = 'cn-hangzhou'
        # Pasangan AccessKey dari akun Alibaba Cloud memiliki izin untuk semua operasi API. Menggunakan kredensial ini untuk melakukan operasi adalah operasi berisiko tinggi. Kami sarankan Anda menggunakan Pengguna RAM untuk memanggil operasi API atau melakukan O&M rutin.
        # Untuk mencegah kebocoran pasangan AccessKey, jangan simpan ID AccessKey dan rahasia AccessKey di kode proyek Anda.
        # Contoh ini menunjukkan cara menggunakan SDK Kredensial default untuk membaca pasangan AccessKey dari variabel lingkungan untuk verifikasi identitas. Anda harus terlebih dahulu menginstal Alat Kredensial dan mengonfigurasi variabel lingkungan.
        cred = CredClient()
        dataset_id = '** ID dataset **'
    
        workspace_client = AIWorkspaceClient(
            config=Config(
                credential=cred,
                region_id=region_id,
                endpoint="aiworkspace.{}.aliyuncs.com".format(region_id),
            )
        )
        # 1. Dapatkan isi dataset.
        get_dataset_resp = workspace_client.get_dataset(dataset_id)
        options = json.loads(get_dataset_resp.body.options)
        # Nilai yang direkomendasikan adalah 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('opsi baru adalah: {}'.format(update_request.options))
    
    
    change_config()

    Baca/tulis bertambah

    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 berada. Misalnya, atur region_id ke 'cn-hangzhou' untuk China (Hangzhou).
        region_id = 'cn-hangzhou'
        # Pasangan AccessKey dari akun Alibaba Cloud memiliki izin untuk semua operasi API. Menggunakan kredensial ini untuk melakukan operasi adalah operasi berisiko tinggi. Kami sarankan Anda menggunakan Pengguna RAM untuk memanggil operasi API atau melakukan O&M rutin.
        # Untuk mencegah kebocoran pasangan AccessKey, jangan simpan ID AccessKey dan rahasia AccessKey di kode proyek Anda.
        # Contoh ini menunjukkan cara menggunakan SDK Kredensial default untuk membaca pasangan AccessKey dari variabel lingkungan untuk verifikasi identitas. Anda harus terlebih dahulu menginstal Alat Kredensial dan mengonfigurasi variabel lingkungan.
        cred = CredClient()
        dataset_id = '** ID dataset **'
    
        workspace_client = AIWorkspaceClient(
            config=Config(
                credential=cred,
                region_id=region_id,
                endpoint="aiworkspace.{}.aliyuncs.com".format(region_id),
            )
        )
        # 1. Dapatkan isi dataset.
        get_dataset_resp = workspace_client.get_dataset(dataset_id)
        options = json.loads(get_dataset_resp.body.options)
        # Nilai yang direkomendasikan adalah 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('opsi baru adalah: {}'.format(update_request.options))
    
    
    change_config()

    Konsistensi baca/tulis

    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 berada. Misalnya, atur region_id ke 'cn-hangzhou' untuk China (Hangzhou).
        region_id = 'cn-hangzhou'
        # Pasangan AccessKey dari akun Alibaba Cloud memiliki izin untuk semua operasi API. Menggunakan kredensial ini untuk melakukan operasi adalah operasi berisiko tinggi. Kami sarankan Anda menggunakan Pengguna RAM untuk memanggil operasi API atau melakukan O&M rutin.
        # Untuk mencegah kebocoran pasangan AccessKey, jangan simpan ID AccessKey dan rahasia AccessKey di kode proyek Anda.
        # Contoh ini menunjukkan cara menggunakan SDK Kredensial default untuk membaca pasangan AccessKey dari variabel lingkungan untuk verifikasi identitas. Anda harus terlebih dahulu menginstal Alat Kredensial dan mengonfigurasi variabel lingkungan.
        cred = CredClient()
        dataset_id = '** ID dataset **'
    
        workspace_client = AIWorkspaceClient(
            config=Config(
                credential=cred,
                region_id=region_id,
                endpoint="aiworkspace.{}.aliyuncs.com".format(region_id),
            )
        )
        # 1. Dapatkan isi 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('opsi baru adalah: {}'.format(update_request.options))
    
    
    change_config()

    Hanya baca

    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 berada. Misalnya, atur region_id ke 'cn-hangzhou' untuk China (Hangzhou).
        region_id = 'cn-hangzhou'
        # Pasangan AccessKey dari akun Alibaba Cloud memiliki izin untuk semua operasi API. Menggunakan kredensial ini untuk melakukan operasi adalah operasi berisiko tinggi. Kami sarankan Anda menggunakan Pengguna RAM untuk memanggil operasi API atau melakukan O&M rutin.
        # Untuk mencegah kebocoran pasangan AccessKey, jangan simpan ID AccessKey dan rahasia AccessKey di kode proyek Anda.
        # Contoh ini menunjukkan cara menggunakan SDK Kredensial default untuk membaca pasangan AccessKey dari variabel lingkungan untuk verifikasi identitas. Anda harus terlebih dahulu menginstal Alat Kredensial dan mengonfigurasi variabel lingkungan.
        cred = CredClient()
        dataset_id = '** ID dataset **'
    
        workspace_client = AIWorkspaceClient(
            config=Config(
                credential=cred,
                region_id=region_id,
                endpoint="aiworkspace.{}.aliyuncs.com".format(region_id),
            )
        )
        # 1. Dapatkan isi dataset.
        get_dataset_resp = workspace_client.get_dataset(dataset_id)
        options = json.loads(get_dataset_resp.body.options)
        # Nilai yang direkomendasikan adalah 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('opsi baru adalah: {}'.format(update_request.options))
    
    
    change_config()

    Pilih berbagai JindoFuse versi

    Berikut adalah contoh kode:

    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 berada. Misalnya, atur region_id ke 'cn-hangzhou' untuk China (Hangzhou).
        region_id = 'cn-hangzhou'
        # Pasangan AccessKey dari akun Alibaba Cloud memiliki izin untuk semua operasi API. Menggunakan kredensial ini untuk melakukan operasi adalah operasi berisiko tinggi. Kami sarankan Anda menggunakan Pengguna RAM untuk memanggil operasi API atau melakukan O&M rutin.
        # Untuk mencegah kebocoran pasangan AccessKey, jangan simpan ID AccessKey dan rahasia AccessKey di kode proyek Anda.
        # Contoh ini menunjukkan cara menggunakan SDK Kredensial default untuk membaca pasangan AccessKey dari variabel lingkungan untuk verifikasi identitas. Anda harus terlebih dahulu menginstal Alat Kredensial dan mengonfigurasi variabel lingkungan.
        cred = CredClient()
        dataset_id = '** ID dataset **'
    
        workspace_client = AIWorkspaceClient(
            config=Config(
                credential=cred,
                region_id=region_id,
                endpoint="aiworkspace.{}.aliyuncs.com".format(region_id),
            )
        )
        # 1. Dapatkan isi dataset.
        get_dataset_resp = workspace_client.get_dataset(dataset_id)
        options = json.loads(get_dataset_resp.body.options)
        # Konfigurasikan versi jindo-fuse. Anda dapat mengaturnya ke 6.4.4, 6.7.0, atau 6.6.0. Untuk informasi lebih lanjut, lihat catatan rilis di 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('opsi baru adalah: {}'.format(update_request.options))
    change_version()

    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. Berikut adalah contoh kode:

    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'
        # Pasangan AccessKey dari akun Alibaba Cloud memiliki izin untuk semua operasi API. Menggunakan kredensial ini untuk melakukan operasi adalah operasi berisiko tinggi. Kami sarankan Anda menggunakan Pengguna RAM untuk memanggil operasi API atau melakukan O&M rutin.
        # Untuk mencegah kebocoran pasangan AccessKey, jangan simpan ID AccessKey dan rahasia AccessKey di kode proyek Anda.
        # Contoh ini menunjukkan cara menggunakan SDK Kredensial default untuk membaca pasangan AccessKey dari variabel lingkungan untuk verifikasi identitas. Anda harus terlebih dahulu menginstal Alat Kredensial dan mengonfigurasi variabel lingkungan.
        cred = CredClient()
        dataset_id = '** ID dataset **'
    
        workspace_client = AIWorkspaceClient(
          config=Config(
                credential=cred,
                region_id=region_id,
                endpoint="aiworkspace.{}.aliyuncs.com".format(region_id),
          )
        )
        # 1. Dapatkan isi 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('opsi baru adalah: {}'.format(update_request.options))
    
    
    turnOffMetaCache()
    

    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

    Berikut adalah contoh kode:

    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 berada. Misalnya, atur region_id ke 'cn-hangzhou' untuk China (Hangzhou).
        region_id = 'cn-hangzhou'
        # Pasangan AccessKey dari akun Alibaba Cloud memiliki izin untuk semua operasi API. Menggunakan kredensial ini untuk melakukan operasi adalah operasi berisiko tinggi. Kami sarankan Anda menggunakan Pengguna RAM untuk memanggil operasi API atau melakukan O&M rutin.
        # Untuk mencegah kebocoran pasangan AccessKey, jangan simpan ID AccessKey dan rahasia AccessKey di kode proyek Anda.
        # Contoh ini menunjukkan cara menggunakan SDK Kredensial default untuk membaca pasangan AccessKey dari variabel lingkungan untuk verifikasi identitas. Anda harus terlebih dahulu menginstal Alat Kredensial dan mengonfigurasi variabel lingkungan.
        cred = CredClient()
        dataset_id = '** ID dataset **'
    
        workspace_client = AIWorkspaceClient(
            config=Config(
                credential=cred,
                region_id=region_id,
                endpoint="aiworkspace.{}.aliyuncs.com".format(region_id),
            )
        )
        # 1. Dapatkan isi 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'] = 32
     
        update_request = UpdateDatasetRequest(
            options=json.dumps(options)
        )
        # 2. Perbarui opsi.
        workspace_client.update_dataset(dataset_id, update_request)
        print('opsi baru adalah: {}'.format(update_request.options))
     
     
    adjustThreadNum()
    

    Pasang file OSS menggunakan AppendObject

    Semua file yang dibuat secara lokal dibuat sebagai objek OSS dengan memanggil operasi AppendObject. Ukuran objek yang dibuat menggunakan AppendObject tidak boleh melebihi 5 GB. Untuk informasi lebih lanjut tentang batasan AppendObject, lihat AppendObject. Berikut adalah contohkode:

    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 berada. Misalnya, atur region_id ke 'cn-hangzhou' untuk China (Hangzhou).
        region_id = 'cn-hangzhou'
        # Pasangan AccessKey dari akun Alibaba Cloud memiliki izin untuk semua operasi API. Menggunakan kredensial ini untuk melakukan operasi adalah operasi berisiko tinggi. Kami sarankan Anda menggunakan Pengguna RAM untuk memanggil operasi API atau melakukan O&M rutin.
        # Untuk mencegah kebocoran pasangan AccessKey, jangan simpan ID AccessKey dan rahasia AccessKey di kode proyek Anda.
        # Contoh ini menunjukkan cara menggunakan SDK Kredensial default untuk membaca pasangan AccessKey dari variabel lingkungan untuk verifikasi identitas. Anda harus terlebih dahulu menginstal Alat Kredensial dan mengonfigurasi variabel lingkungan.
        cred = CredClient()
        dataset_id = '** ID dataset **'
    
        workspace_client = AIWorkspaceClient(
            config=Config(
                credential=cred,
                region_id=region_id,
                endpoint="aiworkspace.{}.aliyuncs.com".format(region_id),
            )
        )
        # 1. Dapatkan isi 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('opsi baru adalah: {}'.format(update_request.options))
    
    
    useAppendObject()

    Pasang OSS-HDFS

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

    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 berada. Misalnya, atur region_id ke 'cn-hangzhou' untuk China (Hangzhou).
        region_id = 'cn-hangzhou'
        # Pasangan AccessKey dari akun Alibaba Cloud memiliki izin untuk semua operasi API. Menggunakan kredensial ini untuk melakukan operasi adalah operasi berisiko tinggi. Kami sarankan Anda menggunakan Pengguna RAM untuk memanggil operasi API atau melakukan O&M rutin.
        # Untuk mencegah kebocoran pasangan AccessKey, jangan simpan ID AccessKey dan rahasia AccessKey di kode proyek Anda.
        # Contoh ini menunjukkan cara menggunakan SDK Kredensial default untuk membaca pasangan AccessKey dari variabel lingkungan untuk verifikasi identitas. Anda harus terlebih dahulu menginstal Alat Kredensial dan mengonfigurasi variabel lingkungan.
        cred = CredClient()
        workspace_id = '** ID ruang kerja tempat pekerjaan DLC berada **'
    
        oss_bucket = '** Bucket OSS **'
        # Gunakan endpoint OSS-HDFS.
        oss_endpoint = f'{region_id}.oss-dls.aliyuncs.com'
        # Jalur OSS-HDFS untuk dipasang.
        oss_path = '/'
        # Jalur pemasangan 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="** Nama dataset **",
            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 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",
            })
        ))
        print(f'ID dataset: {response.body.dataset_id}')
    
    createOssHdfsDataset()
    
    

    Konfigurasikan sumber daya memori

    Anda dapat menyesuaikan sumber daya memori dengan mengonfigurasi parameter fs.jindo.fuse.pod.mem.limit. Berikut adalah contoh kode:

    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 berada. Misalnya, atur region_id ke 'cn-hangzhou' untuk China (Hangzhou).
        region_id = 'cn-hangzhou'
        # Pasangan AccessKey dari akun Alibaba Cloud memiliki izin untuk semua operasi API. Menggunakan kredensial ini untuk melakukan operasi adalah operasi berisiko tinggi. Kami sarankan Anda menggunakan Pengguna RAM untuk memanggil operasi API atau melakukan O&M rutin.
        # Untuk mencegah kebocoran pasangan AccessKey, jangan simpan ID AccessKey dan rahasia AccessKey di kode proyek Anda.
        # Contoh ini menunjukkan cara menggunakan SDK Kredensial default untuk membaca pasangan AccessKey dari variabel lingkungan untuk verifikasi identitas. Anda harus terlebih dahulu menginstal Alat Kredensial dan mengonfigurasi variabel lingkungan.
        cred = CredClient()
        dataset_id = '** ID dataset **'
    
        workspace_client = AIWorkspaceClient(
            config=Config(
                credential=cred,
                region_id=region_id,
                endpoint="aiworkspace.{}.aliyuncs.com".format(region_id),
            )
        )
        # 1. Dapatkan isi dataset.
        get_dataset_resp = workspace_client.get_dataset(dataset_id)
        options = json.loads(get_dataset_resp.body.options)
        # Sumber daya memori untuk 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('opsi baru adalah: {}'.format(update_request.options))
    
    
    adjustResource()
    

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.

image

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.

image

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 osstorchconnector
  • Versi Python: Hanya Python 3.8 hingga 3.12 yang didukung.

Persiapan

  1. 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:

      Catatan

      Mengonfigurasi 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.

      Catatan

      Saat 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

  2. 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
        │   └── ...
        └── .manifest

    Format 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:

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

  2. Konfigurasikan kredensial akses untuk OSS SDK untuk Python. Untuk informasi lebih lanjut, lihat Konfigurasikan Kredensial Akses Menggunakan OSS SDK untuk Python 1.0.

  3. 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 DataLoader di 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.

    Catatan

    Dalam 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.