Tutorial ini menunjukkan cara menggunakan penampung kustom untuk men-deploy model machine learning (ML) PyTorch yang menyalurkan prediksi online.
Dalam tutorial ini, Anda akan men-deploy container yang menjalankan alat TorchServe PyTorch untuk menyajikan prediksi dari model pengenalan digit yang disediakan oleh TorchServe yang telah dilatih sebelumnya pada set data MNIST. Kemudian Anda dapat menggunakan AI Platform Prediction untuk mengklasifikasikan gambar angka.
Sebelum memulai
- Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
-
Di konsol Google Cloud, pada halaman pemilih project, pilih atau buat project Google Cloud.
-
Make sure that billing is enabled for your Google Cloud project.
-
Aktifkan API AI Platform Training & Prediction and Artifact Registry API.
-
Di konsol Google Cloud, pada halaman pemilih project, pilih atau buat project Google Cloud.
-
Make sure that billing is enabled for your Google Cloud project.
-
Aktifkan API AI Platform Training & Prediction and Artifact Registry API.
-
Di konsol Google Cloud, aktifkan Cloud Shell.
Di bagian bawah Google Cloud Console, Cloud Shell sesi akan terbuka dan menampilkan perintah command line. Cloud Shell adalah lingkungan shell dengan Google Cloud CLI yang sudah terinstal, dan dengan nilai yang sudah ditetapkan untuk project Anda saat ini. Diperlukan waktu beberapa detik untuk melakukan inisialisasi sesi.
Dalam tutorial ini, sebaiknya gunakan Cloud Shell untuk berinteraksi dengan Google Cloud. Jika Anda ingin menggunakan shell Bash yang berbeda, bukan Cloud Shell, lakukan konfigurasi tambahan berikut:
- Install the Google Cloud CLI.
-
To initialize the gcloud CLI, run the following command:
gcloud init
- Ikuti dokumentasi Artifact Registry untuk Menginstal Docker.
Membangun dan mengirim image container
Untuk menggunakan container kustom, Anda harus menentukan image container Docker yang memenuhi persyaratan container kustom. Bagian ini menjelaskan cara membuat image container dan mengirimkannya ke Artifact Registry.
Download artefak model
Artefak model adalah file yang dibuat oleh pelatihan ML yang dapat Anda gunakan untuk menayangkan prediksi. Model ini berisi, setidaknya, struktur dan bobot model ML terlatih Anda. Format artefak model bergantung pada framework ML yang Anda gunakan untuk pelatihan .
Untuk tutorial ini, download contoh artefak model yang disediakan oleh TorchServe, bukan melatih dari awal.
Untuk meng-clone repositori TorchServe dan membuka direktori dengan artefak model, jalankan perintah berikut di shell Anda:
git clone https://github.com/pytorch/serve.git \
--branch=v0.3.0 \
--depth=1
cd serve/examples/image_classifier/mnist
Direktori ini berisi tiga file penting untuk di-build ke dalam image container Anda:
mnist.py
: menentukan struktur jaringan neural yang dilatihmnist_cnn.pt
: berisistate_dict
dengan bobot fitur dan output lainnya dari pelatihanmnist_handler.py
: memperluas cara TorchServe menangani permintaan prediksi
Membuat repositori Artifact Registry
Buat repositori Artifact Registry untuk menyimpan image container yang akan Anda buat di bagian berikutnya. Jalankan perintah berikut di shell Anda:
gcloud beta artifacts repositories create getting-started-pytorch \
--repository-format=docker \
--location=REGION
Ganti REGION dengan region tempat Anda ingin Artifact Registry menyimpan image container. Kemudian, Anda harus membuat resource model AI Platform Prediction di endpoint regional yang cocok dengan region ini. Jadi, pilih region tempat AI Platform Prediction memiliki endpoint regional; misalnya, us-central1
.
Setelah menyelesaikan operasi, perintah ini akan mencetak input berikut:
Created repository [getting-started-pytorch].
Membangun image container
TorchServe menyediakan Dockerfile untuk membangun image container yang menjalankan TorchServe. Namun, daripada menggunakan Dockerfile ini untuk menginstal semua dependensi TorchServe, Anda dapat mempercepat proses build dengan mengambil image container dari salah satu image TorchServe yang telah dikirim oleh tim TorchServe ke Docker Hub.
Dalam direktori yang berisi artefak model, buat Dockerfile baru dengan menjalankan perintah berikut di shell Anda:
cat > Dockerfile <<END FROM pytorch/torchserve:0.3.0-cpu COPY mnist.py mnist_cnn.pt mnist_handler.py /home/model-server/ USER root RUN printf "\nservice_envelope=json" >> /home/model-server/config.properties USER model-server RUN torch-model-archiver \ --model-name=mnist \ --version=1.0 \ --model-file=/home/model-server/mnist.py \ --serialized-file=/home/model-server/mnist_cnn.pt \ --handler=/home/model-server/mnist_handler.py \ --export-path=/home/model-server/model-store CMD ["torchserve", \ "--start", \ "--ts-config=/home/model-server/config.properties", \ "--models", \ "mnist=mnist.mar"] END
Petunjuk Docker ini melakukan tindakan berikut:
Petunjuk
FROM
mengambil image container saat ini dari image TorchServe yang ada.Petunjuk
COPY
akan menyalin artefak model dan pengendali prediksi dari direktori lokal Anda ke dalam direktori/home/model-server/
image container.Petunjuk
RUN
pertama mengedit file konfigurasi dari image induk untuk mendukung format input pilihan AI Platform Prediction untuk prediksi.Secara khusus, petunjuk ini akan mengonfigurasi TorchServe untuk mengharapkan amplop layanan JSON untuk permintaan prediksi.
Pengeditan file konfigurasi ini memerlukan izin yang tidak dimiliki oleh pengguna
model-server
(yang dibuat di image induk). Petunjuk ini memberi tahu Docker agar berjalan sebagai penggunaroot
untuk mengedit file konfigurasi, lalu terus menggunakan penggunamodel-server
untuk mengikuti petunjuk.Petunjuk
RUN
kedua menggunakan pengarsip model Torch, yang sudah diinstal di image container, untuk membuat arsip model dari file yang Anda salin ke dalam image. Ini menyimpan arsip model ini di direktori/home/model-server/model-store/
dengan nama filemnist.mar
.(Jika ingin mengubah image penampung—misalnya, untuk melakukan prapemrosesan atau pascapemrosesan kustom di pengendali permintaan—Anda dapat menggunakan petunjuk
RUN
tambahan untuk menginstal dependensi.)Petunjuk
CMD
memulai server HTTP TorchServe. Kode ini mereferensikan file konfigurasi dari image induk dan memungkinkan penayangan untuk satu model bernamamnist
. Model ini memuat filemnist.mar
yang dibuat oleh petunjukRUN
.Petunjuk ini menggantikan petunjuk
CMD
gambar induk. Penting untuk mengganti petunjukCMD
dan bukan petunjukENTRYPOINT
, karena skripENTRYPOINT
image induk menjalankan perintah yang diteruskan dalamCMD
, dan juga menambahkan logika tambahan untuk mencegah Docker keluar.
Untuk mem-build image container berdasarkan Dockerfile baru Anda dan memberinya tag dengan nama yang kompatibel dengan repositori Artifact Registry, jalankan perintah berikut di shell Anda:
docker build \ --tag=REGION-docker.pkg.dev/PROJECT_ID/getting-started-pytorch/serve-mnist \ .
Ganti kode berikut:
- REGION: region repositori Artifact Registry Anda, seperti yang ditentukan di bagian sebelumnya
- PROJECT_ID: ID project Google Cloud Anda
Perintah mungkin berjalan selama beberapa menit.
Menjalankan container secara lokal (opsional)
Sebelum mengirim image container ke Artifact Registry untuk menggunakannya dengan AI Platform Prediction, Anda dapat menjalankannya sebagai container di lingkungan lokal untuk memverifikasi bahwa server berfungsi seperti yang diharapkan:
Untuk menjalankan image container sebagai container secara lokal, jalankan perintah berikut di shell Anda:
docker run -d -p 8080:8080 --name=local_mnist \ REGION-docker.pkg.dev/PROJECT_ID/getting-started-pytorch/serve-mnist
Ganti baris berikut, seperti yang Anda lakukan di bagian sebelumnya:
- REGION: region repositori Artifact Registry Anda, seperti yang ditentukan di bagian sebelumnya
- PROJECT_ID: ID project Google Cloud Anda
Perintah ini menjalankan container dalam mode terpisah, yang memetakan port
8080
dari container ke port8080
dari lingkungan lokal. (Image induk, tempat Anda mendapatkan image container, mengonfigurasi TorchServe untuk menggunakan port8080
.)Untuk mengirimkan health check ke server penampung, jalankan perintah berikut di shell Anda:
curl localhost:8080/ping
Jika berhasil, server akan menampilkan respons berikut:
{ "status": "Healthy" }
Untuk mengirim permintaan prediksi ke server container, jalankan perintah berikut di shell Anda:
cat > instances.json <<END { "instances": [ { "data": { "b64": "$(base64 --wrap=0 test_data/3.png)" } } ] } END curl -X POST \ -H "Content-Type: application/json; charset=utf-8" \ -d @instances.json \ localhost:8080/predictions/mnist
Permintaan ini menggunakan salah satu gambar pengujian yang disertakan dengan contoh TorchServe.
Jika berhasil, server akan menampilkan prediksi berikut:
{"predictions": [3]}
Untuk menghentikan container, jalankan perintah berikut di shell Anda:
docker stop local_mnist
Mengirim container ke Artifact Registry
Mengonfigurasi Docker untuk mengakses Artifact Registry. Kemudian, kirim image container Anda ke repositori Artifact Registry.
Untuk memberikan izin penginstalan Docker lokal kepada Artifact Registry di region yang dipilih, jalankan perintah berikut di shell Anda:
gcloud auth configure-docker REGION-docker.pkg.dev
Ganti REGION dengan region tempat Anda membuat repositori di bagian sebelumnya.
Untuk mengirim image container yang baru saja Anda build ke Artifact Registry, jalankan perintah berikut di shell Anda:
docker push REGION-docker.pkg.dev/PROJECT_ID/getting-started-pytorch/serve-mnist
Ganti baris berikut, seperti yang Anda lakukan di bagian sebelumnya:
- REGION: region repositori Artifact Registry Anda, seperti yang ditentukan di bagian sebelumnya
- PROJECT_ID: ID project Google Cloud Anda
Men-deploy container
Bagian ini membahas pembuatan model dan versi model pada AI Platform Prediction untuk menyajikan prediksi. Versi model menjalankan image container Anda sebagai container untuk menampilkan prediksi.
Tutorial ini menyediakan opsi konfigurasi spesifik untuk digunakan saat Anda membuat model dan versi model. Jika Anda ingin mempelajari berbagai opsi konfigurasi, baca Men-deploy model.
Membuat model
Untuk membuat resource model, jalankan perintah berikut di shell Anda:
gcloud beta ai-platform models create getting_started_pytorch \
--region=REGION \
--enable-logging \
--enable-console-logging
Ganti REGION dengan region yang sama tempat Anda membuat repositori Artifact Registry di bagian sebelumnya.
Membuat versi model
Untuk membuat resource versi model, jalankan perintah berikut di shell Anda:
gcloud beta ai-platform versions create v1 \
--region=REGION \
--model=getting_started_pytorch \
--machine-type=n1-standard-4 \
--image=REGION-docker.pkg.dev/PROJECT_ID/getting-started-pytorch/serve-mnist \
--ports=8080 \
--health-route=/ping \
--predict-route=/predictions/mnist
Ganti kode berikut:
- REGION: region tempat Anda membuat repositori Artifact Registry dan model AI Platform Prediction di bagian sebelumnya
- PROJECT_ID: ID project Google Cloud Anda
Tanda terkait container dalam perintah ini melakukan hal berikut:
--image
: URI image container Anda.--ports
: Port tempat server HTTP penampung memproses permintaan. Image induk, tempat Anda mendapatkan image container, mengonfigurasi TorchServe untuk menggunakan port8080
.--health-route
: Jalur yang digunakan server HTTP penampung Anda untuk mendeteksi health check. TorchServe selalu memproses health check di jalur/ping
.--predict-route
: Jalur yang digunakan server HTTP penampung Anda untuk memproses permintaan prediksi. TorchServe selalu memproses permintaan prediksi di jalur/predictions/MODEL
.MODEL adalah nama model yang Anda tentukan saat memulai TorchServe. Dalam hal ini, namanya adalah
mnist
, yang Anda tetapkan dalam instruksi Docker ini dari bagian sebelumnya:CMD ["torchserve", \ "--start", \ "--ts-config=/home/model-server/config.properties", \ "--models", \ "mnist=mnist.mar"]
Mendapatkan prediksi
File contoh TorchServe yang Anda download di bagian sebelumnya menyertakan
gambar
pengujian. Konfigurasi TorchServe container mengharapkan untuk menerima
permintaan prediksi dalam format JSON, dengan gambar sebagai string berenkode base64
di kolom data.b64
dari setiap instance.
Misalnya, untuk mengklasifikasikan test_data/3.png
, jalankan perintah berikut di
shell Anda:
cat > instances.json <<END
{
"instances": [
{
"data": {
"b64": "$(base64 --wrap=0 test_data/3.png)"
}
}
]
}
END
curl -X POST \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json; charset=utf-8" \
-d @instances.json \
https://REGION-ml.googleapis.com/v1/projects/PROJECT_ID/models/getting_started_pytorch/versions/v1:predict
Ganti kode berikut:
- REGION: wilayah tempat Anda membuat model Prediksi AI Platform di bagian sebelumnya
- PROJECT_ID: ID project Google Cloud Anda
Jika berhasil, versi model akan menampilkan prediksi berikut:
{"predictions": [3]}
Pembersihan
Agar tidak menimbulkan biaya Prediksi AI Platform dan biaya Artifact Registry lebih lanjut, hapus resource Google Cloud yang Anda buat selama tutorial ini:
Untuk menghapus versi model, jalankan perintah berikut di shell Anda:
gcloud ai-platform versions delete v1 \ --region=REGION \ --model=getting_started_pytorch \ --quiet
Ganti REGION dengan region tempat Anda membuat model di bagian sebelumnya.
Untuk menghapus model, jalankan perintah berikut di shell Anda:
gcloud ai-platform models delete getting_started_pytorch \ --region=REGION \ --quiet
Ganti REGION dengan region tempat Anda membuat model di bagian sebelumnya.
Untuk menghapus repositori Artifact Registry dan image container di dalamnya, jalankan perintah berikut di shell Anda:
gcloud beta artifacts repositories delete getting-started-pytorch \ --location=REGION \ --quiet
Ganti REGION dengan region tempat Anda membuat repositori Artifact Registry di bagian sebelumnya.
Langkah selanjutnya
Jika Anda ingin mendesain image container Anda sendiri, baik dari awal maupun dengan berasal dari image container pihak ketiga yang sudah ada, baca Persyaratan penampung kustom.
Pelajari lebih lanjut cara menggunakan container kustom untuk prediksi, termasuk kompatibilitas dengan fitur Prediksi AI Platform lainnya dan opsi konfigurasi yang dapat Anda tentukan untuk container selama deployment.