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.
Masuk ke Konsol PAI. Pilih wilayah di bagian atas halaman, pilih ruang kerja yang diinginkan, lalu klik Enter Elastic Algorithm Service (EAS).
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:
Klik Deploy Service. Pada bagian Custom Model Deployment, klik JSON Deployment.
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.
CatatanVersi 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,
/workspacedigunakan.cloud
instance_type
Jenis instance yang digunakan untuk menjalankan layanan frontend. Pilih jenis CPU.
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:
Terapkan pekerjaan yang dapat diskalakan.
Klik Deploy Service. Di bagian Custom Model Deployment, klik JSON Deployment.
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.
CatatanVersi 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.
/workspacedigunakan.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.
Klik Deploy.
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.
Opsional: Terapkan layanan frontend.
Klik Deploy Service. Di bagian Custom Model Deployment, klik JSON Deployment.
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.
CatatanVersi 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.
/workspacedigunakan.cloud
instance_type
Jenis instance yang digunakan untuk menjalankan layanan frontend. Pilih jenis CPU.
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.

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:
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.
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==.
Instal SDK untuk Python.
pip install -U eas-prediction --userUntuk informasi lebih lanjut tentang SDK untuk Python, lihat SDK untuk Python.
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.
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.
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.
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 = FalseDeskripsi 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 = FalseDeskripsi 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.
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
Untuk informasi tentang layanan Scalable Job, lihat Ikhtisar.
Untuk informasi tentang cara menerapkan layanan inferensi sebagai pekerjaan yang dapat diskalakan, lihat Terapkan layanan potret online sebagai pekerjaan yang dapat diskalakan.