Jika prosesor bawaan Elastic Algorithm Service (EAS) tidak memenuhi kebutuhan model Anda, implementasikan prosesor Java kustom untuk mengontrol langsung logika inisialisasi dan inferensi.
Siklus hidup prosesor
Prosesor Java merupakan satu kelas dengan tiga fase siklus hidup yang dipanggil EAS secara berurutan:
| Fase | Metode | Kapan dipanggil | Wajib |
|---|---|---|---|
| Initialize | Constructor | Sekali saat startup layanan | Ya |
| Load | Load() | Sekali setelah konstruksi | Ya |
| Infer | Process(byte[] input) | Sekali per permintaan masuk | Ya |
| Test | main(String[] args) | Hanya di mesin lokal | Tidak |
EAS memanggil fase-fase tersebut dalam urutan berikut:
Constructor → Load() → Process() [per permintaan] → ...Constructor: menerima path file model (
modelEntry) dan string JSON konfigurasi layanan (modelConfig) yang diberikan saat deployment.Load(): memuat model ke dalam memori menggunakan path yang diterima oleh constructor.Process(byte[] input): menjalankan inferensi pada setiap permintaan dan mengembalikan hasilnya dalam bentuk byte.
Implementasikan kelas prosesor
Definisikan satu kelas dalam package com.alibaba.eas. Constructor, Load(), dan Process() wajib diimplementasikan. Metode main() bersifat opsional dan berguna untuk pengujian unit secara lokal tanpa deployment ke EAS.
package com.alibaba.eas;
import java.util.*;
public class TestProcessor {
// Dipanggil sekali saat startup.
// modelEntry: path ke file model (lokal atau URL HTTP).
// modelConfig: string JSON konfigurasi layanan yang diberikan saat deployment.
public TestProcessor(String modelEntry, String modelConfig) {
}
// Muat model ke dalam memori. Dipanggil sekali setelah konstruksi.
public void Load() {
}
// Jalankan inferensi. Menerima byte mentah; mengembalikan byte mentah.
// Gunakan byte[] alih-alih String untuk menghindari masalah pengkodean karakter.
public byte[] Process(byte[] input) {
}
// Opsional: uji kelas secara lokal tanpa melakukan deployment ke EAS.
public static void main(String[] args) {
}
}Tipe input dan output yang didukung
Process() mendukung byte[] dan String. Gunakan byte[] untuk menghindari masalah pengkodean karakter.
Penanganan exception
Jika Process() melemparkan exception yang tidak ditangkap, EAS akan menangkapnya dan mengembalikan pesan exception tersebut ke klien dengan kode status HTTP 400.
Untuk mengembalikan pesan error kustom, tangkap exception di dalam Process() dan lemparkan RuntimeException dengan pesan yang ingin diterima klien:
try {
// logika inferensi
} catch (com.alibaba.fastjson.JSONException e) {
throw new RuntimeException("format json tidak valid, " + e.getMessage());
}Debug secara lokal dengan mode standalone
Mode standalone memungkinkan Anda mengembangkan dan menguji prosesor di mesin lokal tanpa deployment ke kluster. Antarmuka lokal sepenuhnya kompatibel dengan lingkungan kluster online, sehingga Anda dapat memvalidasi prosesor sebelum deployment.
Mode standalone memerlukan Docker. Jika model Anda membutuhkan GPU, instal juga CUDA dan Nvidia-Docker di mesin lokal.
Prasyarat
Sebelum memulai, pastikan Anda telah:
Docker terinstal di mesin tempat Anda menjalankan EASCMD.
(Untuk model GPU) CUDA dan Nvidia-Docker terinstal.
Klien EASCMD telah diunduh sesuai sistem operasi Anda:
Platform Tautan unduh Windows 64-bit http://eas-data.oss-cn-shanghai.aliyuncs.com/tools/eascmdwin64Linux 32-bit http://eas-data.oss-cn-shanghai.aliyuncs.com/tools/eascmd32Linux 64-bit http://eas-data.oss-cn-shanghai.aliyuncs.com/tools/eascmd64macOS 64-bit http://eas-data.oss-cn-shanghai.aliyuncs.com/tools/eascmdmac64
Jalankan debugging standalone
Buat file konfigurasi layanan (misalnya,
service.json):{ "name": "diy_test", "generate_token": "true", "model_path": "http://examplebucket.oss-cn-hangzhou-zmf.aliyuncs.com/scorecard.pmml", "processor_path": "./diy_processor_release.tar.gz", "processor_mainclass": "com.alibaba.eas.TestProcessor", "processor_type": "java", "metadata": { "resource": "eas-r-9lkbl2jvdm0puv****", "instance": 1, "cpu": 1, "memory": 2000 } }Parameter utama:
Parameter Deskripsi model_pathURL HTTP atau path lokal ke file model. Path lokal hanya didukung dalam mode standalone. processor_pathURL HTTP atau path lokal ke paket prosesor. Paket tersebut berupa file .tar.gzyang berisi file JAR hasil kompilasi. Path lokal hanya didukung dalam mode standalone.processor_mainclassNama lengkap kelas yang mengimplementasikan Load()danProcess().processor_typeAtur ke javauntuk prosesor Java.metadata.resourceID kelompok sumber daya untuk kelompok sumber daya khusus. metadata.instanceJumlah instans layanan. metadata.cpuJumlah core CPU per instans. metadata.memoryMemori per instans, dalam MB. Untuk referensi parameter lengkap, lihat Jalankan perintah untuk menggunakan klien EASCMD.
Jalankan pengujian standalone:
sudo eascmd test service.json