All Products
Search
Document Center

Platform For AI:Kembangkan prosesor kustom menggunakan C atau C++

Last Updated:Aug 26, 2026

Prosesor kustom C atau C++ mengimplementasikan logika pemuatan model dan prediksi permintaan dengan mendefinisikan fungsi initialize() dan process().

Demo quick start

Unduh proyek pai-prediction-example. Proyek ini berisi dua prosesor kustom:

  • echo: Mengembalikan input pengguna apa adanya bersama dengan daftar file dalam model.

  • image_classification: klasifikasi gambar mnist menggunakan gambar mnist jpg sebagai input, mengembalikan kategori hasil klasifikasi.

Metode kompilasi dijelaskan dalam file README proyek. Panduan debugging lokal untuk setiap prosesor tersedia dalam file README di direktori masing-masing.

Definisi antarmuka

Prosesor kustom harus mengekspor tepat dua fungsi C: initialize() dan process(). Keduanya wajib—EAS memanggilnya pada titik berbeda dalam siklus hidup layanan.

Parameter Arah Deskripsi
model_entry Input Bersesuaian dengan bidang model_entry dalam file konfigurasi deployment, yang menunjukkan file entri dari paket model. Untuk informasi lebih lanjut tentang bidang ini, lihat deployment JSON. Anda dapat memberikan nama file (misalnya, randomforest.pmml) atau direktori (misalnya, ./model).
model_config Input Bersesuaian dengan bidang model_config dalam file konfigurasi deployment, yang menunjukkan informasi konfigurasi model kustom. Untuk informasi lebih lanjut tentang bidang ini, lihat deployment JSON.
state Output Status pemuatan model. Diatur ke 0 jika berhasil; nilai lain menandakan kegagalan pemuatan.
Nilai kembalian Pointer ke model yang dimuat di memori. EAS meneruskan pointer ini ke setiap pemanggilan process() berikutnya sebagai model_buf.
Parameter Arah Deskripsi
model_buf Input Alamat memori model yang dikembalikan oleh initialize().
input_data Input Muatan permintaan. Dapat berupa string atau data biner.
input_size Input Panjang data input.
output_data Output Data yang dikembalikan oleh prosesor. Anda harus mengalokasikan memori di heap. Model bertanggung jawab untuk melepaskan memori tersebut.
output_size Output Panjang data output.
Nilai kembalian Kode status HTTP untuk respons. Kembalikan 0 atau 200 untuk keberhasilan.
Nilai kembalian yang bukan merupakan kode status HTTP yang dikenali akan secara otomatis dikonversi menjadi HTTP 400. Selalu gunakan kode status HTTP standar (misalnya, 400 atau 500) saat mengembalikan error.

Contoh penggunaan

Berikut contoh penggunaan sederhana. Kode prediksi online tidak memuat data model apa pun dan mengembalikan input pengguna ke klien apa adanya.

  • Tulis kode prediksi.

    #include <stdio.h>
    #include <string.h>
    extern "C" {
        void *initialize(const char *model_entry, const char *model_config, int *state)
        {
           *state = 0;
            return NULL;
        }
        int process(void *model_buf, const void *input_data, int input_size,
                void **output_data, int *output_size)
        {
            if (input_size == 0) {
                const char *errmsg = "input data should not be empty";
                *output_data = strdup(errmsg);
                *output_size = strlen(errmsg);
                return 400;
            }  
            *output_data = strdup((char *)input_data);
            *output_size = input_size;
            return 200;
        }
    }
  • Kompilasi kode menjadi file .so menggunakan Makefile berikut.

    CC=g++
    CCFLAGS=-I./ -D_GNU_SOURCE -Wall -g -fPIC
    LDFLAGS= -shared -Wl,-rpath=./
    OBJS=processor.o
    TARGET=libpredictor.so
    all: $(TARGET)
    $(TARGET): $(OBJS)
    	$(CC) -o $(TARGET) $(OBJS) $(LDFLAGS) -L./
    %.o: %.cc
    	$(CC) $(CCFLAGS) -c $< -o $@
    clean:
    	rm -f $(TARGET) $(OBJS)
  • Terapkan layanan di EAS. Konfigurasi deployment JSON harus mencakup bidang terkait prosesor berikut. processor_entry menentukan file prosesor utama, yaitu file .so yang dihasilkan pada langkah sebelumnya.

    {
        "name": "test_echo",
        "model_path": "http://*****.oss-cn-shanghai.aliyuncs.com/****/saved_model.tar.gz",
        "processor_path": "oss://path/to/echo_processor_release.tar.gz",
        "processor_entry": "libpredictor.so",
        "processor_type": "cpp",
        "metadata": {
            "instance": 1
        }
    }