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:
-
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.
-
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.
-
Langkah 3: Uji layanan secara lokal
Uji layanan secara lokal untuk memverifikasi bahwa logika prediksi benar dan layanan berfungsi sesuai harapan setelah diterapkan.
-
Langkah 4: Kemas kode dan lingkungan Python
Kemas kode dan lingkungan untuk penerapan layanan.
-
Langkah 5: Unggah paket prosesor dan file model
Unggah paket dan file model secara terpisah ke Object Storage Service (OSS).
-
Langkah 6: Terapkan dan uji layanan
Terapkan prosesor kustom Anda sebagai layanan model dan verifikasi bahwa layanan tersebut berfungsi.
-
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.
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:
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
|
|
get_model_path() |
Mengembalikan direktori penyimpanan file model sebagai objek bytes. |
Saat parameter |
|
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. |
|
|
run() |
Memulai layanan. |
Tidak ada. |
Langkah 3: Uji layanan secara lokal
-
Di direktori yang berisi app.py, jalankan perintah berikut untuk memulai aplikasi.
./ENV/bin/python app.pyOutput 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 -
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_demoOutput 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
-
Direktori root harus berupa /ENV dan harus berisi app.py.
-
Contoh paket: contoh paket .tar.gz.
-
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.
-
Terapkan layanan.
Konsol PAI
-
Login ke Konsol PAI. Pilih wilayah di bagian atas halaman. Kemudian, pilih ruang kerja yang diinginkan dan klik Elastic Algorithm Service (EAS).
-
Klik Deploy Service. Di bagian Custom Model Deployment, klik Custom Deployment.
-
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. -
(Opsional) Di bagian Service Configurations, tambahkan parameter data_image dan atur ke path image yang dikonfigurasi selama pengemasan.
CatatanParameter ini hanya diperlukan jika Anda menggunakan image untuk mengemas lingkungan di Langkah 4.
-
Klik Deploy.
EASCMD
Terapkan layanan di Linux:
-
Unduh dan autentikasi EASCMD. Untuk informasi lebih lanjut, lihat Unduh dan autentikasi client.
-
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, } } -
Di direktori yang berisi app.json, jalankan perintah berikut untuk menerapkan layanan.
$ ./eascmd64 create app.jsonOutput 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
-
-
Uji layanan.
-
Login ke Konsol PAI. Pilih wilayah di bagian atas halaman. Kemudian, pilih ruang kerja yang diinginkan dan klik Elastic Algorithm Service (EAS).
-
Temukan layanan target dan klik Invocation Information di kolom Service Type untuk mendapatkan titik akhir publik dan Token.
-
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
-
Permasalahan pengembangan umum: FAQ
-
Pengembangan prosesor kustom dalam Java: Kembangkan prosesor kustom menggunakan Java