All Products
Search
Document Center

Platform For AI:Gunakan OSS

Last Updated:Mar 28, 2026

Di layanan Platform for AI (PAI), seperti Deep Learning Containers (DLC) atau Data Science Workshop (DSW), Anda dapat menggunakan klien ossfs 2.0 atau komponen JindoFuse yang disediakan oleh Alibaba Cloud EMR untuk memasang sumber data Object Storage Service (OSS) ke path tertentu dalam kontainer. Anda juga dapat menggunakan OSS Connector for AI/ML dan kit pengembangan perangkat lunak (SDK) OSS untuk membaca data OSS. Pilih metode pembacaan data OSS sesuai skenario Anda.

Informasi latar belakang

Selama pengembangan artificial intelligence (AI), data sumber biasanya disimpan di Object Storage Service (OSS) lalu diunduh ke lingkungan pelatihan untuk pengembangan dan pelatihan model. Namun, metode ini memiliki beberapa kekurangan:

  • Waktu unduh dataset yang lama menyebabkan GPU idle.

  • Data harus diunduh ulang untuk setiap tugas pelatihan.

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

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

Metode pembacaan data OSS

Deskripsi

Skenario yang direkomendasikan

JindoFuse

Anda dapat menggunakan komponen JindoFuse untuk memasang dataset OSS ke path tertentu dalam kontainer sehingga memungkinkan pembacaan dan penulisan data secara langsung.

  • Anda ingin membaca data OSS seolah-olah merupakan dataset lokal, dan ukuran dataset cukup kecil sehingga dapat memperoleh manfaat dari akselerasi cache lokal JindoFuse.

  • Framework 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. Klien ini menyediakan kemampuan baca-tulis sekuensial yang sangat baik dan memanfaatkan bandwidth tinggi OSS secara optimal.

ossfs 2.0 cocok untuk skenario yang memerlukan akses penyimpanan berkinerja tinggi, seperti pelatihan AI, inferensi, pemrosesan big data, kendaraan otonom, dan beban kerja komputasi-intensif lainnya. Beban kerja ini terutama melibatkan operasi baca sekuensial dan acak serta operasi tulis sekuensial (append-only), dan tidak memerlukan semantik POSIX penuh.

OSS Connector for AI/ML

PAI mengintegrasikan OSS Connector for AI/ML, yang memungkinkan Anda melakukan streaming dan membaca file OSS secara langsung dalam kode PyTorch. Metode ini menyediakan pembacaan data yang sederhana dan efisien serta memiliki keunggulan berikut:

  • Pemuatan streaming: Anda dapat melakukan streaming data secara langsung tanpa mengunduhnya ke lingkungan pelatihan. Hal ini mengurangi waktu idle GPU dan menurunkan biaya.

  • Antarmuka native PyTorch: Konektor ini kompatibel dengan antarmuka PyTorch Dataset, sehingga mudah digunakan. Konektor ini juga menyediakan enkapsulasi yang lebih baik dibandingkan SDK OSS, sehingga lebih mudah dikustomisasi dan dimodifikasi.

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

Metode ini memungkinkan Anda membaca dan menulis data OSS tanpa perlu memasangnya. Metode ini direkomendasikan jika Anda melakukan pelatihan dengan PyTorch, perlu membaca jutaan file kecil, dan memiliki persyaratan throughput tinggi. OSS Connector for AI/ML dapat mempercepat pembacaan dataset secara signifikan dalam skenario ini.

OSS SDK

Anda dapat menggunakan OSS2 untuk melakukan streaming data dari OSS. OSS2 adalah solusi yang fleksibel dan efisien yang dapat mengurangi latensi permintaan data secara signifikan dan meningkatkan efisiensi pelatihan.

Metode ini cocok jika Anda memerlukan akses sementara ke data OSS tanpa memasangnya, atau perlu mengontrol akses data secara terprogram berdasarkan logika bisnis Anda. Dalam kasus ini, Anda dapat menggunakan OSS Python SDK atau OSS Python API.

JindoFuse

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

Metode pemasangan

Pasang OSS di DLC

Anda dapat memasang dataset OSS saat membuat pekerjaan DLC. Dua jenis pemasangan didukung. Untuk informasi lebih lanjut, lihat Buat pekerjaan pelatihan.

image

Jenis pemasangan

Deskripsi

Dataset

Pilih dataset bertipe Object Storage Service (OSS) dan konfigurasikan Mount Path. Saat menggunakan dataset publik, hanya mode pemasangan read-only yang didukung.

Direct Mount

Langsung pasang path penyimpanan bucket OSS.

Saat menggunakan kuota sumber daya Lingjun dengan cache lokal diaktifkan, Anda dapat mengaktifkan sakelar Use Cache untuk mengaktifkan fitur caching.

Pasang OSS di DSW

Anda dapat memasang dataset OSS saat membuat instans DSW. Dua jenis pemasangan didukung. Untuk informasi lebih lanjut, lihat Buat instans DSW.

image

Jenis pemasangan

Deskripsi

Mount Dataset

Pilih dataset Object Storage Service (OSS) dan konfigurasikan Mount Path. Dataset publik hanya dapat dipasang dalam mode read-only.

Mount Storage Path

Langsung pasang path penyimpanan bucket OSS.

Batasan konfigurasi default

Jika parameter Advanced Configuration kosong, konfigurasi default akan digunakan. Konfigurasi default memiliki batasan berikut:

  • Untuk membaca file OSS dengan cepat, metadata seperti daftar direktori dan file di-cache saat OSS dipasang.

    Dalam tugas terdistribusi, jika beberapa node perlu membuat direktori yang sama dan memeriksa keberadaannya, cache metadata menyebabkan setiap node mencoba membuat direktori tersebut. Hanya satu node yang berhasil membuat direktori, sedangkan node lainnya melaporkan error.

  • Secara default, API Multipart OSS digunakan untuk membuat file. Selama file ditulis, objek tersebut tidak terlihat di OSS. Anda hanya dapat melihat objek tersebut di halaman OSS setelah semua operasi penulisan selesai.

  • Operasi penulisan dan pembacaan file secara konkuren tidak didukung.

  • Operasi penulisan acak pada file tidak didukung.

Konfigurasi umum JindoFuse

Anda juga dapat menyesuaikan parameter JindoFuse dalam konfigurasi lanjutan berdasarkan skenario Anda.

Topik ini memberikan saran tentang cara mengonfigurasi JindoFuse dalam skenario tertentu. Ini bukan konfigurasi optimal untuk semua skenario. Untuk konfigurasi yang lebih fleksibel, lihat Panduan Pengguna JindoFuse.
  • Quick Read/write: memastikan pembacaan dan penulisan cepat. Namun, ketidakkonsistenan data dapat terjadi selama pembacaan atau penulisan konkuren. Anda dapat memasang data pelatihan dan model ke path pemasangan mode ini. Kami menyarankan agar Anda tidak menggunakan path pemasangan mode ini sebagai direktori kerja.

    {
      "fs.oss.download.thread.concurrency": "Dua kali jumlah core CPU",
      "fs.oss.upload.thread.concurrency": "Dua kali jumlah core CPU",
      "fs.jindo.args": "-oattr_timeout=3 -oentry_timeout=0 -onegative_timeout=0 -oauto_cache -ono_symlink"
    }
    
  • Incremental Read/Write: memastikan konsistensi data selama penulisan inkremental. Jika data asli ditimpa, ketidakkonsistenan data dapat terjadi. Kecepatan pembacaan sedikit lebih lambat. Anda dapat menggunakan mode ini untuk menyimpan file bobot model untuk data pelatihan.

    {
      "fs.oss.upload.thread.concurrency": "Dua kali jumlah core CPU",
      "fs.jindo.args": "-oattr_timeout=3 -oentry_timeout=0 -onegative_timeout=0 -oauto_cache -ono_symlink"
    }
    
  • Consistent Read/write: memastikan konsistensi data selama pembacaan atau penulisan konkuren dan cocok untuk skenario yang memerlukan konsistensi data tinggi dan tidak memerlukan pembacaan cepat. Anda dapat menggunakan mode ini untuk menyimpan kode proyek Anda.

    {
      "fs.jindo.args": "-oattr_timeout=0 -oentry_timeout=0 -onegative_timeout=0 -oauto_cache -ono_symlink"
    }
    
  • Read-only: hanya mengizinkan pembacaan. Anda dapat menggunakan mode ini untuk memasang dataset publik.

    {
      "fs.oss.download.thread.concurrency": "Dua kali jumlah core CPU",
      "fs.jindo.args": "-oro -oattr_timeout=7200 -oentry_timeout=7200 -onegative_timeout=7200 -okernel_cache -ono_symlink"
    }

Selain itu, operasi konfigurasi umum meliputi hal berikut:

  • Pilih versi JindoFuse yang berbeda:

    {
      "fs.jindo.fuse.pod.image.tag": "6.7.0"
    }
  • Nonaktifkan cache metadata: Saat menjalankan tugas terdistribusi dan beberapa node mencoba menulis ke direktori yang sama secara bersamaan, cache dapat menyebabkan operasi penulisan pada beberapa node gagal. Anda dapat mengatasi masalah ini dengan memodifikasi parameter baris perintah JindoFuse dan menambahkan -oattr_timeout=0 -oentry_timeout=0 -onegative_timeout=0.

    {
      "fs.jindo.args": "-oattr_timeout=0-oentry_timeout=0-onegative_timeout=0"
    }
  • Atur jumlah thread untuk mengunggah atau mengunduh data: Anda dapat mengonfigurasi parameter berikut untuk menyesuaikan jumlah thread.

    {
      "fs.oss.upload.thread.concurrency": "32",
      "fs.oss.download.thread.concurrency": "32",
      "fs.oss.read.readahead.buffer.count": "64",
      "fs.oss.read.readahead.buffer.size": "4194304"
    }
  • Pasang file OSS menggunakan metode AppendObject: Semua file yang Anda buat secara lokal dibuat sebagai objek (file) dengan memanggil API OSS AppendObject. Ukuran akhir objek yang dibuat menggunakan metode AppendObject tidak boleh melebihi 5 GB. Untuk informasi lebih lanjut tentang batasan AppendObject, lihat AppendObject. Berikut adalah contoh konfigurasi:

    {
      "fs.jindo.args": "-oattr_timeout=0 -oentry_timeout=0 -onegative_timeout=0",
      "fs.oss.append.enable": "true",
      "fs.oss.flush.interval.millisecond": "1000",
      "fs.oss.read.readahead.buffer.size": "4194304",
      "fs.oss.write.buffer.size": "262144"
    }
  • Pasang OSS-HDFS: Untuk mengaktifkan OSS-HDFS, lihat Apa itu layanan OSS-HDFS. Untuk skenario pelatihan terdistribusi, kami menyarankan Anda menambahkan parameter berikut:

    {
      "fs.jindo.args": "-oattr_timeout=0 -oentry_timeout=0 -onegative_timeout=0 -ono_symlink -ono_xattr -ono_flock -odirect_io",
      "fs.oss.flush.interval.millisecond": "10000",
      "fs.oss.randomwrite.sync.interval.millisecond": "10000"
    }
  • Konfigurasi sumber daya memori: Anda dapat menyesuaikan sumber daya memori dengan mengonfigurasi parameter fs.jindo.fuse.pod.mem.limit. Berikut adalah contoh konfigurasi:

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

Gunakan SDK Python untuk memodifikasi parameter JindoFuse untuk dataset

Anda juga dapat memodifikasi parameter JindoFuse menggunakan SDK Python.

  1. Lakukan langkah-langkah berikut:

    1. Instal SDK ruang kerja.

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

  2. Modifikasi parameter JindoFuse.

    Pembacaan/penulisan 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 Akun Alibaba Cloud memiliki izin atas semua operasi API. Menggunakan kredensial ini untuk melakukan operasi merupakan operasi berisiko tinggi. Kami menyarankan agar Anda menggunakan Pengguna Resource Access Management (RAM) untuk memanggil operasi API atau melakukan O&M rutin.
        # Untuk mencegah kebocoran pasangan AccessKey Anda, jangan simpan ID AccessKey dan Rahasia AccessKey dalam kode proyek Anda.
        # Contoh ini menunjukkan cara menggunakan SDK Credentials default untuk membaca pasangan AccessKey dari variabel lingkungan untuk verifikasi identitas. Anda harus terlebih dahulu menginstal alat Credentials 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 konten 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()

    Pembacaan/penulisan inkremental

    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 Akun Alibaba Cloud memiliki izin atas semua operasi API. Menggunakan kredensial ini untuk melakukan operasi merupakan operasi berisiko tinggi. Kami menyarankan agar Anda menggunakan Pengguna Resource Access Management (RAM) untuk memanggil operasi API atau melakukan O&M rutin.
        # Untuk mencegah kebocoran pasangan AccessKey Anda, jangan simpan ID AccessKey dan Rahasia AccessKey dalam kode proyek Anda.
        # Contoh ini menunjukkan cara menggunakan SDK Credentials default untuk membaca pasangan AccessKey dari variabel lingkungan untuk verifikasi identitas. Anda harus terlebih dahulu menginstal alat Credentials 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 konten 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 Akun Alibaba Cloud memiliki izin atas semua operasi API. Menggunakan kredensial ini untuk melakukan operasi merupakan operasi berisiko tinggi. Kami menyarankan agar Anda menggunakan Pengguna Resource Access Management (RAM) untuk memanggil operasi API atau melakukan O&M rutin.
        # Untuk mencegah kebocoran pasangan AccessKey Anda, jangan simpan ID AccessKey dan Rahasia AccessKey dalam kode proyek Anda.
        # Contoh ini menunjukkan cara menggunakan SDK Credentials default untuk membaca pasangan AccessKey dari variabel lingkungan untuk verifikasi identitas. Anda harus terlebih dahulu menginstal alat Credentials 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 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('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 Akun Alibaba Cloud memiliki izin atas semua operasi API. Menggunakan kredensial ini untuk melakukan operasi merupakan operasi berisiko tinggi. Kami menyarankan agar Anda menggunakan Pengguna Resource Access Management (RAM) untuk memanggil operasi API atau melakukan O&M rutin.
        # Untuk mencegah kebocoran pasangan AccessKey Anda, jangan simpan ID AccessKey dan Rahasia AccessKey dalam kode proyek Anda.
        # Contoh ini menunjukkan cara menggunakan SDK Credentials default untuk membaca pasangan AccessKey dari variabel lingkungan untuk verifikasi identitas. Anda harus terlebih dahulu menginstal alat Credentials 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 konten 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 versi JindoFuse yang berbeda

    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 Akun Alibaba Cloud memiliki izin atas semua operasi API. Menggunakan kredensial ini untuk melakukan operasi merupakan operasi berisiko tinggi. Kami menyarankan agar Anda menggunakan Pengguna Resource Access Management (RAM) untuk memanggil operasi API atau melakukan O&M rutin.
        # Untuk mencegah kebocoran pasangan AccessKey Anda, jangan simpan ID AccessKey dan Rahasia AccessKey dalam kode proyek Anda.
        # Contoh ini menunjukkan cara menggunakan SDK Credentials default untuk membaca pasangan AccessKey dari variabel lingkungan untuk verifikasi identitas. Anda harus terlebih dahulu menginstal alat Credentials 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 konten 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 mengatasi 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 Akun Alibaba Cloud memiliki izin atas semua operasi API. Menggunakan kredensial ini untuk melakukan operasi merupakan operasi berisiko tinggi. Kami menyarankan agar Anda menggunakan Pengguna Resource Access Management (RAM) untuk memanggil operasi API atau melakukan O&M rutin.
        # Untuk mencegah kebocoran pasangan AccessKey Anda, jangan simpan ID AccessKey dan Rahasia AccessKey dalam kode proyek Anda.
        # Contoh ini menunjukkan cara menggunakan SDK Credentials default untuk membaca pasangan AccessKey dari variabel lingkungan untuk verifikasi identitas. Anda harus terlebih dahulu menginstal alat Credentials 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 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('opsi baru adalah: {}'.format(update_request.options))
    
    
    turnOffMetaCache()
    

    Atur jumlah thread untuk mengunggah atau mengunduh data

    Anda dapat mengonfigurasi parameter berikut untuk menyesuaikan jumlah thread:

    • fs.oss.upload.thread.concurrency:32

    • fs.oss.download.thread.concurrency:32

    • fs.oss.read.readahead.buffer.count:64

    • fs.oss.read.readahead.buffer.size:4194304

    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 Akun Alibaba Cloud memiliki izin atas semua operasi API. Menggunakan kredensial ini untuk melakukan operasi merupakan operasi berisiko tinggi. Kami menyarankan agar Anda menggunakan Pengguna Resource Access Management (RAM) untuk memanggil operasi API atau melakukan O&M rutin.
        # Untuk mencegah kebocoran pasangan AccessKey Anda, jangan simpan ID AccessKey dan Rahasia AccessKey dalam kode proyek Anda.
        # Contoh ini menunjukkan cara menggunakan SDK Credentials default untuk membaca pasangan AccessKey dari variabel lingkungan untuk verifikasi identitas. Anda harus terlebih dahulu menginstal alat Credentials 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 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'] = 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 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 useAppendObject():
        # Gunakan wilayah tempat pekerjaan DLC berada. Misalnya, atur region_id ke 'cn-hangzhou' untuk China (Hangzhou).
        region_id = 'cn-hangzhou'
        # Pasangan AccessKey Akun Alibaba Cloud memiliki izin atas semua operasi API. Menggunakan kredensial ini untuk melakukan operasi merupakan operasi berisiko tinggi. Kami menyarankan agar Anda menggunakan Pengguna Resource Access Management (RAM) untuk memanggil operasi API atau melakukan O&M rutin.
        # Untuk mencegah kebocoran pasangan AccessKey Anda, jangan simpan ID AccessKey dan Rahasia AccessKey dalam kode proyek Anda.
        # Contoh ini menunjukkan cara menggunakan SDK Credentials default untuk membaca pasangan AccessKey dari variabel lingkungan untuk verifikasi identitas. Anda harus terlebih dahulu menginstal alat Credentials 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 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('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 Akun Alibaba Cloud memiliki izin atas semua operasi API. Menggunakan kredensial ini untuk melakukan operasi merupakan operasi berisiko tinggi. Kami menyarankan agar Anda menggunakan Pengguna Resource Access Management (RAM) untuk memanggil operasi API atau melakukan O&M rutin.
        # Untuk mencegah kebocoran pasangan AccessKey Anda, jangan simpan ID AccessKey dan Rahasia AccessKey dalam kode proyek Anda.
        # Contoh ini menunjukkan cara menggunakan SDK Credentials default untuk membaca pasangan AccessKey dari variabel lingkungan untuk verifikasi identitas. Anda harus terlebih dahulu menginstal alat Credentials 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'
        # Path OSS-HDFS yang akan dipasang.
        oss_path = '/'
        # Path 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 menyarankan Anda menambahkan parameter berikut.
                'fs.jindo.args': '-oattr_timeout=0 -oentry_timeout=0 -onegative_timeout=0 -ono_symlink -ono_xattr -ono_flock -odirect_io',
                'fs.oss.flush.interval.millisecond': "10000",
                'fs.oss.randomwrite.sync.interval.millisecond': "10000",
            })
        ))
        print(f'datasetId: {response.body.dataset_id}')
    
    createOssHdfsDataset()
    
    

    Konfigurasi 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 Akun Alibaba Cloud memiliki izin atas semua operasi API. Menggunakan kredensial ini untuk melakukan operasi merupakan operasi berisiko tinggi. Kami menyarankan agar Anda menggunakan Pengguna Resource Access Management (RAM) untuk memanggil operasi API atau melakukan O&M rutin.
        # Untuk mencegah kebocoran pasangan AccessKey Anda, jangan simpan ID AccessKey dan Rahasia AccessKey dalam kode proyek Anda.
        # Contoh ini menunjukkan cara menggunakan SDK Credentials default untuk membaca pasangan AccessKey dari variabel lingkungan untuk verifikasi identitas. Anda harus terlebih dahulu menginstal alat Credentials 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 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('opsi baru adalah: {}'.format(update_request.options))
    
    
    adjustResource()
    

ossfs 2.0

Saat memasang sumber data OSS, Anda dapat mengatur {"mountType":"ossfs"} di Advanced Configuration untuk menggunakan metode pemasangan ossfs.

Metode pemasangan

Memasang OSS di DLC

Anda dapat memasang dataset OSS saat membuat pekerjaan DLC. Dua jenis pemasangan didukung. Untuk informasi lebih lanjut tentang metode konfigurasi, lihat Buat pekerjaan pelatihan.

image

Jenis pemasangan

Deskripsi

Dataset

Pilih dataset bertipe Object Storage Service (OSS) dan konfigurasikan mount path. Saat menggunakan dataset publik, hanya mode pemasangan read-only yang didukung.

Direct Mount

Langsung pasang path penyimpanan bucket OSS.

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

Pasang OSS di DSW

Anda dapat memasang dataset OSS saat membuat instans DSW. Dua jenis pemasangan didukung. Untuk informasi lebih lanjut tentang metode konfigurasi, lihat Buat instans DSW.

image

Jenis pemasangan

Deskripsi

Dataset Mount

Pilih dataset bertipe Object Storage Service (OSS) dan konfigurasikan mount path. Saat menggunakan dataset publik, hanya mode pemasangan read-only yang didukung.

Storage Path Mount

Langsung pasang path penyimpanan bucket OSS.

Konfigurasi umum ossfs

Di Advanced Configuration, Anda dapat mengatur parameter lanjutan menggunakan fs.ossfs.args. Pisahkan beberapa parameter dengan koma ,. Untuk informasi lebih lanjut tentang parameter lanjutan, lihat ossfs 2.0. Contoh berikut menggambarkan skenario umum:

  • Sumber data tidak berubah selama tugas: Jika file yang akan dibaca tidak akan dimodifikasi selama proses, Anda dapat mengonfigurasi waktu cache yang lebih lama untuk mengurangi jumlah permintaan metadata. Skenario khas adalah membaca batch file yang ada lalu menghasilkan batch file baru setelah pemrosesan.

    {
        "mountType":"ossfs",
        "fs.ossfs.args": "-oattr_timeout=7200" 
    }
  • Pembacaan/penulisan cepat: Anda dapat menggunakan waktu cache metadata yang lebih singkat untuk menyeimbangkan efisiensi caching dan ketepatan waktu data.

    {
        "mountType":"ossfs",
        "fs.ossfs.args": "-oattr_timeout=3, -onegative_timeout=0"
    }
  • Konsistensi baca/tulis untuk tugas terdistribusi: Secara default, ossfs memperbarui data file berdasarkan caching metadata. Anda dapat menggunakan konfigurasi berikut untuk mencapai tampilan yang tersinkronisasi di beberapa node.

    {   
        "mountType":"ossfs",
        "fs.ossfs.args": "-onegative_timeout=0, -oclose_to_open"
    }
  • OOM karena terlalu banyak file terbuka dalam skenario DLC/DSW: Dalam skenario DLC atau DSW, konkurensi tugas yang tinggi dapat menyebabkan banyak file dibuka secara bersamaan, yang dapat menyebabkan masalah kehabisan memori (OOM). Anda dapat menggunakan konfigurasi berikut untuk mengurangi tekanan memori.

    {
        "mountType":"ossfs",
        "fs.ossfs.args": "-oreaddirplus=false, -oinode_cache_eviction_threshold=300000"
    }
  • Kegagalan saat menulis file besar: Parameter -oupload_buffer_size mengatur ukuran buffer dalam byte untuk unggah multi-bagian. Parameter ini menentukan ukuran file tertulis maksimum, dihitung dengan rumus berikut: upload_buffer_size * 10000.

    Secara default, ossfs 2.0 mengatur ukuran bagian untuk unggah multi-bagian menjadi 8 MiB. Hal ini mendukung penulisan file hingga 78,125 GiB. Menulis file yang melebihi batas ini akan gagal. Anda dapat meningkatkan ukuran bagian dengan mengonfigurasi opsi -oupload_buffer_size untuk mendukung file yang lebih besar. Misalnya, jika Anda mengatur ukuran bagian menjadi 32 MiB (33.554.432 byte), Anda dapat menulis file hingga 312,5 GiB. Perhatikan bahwa peningkatan nilai -upload_buffer_size mengonsumsi lebih banyak memori. Anda dapat mengontrol penggunaan memori dengan mengonfigurasi opsi -total_mem_limit. Untuk informasi lebih lanjut, lihat opsi pemasangan.

    {
        "mountType":"ossfs",
        "fs.ossfs.args": "-oupload_buffer_size=33554432"
    }
    

OSS Connector for AI/ML

OSS Connector for AI/ML adalah pustaka klien yang dikembangkan oleh tim OSS Alibaba Cloud untuk skenario AI dan pembelajaran mesin. Pustaka ini menyediakan pengalaman pemuatan data yang nyaman untuk pelatihan PyTorch skala besar, secara signifikan mengurangi waktu transmisi data dan kompleksitas, serta mempercepat pelatihan model. Hal ini meningkatkan efisiensi dengan mencegah operasi yang tidak perlu dan bottleneck pemuatan data. Untuk mengoptimalkan pengalaman pengguna dan mempercepat akses data, PAI mengintegrasikan OSS Connector for AI/ML. Integrasi ini memungkinkan Anda menggunakan kode PyTorch untuk membaca objek OSS secara efisien dalam mode streaming.

Batasan

  • Citra resmi: Anda hanya dapat menggunakan modul OSS Connector for AI/ML dengan citra PyTorch 2.0 atau yang lebih baru dalam pekerjaan DLC atau instans DSW.

  • Citra kustom: Hanya versi PyTorch 2.0 dan yang lebih baru yang didukung. Jika Anda menggunakan citra kustom yang memenuhi persyaratan ini, Anda dapat menjalankan perintah berikut untuk menginstal modul OSS Connector for AI/ML.

    pip install -i http://yum.tbsite.net/aliyun-pypi/simple/ --extra-index-url http://yum.tbsite.net/pypi/simple/ --trusted-host=yum.tbsite.net 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 tanpa kata sandi ke OSS untuk pekerjaan Deep Learning Containers (DLC). Untuk informasi lebih lanjut, lihat Konfigurasikan peran RAM DLC. Setelah Anda mengonfigurasi file kredensial, pekerjaan DLC dapat memperoleh kredensial akses sementara dari Security Token Service (STS). Hal ini memungkinkan akses aman ke OSS atau sumber daya cloud lainnya tanpa secara eksplisit mengonfigurasi informasi otentikasi, yang mengurangi risiko kebocoran kunci.

    • Konfigurasikan file kredensial dalam proyek kode Anda untuk mengelola informasi otentikasi. Berikut adalah contoh konfigurasi:

      Catatan

      Mengonfigurasi informasi AccessKey dalam teks biasa menimbulkan risiko keamanan. Kami menyarankan agar Anda menggunakan peran RAM untuk secara otomatis mengonfigurasi kredensial dalam instans DLC. Untuk informasi lebih lanjut, lihat Konfigurasikan peran RAM DLC.

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

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

      Tabel berikut menjelaskan item konfigurasi.

      Item konfigurasi

      Wajib

      Deskripsi

      Nilai contoh

      AccessKeyId

      Ya

      ID AccessKey dan Rahasia AccessKey dari Akun Alibaba Cloud atau Pengguna RAM.

      Catatan

      Saat menggunakan kredensial akses sementara yang diperoleh dari STS untuk mengakses OSS, atur ini ke ID AccessKey dan Rahasia AccessKey dari kredensial sementara tersebut.

      NTS****

      AccessKeySecret

      Ya

      7NR2****

      SecurityToken

      Tidak

      Token akses sementara. Saat menggunakan kredensial akses sementara yang diperoleh dari STS untuk mengakses OSS, Anda harus mengatur parameter ini.

      STS.6MC2****

      Expiration

      Tidak

      Waktu kedaluwarsa informasi otentikasi. Jika Expiration kosong, informasi otentikasi tidak pernah kedaluwarsa. Setelah informasi otentikasi kedaluwarsa, OSS Connector akan membaca ulang informasi otentikasi.

      2024-08-20T00:00:00Z

  2. Konfigurasikan file config.json. Berikut adalah contoh konfigurasi:

    Anda dapat mengonfigurasi file config.json dalam proyek kode Anda untuk mengelola parameter inti, seperti jumlah proses konkuren dan pengaturan pra-ambil. Anda juga dapat menentukan lokasi penyimpanan file log. Saat menggunakan antarmuka OSS Connector for AI/ML, Anda dapat menentukan path file config.json. Sistem kemudian secara otomatis mengambil nilai pemrosesan konkuren dan pra-ambil untuk membaca serta mengeluarkan log terkait untuk permintaan data OSS ke file log yang ditentukan.

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

    Tabel berikut menjelaskan item konfigurasi.

    Item konfigurasi

    Wajib

    Deskripsi

    Nilai contoh

    logLevel

    Ya

    Tingkat pencatatan log. Default adalah INFO. Nilai yang valid:

    • 0: Debug

    • 1: INFO

    • 2: WARN

    • 3: ERROR

    1

    logPath

    Ya

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

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

    auditPath

    Ya

    Log audit untuk I/O konektor, yang mencatat permintaan baca dan tulis dengan latensi lebih dari 100 ms. Path default adalah /var/log/oss-connector/audit.log.

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

    DatasetConfig

    prefetchConcurrency

    Ya

    Jumlah tugas konkuren saat menggunakan dataset untuk pra-ambil data dari OSS. Nilai default adalah 24.

    24

    prefetchWorker

    Ya

    Jumlah vCPU yang dapat digunakan untuk pra-ambil data dari OSS menggunakan dataset. Nilai default adalah 4.

    2

    checkpointConfig

    prefetchConcurrency

    Ya

    Jumlah tugas konkuren saat menggunakan pembacaan checkpoint untuk pra-ambil data dari OSS. Nilai default adalah 24.

    24

    prefetchWorker

    Ya

    Jumlah vCPU yang dapat digunakan untuk pra-ambil data dari OSS menggunakan pembacaan checkpoint. Nilai default adalah 4.

    4

    uploadConcurrency

    Ya

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

    64

Penggunaan

OSS Connector for AI/ML menyediakan dua antarmuka akses dataset: OssMapDataset dan OssIterableDataset. Antarmuka ini merupakan ekstensi dari antarmuka PyTorch Dataset dan IterableDataset, masing-masing. OssIterableDataset dioptimalkan untuk pra-ambil, yang menghasilkan efisiensi pelatihan lebih tinggi. Sebaliknya, urutan pembacaan data OssMapDataset ditentukan oleh DataLoader dan mendukung operasi shuffle. Oleh karena itu, Anda dapat memilih antarmuka akses dataset berdasarkan saran berikut:

  • Jika Anda memiliki memori terbatas atau data dalam jumlah besar, hanya memerlukan pembacaan sekuensial, dan tidak memerlukan pemrosesan paralel yang signifikan, gunakan OssIterableDataset untuk membangun dataset Anda.

  • Sebaliknya, jika Anda memiliki memori yang cukup, data dalam jumlah kecil, dan memerlukan operasi acak serta pemrosesan paralel, gunakan OssMapDataset untuk membangun dataset Anda.

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

Isi berikut menjelaskan cara menggunakan ketiga antarmuka ini:

OssMapDataset

Antarmuka ini mendukung tiga mode akses dataset berikut:

  • Akses folder berdasarkan awalan path OSS

    Metode ini lebih sederhana, intuitif, dan lebih mudah dipelihara serta diperluas karena Anda hanya perlu menentukan nama folder tanpa mengonfigurasi file indeks. Jika struktur folder OSS Anda seperti berikut, Anda dapat menggunakan metode ini untuk mengakses dataset:

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

    Saat menggunakan metode ini, Anda perlu menentukan awalan path OSS dan menyesuaikan metode parsing untuk aliran file. Berikut adalah metode untuk parsing dan transformasi file gambar:

    def read_and_transform(data):
        normalize = transforms.Normalize(mean=[0.485, 0.456, 0.406],
                                         std=[0.229, 0.224, 0.225])
        transform = transforms.Compose([
            transforms.RandomResizedCrop(224),
            transforms.RandomHorizontalFlip(),
            transforms.ToTensor(),
            normalize,
        ])
    
        try:
            img = accimage.Image((data.read()))
            val = transform(img)
            label = data.label # nama file
        except Exception as e:
            print("gagal membaca", e)
            return None, 0
        return val, label
    dataset = OssMapDataset.from_prefix("{oss_data_folder_uri}", endpoint="{oss_endpoint}", transform=read_and_transform, cred_path=cred_path, config_path=config_path)
  • Akses file berdasarkan manifest_file

    Metode ini mendukung akses data dari beberapa bucket OSS dan menyediakan pendekatan manajemen data yang lebih fleksibel. Jika struktur folder OSS Anda seperti berikut dan Anda memiliki manifest_file yang mengelola hubungan antara nama file dan label, Anda dapat menggunakan metode ini untuk mengakses dataset.

    dataset_folder/
        ├── class1/
        │   ├── image1.JPEG
        │   └── ...
        ├── class2/
        │   ├── image2.JPEG
        │   └── ...
        └── .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 dengan OssMapDataset. Contoh berikut menunjukkan cara menggunakan ketiga metode ini:

  • Akses folder berdasarkan awalan path OSS

    dataset = OssIterableDataset.from_prefix("{oss_data_folder_uri}", endpoint="{oss_endpoint}", transform=read_and_transform, cred_path=cred_path, config_path=config_path)
  • Akses file berdasarkan manifest_file

    dataset = OssIterableDataset.from_manifest_file("{manifest_file_path}", manifest_parser, "", endpoint=endpoint, transform=read_and_trans, cred_path=cred_path, config_path=config_path)
  • Akses file berdasarkan daftar URI OSS

    dataset = OssIterableDataset.from_objects(uris, endpoint=endpoint, transform=read_and_trans, cred_path=cred_path, config_path=config_path)

OssCheckpoint

Saat ini, fitur OssCheckpoint hanya dapat digunakan dalam lingkungan sumber daya komputasi umum. OSS Connector for AI/ML mendukung akses file model OSS dan menyimpan file model ke OSS melalui OssCheckpoint. Contoh berikut menunjukkan cara menggunakan antarmuka:

checkpoint = OssCheckpoint(endpoint="{oss_endpoint}", cred_path=cred_path, config_path=config_path)

checkpoint_read_uri = "{checkpoint_path}"
checkpoint_write_uri = "{checkpoint_path}"
with checkpoint.reader(checkpoint_read_uri) as reader:
    state_dict = torch.load(reader)
    model.load_state_dict(state_dict)
with checkpoint.writer(checkpoint_write_uri) as writer:
    torch.save(model.state_dict(), writer)

Contoh kode

Berikut adalah contoh kode untuk OSS Connector for AI/ML. Anda dapat menggunakan contoh kode ini untuk mengakses data OSS:

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

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

epochs = 100  # Tentukan epoch
checkpoint_read_uri = "{checkpoint_path}"
checkpoint_write_uri = "{checkpoint_path}"
with checkpoint.reader(checkpoint_read_uri) as reader:
    state_dict = torch.load(reader)
    model.load_state_dict(state_dict)


def read_and_transform(data):
    normalize = transforms.Normalize(mean=[0.485, 0.456, 0.406],
                                     std=[0.229, 0.224, 0.225])
    transform = transforms.Compose([
        transforms.RandomResizedCrop(224),
        transforms.RandomHorizontalFlip(),
        transforms.ToTensor(),
        normalize,
    ])

    try:
        img = accimage.Image((data.read()))
        value = transform(img)
    except Exception as e:
        print("gagal membaca", e)
        return None, 0
    return value, 0
dataset = OssMapDataset.from_prefix("{oss_data_folder_uri}", endpoint="{oss_endpoint}", transform=read_and_transform, cred_path=cred_path, config_path=config_path)
data_loader = torch.utils.data.DataLoader(
    dataset, batch_size="{batch_size}",num_workers="{num_workers}", pin_memory=True)

for epoch in range(args.epochs):
    for step, (images, target) in enumerate(data_loader):
        # pemrosesan batch
        # pelatihan model
    # simpan model
    with checkpoint.writer(checkpoint_write_uri) as writer:
        torch.save(model.state_dict(), writer)

Langkah-langkah utama dalam kode di atas adalah sebagai berikut:

  • Gunakan OssMapDataset untuk membangun dataset dari URI OSS yang ditentukan. Dataset ini mengikuti paradigma penggunaan Dataloader PyTorch standar.

  • Gunakan dataset ini untuk membangun Dataloader Torch standar. Kemudian, lakukan proses pelatihan standar dengan mengiterasi dataloader untuk memproses setiap batch, melatih model, dan menyimpan hasilnya.

  • Proses ini tidak mengharuskan Anda memasang dataset ke lingkungan kontainer atau menyimpan data secara lokal terlebih dahulu, yang memungkinkan pemuatan data sesuai permintaan.

OSS SDK

OSS Python SDK

Anda dapat menggunakan OSS Python SDK untuk membaca dan menulis data di OSS. Prosedurnya adalah sebagai berikut:

  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>')
    

    Modifikasi item konfigurasi berikut sesuai kebutuhan:

    Item konfigurasi

    Deskripsi

    <Endpoint>

    Endpoint wilayah tempat bucket berada. Misalnya, jika bucket berada di wilayah China (Hangzhou), atur parameter ini ke https://oss-cn-hangzhou.aliyuncs.com. Untuk informasi lebih lanjut tentang cara mendapatkan endpoint, lihat Wilayah dan endpoint.

    <your_bucket_name>

    Masukkan nama bucket.

    <your_file_path/your_file>

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

    <your_object_content>

    Konten yang akan ditambahkan. Modifikasi sesuai kebutuhan.

OSS Python API

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

  • Muat data pelatihan

    Anda dapat menyimpan data di bucket OSS dan menempatkan path data serta label yang sesuai dalam file indeks di bucket yang sama. Dengan menyesuaikan DataSet, Anda dapat menggunakan API 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 contoh kode ini, pastikan variabel lingkungan OSS_ACCESS_KEY_ID dan OSS_ACCESS_KEY_SECRET telah diatur.
    auth = oss2.ProviderAuth(EnvironmentVariableCredentialsProvider())
    dataset = OSSDataset(endpoint, bucket, auth, index_file)
    data_loader = torch.utils.data.DataLoader(
        dataset,
        batch_size=batch_size,
        num_workers=num_loaders,
        pin_memory=True)
    

    Item konfigurasi utama dijelaskan di bawah ini:

    Konfigurasi utama

    Deskripsi

    endpoint

    Endpoint wilayah tempat bucket berada. Misalnya, jika bucket berada di wilayah China (Hangzhou), atur parameter ini ke https://oss-cn-hangzhou.aliyuncs.com. Untuk informasi lebih lanjut tentang cara mendapatkan endpoint, lihat Wilayah dan endpoint.

    bucket

    Masukkan nama bucket.

    index_file

    Path file indeks.

    Catatan

    Dalam contoh ini, setiap sampel dalam file indeks dipisahkan oleh koma (,), dan path sampel serta label dipisahkan oleh titik dua (:).

  • Simpan atau muat model

    Anda dapat menggunakan OSS Python API untuk menyimpan atau memuat model PyTorch. Untuk informasi lebih lanjut tentang cara menyimpan atau memuat model PyTorch, lihat PyTorch. Berikut adalah contohnya:

    • Simpan model

      from io import BytesIO
      import torch
      import oss2
      from oss2.credentials import EnvironmentVariableCredentialsProvider
      
      auth = oss2.ProviderAuth(EnvironmentVariableCredentialsProvider())
      # bucket_name
      bucket_name = "<your_bucket_name>"
      bucket = oss2.Bucket(auth, endpoint, bucket_name)
      buffer = BytesIO()
      torch.save(model.state_dict(), buffer)
      bucket.put_object("<your_model_path>", buffer.getvalue())
      

      Di mana:

      • endpoint adalah endpoint wilayah tempat bucket berada. Misalnya, untuk China (Hangzhou), masukkan https://oss-cn-hangzhou.aliyuncs.com.

      • <your_bucket_name> adalah nama bucket OSS. Nama tidak boleh diawali dengan oss://.

      • <your_model_path> adalah path model. Modifikasi path ini sesuai kebutuhan.

    • Muat model

      from io import BytesIO
      import torch
      import oss2
      from oss2.credentials import EnvironmentVariableCredentialsProvider
      
      auth = oss2.ProviderAuth(EnvironmentVariableCredentialsProvider())
      bucket_name = "<your_bucket_name>"
      bucket = oss2.Bucket(auth, endpoint, bucket_name)
      buffer = BytesIO(bucket.get_object("<your_model_path>").read())
      model.load_state_dict(torch.load(buffer))

      Di mana:

      • endpoint adalah endpoint wilayah tempat bucket berada. Misalnya, untuk China (Hangzhou), masukkan https://oss-cn-hangzhou.aliyuncs.com.

      • <your_bucket_name> adalah nama bucket OSS. Nama tidak boleh diawali dengan oss://.

      • <your_model_path> adalah path model. Modifikasi path ini sesuai kebutuhan.