Jika gambar resmi tidak memenuhi kebutuhan Anda untuk logika bisnis yang kompleks atau lingkungan tertentu, Anda dapat membuat gambar kustom untuk menciptakan lingkungan runtime yang lengkap. Elastic Algorithm Service (EAS) mendukung penyebaran layanan model menggunakan gambar kustom.
Selama waktu proses, EAS Mesin DPI disuntikkan ke dalam instans layanan sebagai sidecar. Mesin ini mengumpulkan lalu lintas dan data pemantauan sistem serta menambahkan informasi otentikasi ke permintaan layanan. Anda dapat mengekspos layanan API dari gambar melalui HTTP, WebSocket, atau gRPC (HTTP/2).
Petunjuk repositori gambar
Container Registry (ACR)
Anda dapat menarik gambar menggunakan titik akhir VPC.
PentingMenarik gambar melalui internet lambat dan menimbulkan risiko keamanan. Metode ini tidak direkomendasikan. Secara default, EAS tidak dapat mengakses internet. Untuk menarik gambar dari repositori melalui internet, lihat Izinkan layanan EAS mengakses internet.
ACR Edisi Personal: Anda dapat mengaktifkan dan menggunakan edisi ini hanya di satu wilayah. Untuk menarik gambar lintas wilayah, Anda harus menggunakan titik akhir publik. Gunakan ACR Edisi Personal hanya untuk pengujian, dan pastikan berada di wilayah yang sama dengan layanan EAS Anda.
ACR Edisi Perusahaan:
Untuk menggunakan titik akhir VPC, Anda harus mengonfigurasi VPC untuk EAS dan mengonfigurasi kontrol akses untuk ACR melalui VPC. Jika Anda bekerja lintas wilayah, Anda harus menghubungkan VPC melalui CEN. Untuk informasi lebih lanjut, lihat Akses instans ACR Edisi Perusahaan dari wilayah lain atau IDC.
Untuk menggunakan titik akhir publik, Anda harus mengonfigurasi VPC dengan akses internet untuk EAS dan aktifkan akses publik untuk ACR.
Ketika Anda menyebarkan layanan menggunakan repositori gambar ACR di bawah akun yang sama, Anda tidak perlu memasukkan nama pengguna atau kata sandi. EAS dapat menarik gambar lintas layanan tanpa otentikasi.
Repositori gambar mandiri
Jika Anda menggunakan repositori gambar Harbor mandiri di Alibaba Cloud VPC, repositori tersebut hanya dapat diakses dari dalam VPC tersebut. Mirip dengan proses untuk ACR Edisi Perusahaan, Anda harus menghubungkan EAS ke jaringan VPC Anda. Untuk informasi lebih lanjut, lihat Izinkan layanan EAS mengakses sumber daya di VPC.
Jika repositori mandiri Anda memerlukan nama pengguna dan kata sandi untuk akses, Anda harus memberikan informasi ini selama penyebaran layanan. Dalam file konfigurasi JSON, Anda harus mengkodekan Base64 string
username:password. Untuk informasi lebih lanjut, lihat deskripsi parameter dockerAuth di bagian Sebarkan layanan model.
Persiapan
Jika Anda memiliki gambar yang mendukung akses melalui HTTP, WebSocket, dan gRPC, Anda dapat melewati bagian ini.
1. Siapkan kode dan file model
Contoh berikut menunjukkan layanan web Flask sederhana. Kodenya ada di file app.py.
from flask import Flask
app = Flask(__name__)
@app.route('/hello/model')
def hello_world():
# Di sinilah inferensi model atau logika bisnis lainnya berada
return 'Hello World'
if __name__ == '__main__':
app.run(host='0.0.0.0', port=8000)Logika pemrosesan model dihilangkan di sini. Untuk meningkatkan efisiensi dan fleksibilitas penyebaran, kami sarankan Anda menyimpan file model besar, seperti yang lebih besar dari 1 GB, di Layanan Penyimpanan Objek (OSS). Jangan masukkan mereka langsung ke dalam gambar. Selama penyebaran, EAS dapat memuat model dengan memasang jalur OSS. Untuk informasi lebih lanjut, lihat Konfigurasi penyimpanan.
Sebagai contoh: Anda dapat menyimpan model my_model.pth di direktori oss://my-bucket/models/ dan memasang direktori ini ke direktori kontainer /mnt/data. Dalam kode Anda, Anda dapat langsung mengaksesnya menggunakan jalur mutlak /mnt/data/my_model.pth.
2. Bangun gambar
Jika Anda menggunakan DSW untuk pengembangan, klik Create Image di kolom Tindakan instance DSW. Sistem membangun gambar Docker dan menyimpannya ke Alibaba Cloud Container Registry (ACR). Selama penyebaran, pilih Custom Image lalu pilih gambar dari daftar drop-down. Untuk informasi lebih lanjut, lihat Buat gambar dari instance DSW.
Berikut ini menjelaskan cara menginstal Docker secara lokal dan membangun gambar. Anda juga dapat menggunakan layanan seperti Alibaba Cloud Container Registry (ACR) untuk membangun gambar.
Tulis Dockerfile.
Dockerfile adalah file teks yang berisi instruksi dan spesifikasi yang diperlukan untuk membangun gambar. Buat Dockerfile di direktori yang sama dengan file
app.py. Struktur direktori file adalah sebagai berikut:flask_app ├── app.py └── DockerfileDalam contoh Dockerfile berikut, file kode
app.pydikemas dalam gambar yang akan diterapkan. Anda juga dapat menyimpannya di OSS, NAS, atau repositori Git dan memasangnya ke instans layanan pada waktu proses menggunakan pemasangan penyimpanan.# Tentukan gambar dasar. FROM alibaba-cloud-linux-3-registry.cn-hangzhou.cr.aliyuncs.com/alinux3/python # Perintah untuk dijalankan di dalam kontainer. RUN yum -y install python3-pip RUN pip3 install flask # Buat folder aplikasi. RUN mkdir -p /app # Pergi ke direktori aplikasi. RUN cd /app # Salin app.py dari direktori saat ini ke direktori /app di kontainer. COPY app.py /app/ # Paparkan port 8000. EXPOSE 8000 # Tetapkan folder aplikasi sebagai direktori kerja. WORKDIR /app # Perintah untuk dijalankan saat kontainer dimulai: flask run CMD ["flask", "run", "--host", "0.0.0.0"]Bangun gambar secara lokal. Di baris perintah, pergi ke direktori flask_app dan jalankan perintah berikut untuk membangun gambar Docker bernama flask-app.
docker build -t flask-app .
3. Dorong gambar ke repositori
Jalankan perintah
docker imagesuntuk mendapatkan ID gambar yang dibangun.Contoh ini mengasumsikan bahwa Anda menggunakan ACR Edisi Personal. Alamatnya adalah
crpi-***.cn-hangzhou.personal.cr.aliyuncs.com/***/***.Jalankan perintah berikut untuk mendorong gambar ke repositori gambar ACR.
docker login --username=<username> crpi-***.cn-hangzhou.personal.cr.aliyuncs.com docker tag <Image ID> crpi-***.cn-hangzhou.personal.cr.aliyuncs.com/***/***:flask-app docker push crpi-***.cn-hangzhou.personal.cr.aliyuncs.com/***/***:flask-appAlamat gambar adalah:
crpi-***.cn-hangzhou.personal.cr.aliyuncs.com/***/***:flask-app.
Sebarkan layanan model
Anda dapat menyebarkan gambar menggunakan nilai parameter berikut:
Alamat gambar:
crpi-***-vpc.cn-hangzhou.personal.cr.aliyuncs.com/***:flask-app.Perintah startup gambar:
python3 app.py.Port yang dipantau oleh proses dalam gambar: 8000.
CatatanNomor port bersifat opsional dalam beberapa skenario. Misalnya, jika layanan Anda tidak bergantung pada lalu lintas yang diimpor dari gerbang EAS tetapi sebaliknya berlangganan antrian pesan untuk mengambil pesan, Anda tidak perlu menentukan nomor port.
Sebarkan menggunakan konsol
Konfigurasikan parameter utama sebagai berikut:
Metode Penyebaran: Pilih Image-based Deployment.
Konfigurasi Gambar: Pilih Image Address dan masukkan
crpi-***-vpc.cn-hangzhou.personal.cr.aliyuncs.com/***:flask-app. Contoh ini menggunakan repositori gambar ACR, sehingga Anda tidak perlu memasukkan nama pengguna atau kata sandi.Perintah Jalankan:
python3 app.pyNomor Port: 8000.
Sebarkan menggunakan alat klien
File konfigurasi JSON adalah sebagai berikut:
{ "metadata": { "name": "flask_app_test", "instance": 1 }, "cloud": { "computing": { "instances": [ { "type": "ecs.c8y.large" } ] } }, "containers": [ { "image": "crpi-***-vpc.cn-hangzhou.personal.cr.aliyuncs.com/***:flask-app", "script": "python3 app.py", "port": 8000 } ] }Tabel berikut menjelaskan parameter utama untuk menyebarkan layanan menggunakan gambar kustom. Untuk informasi lebih lanjut tentang parameter lainnya, lihat Penyebaran JSON.
Parameter
Diperlukan
Deskripsi
containers
image
Ya
Alamat gambar yang digunakan untuk menyebarkan layanan model.
command
Tentukan salah satu dari dua parameter.
Perintah entrypoint untuk gambar. Hanya perintah tunggal yang didukung. Skrip kompleks, seperti cd xxx && python app.py, tidak didukung. Untuk menjalankan skrip kompleks, gunakan parameter script. Bidang command cocok untuk skenario di mana perintah /bin/sh tidak tersedia dalam gambar.
script
Skrip entrypoint untuk gambar. Anda dapat menentukan skrip kompleks. Pisahkan beberapa baris dengan \n atau titik koma.
port
Tidak
Port kontainer.
PentingKarena EAS Mesin DPI mendengarkan port tetap 8080 dan 9090, port kontainer tidak boleh 8080 atau 9090.
Port harus sama dengan port yang dikonfigurasi di file xxx.py yang ditentukan dalam parameter command.
dockerAuth
Tidak
Jika Anda menggunakan gambar dari repositori pribadi, Anda harus menggunakan parameter ini untuk menentukan informasi otentikasi untuk Docker Registry. Saat ini, hanya format yang dikodekan Base64 dari
username:passwordyang didukung.Sebagai contoh, jika nilai dari
username:passwordadalahabcd:abcde12345, perintahecho -n "abcd:abcde12345" | base64mengembalikanYWJjZDphYmNkZTEy****. Ini adalah nilai untuk dockerAuth.Anda dapat menyebarkan layanan model dengan menjalankan perintah
createdi alat klien. Anda harus terlebih dahulu unduh dan autentikasi klien.eascmd create image.jsonDalam perintah, image.json adalah file konfigurasi layanan JSON yang dibuat pada langkah sebelumnya.
Sistem mengembalikan hasil serupa dengan berikut ini, yang mencakup titik akhir layanan dan token akses.
[RequestId]: BFFFE5F5-1F07-437E-B59A-AF1F2B66**** +-------------------+-----------------------------------------------------------------------------------+ | Internet Endpoint | http://182848887922***.cn-shanghai.pai-eas.aliyuncs.com/api/predict/image_test | | Intranet Endpoint | http://182848887922***.vpc.cn-shanghai.pai-eas.aliyuncs.com/api/predict/image_test| | Token | NjA4MzQxOWQ0MTY2M2Y4OGY0NjgwODkwZTZmYWJmZWU1ZmY0Njhk**** | +-------------------+-----------------------------------------------------------------------------------+ [OK] Service is now creating [OK] Waiting [Total: 2, Pending: 2, Running: 0] [OK] Running [Total: 2, Pending: 0, Running: 2] [OK] Service is runningUntuk memodifikasi konfigurasi layanan, Anda dapat menjalankan perintah
modifydi alat klien.Berikut ini adalah contoh perintah untuk memodifikasi layanan sebelumnya. Untuk informasi lebih lanjut tentang perintah
modify, lihat Modifikasi konfigurasi layanan.eascmd modify registry_test -s image.jsonDalam perintah, registry_test adalah nama layanan, dan image.json adalah file deskripsi layanan.
Validasi layanan
Ketika status layanan berubah menjadi Berjalan, layanan telah berhasil dimulai. Gambar flask-app yang dijelaskan di atas menyediakan layanan web dengan jalur akses /hello/model. Anda dapat menjalankan perintah berikut untuk menguji panggilan layanan:
curl <endpoint>/hello/model -H "Authorization: <token>"Dalam perintah, ganti <endpoint> dan <token> dengan titik akhir layanan dan token aktual. Untuk informasi lebih lanjut, lihat Memperoleh titik akhir dan token.
Untuk informasi lebih lanjut tentang permintaan layanan, lihat Metode pemanggilan layanan.
FAQ
Untuk informasi tentang cara menyelesaikan masalah, seperti kegagalan penarikan gambar, lihat FAQ EAS.
Referensi
Penyebaran gambar kustom mendukung fitur pemeriksaan kesehatan. Untuk informasi lebih lanjut, lihat Pemeriksaan Kesehatan.
Setelah layanan berhasil diterapkan, Anda dapat mengaktifkan fitur penskalaan otomatis untuk menangani fluktuasi signifikan dalam beban kerja bisnis Anda. Untuk informasi lebih lanjut, lihat Penskalaan Otomatis.