全部产品
Search
文档中心

Platform For AI:Terapkan pelatihan berbasis Kohya sebagai pekerjaan yang dapat diskalakan

更新时间:Jul 06, 2025

Topik ini menjelaskan cara menggunakan layanan pelatihan berbasis Kohya sebagai contoh untuk menerapkan layanan pelatihan sebagai pekerjaan yang dapat diskalakan, baik melalui metode penyebaran mandiri maupun terpadu. Topik ini juga mencakup cara melakukan pelatihan, memperoleh hasil pelatihan, menghentikan tugas, dan menanyakan log terkait.

Prasyarat

Sebuah bucket Object Storage Service (OSS) harus dibuat untuk menyimpan file model dan file konfigurasi dari pelatihan. Untuk panduan membuat bucket, lihat Buat bucket.

Terapkan pekerjaan pelatihan sebagai pekerjaan yang dapat diskalakan

Dalam topik ini, gambar kohya_ss yang disediakan oleh Platform for AI (PAI) digunakan sebagai contoh untuk menjelaskan cara menerapkan layanan pelatihan berbasis Kohya sebagai pekerjaan yang dapat diskalakan.

  1. Masuk ke Konsol PAI. Pilih wilayah di bagian atas halaman, pilih ruang kerja yang diinginkan, lalu klik Enter Elastic Algorithm Service (EAS).

  2. Terapkan layanan pelatihan.

    Metode penyebaran berikut didukung:

    Penyebaran terpadu

    Terapkan pelatihan berbasis Kohya, termasuk layanan antrian, layanan frontend tetap, dan pekerjaan yang dapat diskalakan secara terpadu. Prosedurnya adalah sebagai berikut:

    1. Klik Deploy Service. Pada bagian Custom Model Deployment, klik JSON Deployment.

    2. Masukkan informasi konfigurasi di editor JSON.

      {
        "cloud": {
          "computing": {
            "instance_type": "ecs.gn6i-c4g1.xlarge"
          }
        },
        "containers": [
          {
            "image": "eas-registry-vpc.cn-hangzhou.cr.aliyuncs.com/pai-eas/kohya_ss:2.2"
          }
        ],
        "features": {
          "eas.aliyun.com/extra-ephemeral-storage": "30Gi"
        },
        "front_end": {
          "image": "eas-registry-vpc.cn-hangzhou.cr.aliyuncs.com/pai-eas/kohya_ss:2.2",
          "port": 8001,
          "script": "python -u kohya_gui.py --listen 0.0.0.0 --server_port 8001 --data-dir /workspace --headless --just-ui --job-service"
        },
        "metadata": {
          "cpu": 4,
          "enable_webservice": true,
          "gpu": 1,
          "instance": 1,
          "memory": 15000,
          "name": "kohya_job",
          "type": "ScalableJobService"
        },
        "name": "kohya_job",
        "storage": [
          {
            "mount_path": "/workspace",
            "oss": {
              "path": "oss://examplebucket/kohya/",
              "readOnly": false
            },
            "properties": {
              "resource_type": "model"
            }
          }
        ]
      }

      Tabel berikut menjelaskan parameter dalam kode sebelumnya.

      Parameter

      Deskripsi

      metadata

      name

      Nama layanan. Nama tersebut unik di wilayah tersebut.

      type

      Jenis layanan. Atur nilainya menjadi ScalableJobService, yang menentukan metode Penyebaran terpadu.

      enable_webservice

      Atur nilainya menjadi true untuk menerapkan Aplikasi web berbasis AI.

      front_end

      image

      Gambar yang digunakan untuk menjalankan instance frontend. Klik Gambar PAI dan pilih kohya_ss dari daftar drop-down gambar, dan 2.2 dari daftar drop-down versi gambar.

      Catatan

      Versi gambar sering diperbarui. Kami sarankan Anda memilih versi terbaru.

      script

      Perintah yang digunakan untuk memulai instance frontend. Atur nilainya menjadi python -u kohya_gui.py --listen 0.0.0.0 --server_port 8000 --headless --just-ui --job-service. Deskripsi parameter dalam kode sebelumnya:

      • --listen: menghubungkan aplikasi dengan alamat IP lokal yang ditentukan untuk menerima dan memproses permintaan eksternal.

      • --server_port: nomor port yang digunakan untuk mendengarkan.

      • --just-ui: mengaktifkan mode frontend independen. Halaman layanan frontend hanya menampilkan UI layanan.

      • --job-service: menjalankan pelatihan sebagai pekerjaan yang dapat diskalakan.

      port

      Nomor port. Nilainya harus sama dengan nilai parameter server_port di containers.script.

      containers

      image

      Gambar yang digunakan untuk menjalankan pekerjaan yang dapat diskalakan. Jika Anda tidak menentukan parameter ini, gambar yang digunakan untuk menjalankan instance frontend akan digunakan.

      instance_type

      Jenis instance yang digunakan untuk menjalankan pekerjaan yang dapat diskalakan. Jenis instance dipercepat GPU diperlukan. Jika Anda tidak menentukan parameter ini, jenis instance yang ditentukan oleh parameter cloud.computing.instance_type akan digunakan.

      storage

      path

      Dalam topik ini, Object Storage Service (OSS) digunakan sebagai contoh. Tentukan jalur OSS di wilayah yang sama untuk menyimpan file model yang diperoleh dari pelatihan. Contoh: oss://examplebucket/kohya/.

      readOnly

      Atur parameter ini menjadi false. Jika tidak, file model tidak dapat disimpan di OSS.

      mount_path

      Jalur mount. Anda dapat menentukan jalur mount kustom. Dalam contoh ini, /workspace digunakan.

      cloud

      instance_type

      Jenis instance yang digunakan untuk menjalankan layanan frontend. Pilih jenis CPU.

    3. Klik Deploy.

    Penyebaran mandiri

    Secara terpisah terapkan pekerjaan yang dapat diskalakan dan layanan frontend. Dengan cara ini, pekerjaan yang dapat diskalakan dapat menerima permintaan pelatihan dari beberapa layanan frontend. Prosedurnya adalah sebagai berikut:

    1. Terapkan pekerjaan yang dapat diskalakan.

      1. Klik Deploy Service. Di bagian Custom Model Deployment, klik JSON Deployment.

      2. Masukkan informasi konfigurasi di editor JSON.

        {
          "cloud": {
            "computing": {
              "instance_type": "ecs.gn6i-c4g1.xlarge"
            }
          },
          "containers": [
            {
              "image": "eas-registry-vpc.cn-hangzhou.cr.aliyuncs.com/pai-eas/kohya_ss:2.2"
            }
          ],
          "features": {
            "eas.aliyun.com/extra-ephemeral-storage": "30Gi"
          },
          "metadata": {
            "instance": 1,
            "name": "kohya_scalable_job",
            "type": "ScalableJob"
          },
          "storage": [
            {
              "mount_path": "/workspace",
              "oss": {
                "path": "oss://examplebucket/kohya/",
                "readOnly": false
              },
              "properties": {
                "resource_type": "model"
              }
            }
          ]
        }

        Tabel berikut menjelaskan parameter dalam kode sebelumnya.

        Parameter

        Deskripsi

        metadata

        name

        Nama layanan. Nama tersebut unik di wilayah tersebut.

        type

        Jenis layanan. Atur nilainya menjadi ScalableJob, yang menentukan metode Penyebaran mandiri.

        containers

        image

        Gambar yang digunakan untuk menjalankan pekerjaan yang dapat diskalakan. Klik Gambar PAI dan pilih kohya_ss dari daftar drop-down gambar, dan 2.2 dari daftar drop-down versi gambar.

        Catatan

        Versi gambar sering diperbarui. Kami sarankan Anda memilih versi terbaru.

        storage

        path

        Dalam topik ini, OSS digunakan sebagai contoh. Tentukan jalur OSS di wilayah yang sama untuk menyimpan file model yang diperoleh dari pelatihan. Contoh: oss://examplebucket/kohya/.

        readOnly

        Atur parameter ini menjadi false. Jika tidak, file model tidak dapat disimpan di OSS.

        mount_path

        Jalur mount. Anda dapat menentukan jalur mount kustom. Dalam contoh ini. /workspace digunakan.

        cloud

        instance_type

        Jenis instance yang digunakan untuk menjalankan pekerjaan yang dapat diskalakan. Anda harus memilih jenis instance dipercepat GPU untuk menjalankan pelatihan berbasis Kohya.

      3. Klik Deploy.

      4. Setelah layanan diterapkan, klik Invocation Information di kolom Service Type. Pada tab Public Endpoint, peroleh titik akhir dan token layanan, lalu simpan di perangkat lokal Anda.

    2. Opsional: Terapkan layanan frontend.

      1. Klik Deploy Service. Di bagian Custom Model Deployment, klik JSON Deployment.

      2. Masukkan informasi konfigurasi di editor JSON.

        {
          "cloud": {
            "computing": {
              "instance_type": "ecs.g6.large"
            }
          },
          "containers": [
            {
              "image": "eas-registry-vpc.cn-hangzhou.cr.aliyuncs.com/pai-eas/kohya_ss:2.2",
              "port": 8000,
              "script": "python kohya_gui.py --listen 0.0.0.0 --server_port 8000 --headless --just-ui --job-service --job-service-endpoint 166233998075****.vpc.cn-hangzhou.pai-eas.aliyuncs.com --job-service-token test-token --job-service-inputname kohya_scalable_job"
            }
          ],
          "metadata": {
            "enable_webservice": true,
            "instance": 1,
            "name": "kohya_scalable_job_front"
          },
          "storage": [
            {
              "mount_path": "/workspace",
              "oss": {
                "path": "oss://examplebucket/kohya/",
                "readOnly": false
              },
              "properties": {
                "resource_type": "model"
              }
            }
          ]
        }

        Tabel berikut menjelaskan parameter dalam kode sebelumnya.

        Parameter

        Deskripsi

        metadata

        name

        Nama layanan frontend.

        enable_webservice

        Atur nilainya menjadi true untuk menerapkan aplikasi web berbasis AI.

        containers

        image

        Gambar yang digunakan untuk menjalankan layanan frontend. Klik Gambar PAI dan pilih kohya_ss dari daftar drop-down gambar, dan 2.2 dari daftar drop-down versi gambar.

        Catatan

        Versi gambar sering diperbarui. Kami sarankan Anda memilih versi terbaru.

        script

        Perintah yang digunakan untuk memulai layanan frontend. Contoh: python kohya_gui.py --listen 0.0.0.0 --server_port 8000 --headless --just-ui --job-service --job-service-endpoint 166233998075****.vpc.cn-hangzhou.pai-eas.aliyuncs.com --job-service-token test-token --job-service-inputname kohya_scaled_job. Deskripsi parameter dalam kode sebelumnya:

        • --listen: menghubungkan aplikasi dengan alamat IP lokal yang ditentukan untuk menerima dan memproses permintaan eksternal.

        • --server_port: nomor port yang digunakan untuk mendengarkan.

        • --just-ui: mengaktifkan mode frontend independen. Halaman layanan frontend hanya menampilkan UI layanan.

        • --job-service: menjalankan pelatihan sebagai pekerjaan yang dapat diskalakan.

        • --job-service-endpoint: titik akhir pekerjaan yang dapat diskalakan.

        • --job-service-token: token pekerjaan yang dapat diskalakan.

        • --job-service-inputname: nama layanan pekerjaan yang dapat diskalakan.

        port

        Nomor port. Nilainya harus sama dengan nilai parameter server_port di containers.script.

        storage

        path

        Dalam topik ini, OSS digunakan sebagai contoh. Tentukan jalur OSS di wilayah yang sama untuk menyimpan file model yang diperoleh dari pelatihan. Contoh: oss://examplebucket/kohya/.

        readOnly

        Atur parameter ini menjadi false. Jika tidak, file model tidak dapat disimpan di OSS.

        mount_path

        Jalur mount. Anda dapat menentukan jalur mount kustom. Dalam contoh ini. /workspace digunakan.

        cloud

        instance_type

        Jenis instance yang digunakan untuk menjalankan layanan frontend. Pilih jenis CPU.

    3. Klik Deploy.

Panggil layanan pelatihan berbasis Kohya

Panggil layanan pekerjaan yang dapat diskalakan menggunakan aplikasi web

Jika Anda menerapkan layanan frontend menggunakan gambar kohya_ss preset (versi 2.2 atau lebih baru) dari EAS, klik View Web App di kolom Service Type setelah layanan diterapkan. Pada halaman aplikasi web, konfigurasikan parameter untuk pelatihan Adaptasi Peringkat Rendah (LoRA). Untuk informasi lebih lanjut, lihat Terapkan model LoRA SD menggunakan Kohya_ss di EAS.

image.png

  • Klik Start training untuk mengirim permintaan pelatihan. Klik tombol hanya sekali sebelum pelatihan selesai atau dihentikan. Pekerjaan yang dapat diskalakan akan menyesuaikan otomatis berdasarkan jumlah sesi pelatihan.

  • Klik Stop training untuk menghentikan tugas pelatihan saat ini.

Panggil layanan pekerjaan yang dapat diskalakan yang menggunakan gambar kustom

Anda dapat memanggil pekerjaan yang dapat diskalakan menggunakan SDK untuk Python. Sistem mengirim permintaan perintah dan memperoleh log eksekusi tugas. Jika Anda ingin memanggil layanan menggunakan antarmuka pengguna web dan menerapkan layanan frontend menggunakan gambar kustom, Anda perlu mengimplementasikan antarmuka berikut. Setelah layanan diterapkan, Anda dapat menggunakan antarmuka pengguna web untuk memanggil pekerjaan yang dapat diskalakan. Prosedurnya adalah sebagai berikut:

  1. Peroleh titik akhir dan token layanan pekerjaan yang dapat diskalakan.

    Penyebaran terpadu

    Di halaman Elastic Algorithm Service (EAS), klik nama layanan untuk masuk ke halaman Detail Layanan. Di bagian Basic Information, klik View Endpoint Information. Pada tab Public Endpoint, peroleh titik akhir dan token layanan, lalu simpan di perangkat lokal Anda. Catatan:

    • Titik akhir layanan berada dalam format <queue_name>.<service_name>.<uid>.<region>.pai-eas.aliyuncs.com. Contoh: kohya-job-queue-b****4f0.kohya-job.175805416243****.cn-beijing.pai-eas.aliyuncs.com. <queue_name> adalah bagian sebelum -0 dalam nama instance layanan antrian. Anda dapat melihat nama instance dalam daftar instance layanan di halaman Service Details. image

    • Contoh token: OGZlNzQwM2VlMWUyM2E2ZTAyMGRjOGQ5MWMyOTFjZGExNDgwMT****==.

    Penyebaran mandiri

    Di halaman Elastic Algorithm Service (EAS), klik Invocation Method di kolom Service Type untuk memperoleh titik akhir dan token. Catatan:

    • Contoh titik akhir layanan: 175805416243****.cn-beijing.pai-eas.aliyuncs.com.

    • Contoh token: Njk5NDU5MGYzNmRlZWQ3ND****QyMDIzMGM4MjExNmQ1NjE1NzY5Mw==.

  2. Instal SDK untuk Python.

    pip install -U eas-prediction --user

    Untuk informasi lebih lanjut tentang SDK untuk Python, lihat SDK untuk Python.

  3. Buat klien untuk antrian input dan antrian output.

    Penyebaran terpadu

    from eas_prediction import QueueClient
    
    if __name__ == '__main__':
        token = 'OGZlNzQwM2VlMWUyM2E2ZTAyMGRjOGQ5MWMyOTFjZGExNDgwMT****=='
        input_url = 'kohya-job-queue-bf****f0.kohya-job.175805416243****.cn-hangzhou.pai-eas.aliyuncs.com'
        sink_url = input_url + '/sink'
    
        # Buat antrian input untuk mengirim permintaan pelatihan dan permintaan penghentian tugas perintah.
        inputQueue = QueueClient(custom_url = input_url)
        inputQueue.set_token(token)
        inputQueue.init(gid="superwatcher")
    
        # Buat antrian output untuk mendapatkan status eksekusi dan log tugas perintah.
        sinkQueue = QueueClient(custom_url = sink_url)
        sinkQueue.set_token(token)
        sinkQueue.init()
    

    Deskripsi parameter dalam kode sebelumnya:

    • Ganti token dengan token yang Anda peroleh pada langkah sebelumnya.

    • Ganti input_url dengan titik akhir layanan yang Anda peroleh pada langkah sebelumnya.

    Penyebaran mandiri

    from eas_prediction import QueueClient
    
    if __name__ == '__main__':
        endpoint = '166233998075****.cn-hangzhou.pai-eas.aliyuncs.com'
        token = 'YmE3NDkyMzdiMzNmMGM3ZmE4ZmNjZDk0M2NiMDA3OT****c1MTUxNg=='
        input_name = 'kohya_scalable_job'
        sink_name = input_name + '/sink'
    
        # Buat antrian input untuk mengirim permintaan pelatihan dan permintaan penghentian tugas perintah.
        inputQueue = QueueClient(endpoint, input_name)
        inputQueue.set_token(token)
        inputQueue.init()
    
        # Buat antrian output untuk mendapatkan status eksekusi dan log tugas perintah.
        sinkQueue = QueueClient(endpoint, sink_name)
        sinkQueue.set_token(token)
        sinkQueue.init()
    

    Deskripsi parameter dalam kode sebelumnya:

    • Ganti endpoint dengan titik akhir layanan yang Anda peroleh pada langkah sebelumnya.

    • Ganti token dengan token layanan yang Anda peroleh pada langkah sebelumnya.

    • Atur input_name ke nama layanan pekerjaan yang dapat diskalakan.

  4. Kirim permintaan pelatihan ke antrian input.

    Penyebaran terpadu

    from eas_prediction import QueueClient
    import uuid
    
    if __name__ == '__main__':
        token = 'OGZlNzQwM2VlMWUyM2E2ZTAyMGRjOGQ5MWMyOTFjZGExNDgwMT****=='
        input_url = 'kohya-job-queue-bf****f0.kohya-job.175805416243****.cn-hangzhou.pai-eas.aliyuncs.com'
        sink_url = input_url + '/sink'
    
        # Buat klien antrian input untuk mengirim permintaan perintah.
        inputQueue = QueueClient(custom_url = input_url)
        inputQueue.set_token(token)
        inputQueue.init(gid="superwatcher")
    
        # Hasilkan ID tugas unik untuk setiap permintaan tugas.
        task_id = uuid.uuid1().hex
        # Buat string perintah.
        cmd = "for i in {1..10}; do date; sleep 1; done;"
        # Atur parameter taskType ke perintah dan tentukan ID tugas.
        tags = {"taskType": "command", "taskId": task_id}
        # Kirim permintaan pelatihan ke antrian input.
        index, request_id = inputQueue.put(cmd, tags)
        print(f'kirim indeks: {index}, ID permintaan: {request_id}')
    

    Tabel berikut menjelaskan parameter dalam kode sebelumnya.

    Parameter

    Deskripsi

    token

    Ganti nilainya dengan token yang Anda peroleh pada langkah sebelumnya.

    input_url

    Ganti nilainya dengan titik akhir layanan yang Anda peroleh pada langkah sebelumnya.

    cmd

    Tentukan perintah yang ingin Anda jalankan. Jika Anda menggunakan perintah Python, Anda harus menambahkan parameter -u untuk mendapatkan log eksekusi tugas secara real-time.

    tags

    Untuk permintaan pelatihan:

    • taskType: Atur nilainya menjadi perintah.

    • taskId: ID tugas pelatihan, yang secara unik mengidentifikasi tugas pelatihan.

    Penyebaran mandiri

    from eas_prediction import QueueClient
    import uuid
    
    if __name__ == '__main__':
        endpoint = '166233998075****.cn-hangzhou.pai-eas.aliyuncs.com'
        token = 'M2EyNWYzNDJmNjQ5ZmUzMmM0OTMyMzgzYj****djN2IyODc1MTM5ZQ=='
        input_name = 'kohya_scalable_job'
    
        # Buat klien antrian input untuk mengirim permintaan perintah.
        inputQueue = QueueClient(endpoint, input_name)
        inputQueue.set_token(token)
        inputQueue.init(gid="superwatcher")
    
        # Hasilkan ID tugas unik untuk setiap permintaan tugas.
        task_id = uuid.uuid1().hex
        # Buat string perintah.
        cmd = "for i in {1..10}; do date; sleep 1; done;"
        # Atur parameter taskType ke perintah dan tentukan ID tugas.
        tags = {"taskType": "command", "taskId": task_id}
        # Kirim permintaan pelatihan ke antrian input.
        index, request_id = inputQueue.put(cmd, tags)
        print(f'kirim indeks: {index}, ID permintaan: {request_id}')
    

    Tabel berikut menjelaskan parameter dalam kode sebelumnya.

    Parameter

    Deskripsi

    endpoint

    Ganti nilainya dengan titik akhir yang Anda peroleh pada langkah sebelumnya.

    token

    Ganti nilainya dengan token layanan yang Anda peroleh pada langkah sebelumnya.

    cmd

    Tentukan perintah yang ingin Anda jalankan. Jika Anda menggunakan perintah Python, Anda harus menambahkan parameter -u untuk mendapatkan log eksekusi tugas secara real-time.

    tags

    Untuk permintaan pelatihan:

    • taskType: Atur nilainya menjadi perintah.

    • taskId: ID tugas pelatihan, yang secara unik mengidentifikasi tugas pelatihan.

  5. Periksa status antrian permintaan.

    Penyebaran terpadu

    from eas_prediction import QueueClient
    import uuid
    
    if __name__ == '__main__':
        token = 'OGZlNzQwM2VlMWUyM2E2ZTAyMGRjOGQ5MWMyOTFjZGExNDgwMT****=='
        input_url = 'kohya-job-queue-bf****f0.kohya-job.175805416243****.cn-hangzhou.pai-eas.aliyuncs.com'
        sink_url = input_url + '/sink'
    
        # Buat klien antrian input untuk mengirim permintaan perintah.
        inputQueue = QueueClient(custom_url = input_url)
        inputQueue.set_token(token)
        inputQueue.init(gid="superwatcher")
    
        # Kirim permintaan perintah ke antrian input.
        task_id = uuid.uuid1().hex
        cmd = "for i in {1..100}; do date; sleep 1; done;"
        tags = {"taskType": "command", "taskId": task_id}
        index, request_id = inputQueue.put(cmd, tags)
    
        # Periksa status antrian permintaan.
        search_info = inputQueue.search(index)
        print("indeks: {}, info pencarian: {}".format(index, search_info))
    

    Deskripsi parameter dalam kode sebelumnya:

    • Ganti token dengan token yang Anda peroleh pada langkah sebelumnya.

    • Ganti input_url dengan titik akhir layanan yang Anda peroleh pada langkah sebelumnya.

    Penyebaran mandiri

    from eas_prediction import QueueClient
    import uuid
    
    if __name__ == '__main__':
        endpoint = '166233998075****.cn-hangzhou.pai-eas.aliyuncs.com'
        token = 'M2EyNWYzNDJmNjQ5ZmUzMmM0OTMyMzgzYjBjOTdjN2I****1MTM5ZQ=='
        input_name = 'kohya_scalable_job'
    
        # Buat klien antrian input untuk mengirim permintaan perintah.
        inputQueue = QueueClient(endpoint, input_name)
        inputQueue.set_token(token)
        inputQueue.init(gid="superwatcher")
    
        # Kirim permintaan perintah ke antrian input.
        task_id = uuid.uuid1().hex
        cmd = "for i in {1..100}; do date; sleep 1; done;"
        tags = {"taskType": "command", "taskId": task_id}
        index, request_id = inputQueue.put(cmd, tags)
    
        # Periksa status antrian permintaan.
        search_info = inputQueue.search(index)
        print("indeks: {}, info pencarian: {}".format(index, search_info))
    

    Deskripsi parameter dalam kode sebelumnya:

    • Ganti endpoint dengan titik akhir yang Anda peroleh pada langkah sebelumnya.

    • Ganti token dengan token layanan yang Anda peroleh pada langkah sebelumnya.

    Contoh respons dalam format JSON:

    {
    	'IsPending': False,
    	'WaitCount': 0
    }

    Tabel berikut menjelaskan bidang dalam respons.

    Bidang

    Deskripsi

    IsPending

    Menunjukkan apakah permintaan sedang diproses. Nilai valid:

    • True: Permintaan sedang diproses.

    • False: Permintaan berada di antrian dan menunggu untuk diproses.

    WaitCount

    Urutan permintaan dalam antrian. Parameter ini hanya valid jika Anda mengatur parameter IsPending ke False. Jika Anda mengatur parameter IsPending ke True, nilainya adalah 0.

  6. Peroleh hasil eksekusi dari antrian output.

    Log eksekusi tugas pelatihan ditulis ke antrian output secara real-time. Anda dapat memanggil metode queue.get(request_id=request_id, length=1, timeout='0s', tags=tags) untuk mendapatkan log tugas pelatihan dengan ID tugas tertentu. Contoh kode:

    Penyebaran terpadu

    from eas_prediction import QueueClient
    import json
    import uuid
    
    if __name__ == '__main__':
        token = 'OGZlNzQwM2VlMWUyM2E2ZTAyMGRjOGQ5MWMyOTFjZGExNDgwMT****=='
        input_url = 'kohya-job-queue-bf****f0.kohya-job.175805416243****.cn-hangzhou.pai-eas.aliyuncs.com'
        sink_url = input_url + '/sink'
    
        # Buat klien antrian input untuk mengirim permintaan perintah.
        inputQueue = QueueClient(custom_url = input_url)
        inputQueue.set_token(token)
        inputQueue.init(gid="superwatcher")
    
        # Buat klien antrian output untuk mendapatkan log eksekusi perintah.
        sinkQueue = QueueClient(custom_url = sink_url)
        sinkQueue.set_token(token)
        sinkQueue.init()
    
        # Kirim permintaan perintah ke antrian input.
        cmd = "for i in {1..10}; do date; sleep 1; done;"
        task_id = uuid.uuid1().hex
        tags = {"taskType": "command", "taskId": task_id}
        index, request_id = inputQueue.put(cmd, tags)
    
        # Dapatkan log tugas pelatihan yang memiliki ID tugas tertentu dari antrian output secara real-time.
        running = True
        while running:
            dfs = sinkQueue.get(length=1, timeout='0s', tags=tags)
            if len(dfs) == 0:
                continue
            df = dfs[0]
            data = json.loads(df.data.decode())
            state = data["state"]
            print(data.get("log", ""))
            if state in {"Exited", "Stopped", "Fatal", "Backoff"}:
                running = False
    

    Deskripsi parameter dalam kode sebelumnya:

    • Ganti token dengan token yang Anda peroleh pada langkah sebelumnya.

    • Ganti input_url dengan titik akhir layanan yang Anda peroleh pada langkah sebelumnya.

    Penyebaran mandiri

    from eas_prediction import QueueClient
    import json
    import uuid
    
    if __name__ == '__main__':
        endpoint = '166233998075****.cn-hangzhou.pai-eas.aliyuncs.com'
        token = 'M2EyNWYzNDJmNjQ5ZmUzMmM0OTMyMzgzYjBjOTdjN2IyOD****M5ZQ=='
        input_name = 'kohya_scalable_job'
        sink_name = input_name + '/sink'
    
        # Buat klien antrian input untuk mengirim permintaan perintah.
        inputQueue = QueueClient(endpoint, input_name)
        inputQueue.set_token(token)
        inputQueue.init(gid="superwatcher")
    
        # Buat klien antrian output untuk mendapatkan log eksekusi perintah.
        sinkQueue = QueueClient(endpoint, sink_name)
        sinkQueue.set_token(token)
        sinkQueue.init()
    
        # Kirim permintaan perintah ke antrian input.
        cmd = "for i in {1..10}; do date; sleep 1; done;"
        task_id = uuid.uuid1().hex
        tags = {"taskType": "command", "taskId": task_id}
        index, request_id = inputQueue.put(cmd, tags)
    
        # Dapatkan log tugas pelatihan yang memiliki ID tugas tertentu dari antrian output secara real-time.
        running = True
        while running:
            dfs = sinkQueue.get(length=1, timeout='0s', tags=tags)
            if len(dfs) == 0:
                continue
            df = dfs[0]
            data = json.loads(df.data.decode())
            state = data["state"]
            print(data.get("log", ""))
            if state in {"Exited", "Stopped", "Fatal", "Backoff"}:
                running = False
    

    Deskripsi parameter dalam kode sebelumnya:

    • Ganti endpoint dengan titik akhir yang Anda peroleh pada langkah sebelumnya.

    • Ganti token dengan token layanan yang Anda peroleh pada langkah sebelumnya.

    Contoh respons dalam format BYTES:

    {
    	"taskId": "e97409eea4a111ee9cb600163e08****",
    	"command": "python3 -u test.py --args=xxx",
    	"state": "Running",
    	"log": "prepare tokenizer\\n"
    }

    Tabel berikut menjelaskan bidang dalam respons.

    Bidang

    Deskripsi

    taskId

    ID tugas.

    command

    Perintah yang dijalankan oleh tugas.

    state

    Status eksekusi perintah. Nilai valid:

    • Running: Tugas sedang berjalan.

    • Exited: Tugas telah keluar.

    • Fatal: Pengecualian terjadi dalam tugas.

    • Stopping: Tugas sedang dihentikan.

    • Stopped: Tugas dihentikan.

    log

    Log. Sistem menghasilkan log yang memiliki ID tugas yang sama dalam urutan log diperoleh.

  7. Hentikan tugas pelatihan.

    Jika Anda ingin menghentikan tugas pelatihan setelah mengirim permintaan, periksa apakah permintaan berada dalam status Antrian atau Berjalan. Gunakan metode queue.search(index) untuk mendapatkan status permintaan. Contoh:

    Penyebaran terpadu

    from eas_prediction.queue_client import QueueClient
    import uuid
    
    if __name__ == '__main__':
        token = 'OGZlNzQwM2VlMWUyM2E2ZTAyMGRjOGQ5MWMyOTFjZGExNDgwMT****=='
        input_url = 'kohya-job-queue-bf****f0.kohya-job.175805416243****.cn-hangzhou.pai-eas.aliyuncs.com'
        sink_url = input_url + '/sink'
    
        # Buat klien antrian input untuk mengirim permintaan perintah dan permintaan penghentian.
        inputQueue = QueueClient(custom_url = input_url)
        inputQueue.set_token(token)
        inputQueue.init(gid="superwatcher")
    
        # Kirim permintaan perintah ke antrian input.
        cmd = "for i in {1..10}; do date; sleep 1; done;"
        task_id=uuid.uuid1().hex# ID tugas permintaan.
        tags = {"taskType": "command", "taskId": task_id}
        index, request_id = inputQueue.put(cmd, tags)
        print(f'cmd dikirim, indeks: {index}, ID tugas: {task_id}')
    
        job_index=index# Indeks yang dikembalikan setelah Anda mengirim permintaan tugas.
    
        pending_detail = inputQueue.search(job_index)
        print(f'info pencarian: {pending_detail}')
        if len(pending_detail) > 0 and pending_detail.get("IsPending", True) == False:
            # Tugas perintah berada di antrian dan dihapus dari antrian input.
            inputQueue.delete(job_index)
            print(f'hapus indeks tugas: {job_index}')
        else:
            # Tugas perintah sedang berjalan. Sistem mengirim sinyal berhenti ke antrian input.
            stop_data = "stop"
            tags = {"_is_symbol_": "true", "taskId": task_id}
            inputQueue.put(stop_data, tags)
            print(f'hentikan indeks tugas: {job_index}')
    

    Tabel berikut menjelaskan parameter dalam kode sebelumnya.

    Parameter

    Deskripsi

    token

    Ganti nilainya dengan token yang Anda peroleh pada langkah sebelumnya.

    input_url

    Ganti nilainya dengan titik akhir layanan yang Anda peroleh pada langkah sebelumnya.

    stop_data

    Atur nilainya menjadi stop.

    tags

    • _is_symbol_: Atur nilainya menjadi true untuk menghentikan tugas. Parameter ini diperlukan.

    • task_id: ID tugas yang ingin Anda hentikan.

    Penyebaran mandiri

    from eas_prediction.queue_client import QueueClient
    import uuid
    
    if __name__ == '__main__':
        endpoint = '166233998075****.cn-hangzhou.pai-eas.aliyuncs.com'
        token = 'M2EyNWYzNDJmNjQ5ZmUzMmM0OTMyMzgzYjBjOTdjN2IyODc1MTM5****'
        input_name = 'kohya_scalable_job'
    
        # Buat klien antrian input untuk mengirim permintaan perintah dan permintaan penghentian.
        inputQueue = QueueClient(endpoint, input_name)
        inputQueue.set_token(token)
        inputQueue.init(gid="superwatcher")
    
        # Kirim permintaan perintah ke antrian input.
        cmd = "for i in {1..10}; do date; sleep 1; done;"
    
        # ID tugas permintaan.
        task_id = uuid.uuid1().hex
        tags = {"taskType": "command", "taskId": task_id}
        index, request_id = inputQueue.put(cmd, tags)
        print(f'cmd dikirim, indeks: {index}, ID tugas: {task_id}')
    
        job_index=index# Indeks yang dikembalikan setelah Anda mengirim permintaan tugas.
    
        pending_detail = inputQueue.search(job_index)
        print(f'info pencarian: {pending_detail}')
        if len(pending_detail) > 0 and pending_detail.get("pending_detail.get("IsPending", True) == False:
            # Tugas perintah berada di antrian dan dihapus dari antrian input.
            inputQueue.delete(job_index)
            print(f'hapus indeks tugas: {job_index}')
        else:
            # Tugas perintah sedang berjalan. Sistem mengirim sinyal berhenti ke antrian input.
            stop_data = "stop"
            tags = {"_is_symbol_": "true", "taskId": task_id}
            inputQueue.put(stop_data, tags)
            print(f'hentikan indeks tugas: {job_index}')
    

    Tabel berikut menjelaskan parameter dalam kode sebelumnya.

    Parameter

    Deskripsi

    endpoint

    Ganti nilainya dengan titik akhir yang Anda peroleh pada langkah sebelumnya.

    token

    Ganti nilainya dengan token layanan yang Anda peroleh pada langkah sebelumnya.

    stop_data

    Atur nilainya menjadi stop.

    tags

    • _is_symbol_: Atur nilainya menjadi true untuk menghentikan tugas. Parameter ini diperlukan.

    • task_id: ID tugas yang ingin Anda hentikan.

Referensi