Memulai: Menyajikan prediksi PyTorch dengan container kustom

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

  1. Login ke akun Google Cloud Anda. Jika Anda baru menggunakan Google Cloud, buat akun untuk mengevaluasi performa produk kami dalam skenario dunia nyata. Pelanggan baru juga mendapatkan kredit gratis senilai $300 untuk menjalankan, menguji, dan men-deploy workload.
  2. Di konsol Google Cloud, pada halaman pemilih project, pilih atau buat project Google Cloud.

    Buka pemilih project

  3. Pastikan penagihan telah diaktifkan untuk project Google Cloud Anda.

  4. Aktifkan API AI Platform Training & Prediction and Artifact Registry API.

    Mengaktifkan API

  5. Di konsol Google Cloud, pada halaman pemilih project, pilih atau buat project Google Cloud.

    Buka pemilih project

  6. Pastikan penagihan telah diaktifkan untuk project Google Cloud Anda.

  7. Aktifkan API AI Platform Training & Prediction and Artifact Registry API.

    Mengaktifkan API

  8. Di konsol Google Cloud, aktifkan Cloud Shell.

    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:

  1. Menginstal Google Cloud CLI.
  2. Untuk initialize gcloud CLI, jalankan perintah berikut:

    gcloud init
  3. 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 dilatih
  • mnist_cnn.pt: berisi state_dict dengan bobot fitur dan output lainnya dari pelatihan
  • mnist_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.

  1. 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 pengguna root untuk mengedit file konfigurasi, lalu terus menggunakan pengguna model-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 file mnist.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 bernama mnist. Model ini memuat file mnist.mar yang dibuat oleh petunjuk RUN.

      Petunjuk ini menggantikan petunjuk CMD gambar induk. Penting untuk mengganti petunjuk CMD dan bukan petunjuk ENTRYPOINT, karena skrip ENTRYPOINT image induk menjalankan perintah yang diteruskan dalam CMD, dan juga menambahkan logika tambahan untuk mencegah Docker keluar.

  2. 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:

  1. 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 port 8080 dari lingkungan lokal. (Image induk, tempat Anda mendapatkan image container, mengonfigurasi TorchServe untuk menggunakan port 8080.)

  2. 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"
    }
    
  3. 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]}
    
  4. 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.

  1. 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.

  2. 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:

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:

  1. 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.

  2. 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.

  3. 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.