Memulai: Menayangkan prediksi PyTorch dengan penampung kustom

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

  1. 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.
  2. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  3. Make sure that billing is enabled for your Google Cloud project.

  4. Enable the AI Platform Training & Prediction and Artifact Registry API APIs.

    Enable the APIs

  5. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  6. Make sure that billing is enabled for your Google Cloud project.

  7. Enable the AI Platform Training & Prediction and Artifact Registry API APIs.

    Enable the APIs

  8. In the Google Cloud console, activate Cloud Shell.

    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:

  1. Install the Google Cloud CLI.
  2. To initialize the gcloud CLI, run the following command:

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

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

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

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

  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 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]}
    
  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 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:

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:

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