All Products
Search
Document Center

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

Last Updated:Jul 02, 2025

Topik ini menjelaskan cara mengembangkan prosesor kustom menggunakan C atau C++.

Demo mulai cepat

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

  • echo: Saat permintaan diterima, prosesor ini mengembalikan input pengguna tanpa perubahan serta daftar file dalam model.

  • image_classification: Prosesor ini digunakan untuk klasifikasi MNIST. Jika gambar MNIST dalam format JPG dimasukkan, kategori gambar akan dikembalikan.

Untuk informasi lebih lanjut tentang kompilasi, lihat file README di proyek tersebut. Untuk informasi lebih lanjut tentang debugging lokal setiap prosesor, lihat file README di direktori yang sesuai.

Definisi antarmuka

Untuk mengembangkan prosesor kustom menggunakan C atau C++, Anda harus mendefinisikan fungsi initialize() dan process(). Fungsi initialize() digunakan untuk memuat model selama inisialisasi layanan. Fungsi process() digunakan untuk memproses permintaan klien dan mengembalikan hasil. Blok kode berikut memberikan contoh deklarasi kedua fungsi tersebut:

void *initialize(const char *model_entry, const char *model_config, int *state)

Parameter

Tipe

Deskripsi

model_entry

Parameter masukan

File entri dari paket model. Parameter ini sesuai dengan bidang model_entry dalam file konfigurasi JSON saat layanan dibuat. Untuk informasi lebih lanjut tentang bidang model_entry, lihat Parameter untuk penyebaran JSON. Anda dapat menentukan nama file seperti randomforest.pmml, atau direktori seperti ./model.

model_config

Parameter masukan

Informasi konfigurasi kustom model. Parameter ini sesuai dengan bidang model_config dalam file konfigurasi saat layanan dibuat. Untuk informasi lebih lanjut tentang bidang model_config, lihat Parameter untuk penyebaran JSON.

state

Parameter keluaran

Status pemuatan model. Jika nilainya 0, model dimuat. Jika tidak, model gagal dimuat.

Nilai yang dikembalikan

Alamat memori model, yang mendukung semua tipe. Model ditentukan dalam variabel model.

int process(void *model_buf, const void *input_data, int input_size,void **output_data, int *output_size)

Parameter

Tipe

Deskripsi

model_buf

Parameter masukan

Alamat memori model yang dikembalikan oleh fungsi initialize().

input_data

Parameter masukan

Data yang Anda masukkan, yang bisa berupa string atau bertipe BINARY.

input_size

Parameter masukan

Panjang data yang Anda masukkan.

output_data

Parameter keluaran

Data yang dikembalikan oleh prosesor. Memori heap harus dialokasikan untuk data tersebut. Model melepaskan memori sesuai konfigurasi.

output_size

Parameter keluaran

Panjang data yang dikembalikan oleh prosesor.

Nilai yang dikembalikan

Jika 0 atau 200 dikembalikan, permintaan berhasil. Kode kesalahan HTTP dapat dikembalikan. Jika kode status HTTP yang tidak terdefinisi dikembalikan, itu secara otomatis diubah menjadi http 400 error.

Kode contoh

Dalam kode contoh berikut, tidak ada data model yang dimuat. Layanan prediksi mengembalikan permintaan pengguna ke klien.

  1. Tulis kode uji.

    #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 = "data masukan tidak boleh kosong";
                *output_data = strdup(errmsg);
                *output_size = strlen(errmsg);
                return 400;
            }  
            *output_data = strdup((char *)input_data);
            *output_size = input_size;
            return 200;
        }
    }
  2. Kompilasi data masukan sebagai file SO berdasarkan 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)
  3. Sebarkan layanan EAS. Untuk informasi tentang parameter konfigurasi terkait prosesor dalam file konfigurasi JSON yang diperlukan untuk penyebaran layanan, lihat kode contoh berikut. processor_entry menunjukkan file utama (SO file) dari prosesor.

    {
    	"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
    	}
    }