Menggunakan container di Pelatihan AI Platform

Panduan ini menjelaskan cara mem-build container kustom Anda sendiri untuk menjalankan tugas di Pelatihan AI Platform.

Langkah-langkah penggunaan container

Langkah-langkah berikut menunjukkan proses dasar untuk pelatihan dengan container kustom:

  1. Siapkan project Google Cloud dan lingkungan lokal Anda.
  2. Buat penampung kustom:
    1. Tulis Dockerfile yang menyiapkan container Anda agar berfungsi dengan Pelatihan AI Platform, dan menyertakan dependensi yang diperlukan untuk aplikasi pelatihan Anda.
    2. Bangun dan uji container Docker Anda secara lokal.
  3. Mengirim container ke Container Registry.
  4. Kirim tugas pelatihan yang berjalan di container kustom Anda.

Penggunaan penyesuaian hyperparameter atau GPU memerlukan beberapa penyesuaian, tetapi proses dasarnya sama.

Sebelum memulai

Gunakan Cloud Shell atau lingkungan apa pun tempat gcloud CLI diinstal.

Selesaikan langkah-langkah berikut untuk menyiapkan akun GCP, mengaktifkan API yang diperlukan, serta menginstal dan mengaktifkan Cloud SDK.

  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, Compute Engine and Container Registry.

    Mengaktifkan API

  5. Menginstal Google Cloud CLI.
  6. Untuk initialize gcloud CLI, jalankan perintah berikut:

    gcloud init
  7. Di konsol Google Cloud, pada halaman pemilih project, pilih atau buat project Google Cloud.

    Buka pemilih project

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

  9. Aktifkan API AI Platform Training & Prediction, Compute Engine and Container Registry.

    Mengaktifkan API

  10. Menginstal Google Cloud CLI.
  11. Untuk initialize gcloud CLI, jalankan perintah berikut:

    gcloud init
  12. Menginstal Docker.

    Jika Anda menggunakan sistem operasi berbasis Linux, seperti Ubuntu atau Debian, tambahkan nama pengguna ke grup docker agar Anda dapat menjalankan Docker tanpa menggunakan sudo:

    sudo usermod -a -G docker ${USER}

    Anda mungkin perlu memulai ulang sistem setelah menambahkan diri Anda ke grup docker.

  13. Buka Docker. Untuk memastikan Docker berjalan, jalankan perintah Docker berikut, yang menampilkan waktu dan tanggal saat ini:
    docker run busybox date
  14. Gunakan gcloud sebagai helper kredensial untuk Docker:
    gcloud auth configure-docker
  15. Opsional: Jika Anda ingin menjalankan penampung menggunakan GPU secara lokal, instal nvidia-docker.

Membuat container kustom

Untuk membuat container kustom, Anda perlu menulis Dockerfile untuk menyiapkan image Docker yang akan digunakan pada tugas pelatihan. Setelah itu, Anda akan mem-build dan menguji image Anda secara lokal.

Dasar-dasar Dockerfile untuk Pelatihan AI Platform

Saat membuat container kustom, Anda menggunakan Dockerfile untuk menentukan semua perintah yang diperlukan untuk mem-build image Anda.

Bagian ini membahas contoh umum Dockerfile. Anda dapat menemukan contoh spesifik di setiap tutorial penampung kustom, dan dalam contoh terkait.

Untuk digunakan dengan Pelatihan AI Platform, Dockerfile Anda harus menyertakan perintah yang mencakup tugas-tugas berikut:

  • Memilih image dasar
  • Menginstal dependensi tambahan
  • Menyalin kode pelatihan ke image
  • Mengonfigurasi titik entri untuk AI Platform Training guna memanggil kode pelatihan Anda

Dockerfile Anda dapat menyertakan logika tambahan, tergantung kebutuhan Anda. Pelajari penulisan Dockerfile lebih lanjut, dan untuk mengetahui informasi selengkapnya tentang setiap perintah tertentu, lihat referensi Dockerfile.

Perintah Dockerfile Deskripsi Contoh
FROM image:tag Menentukan image dasar beserta tag-nya.

Contoh image dasar dengan tag:

  • pytorch/pytorch:latest
  • tensorflow/tensorflow:nightly
  • python:2.7.15-jessie
  • nvidia/cuda:9.0-cudnn7-runtime
WORKDIR /path/to/directory Menentukan direktori pada image tempat petunjuk berikutnya dijalankan. /root
RUN pip install pkg1 pkg2 pkg3 Menginstal paket tambahan menggunakan pip.

Catatan: jika image dasar tidak memiliki pip, Anda harus menyertakan perintah untuk menginstalnya sebelum menginstal paket lain.

Contoh paket:

  • google-cloud-storage
  • cloudml-hypertune
  • pandas
COPY src/foo.py dest/foo.py Menyalin kode untuk aplikasi pelatihan Anda ke dalam image. Bergantung pada struktur aplikasi pelatihan Anda, ini kemungkinan akan mencakup beberapa file.

Contoh nama file dalam aplikasi pelatihan Anda:

  • model.py
  • task.py
  • data_utils.py
ENTRYPOINT ["exec", "file"] Menyiapkan titik entri untuk memanggil kode pelatihan Anda agar dapat dijalankan. ["python", "task.py"]

Logika di Dockerfile Anda dapat bervariasi sesuai dengan kebutuhan Anda, tetapi secara umum akan terlihat seperti ini:

# Specifies base image and tag
FROM image:tag
WORKDIR /root

# Installs additional packages
RUN pip install pkg1 pkg2 pkg3

# Downloads training data
RUN curl https://example-url/path-to-data/data-filename --output /root/data-filename

# Copies the trainer code to the docker image.
COPY your-path-to/model.py /root/model.py
COPY your-path-to/task.py /root/task.py

# Sets up the entry point to invoke the trainer.
ENTRYPOINT ["python", "task.py"]

Membangun dan menguji container Docker Anda secara lokal

  1. Buat URI image yang benar dengan menggunakan variabel lingkungan, lalu build image Docker. Flag -t memberi nama dan memberi tag pada gambar dengan pilihan Anda untuk IMAGE_REPO_NAME dan IMAGE_TAG. Anda dapat memilih nama dan tag yang berbeda untuk gambar Anda.

    export PROJECT_ID=$(gcloud config list project --format "value(core.project)")
    export IMAGE_REPO_NAME=example_custom_container_image
    export IMAGE_TAG=example_image_tag
    export IMAGE_URI=gcr.io/$PROJECT_ID/$IMAGE_REPO_NAME:$IMAGE_TAG
    
    docker build -f Dockerfile -t $IMAGE_URI ./
  2. Verifikasi image dengan menjalankannya secara lokal. Perhatikan bahwa flag --epochs diteruskan ke skrip pelatih.

    docker run $IMAGE_URI --epochs 1

Mengirim container ke Container Registry

Jika operasi lokal berfungsi, Anda dapat mengirim container ke Container Registry di project Anda.

Mengirim container ke Container Registry. Pertama, jalankan gcloud auth configure-docker jika Anda belum melakukannya.

docker push $IMAGE_URI

Mengelola izin Container Registry

Jika menggunakan image Container Registry dari dalam project yang sama dengan yang digunakan untuk menjalankan pelatihan Pelatihan AI Platform, Anda tidak perlu mengonfigurasi izin lebih lanjut untuk tutorial ini, dan Anda dapat melanjutkan ke langkah berikutnya.

Kontrol akses untuk Container Registry didasarkan pada bucket Cloud Storage di balik layar, sehingga mengonfigurasi izin Container Registry sangat mirip dengan mengonfigurasi izin Cloud Storage.

Jika ingin pull image dari Container Registry di project lain, Anda harus mengizinkan akun layanan AI Platform Training untuk mengakses image dari project lain.

  • Temukan bucket Cloud Storage yang mendasarinya untuk izin Container Registry Anda.
  • Berikan peran (seperti Storage Object Viewer) yang menyertakan izin storage.objects.get dan storage.objects.list ke akun layanan Pelatihan AI Platform Anda.

Jika Anda ingin push image docker ke project yang berbeda dengan yang Anda gunakan untuk mengirim tugas pelatihan Pelatihan AI Platform, Anda harus memberikan akses penarikan image ke akun layanan Pelatihan AI Platform di project yang memiliki repositori Container Registry Anda. Akun layanan menggunakan format service-$CMLE_PROJ_NUM@cloud-ml.google.com.iam.gserviceaccount.com dan dapat ditemukan di IAM console.

Perintah berikut akan menambahkan akun layanan Pelatihan AI Platform Anda ke project Container Registry terpisah:

export GCR_PROJ_ID=[YOUR-PROJECT-ID-FOR-GCR]
export CMLE_PROJ_NUM=[YOUR-PROJECT-NUMBER-FOR-CMLE-JOB-SUBMISSION]
export \
SVC_ACCT=service-$CMLE_PROJ_NUM@cloud-ml.google.com.iam.gserviceaccount.com

gcloud projects add-iam-policy-binding $GCR_PROJ_ID \
    --member serviceAccount:$SVC_ACCOUNT --role roles/ml.serviceAgent

Lihat lebih lanjut cara mengonfigurasi kontrol akses untuk Container Registry.

Mengirim tugas pelatihan Anda

Kirim tugas pelatihan ke Pelatihan AI Platform menggunakan gcloud CLI. Teruskan URI ke image Docker Anda menggunakan flag --master-image-uri:

export BUCKET_NAME=custom_containers
export MODEL_DIR=example_model_$(date +%Y%m%d_%H%M%S)

gcloud ai-platform jobs submit training $JOB_NAME \
  --region $REGION \
  --master-image-uri $IMAGE_URI \
  -- \
  --model-dir=gs://$BUCKET_NAME/$MODEL_DIR \
  --epochs=10

Penyesuaian hyperparameter dengan container kustom

Untuk melakukan penyesuaian hyperparameter dengan penampung kustom, Anda harus melakukan penyesuaian berikut:

Lihat contoh pelatihan dengan container kustom yang menggunakan penyesuaian hyperparameter.

Menggunakan GPU dengan container kustom

Untuk pelatihan dengan GPU, container kustom Anda harus memenuhi beberapa persyaratan khusus. Anda harus mem-build image Docker yang berbeda dari yang akan digunakan untuk pelatihan dengan CPU.

  • Pra-instal toolkit CUDA dan cuDNN di container Anda. Menggunakan image nvidia/cuda sebagai image dasar adalah cara yang direkomendasikan untuk menangani hal ini, karena sudah memiliki toolkit CUDA dan cuDNN yang sudah terinstal, serta membantu Anda menyiapkan variabel lingkungan terkait dengan benar.

    Jika konfigurasi pelatihan Anda menggunakan GPU NVIDIA A100, container Anda harus menggunakan CUDA 11 atau yang lebih baru.

  • Instal dependensi tambahan, seperti wget, curl, pip, dan lainnya yang dibutuhkan oleh aplikasi pelatihan Anda.

Lihat contoh Dockerfile untuk pelatihan dengan GPU.

Menggunakan TPU dengan container kustom

Jika melakukan pelatihan terdistribusi dengan TensorFlow, Anda dapat menggunakan TPU pada VM worker. Untuk melakukannya, Anda harus mengonfigurasi tugas pelatihan untuk menggunakan TPU dan menentukan kolom tpuTfVersion saat mengirimkan tugas pelatihan.

Pelatihan terdistribusi dengan container kustom

Saat menjalankan tugas pelatihan terdistribusi dengan container kustom, Anda dapat menentukan hanya satu image untuk digunakan sebagai master, pekerja, dan server parameter. Anda juga memiliki opsi untuk mem-build dan menentukan image yang berbeda untuk server master, pekerja, dan parameter. Dalam hal ini, dependensi kemungkinan akan sama di ketiga gambar, dan Anda dapat menjalankan logika kode yang berbeda dalam setiap gambar.

Dalam kode, Anda dapat menggunakan variabel lingkungan TF_CONFIG dan CLUSTER_SPEC. Variabel lingkungan ini menjelaskan keseluruhan struktur cluster, dan AI Platform Training akan mengisinya untuk Anda di setiap node cluster pelatihan Anda. Pelajari CLUSTER_SPEC lebih lanjut.

Anda dapat menentukan gambar dalam objek TrainingInput saat mengirimkan tugas, atau melalui flag yang sesuai di gcloud ai-platform submit training.

Untuk contoh ini, anggaplah Anda telah menetapkan tiga Dockerfile terpisah, satu untuk setiap jenis mesin (master, worker, dan server parameter). Setelah itu, beri nama, build, uji, dan kirim image Anda ke Container Registry. Terakhir, Anda mengirimkan tugas pelatihan yang menentukan image yang berbeda beserta konfigurasi mesin untuk cluster Anda.

Pertama, jalankan gcloud auth configure-docker jika Anda belum melakukannya.

export PROJECT_ID=$(gcloud config list project --format "value(core.project)")
export BUCKET_NAME=custom_containers
export MASTER_IMAGE_REPO_NAME=master_image_name
export MASTER_IMAGE_TAG=master_tag
export MASTER_IMAGE_URI=gcr.io/$PROJECT_ID/$MASTER_IMAGE_REPO_NAME:$MASTER_IMAGE_TAG
export WORKER_IMAGE_REPO_NAME=worker_image_name
export WORKER_IMAGE_TAG=worker_tag
export WORKER_IMAGE_URI=gcr.io/$PROJECT_ID/$WORKER_IMAGE_REPO_NAME:$WORKER_IMAGE_TAG
export PS_IMAGE_REPO_NAME=ps_image_name
export PS_IMAGE_TAG=ps_tag
export PS_IMAGE_URI=gcr.io/$PROJECT_ID/$PS_IMAGE_REPO_NAME:$PS_IMAGE_TAG
export MODEL_DIR=distributed_example_$(date +%Y%m%d_%H%M%S)
export REGION=us-central1
export JOB_NAME=distributed_container_job_$(date +%Y%m%d_%H%M%S)

docker build -f Dockerfile-master -t $MASTER_IMAGE_URI ./
docker build -f Dockerfile-worker -t $WORKER_IMAGE_URI ./
docker build -f Dockerfile-ps -t $PS_IMAGE_URI ./

docker run $MASTER_IMAGE_URI --epochs 1
docker run $WORKER_IMAGE_URI --epochs 1
docker run $PS_IMAGE_URI --epochs 1

docker push $MASTER_IMAGE_URI
docker push $WORKER_IMAGE_URI
docker push $PS_IMAGE_URI

gcloud ai-platform jobs submit training $JOB_NAME \
  --region $REGION \
  --master-machine-type complex_model_m \
  --master-image-uri $MASTER_IMAGE_URI \
  --worker-machine-type complex_model_m \
  --worker-image-uri $WORKER_IMAGE_URI \
  --worker-count 9 \
  --parameter-server-machine-type large_model \
  --parameter-server-image-uri $PS_IMAGE_URI \
  --parameter-server-count 3 \
  -- \
  --model-dir=gs://$BUCKET_NAME/$MODEL_DIR \
  --epochs=10

Kredensial default di penampung kustom

Saat Anda menjalankan tugas pelatihan dengan container kustom, aplikasi Anda secara default akan berjalan sebagai identitas Agen Layanan Cloud ML. Anda dapat menemukan ID akun layanan Agen Layanan Cloud ML untuk project Anda di halaman IAM pada Konsol Google Cloud. ID ini memiliki format berikut:

service-PROJECT_NUMBER@cloud-ml.google.com.iam.gserviceaccount.com

Ganti PROJECT_NUMBER dengan nomor project untuk project Google Cloud Anda.

Pelatihan AI Platform secara otomatis menggunakan kredensial Agen Layanan Cloud ML untuk menyiapkan autentikasi dan otorisasi jika Anda menggunakan Tensorflow tfds, library klien Google Cloud, atau alat lain yang menggunakan strategi Kredensial Default Aplikasi.

Namun, jika Anda ingin tugas container kustom mengakses Google Cloud dengan cara lain, Anda mungkin perlu melakukan konfigurasi tambahan. Misalnya, jika Anda menggunakan gsutil untuk menyalin data dari Cloud Storage dan menggunakan library boto untuk memuat kredensial dari file konfigurasi, maka tambahkan perintah ke Dockerfile Anda yang memastikan gsutil menggunakan kredensial Agen Layanan Cloud ML default:

RUN echo '[GoogleCompute]\nservice_account = default' > /etc/boto.cfg

Langkah selanjutnya