Tutorial ini menunjukkan cara menggunakan penampung kustom untuk men-deploy model machine learning (ML) PyTorch yang menayangkan prediksi online.
Dalam tutorial ini, Anda akan men-deploy container yang menjalankan alat TorchServe PyTorch untuk menayangkan prediksi dari model pengenalan angka yang disediakan oleh TorchServe yang telah dilatih sebelumnya di set data MNIST. Selanjutnya, 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.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Make sure that billing is enabled for your Google Cloud project.
-
Enable the AI Platform Training & Prediction and Artifact Registry API APIs.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Make sure that billing is enabled for your Google Cloud project.
-
Enable the AI Platform Training & Prediction and Artifact Registry API APIs.
-
In the Google Cloud console, activate Cloud Shell.
At the bottom of the Google Cloud console, a Cloud Shell session starts and displays a command-line prompt. Cloud Shell is a shell environment with the Google Cloud CLI already installed and with values already set for your current project. It can take a few seconds for the session to initialize.
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, daripada melatih dari awal, download contoh artefak model yang disediakan oleh TorchServe.
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 penampung Anda:
mnist.py
: menentukan struktur jaringan saraf 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 Anda. 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 mem-build image container yang menjalankan TorchServe. Namun, bukan menggunakan Dockerfile ini untuk menginstal semua dependensi TorchServe, Anda dapat mempercepat proses build dengan mendapatkan image container dari salah satu image TorchServe yang telah di-push oleh tim TorchServe ke Docker Hub.
Di direktori dengan 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
memperoleh image container saat ini dari image TorchServe yang ada.Petunjuk
COPY
menyalin artefak model dan pengendali prediksi dari direktori lokal ke 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 mengonfigurasi TorchServe untuk mengharapkan envelop layanan JSON untuk permintaan prediksi.
Mengedit file konfigurasi ini memerlukan izin yang tidak dimiliki pengguna
model-server
(yang dibuat dalam image induk). Petunjuk ini memberi tahu Docker untuk berjalan sebagai penggunaroot
guna mengedit file konfigurasi, lalu terus menggunakan penggunamodel-server
untuk mengikuti petunjuk.Petunjuk
RUN
kedua menggunakan Torch model archival, yang sudah diinstal di image container, untuk membuat arsip model dari file yang Anda salin ke dalam image. Tindakan ini akan menyimpan file arsip model ini di direktori/home/model-server/model-store/
dengan nama filemnist.mar
.(Jika ingin mengubah image container—misalnya, untuk melakukan pemrosesan atau pascapemrosesan kustom di pengendali permintaan—Anda dapat menggunakan petunjuk
RUN
tambahan untuk menginstal dependensi.)Petunjuk
CMD
memulai server HTTP TorchServe. File 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. Anda harus mengganti petunjukCMD
, bukan petunjukENTRYPOINT
, karena skripENTRYPOINT
image induk menjalankan perintah yang diteruskan diCMD
dan juga menambahkan logika tambahan untuk mencegah Docker keluar.
Untuk mem-build image container berdasarkan Dockerfile baru dan memberi 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 Anda guna 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 mengirimkan permintaan prediksi ke server penampung, 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 Image uji 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 penampung
Bagian ini membahas cara membuat model dan versi model di AI Platform Prediction untuk menayangkan prediksi. Versi model menjalankan image container Anda sebagai container untuk menayangkan prediksi.
Tutorial ini memberikan opsi konfigurasi tertentu yang akan 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
Flag terkait penampung dalam perintah ini melakukan hal berikut:
--image
: URI image container Anda.--ports
: Port tempat server HTTP penampung Anda memproses permintaan. Image induk, yang merupakan asal image container Anda, mengonfigurasi TorchServe untuk menggunakan port8080
.--health-route
: Jalur tempat server HTTP penampung Anda memproses health check. TorchServe selalu memproses health check di jalur/ping
.--predict-route
: Jalur tempat server HTTP penampung Anda 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 petunjuk 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
image
pengujian. Konfigurasi TorchServe penampung mengharapkan untuk menerima
permintaan prediksi dalam format JSON, dengan gambar sebagai string berenkode base64
di kolom data.b64
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: region 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 AI Platform Prediction 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 mengambil dari image container pihak ketiga yang ada—baca Persyaratan container kustom.
Pelajari lebih lanjut cara menggunakan penampung kustom untuk prediksi, termasuk kompatibilitas dengan fitur AI Platform Prediction dan opsi konfigurasi lainnya yang dapat Anda tentukan untuk penampung selama deployment.