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:
- Menyiapkan project Google Cloud dan lingkungan lokal Anda.
- Membuat penampung kustom:
- Menulis Dockerfile yang menyiapkan container Anda agar berfungsi dengan AI Platform Training, dan menyertakan dependensi yang diperlukan untuk aplikasi pelatihan Anda.
- Membangun dan menguji container Docker secara lokal.
- Kirim container ke Container Registry.
- 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.
- 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, Compute Engine and Container Registry APIs.
- Install the Google Cloud CLI.
-
To initialize the gcloud CLI, run the following command:
gcloud init
-
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, Compute Engine and Container Registry APIs.
- Install the Google Cloud CLI.
-
To initialize the gcloud CLI, run the following command:
gcloud init
- 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 menggunakansudo
:sudo usermod -a -G docker ${USER}
Anda mungkin perlu memulai ulang sistem setelah menambahkan diri Anda ke grup
docker
. - Buka Docker. Untuk memastikan Docker berjalan, jalankan perintah Docker berikut, yang menampilkan waktu dan tanggal saat ini:
docker run busybox date
- Gunakan
gcloud
sebagai helper kredensial untuk Docker:gcloud auth configure-docker
-
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:
|
WORKDIR /path/to/directory |
Menentukan direktori pada image tempat petunjuk berikutnya dijalankan. | /root |
|
Menginstal paket tambahan menggunakan pip .Catatan: jika image dasar tidak memiliki |
Contoh paket:
|
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:
|
|
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
Buat URI image yang benar menggunakan variabel lingkungan, lalu build image Docker. Flag
-t
memberi nama dan tag pada image dengan pilihan Anda untukIMAGE_REPO_NAME
danIMAGE_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 ./
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
danstorage.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:
- Di Dockerfile: instal
cloudml-hypertune
. - Dalam kode pelatihan:
- Gunakan
cloudml-hypertune
untuk melaporkan hasil setiap uji coba dengan memanggil fungsi bantuannya,report_hyperparameter_tuning_metric
. - Tambahkan argumen command line untuk setiap hyperparameter, dan tangani penguraian argumen dengan parser argumen seperti
argparse
.
- Gunakan
- Dalam permintaan tugas Anda: tambahkan
HyperparameterSpec
ke objekTrainingInput
.
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
- Pelajari lebih lanjut konsep yang terlibat dalam penggunaan penampung.
- Latih model PyTorch menggunakan penampung kustom.
- Pelajari pelatihan terdistribusi dengan penampung kustom.