All Products
Search
Document Center

Platform For AI:Kembangkan prosesor kustom menggunakan Python

Last Updated:Apr 02, 2026

Kembangkan dan debug prosesor Python kustom, lalu unggah bersama file model Anda ke OSS untuk penerapan layanan.

Alur Kerja

Kembangkan prosesor Python kustom dengan menyelesaikan langkah-langkah berikut:

  1. Langkah 1: Siapkan lingkungan pengembangan

    EAS Python SDK mendukung berbagai framework pembelajaran mesin Python dan terintegrasi dengan framework pemrosesan data seperti Pandas. Siapkan lingkungan Python lokal, kembangkan prosesor kustom, lalu kemas dan unggah lingkungan tersebut.

  2. Langkah 2: Tulis logika prediksi

    EAS Python SDK menyediakan framework RPC berkinerja tinggi dan antarmuka internal untuk berinteraksi dengan kluster EAS. Tulis logika prediksi dan implementasikan antarmuka sederhana untuk menerapkan layanan model Anda ke EAS.

  3. Langkah 3: Uji layanan secara lokal

    Uji layanan secara lokal untuk memverifikasi bahwa logika prediksi benar dan layanan berfungsi sesuai harapan setelah diterapkan.

  4. Langkah 4: Kemas kode dan lingkungan Python

    Kemas kode dan lingkungan untuk penerapan layanan.

  5. Langkah 5: Unggah paket prosesor dan file model

    Unggah paket dan file model secara terpisah ke Object Storage Service (OSS).

  6. Langkah 6: Terapkan dan uji layanan

    Terapkan prosesor kustom Anda sebagai layanan model dan verifikasi bahwa layanan tersebut berfungsi.

Catatan
  • Pisahkan file model dari prosesor agar paket prosesor dapat digunakan kembali saat Anda melakukan fine-tune dan menerapkan ulang model. Dalam logika prediksi, gunakan metode get_model_path() untuk mendapatkan path penyimpanan model sehingga logika tersebut dapat memuat model.

  • Jika prosesor kustom Anda memiliki banyak dependensi atau ukuran paket besar, gunakan image untuk menerapkan layanan. Untuk perbandingan kedua metode penerapan ini, lihat Cara kerja (Penerapan berbasis image).

Prasyarat

Siapkan file model.

Catatan

Kembangkan file model dan prosesor kustom secara terpisah. Unggah keduanya ke OSS secara terpisah agar dapat dipasang selama penerapan layanan.

Langkah 1: Siapkan lingkungan pengembangan

Gunakan tool manajemen paket Python seperti Pyenv untuk menyiapkan lingkungan pengembangan. EAS menyediakan tool client EASCMD yang membungkus proses inisialisasi Python SDK. Setelah mengunduh tool tersebut, jalankan satu perintah untuk menginisialisasi lingkungan Python SDK dan menghasilkan templat file. EASCMD hanya mendukung Linux. Contoh:

# Instal dan inisialisasi EASCMD. Contoh ini menunjukkan cara menginstal client EASCMD untuk Linux.
$ wget https://eas-data.oss-cn-shanghai.aliyuncs.com/tools/eascmd/v2/eascmd64
# Setelah pengunduhan selesai, ubah izin akses dan konfigurasikan Pasangan Kunci Akses Alibaba Cloud Anda.
$ chmod +x eascmd64
$ ./eascmd64 config -i <access_id> -k <access_key>

# Inisialisasi lingkungan.
$ ./eascmd64 pysdk init ./pysdk_demo

Saat diminta, masukkan versi Python (default: 3.6). Sistem kemudian membuat direktori lingkungan Python bernama ENV, templat kode layanan prediksi bernama app.py, dan templat penerapan layanan bernama app.json di direktori ./pysdk_demo.

Langkah 2: Tulis logika prediksi

Di direktori yang sama dengan ENV, buat file utama untuk layanan prediksi, bernama app.py. Contoh:

Catatan

Jika Anda menggunakan EASCMD untuk menginisialisasi lingkungan Python, app.py akan dihasilkan secara otomatis. Modifikasi konten file sesuai kebutuhan.

# -*- coding: utf-8 -*-
import allspark


class MyProcessor(allspark.BaseProcessor):
    """ MyProcessor adalah contoh
        Anda dapat mengirim pesan seperti ini untuk memprediksi
        curl -v http://127.0.0.1:8080/api/predict/service_name -d '2 105'
    """
    def initialize(self):
        """ muat modul, dieksekusi sekali saat layanan dimulai
             lakukan inisialisasi layanan dan muat model dalam fungsi ini.
        """
        self.module = {'w0': 100, 'w1': 2}
        # model_dir = self.get_model_path().decode()
        # Anda harus mengimplementasikan fungsi load_model sendiri. Misalnya, untuk memuat file model.pt, Anda dapat mengimplementasikannya sebagai torch.load(model_dir + "/model.pt").
        # self.model = load_model(model_dir)

    def pre_process(self, data):
        """ pra-pemrosesan format data
        """
        x, y = data.split(b' ')
        return int(x), int(y)

    def post_process(self, data):
        """ pemrosesan setelah proses
        """
        return bytes(data, encoding='utf8')

    def process(self, data):
        """ proses data permintaan
        """
        x, y = self.pre_process(data)
        w0 = self.module['w0']
        w1 = self.module['w1']
        y1 = w1 * x + w0
        if y1 >= y:
            return self.post_process("True"), 200
        else:
            return self.post_process("False"), 400


if __name__ == '__main__':
    # allspark.default_properties().put('rpc.keepalive', '10000')
    # Atur timeout layanan menjadi 10 detik. Defaultnya adalah 5 detik.
    # Parameter worker_threads menunjukkan konkurensi pemrosesan.
    runner = MyProcessor(worker_threads=10)
    runner.run()

Contoh ini mewarisi kelas dasar BaseProcessor yang disediakan oleh EAS dan mengimplementasikan fungsi initialize() dan process().

Metode

Deskripsi

Penggunaan

initialize()

Metode inisialisasi prosesor. Melakukan tugas inisialisasi seperti memuat model saat layanan dimulai.

Tambahkan kode berikut ke initialize() untuk memisahkan pengambilan file model dari implementasi prosesor.

model_dir = self.get_model_path().decode()
self.model = load_model(model_dir)
  • get_model_path() mengembalikan direktori penyimpanan file model sebagai objek bytes. Ini adalah direktori penyimpanan aktual file model yang diunggah dalam instans layanan.

  • Implementasikan fungsi load_model() untuk memuat file model. Misalnya, untuk memuat file model.pt, implementasikan fungsi sebagai torch.load(model_dir + "/model.pt").

get_model_path()

Mengembalikan direktori penyimpanan file model sebagai objek bytes.

Saat parameter model_path ditentukan dalam JSON penerapan, panggil get_model_path() untuk mengambil direktori penyimpanan model dalam instans layanan guna dimuat.

process(data)

Metode penanganan permintaan. Untuk setiap permintaan, badan permintaan diteruskan ke process(). Nilai kembali dikirim ke klien.

data: Badan permintaan, tipe BYTES. Nilai kembali berupa BYTES dan INT, yang masing-masing berkorespondensi dengan response_data dan status_code. Untuk permintaan normal, status_code dapat berupa 0 atau 200.

_init_(worker_threads=5, worker_processes=1, endpoint=None)

Konstruktor prosesor.

  • worker_threads: Jumlah thread pekerja. Nilai default: 5.

  • worker_processes: Jumlah proses. Nilai default: 1. Jika diatur ke 1, layanan berjalan dalam mode single-process, multi-thread. Jika lebih besar dari 1, worker_threads hanya membaca data, dan beberapa proses menangani permintaan secara konkuren. Setiap proses mengeksekusi initialize().

  • endpoint: Alamat dan port tempat layanan mendengarkan. Contoh: endpoint='0.0.0.0:8079'.

    Catatan

    Jangan gunakan port 8080 atau 9090, yang dicadangkan oleh EAS.

run()

Memulai layanan.

Tidak ada.

Langkah 3: Uji layanan secara lokal

  1. Di direktori yang berisi app.py, jalankan perintah berikut untuk memulai aplikasi.

    ./ENV/bin/python app.py

    Output yang diharapkan jika berhasil:

    [INFO] waiting for service initialization to complete...
    [INFO] service initialization complete
    [INFO] create service
    [INFO] rpc binds to predefined port 8080
    [INFO] install builtin handler call to /api/builtin/call
    [INFO] install builtin handler eastool to /api/builtin/eastool
    [INFO] install builtin handler monitor to /api/builtin/monitor
    [INFO] install builtin handler ping to /api/builtin/ping
    [INFO] install builtin handler prop to /api/builtin/prop
    [INFO] install builtin handler realtime_metrics to /api/builtin/realtime_metrics
    [INFO] install builtin handler tell to /api/builtin/tell
    [INFO] install builtin handler term to /api/builtin/term
    [INFO] Service start successfully
  2. Buka terminal baru dan jalankan perintah berikut untuk menguji aplikasi.

    Berdasarkan kode contoh di Langkah 2, kirim data permintaan ke aplikasi. Hasil yang dikembalikan mencerminkan logika kode.

    curl http://127.0.0.1:8080/test  -d '10 20'

Langkah 4: Kemas kode dan lingkungan

EASCMD menyediakan perintah pengemasan satu langkah. Jika Anda tidak menggunakan EASCMD, kemas lingkungan secara manual. Kedua metode dijelaskan di bawah ini.

  • Perintah pengemasan EASCMD (hanya Linux):

    $ ./eascmd64 pysdk pack ./pysdk_demo

    Output yang diharapkan jika berhasil:

    [PYSDK] Creating package: /home/xi****.lwp/code/test/pysdk_demo.tar.gz
  • Pengemasan manual

    Persyaratan

    Rincian

    Format paket

    Paket harus berupa arsip terkompresi dalam format .zip atau .tar.gz.

    Isi paket

Langkah 5: Unggah paket dan file model

Unggah file paket (.zip atau .tar.gz) dan file model ke OSS secara terpisah untuk dipasang selama penerapan layanan. Untuk informasi lebih lanjut, lihat Panduan cepat ossutil.

Langkah 6: Terapkan dan uji layanan

Terapkan layanan model menggunakan Konsol PAI atau EASCMD.

  1. Terapkan layanan.

    Konsol PAI

    1. Login ke Konsol PAI. Pilih wilayah di bagian atas halaman. Kemudian, pilih ruang kerja yang diinginkan dan klik Elastic Algorithm Service (EAS).

    2. Klik Deploy Service. Di bagian Custom Model Deployment, klik Custom Deployment.

    3. Di halaman Custom Deployment, konfigurasikan parameter berikut. Untuk parameter lainnya, lihat Penerapan kustom.

      Parameter

      Deskripsi

      Deployment Method

      Pilih Processor-based Deployment.

      Model Settings

      Untuk Type, pilih OSS dan pilih path OSS file model.

      Processor Type

      Pilih Custom Processor.

      Processor Language

      Pilih python.

      Processor Package

      Untuk Type, pilih OSS dan pilih path OSS file paket dari langkah sebelumnya.

      Processor Main File

      Masukkan ./app.py.

    4. (Opsional) Di bagian Service Configurations, tambahkan parameter data_image dan atur ke path image yang dikonfigurasi selama pengemasan.

      Catatan

      Parameter ini hanya diperlukan jika Anda menggunakan image untuk mengemas lingkungan di Langkah 4.

    5. Klik Deploy.

    EASCMD

    Terapkan layanan di Linux:

    1. Unduh dan autentikasi EASCMD. Untuk informasi lebih lanjut, lihat Unduh dan autentikasi client.

    2. Di direktori EASCMD, buat file JSON bernama app.json. Contoh:

      {
        "name": "pysdk_demo",
        "processor_entry": "./app.py",
        "processor_type": "python",
        "processor_path": "oss://examplebucket/exampledirectory/pysdk_demo.tar.gz",
        "model_path": "oss://examplebucket/exampledirectory/model",
        "cloud": {
              "computing": {
                  "instance_type": "ecs.c7.large"
              }
        },
        "metadata": {
          "instance": 1,
          }
      }
    3. Di direktori yang berisi app.json, jalankan perintah berikut untuk menerapkan layanan.

      $ ./eascmd64 create app.json

      Output yang diharapkan jika berhasil:

      [RequestId]: 1202D427-8187-4BCB-8D32-D7096E95B5CA
      +-------------------+-------------------------------------------------------------------+
      | Intranet Endpoint | http://182848887922****.vpc.cn-beijing.pai-eas.aliyuncs.com/api/predict/pysdk_demo |
      |             Token | ZTBhZTY3ZjgwMmMyMTQ5OTgyMTQ5YmM0NjdiMmNiNmJkY2M5ODI0****          |
      +-------------------+-------------------------------------------------------------------+
      [OK] Waiting task server to be ready
      [OK] Fetching processor from [oss://eas-model-beijing/195557026392****/pysdk_demo.tar.gz]
      [OK] Building image [registry-vpc.cn-beijing.aliyuncs.com/eas/pysdk_demo_cn-beijing:v0.0.1-20190806082810]
      [OK] Pushing image [registry-vpc.cn-beijing.aliyuncs.com/eas/pysdk_demo_cn-beijing:v0.0.1-20190806082810]
      [OK] Waiting [Total: 1, Pending: 1, Running: 0]
      [OK] Service is running
  2. Uji layanan.

    1. Login ke Konsol PAI. Pilih wilayah di bagian atas halaman. Kemudian, pilih ruang kerja yang diinginkan dan klik Elastic Algorithm Service (EAS).

    2. Temukan layanan target dan klik Invocation Information di kolom Service Type untuk mendapatkan titik akhir publik dan Token.

    3. Jalankan perintah berikut untuk memanggil layanan dengan titik akhir dan token dari langkah sebelumnya.

      $ curl <service_url> -H 'Authorization: <token>' -d '10 20'

      Parameter:

      • <service_url>: Titik akhir publik dari langkah sebelumnya. Contoh: http://182848887922****.vpc.cn-beijing.pai-eas.aliyuncs.com/api/predict/pysdk_demo.

      • <token>: Token dari langkah sebelumnya. Contoh: ZTBhZTY3ZjgwMmMyMTQ5OTgyMTQ5YmM0NjdiMmNiNmJkY2M5ODI0****.

      • -d: Data input untuk layanan.

Referensi