Menggunakan container di AI Platform Training

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

Langkah-langkah yang diperlukan dalam menggunakan penampung

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

  1. Menyiapkan project Google Cloud dan lingkungan lokal Anda.
  2. Membuat penampung kustom:
    1. Menulis Dockerfile yang menyiapkan container Anda agar berfungsi dengan AI Platform Training, dan menyertakan dependensi yang diperlukan untuk aplikasi pelatihan Anda.
    2. Membangun dan menguji container Docker secara lokal.
  3. Kirim container ke Container Registry.
  4. Kirim tugas pelatihan yang berjalan di penampung kustom Anda.

Menggunakan penyesuaian hyperparameter atau GPU memerlukan beberapa penyesuaian, tetapi proses dasar tetap sama.

Sebelum memulai

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

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

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

    Enable the APIs

  5. Install the Google Cloud CLI.
  6. To initialize the gcloud CLI, run the following command:

    gcloud init
  7. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

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

  9. Enable the AI Platform Training & Prediction, Compute Engine and Container Registry APIs.

    Enable the APIs

  10. Install the Google Cloud CLI.
  11. To initialize the gcloud CLI, run the following command:

    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 container menggunakan GPU secara lokal, instal nvidia-docker.

Membuat container kustom

Membuat container kustom melibatkan penulisan Dockerfile untuk menyiapkan image Docker yang akan Anda gunakan untuk tugas pelatihan. Setelah itu, Anda akan mem-build dan menguji gambar secara lokal.

Dasar-dasar Dockerfile untuk AI Platform Training

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

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

Agar berfungsi dengan AI Platform Training, 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

Dockerfile Anda dapat menyertakan logika tambahan, bergantung pada kebutuhan Anda. Pelajari lebih lanjut cara menulis Dockerfile, 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 secara lokal

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

    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 proses lokal berfungsi, Anda dapat mengirim container ke Container Registry di project Anda.

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

docker push $IMAGE_URI

Mengelola izin Container Registry

Jika Anda menggunakan image Container Registry dari dalam project yang sama yang Anda gunakan untuk menjalankan pelatihan di Pelatihan AI Platform, Anda tidak perlu lagi mengonfigurasi izin 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 mengambil 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 AI Platform Training Anda.

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

Perintah berikut menambahkan akun layanan AI Platform Training 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 selengkapnya tentang cara mengonfigurasi kontrol akses untuk Container Registry.

Mengirim tugas pelatihan

Kirim tugas pelatihan ke AI Platform Training menggunakan gcloud CLI. Teruskan URI ke image Docker menggunakan tanda --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 container kustom, Anda harus melakukan penyesuaian berikut:

Lihat contoh pelatihan dengan container kustom 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.

  • Instal toolkit CUDA dan cuDNN terlebih dahulu di penampung Anda. Menggunakan image nvidia/cuda sebagai image dasar adalah cara yang direkomendasikan untuk menangani hal ini, karena image ini telah menginstal toolkit CUDA dan cuDNN sebelumnya, dan 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 dependensi lainnya yang diperlukan 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 di VM pekerja. 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 penampung kustom, Anda dapat menentukan hanya satu image yang akan digunakan sebagai server master, pekerja, dan parameter. Anda juga memiliki opsi untuk mem-build dan menentukan gambar yang berbeda untuk server master, pekerja, dan parameter. Dalam hal ini, dependensi kemungkinan akan sama di ketiga image, dan Anda dapat menjalankan logika kode yang berbeda dalam setiap image.

Dalam kode, Anda dapat menggunakan variabel lingkungan TF_CONFIG dan CLUSTER_SPEC. Variabel lingkungan ini menjelaskan struktur keseluruhan cluster, dan AI Platform Training mengisinya untuk Anda di setiap node cluster pelatihan. 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, asumsikan Anda telah menentukan tiga Dockerfile terpisah, satu untuk setiap jenis mesin (master, pekerja, dan server parameter). Setelah itu, Anda akan memberi nama, mem-build, menguji, dan mengirim image ke Container Registry. Terakhir, Anda mengirimkan tugas pelatihan yang menentukan berbagai gambar 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 penampung kustom, aplikasi Anda secara default akan berjalan sebagai identitas Agen Layanan Cloud ML. Anda dapat menemukan ID akun layanan Cloud ML Service Agent untuk project Anda di halaman IAM di 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.

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

Langkah selanjutnya