Saat menunggu hasil inferensi dari layanan inferensi yang memakan waktu dalam skenario pembuatan konten AI atau pemrosesan video yang melibatkan model kompleks, permintaan mungkin gagal karena timeout koneksi atau ketidakseimbangan beban antar instance layanan. Untuk menghindari masalah ini, Platform for AI (PAI) menyediakan fitur inferensi asinkron yang memungkinkan Anda mendapatkan hasil inferensi melalui langganan permintaan atau polling. Topik ini menjelaskan cara menggunakan layanan inferensi asinkron.
Cara Kerjanya
Saat membuat layanan inferensi asinkron, layanan tersebut terintegrasi dengan sublayanan inferensi dan sublayanan antrian. Secara default, setiap sublayanan antrian menciptakan dua antrian: antrian input dan antrian output (sink). Ketika layanan menerima permintaan, permintaan dikirim ke antrian input. Kerangka layanan EAS dari sublayanan inferensi secara otomatis berlangganan ke antrian dan mendapatkan data permintaan secara streaming, memproses data tersebut, dan menulis hasil inferensi ke antrian output.
Ketika antrian output penuh, kerangka layanan tidak dapat lagi menulis data ke antrian output. Dalam kasus ini, kerangka layanan berhenti menerima data dari antrian input.
Jika Anda ingin mengabaikan antrian output untuk memberikan hasil inferensi ke layanan lain seperti Object Storage Service (OSS) atau middleware pesan, Anda dapat mengonfigurasi permintaan API untuk mengembalikan string kosong. Dengan cara ini, antrian output secara otomatis diabaikan.
Buat sublayanan antrian yang sangat tersedia untuk menerima permintaan klien. Klien berlangganan permintaan dalam batas konkurensi atas klien. Sublayanan antrian memastikan bahwa jumlah permintaan yang diproses pada setiap instance tidak melebihi ukuran jendela langganan klien. Ini memastikan bahwa instance sublayanan inferensi tidak kelebihan beban dan dapat mengembalikan hasil inferensi sesuai harapan.
CatatanSebagai contoh, jika setiap instance dapat memproses hingga lima aliran audio, atur ukuran jendela langganan menjadi 5. Setelah instance selesai memproses aliran audio dan mengirimkan hasilnya, sublayanan antrian mendorong aliran audio lain ke instance tersebut. Ini memastikan bahwa instance memproses tidak lebih dari lima aliran audio pada saat yang sama.
Sublayanan antrian memeriksa status koneksi antara instance sublayanan inferensi dan klien untuk menilai status kesehatan instance. Jika klien terputus secara tak terduga dari sebuah instance, sublayanan antrian menganggap instance tersebut tidak sehat dan mendistribusikan permintaan yang belum selesai ke instance lain yang sehat. Ini memastikan bahwa semua permintaan ditangani sesuai harapan.
Buat layanan inferensi asinkron
Saat membuat layanan inferensi asinkron, sistem secara otomatis membuat grup layanan dengan nama yang sama dengan layanan inferensi asinkron untuk memudahkan penggunaan. Sistem juga secara otomatis membuat sublayanan antrian dan mengintegrasikannya ke dalam layanan inferensi asinkron. Secara default, sublayanan antrian memulai satu instance dan menyesuaikan skala berdasarkan jumlah instance sublayanan inferensi. Sublayanan antrian dapat memulai hingga dua instance. Secara default, setiap instance dilengkapi dengan 1 vCPU dan 4 GB memori. Jika jumlah instance default untuk sublayanan antrian tidak memenuhi kebutuhan bisnis Anda, Anda dapat mengonfigurasi parameter terkait instance. Untuk informasi lebih lanjut, lihat bagian Konfigurasi Parameter untuk Sublayanan Antrian dari topik ini.
Anda dapat menggunakan salah satu metode berikut untuk membuat layanan inferensi asinkron.
Gunakan Konsol PAI
Pergi ke halaman Custom Deployment dan konfigurasikan parameter berikut. Untuk informasi tentang parameter lainnya, lihat Parameter untuk Penyebaran Kustom di Konsol.
Deployment Method: Pilih Image-based Deployment atau Processor-based Deployment.
Asynchronous Services: Aktifkan Asynchronous Services.

Setelah mengonfigurasi parameter, klik Deploy.
Gunakan Klien EASCMD
Siapkan file konfigurasi layanan bernama service.json.
Metode penyebaran: Sebarkan Layanan Menggunakan Model dan Prosesor.
{ "processor": "pmml", "model_path": "http://example.oss-cn-shanghai.aliyuncs.com/models/lr.pmml", "metadata": { "name": "pmmlasync", "type": "Async", "cpu": 4, "instance": 1, "memory": 8000 } }Catat parameter berikut. Untuk informasi tentang parameter lainnya, lihat Semua Parameter Layanan Model.
type: Atur nilainya menjadi Async untuk membuat layanan inferensi asinkron.
model_path: Ganti nilai dengan titik akhir model Anda.
Metode penyebaran: Pilih Sebarkan Layanan Menggunakan Gambar.
{ "metadata": { "name": "image_async", "instance": 1, "rpc.worker_threads": 4, "type": "Async" }, "cloud": { "computing": { "instance_type": "ecs.gn6i-c16g1.4xlarge" } }, "queue": { "cpu": 1, "min_replica": 1, "memory": 4000, "resource": "" }, "containers": [ { "image": "eas-registry-vpc.cn-beijing.cr.aliyuncs.com/pai-eas/chat-llm-webui:3.0.1", "script": "python webui/webui_server.py --port=8000 --model-path=Qwen/Qwen-7B-Chat", "port": 8000 } ] }Catat parameter berikut. Untuk informasi tentang parameter lainnya, lihat Semua Parameter Layanan Model.
type: Atur nilainya menjadi Async untuk membuat layanan inferensi asinkron.
instance: Jumlah instance sublayanan inferensi.
rpc.worker_threads: Tentukan jumlah thread untuk kerangka layanan EAS dari layanan inferensi asinkron. Nilai ini sama dengan ukuran jendela data yang dilanggan dalam antrian input. Dalam kode sampel sebelumnya, nilai 4 menunjukkan bahwa Anda dapat melanggan hingga empat entri data dari antrian pada saat yang sama. Sublayanan antrian tidak mendorong data baru ke sublayanan inferensi sampai empat entri data diproses.
Sebagai contoh, jika satu instance sublayanan inferensi dari layanan pemrosesan aliran video hanya dapat memproses dua aliran video pada saat yang sama, Anda dapat mengatur parameter ini menjadi 2. Dengan cara ini, sublayanan antrian mendorong titik akhir hingga dua aliran video ke sublayanan inferensi, dan tidak mendorong titik akhir aliran video baru sampai sublayanan inferensi mengembalikan hasil. Jika sublayanan inferensi selesai memproses salah satu aliran video dan mengembalikan hasil, sublayanan antrian mendorong titik akhir aliran video baru ke instance sublayanan inferensi. Ini memastikan bahwa instance sublayanan inferensi dapat memproses hingga dua aliran video pada saat yang sama.
Buat layanan inferensi asinkron.
Masuk ke klien EASCMD dan jalankan perintah create untuk membuat layanan inferensi asinkron. Untuk informasi lebih lanjut tentang cara masuk ke klien EASCMD, lihat Unduh Klien EASCMD dan Lengkapi Autentikasi Pengguna.
eascmd create service.json
Akses layanan inferensi asinkron
Secara default, sistem membuat grup layanan dengan nama yang sama dengan layanan inferensi asinkron. Sublayanan antrian dalam grup memiliki data ingress dari grup. Anda dapat mengakses sublayanan antrian menggunakan jalur dalam tabel berikut. Untuk informasi, lihat Akses Layanan Antrian.
Jenis Titik Akhir | Format Titik Akhir | Contoh |
Antrian Input |
|
|
Antrian Output |
|
|
Kelola layanan inferensi asinkron
Anda dapat mengelola layanan inferensi asinkron dengan cara yang sama seperti layanan lainnya. Sublayanan dari layanan inferensi asinkron dikelola oleh sistem. Misalnya, saat Anda menghapus layanan inferensi asinkron, sublayanan antrian dan sublayanan inferensi juga dihapus. Saat Anda memperbarui sublayanan inferensi, pembaruan tidak memengaruhi sublayanan antrian. Ini memastikan ketersediaan layanan.
Selain instance yang Anda konfigurasikan untuk sublayanan inferensi, arsitektur sublayanan menampilkan sublayanan antrian dalam daftar instance.

Jumlah instance layanan inferensi asinkron bervariasi berdasarkan jumlah instance sublayanan inferensi. Jumlah instance sublayanan antrian secara otomatis berubah berdasarkan jumlah instance sublayanan inferensi. Sebagai contoh, jika Anda meningkatkan jumlah instance sublayanan inferensi menjadi 3, jumlah instance sublayanan antrian meningkat menjadi 2.

Aturan berikut berlaku di antara kedua sublayanan:
Jika layanan inferensi asinkron dihentikan, jumlah instance sublayanan antrian dan sublayanan inferensi berkurang menjadi 0. Daftar instance kosong.
Jika jumlah instance sublayanan inferensi adalah 1, jumlah instance sublayanan antrian juga 1. Anda dapat memodifikasi jumlah instance sublayanan antrian melalui konfigurasi kustom.
Jika jumlah instance sublayanan inferensi melebihi 2, jumlah instance sublayanan antrian tetap 2. Anda dapat memodifikasi jumlah instance sublayanan antrian melalui konfigurasi kustom.
Jika Anda mengaktifkan fitur penskalaan otomatis untuk layanan inferensi asinkron dan mengatur jumlah instance minimum menjadi 0, sublayanan antrian mempertahankan satu instance saat jumlah instance sublayanan inferensi berkurang menjadi 0.
Konfigurasi Parameter untuk Sublayanan Antrian
Dalam kebanyakan kasus, Anda dapat menggunakan konfigurasi default untuk sublayanan antrian. Jika Anda memiliki persyaratan khusus, Anda dapat mengonfigurasi sublayanan antrian dengan memodifikasi bidang antrian dalam file JSON. Contoh file:
{
"queue": {
"sink": {
"memory_ratio": 0.3
},
"source": {
"auto_evict": true,
}
}Berikut ini adalah deskripsi item konfigurasi spesifik.
Konfigurasikan sumber daya untuk sublayanan antrian
Secara default, sumber daya sublayanan antrian dikonfigurasi berdasarkan bidang metadata. Untuk memodifikasi konfigurasi sumber daya, lakukan langkah-langkah berikut:
Tentukan grup sumber daya yang digunakan oleh sublayanan menggunakan parameter queue.resource.
{ "queue": { "resource": eas-r-slzkbq4tw0p6xd**** # Secara default, grup sumber daya sublayanan inferensi digunakan. } }Secara default, sublayanan antrian menggunakan grup sumber daya sublayanan inferensi.
Jika Anda ingin menggunakan grup sumber daya publik untuk menyebarkan sublayanan antrian, Anda dapat membiarkan parameter resource kosong. Anda dapat menggunakan metode ini saat sumber daya CPU dan memori dalam grup sumber daya khusus Anda tidak mencukupi.
CatatanKami merekomendasikan Anda menggunakan grup sumber daya publik untuk menyebarkan sublayanan antrian.
Tentukan jumlah core CPU dan memori setiap instance menggunakan parameter queue.cpu dan queue.memory.
{ "queue": { "cpu": 2, # Nilai default: 1. "memory": 8000 # Nilai default: 4000. } }Secara default, sistem membuat instance dengan 1 vCPU dan 4 GB memori untuk sublayanan antrian. Dalam kebanyakan kasus, spesifikasi ini dapat memenuhi kebutuhan bisnis.
PentingJika jumlah pelanggan, seperti jumlah instance sublayanan inferensi, melebihi 200, kami merekomendasikan Anda mengatur jumlah core CPU menjadi nilai lebih besar dari 2.
Kami merekomendasikan Anda tidak menggunakan ukuran memori kecil dalam lingkungan produksi.
Tentukan jumlah minimum instance sublayanan antrian menggunakan parameter queue.min_replica.
{ "queue": { "min_replica": 3 # Nilai default: 1. } }Saat menggunakan layanan inferensi asinkron, jumlah instance sublayanan antrian secara otomatis disesuaikan berdasarkan jumlah instance waktu proses sublayanan inferensi. Nilai valid untuk jumlah instance:
[1, min(2, Jumlah instance sublayanan inferensi)]. Jika Anda mengonfigurasi aturan penskalaan otomatis untuk layanan inferensi asinkron yang memungkinkan jumlah instance menjadi 0, sistem secara otomatis mempertahankan satu instance sublayanan antrian. Tentukan jumlah minimum instance layanan antrian menggunakan parameter queue.min_replica.CatatanAnda dapat meningkatkan jumlah instance sublayanan antrian untuk meningkatkan ketersediaan layanan. Jumlah instance tidak memengaruhi kinerja layanan.
Konfigurasikan fitur sublayanan antrian
Berikut ini adalah deskripsi konfigurasi fitur sublayanan antrian.
Konfigurasikan penghapusan data otomatis untuk antrian output atau input menggunakan parameter queue.sink.auto_evict atau queue.source.auto_evict.
{ "queue": { "sink": { "auto_evict": true # Aktifkan penghapusan otomatis untuk antrian output. Nilai default: false. }, "source": { "auto_evict": true # Aktifkan penghapusan otomatis untuk antrian input. Nilai default: false. } } }Secara default, penghapusan data otomatis dinonaktifkan untuk antrian. Saat antrian mencapai batas atas kapasitasnya, data tidak dapat lagi ditulis ke antrian. Dalam skenario tertentu, Anda dapat mengaktifkan penghapusan data otomatis untuk memungkinkan antrian secara otomatis menghapus data tertua agar data baru dapat ditulis.
Konfigurasikan jumlah maksimum pengiriman data menggunakan parameter queue.max_delivery.
{ "queue": { "max_delivery": 10 # Atur jumlah maksimum pengiriman data menjadi 10. Nilai default: 5. Jika Anda mengatur nilainya menjadi 0, data dapat dikirim tanpa batas jumlah kali. } }Jika jumlah kali pengiriman data tunggal melebihi nilai ini, data tersebut tidak dapat diproses dan ditangani sebagai pesan dead-letter. Untuk informasi lebih lanjut, lihat kebijakan dead-letter.
Tentukan waktu pemrosesan data maksimum menggunakan parameter queue.max_idle.
{ "queue": { "max_idle": "1m" # Atur waktu pemrosesan maksimum untuk entri data tunggal menjadi 1 menit. Jika waktu pemrosesan melebihi 1 menit, entri data dikirim ke pelanggan lain. Setelah data dikirim, jumlah pengiriman bertambah satu. # Nilai default adalah 0, yang menentukan bahwa waktu pemrosesan data tidak terbatas. } }Dalam contoh ini, parameter diatur menjadi 1 menit. Anda dapat menentukan unit lain, seperti h untuk jam, m untuk menit, dan s untuk detik. Jika waktu pemrosesan entri data tunggal melebihi nilai parameter ini, situasi berikut mungkin terjadi:
Jika waktu pengiriman entri data tidak melebihi ambang batas yang ditentukan oleh parameter queue.max_delivery, data dikirim ke pelanggan lain.
Jika waktu pengiriman entri data melebihi ambang batas yang ditentukan oleh parameter queue.max_delivery, sistem menerapkan kebijakan dead-letter ke data tersebut.
Konfigurasikan kebijakan dead-letter menggunakan parameter queue.dead_message_policy.
{ "queue": { "dead_message_policy": Nilai valid: Rear dan Drop. Nilai Rear menunjukkan bahwa data ditempatkan di antrian ekor. Nilai Drop menunjukkan bahwa data dihapus. # Nilai default: Rear. } }
Konfigurasikan panjang antrian maksimum atau volume data
Rumus berikut menunjukkan hubungan antara panjang antrian maksimum dan volume data maksimum.
Memoriinstance sublayanan antrian tetap. Panjang antrian berkurang dengan meningkatnya ukuran entri data.
Memori default adalah 4 GB, dan volume data maksimum adalah 8 KB. Ini berarti antrian input dan output dapat menyimpan hingga 230.399 entri data. Jika Anda ingin menyimpan lebih banyak entri data dalam sublayanan antrian, lakukan langkah-langkah dalam bagian sebelumnya untuk meningkatkan ukuran memori. Sistem mengonsumsi 10% dari total memori.
Anda tidak dapat mengonfigurasi panjang maksimum dan volume data maksimum untuk antrian yang sama pada saat yang sama.
Tentukan panjang maksimum antrian output atau antrian input menggunakan parameter queue.sink.max_length atau queue.source.max_length.
{ "queue": { "sink": { "max_length": 8000 # Atur panjang maksimum antrian output menjadi 8000 entri. }, "source": { "max_length": 2000 # Atur panjang maksimum antrian input menjadi 2000 entri. } } }Tentukan volume data maksimum entri data tunggal dalam antrian output atau input menggunakan parameter queue.sink.max_payload_size_kb atau queue.source.max_payload_size_kb.
{ "queue": { "sink": { "max_payload_size_kb": Atur ukuran maksimum entri data tunggal dalam antrian output menjadi 10 KB. Nilai default: 8 KB. }, "source": { "max_payload_size_kb": 1024 # Atur ukuran maksimum entri data tunggal dalam antrian input menjadi 1024KB (1 MB). Nilai default: 8 KB. } } }
Konfigurasikan alokasi memori
Sesuaikan ukuran memori yang digunakan oleh antrian input dan output menggunakan parameter queue.sink.memory_ratio.
{ "queue": { "sink": { "memory_ratio": 0.9 # Tentukan rasio memori antrian output. Nilai default: 0.5. } } }CatatanSecara default, memori instance sublayanan antrian dibagi rata antara antrian input dan output. Jika input layanan Anda adalah teks dan outputnya adalah gambar, dan Anda ingin menyimpan lebih banyak data dalam antrian output, Anda dapat meningkatkan nilai parameter queue.sink.memory_ratio. Jika input layanan Anda adalah gambar dan outputnya adalah teks, Anda dapat menurunkan nilai parameter queue.sink.memory_ratio.
Konfigurasikan penskalaan otomatis
Untuk informasi tentang cara mengonfigurasi penskalaan otomatis untuk layanan inferensi asinkron, lihat Penskalaan Otomatis.