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:
- Siapkan project Google Cloud dan lingkungan lokal Anda.
- Buat penampung kustom:
- Tulis Dockerfile yang menyiapkan container Anda agar berfungsi dengan Pelatihan AI Platform, dan menyertakan dependensi yang diperlukan untuk aplikasi pelatihan Anda.
- Bangun dan uji container Docker Anda secara lokal.
- Mengirim container ke Container Registry.
- 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.
- 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.
-
Di konsol Google Cloud, pada halaman pemilih project, pilih atau buat project Google Cloud.
-
Pastikan penagihan telah diaktifkan untuk project Google Cloud Anda.
-
Aktifkan API AI Platform Training & Prediction, Compute Engine and Container Registry.
- Menginstal Google Cloud CLI.
-
Untuk initialize gcloud CLI, jalankan perintah berikut:
gcloud init
-
Di konsol Google Cloud, pada halaman pemilih project, pilih atau buat project Google Cloud.
-
Pastikan penagihan telah diaktifkan untuk project Google Cloud Anda.
-
Aktifkan API AI Platform Training & Prediction, Compute Engine and Container Registry.
- Menginstal Google Cloud CLI.
-
Untuk initialize gcloud CLI, jalankan perintah berikut:
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 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:
|
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 Anda secara lokal
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 untukIMAGE_REPO_NAME
danIMAGE_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 ./
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
danstorage.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:
- 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 argumen
yang diurai dengan parser argumen seperti
argparse
.
- Gunakan
- Dalam permintaan tugas Anda: tambahkan
HyperparameterSpec
ke objekTrainingInput
.
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
- Pelajari lebih lanjut konsep yang terlibat dalam penggunaan container.
- Melatih model PyTorch menggunakan container kustom.
- Pelajari pelatihan terdistribusi dengan container kustom.