Halaman ini menunjukkan cara menggunakan Checkpointing Multi-Tier untuk menyimpan dan mengelola checkpoint secara andal selama pelatihan model machine learning Anda di GKE. Penyimpanan dan pengelolaan titik pemeriksaan sangat penting untuk tugas pelatihan skala besar, yang ditentukan sebagai tugas yang menggunakan lebih dari ribuan node. Gangguan pada tugas berskala besar ini sering terjadi (berpotensi setiap jam) dan pemulihannya bisa lambat.
Manfaat
Menggunakan Pembuatan Checkpoint Multi-Tingkat memberikan manfaat berikut:
- Pengelolaan data titik pemeriksaan yang diorkestrasi sepenuhnya, termasuk pencadangan, replikasi, dan pemulihan otomatis untuk beban kerja berikut:
- Pelatihan JAX berjalan menggunakan Orbax untuk pengelolaan status yang berjalan di TPU.
- Workload PyTorch di GPU.
- Pemulihan cepat tugas pelatihan dari checkpoint yang disimpan di node lokal. Anda juga dapat memulihkan menggunakan titik pemeriksaan yang disimpan di node lain dalam cluster pelatihan.
- Pemulihan cepat tugas pelatihan dari checkpoint yang disimpan di cadangan Cloud Storage dalam skenario terburuk, saat tidak ada checkpoint dalam cluster.
Sebelum memulai
Sebelum memulai, pastikan Anda telah melakukan tugas berikut:
- Aktifkan Google Kubernetes Engine API. Aktifkan Google Kubernetes Engine API
- Jika ingin menggunakan Google Cloud CLI untuk tugas ini,
instal lalu
lakukan inisialisasi
gcloud CLI. Jika sebelumnya Anda telah menginstal gcloud CLI, dapatkan versi terbaru dengan menjalankan
gcloud components update
.
- Buat bucket Cloud Storage, jika Anda belum memilikinya untuk project Anda. Pastikan Anda mengaktifkan namespace hierarkis, jika tidak, pencadangan akan gagal.
Persyaratan
Checkpointing Multi-Tier memerlukan cluster GKE versi 1.32.4-gke.1415000 atau yang lebih baru.
Batasan
- Cluster Autopilot tidak didukung.
Mengonfigurasi node GKE untuk menggunakan Checkpointing Multi-Tier
Bagian ini membahas cara mengonfigurasi node GKE di cluster baru dan yang sudah ada.
Mengonfigurasi node di cluster baru
Buat cluster dengan Multi-Tier Checkpointing, driver CSI Cloud Storage FUSE, dan Workload Identity Federation untuk GKE diaktifkan. Jika menggunakan slice TPU untuk beban kerja machine learning, Anda harus menyesuaikan perintah pembuatan cluster untuk menyertakan konfigurasi untuk pool node slice TPU.
gcloud container clusters create CLUSTER_NAME \ --addons=HighScaleCheckpointing,GcsFuseCsiDriver \ --node-locations=NODE_LOCATION \ --workload-pool=PROJECT_ID.svc.id.goog \ --cluster-version=CLUSTER_VERSION --location=CLUSTER_LOCATION \ --machine-type=MACHINE_TYPE \ --num-nodes=NUM_NODES
Ganti nilai berikut:
CLUSTER_NAME
: nama cluster.NODE_LOCATION
: zona untuk node cluster Anda. Di sinilah kapasitas TPU Anda berada.PROJECT_ID
: Google Cloud Project ID Anda.CLUSTER_VERSION
: versi cluster Anda. 1.32.4-gke.1415000 adalah versi minimum yang didukung.CLUSTER_LOCATION
: region tempat Anda ingin membuat cluster.MACHINE_TYPE
: jenis mesin yang digunakan untuk node yang menjalankan komponen seperti pengontrol JobSet dan pengontrol pembuatan checkpoint multi-tingkatan. Untuk pelatihan skala besar, sebaiknya gunakan minimale2-standard-4
mesin. Anda tidak akan menggunakan jenis mesin ini untuk pelatihan model; sebagai gantinya, Anda akan membuat node pool terpisah untuk tujuan tersebut, yang sering kali memanfaatkan kelompok VM yang dioptimalkan akselerator.NUM_NODES
: jumlah node yang akan dibuat di setiap zona cluster.
Mengonfigurasi node di cluster yang ada
Untuk menggunakan Checkpointing Multi-Tier dengan cluster yang ada, aktifkan bersama dengan driver CSI Cloud Storage FUSE, dan Workload Identity Federation untuk GKE dengan perintah berikut. Versi cluster yang ada harus lebih baru dari 1.32.3-gke.1170000.
Aktifkan Workload Identity Federation untuk GKE:
gcloud container clusters update CLUSTER_NAME \ --workload-pool=PROJECT_ID.svc.id.goog \ --location=CLUSTER_LOCATION
Ganti nilai berikut:
CLUSTER_NAME
: nama cluster.PROJECT_ID
: Google Cloud Project ID Anda.CLUSTER_LOCATION
: region cluster.
Aktifkan Multi-Tier Checkpointing dan driver CSI Cloud Storage FUSE:
gcloud container clusters update CLUSTER_NAME \ --update-addons=HighScaleCheckpointing=ENABLED,GcsFuseCsiDriver=ENABLED \ --location=CLUSTER_LOCATION
Mengonfigurasi izin untuk menggunakan Pembuatan Checkpoint Bertingkat
Bagian ini membahas cara mengonfigurasi izin untuk menggunakan Pembuatan Checkpoint Multi-Tingkat.
Memberikan akses ke bucket Cloud Storage
Volume sementara yang digunakan oleh driver CSI Multi-Tier Checkpointing harus menggunakan bucket Cloud Storage yang ada.
Untuk menyimpan checkpoint di bucket Cloud Storage, Multi-Tier Checkpointing memerlukan
akses ke bucket. Berikan peran IAM Storage Object User (roles/storage.objectUser
) di bucket ke akun layanan Kubernetes untuk Checkpointing Multi-Tier.
gcloud storage buckets add-iam-policy-binding gs://GCS_BUCKET \
--member "principal://iam.googleapis.com/projects/PROJECT_NUMBER/locations/global/workloadIdentityPools/PROJECT_ID.svc.id.goog/subject/ns/gke-managed-checkpointing/sa/gke-checkpointing-multitier-node" \
--role "roles/storage.objectUser"
Ganti nilai berikut:
GCS_BUCKET
: nama bucket Cloud Storage tempat Anda akan mentransfer data.PROJECT_ID
: Google Cloud Project ID Anda.PROJECT_NUMBER
: ID unik yang dibuat secara otomatis untuk project Anda. Untuk menemukan nilai ini, lihat Membuat dan mengelola project.
(Opsional) Berikan akses akun layanan default Compute Engine
Jika instance Compute Engine Anda memerlukan akses baca ke bucket Cloud Storage, berikan peran IAM Storage Object Viewer (roles/storage.objectViewer
) ke akun layanan default Compute Engine.
gcloud storage buckets add-iam-policy-binding gs://GCS_BUCKET \
--member serviceAccount:PROJECT_NUMBER-compute@developer.gserviceaccount.com \
--role roles/storage.objectViewer
Deploy pengontrol JobSet
Pengontrol JobSet bertanggung jawab untuk mengelola tugas batch yang menjalankan pelatihan model Anda di GKE, dan alokasi sumber dayanya disesuaikan untuk menangani beban kerja secara efisien. Pastikan peluncur tugas pelatihan Anda men-deploy dan menggunakan JobSet.
Untuk meningkatkan permintaan memori menjadi 1 Gi, batas memori menjadi 2 Gi, dan permintaan CPU menjadi 1 untuk penampung pengelola dalam deployment JobSet Anda, jalankan perintah patch berikut:
kubectl patch -n jobset-system deploy jobset-controller-manager --type json \
--patch '[{"op": "add", "path": "/spec/template/spec/containers/0/resources", "value": {"limits": {"memory": "2Gi"}, "requests": {"cpu": "1", "memory": "1Gi"}}}]'
Menginisialisasi driver CSI Multi-Tier Checkpointing
Bagian ini menjelaskan cara menginisialisasi driver CSI Multi-Tier Checkpointing pada node tempat workload Anda akan berjalan. Driver CSI bertanggung jawab untuk menangani penyimpanan dan pengelolaan checkpoint selama proses pelatihan model Anda.
Membuat CheckpointConfiguration
CheckpointConfiguration adalah resource kustom Kubernetes yang menentukan properti untuk men-deploy driver CSI Multi-Tier Checkpointing. Resource ini memiliki cakupan cluster.
Buat manifes
checkpoint.yaml
berikut.apiVersion: checkpointing.gke.io/v1 kind: CheckpointConfiguration metadata: name: MTC_CONFIG_NAME-configuration spec: cloudStorageBucketName: GCS_BUCKET nodeSelector: node.kubernetes.io/instance-type: MACHINE_TYPE tolerations: - key: TOLERATION_KEY operator: Exists effect: NoSchedule inMemoryVolumeSize: IN_MEMORY_VOLUME_SIZE gcsFuseMountOptions: - implicit-dirs - metadata-cache:negative-ttl-secs:0 - metadata-cache:ttl-secs:-1 - metadata-cache:stat-cache-max-size-mb:-1 - metadata-cache:type-cache-max-size-mb:-1 - file-cache:max-size-mb:-1 - file-cache:cache-file-for-range-read:true - file-system:kernel-list-cache-ttl-secs:0 - file-cache:enable-parallel-downloads:true - read_ahead_kb=1024 - write:enable-streaming-writes:true
Ganti kode berikut:
- MTC_CONFIG_NAME: nama CheckpointConfiguration Anda. Nama ini bersifat global untuk cluster dan tidak spesifik per tugas.
- GCS_BUCKET: nama bucket Cloud Storage tempat Anda akan menyimpan data checkpoint. Gunakan bucket yang Anda siapkan di langkah Siapkan bucket Cloud Storage dengan izin.
MACHINE_TYPE: jenis mesin untuk akselerator yang sesuai. Nilainya bisa berupa salah satu dari berikut:
- TPU v5p:
ct5p-hightpu-4t
- TPU v5e:
ct5e-hightpu-4t
- TPU v6e:
ct6e-standard-4t
- GPU NVIDIA H100 80 GB (seri A3):
Untuk mengetahui informasi selengkapnya tentang menjalankan workload terdistribusi di GPU dengan GKE, lihat Menjalankan GPU multi-instance. Untuk TPU, lihat Membuat node pool slice TPU.
- TPU v5p:
TOLERATION_KEY: kolom ini memungkinkan driver CSI dijadwalkan di node dengan taint yang cocok. Untuk mengetahui informasi selengkapnya tentang cara kerja taint pada berbagai jenis akselerator, lihat halaman berikut:
IN_MEMORY_VOLUME_SIZE: ukuran untuk cache pembuatan titik pemeriksaan dalam memori. Tentukan kuantitas dan unit (misalnya, 200 Gi).Nilai ini harus:
- Ukuran checkpoint lokal untuk TPU dikalikan dengan 2,2
- Ukuran checkpoint lokal untuk GPU dengan satu peer dikalikan dengan 6,6.
Terapkan manifes:
kubectl apply -f checkpoint.yaml
Periksa apakah driver CSI sedang berjalan:
kubectl get pod -n gke-managed-checkpointing
Output-nya akan mirip dengan yang berikut: Akan ada beberapa entri, satu per node yang dipercepat.
NAME READY STATUS RESTARTS AGE multitier-driver-e2b033a7-a4e7-496a-87a3-ffd7fcc2e57b-2d4fz 5/5 Running 0 114s
Meng-uninstal driver CSI Multi-Tier Checkpointing
Jika Anda ingin membatalkan deployment driver CSI Multi-Tier Checkpointing, hapus resource CheckpointConfiguration
. Pengontrol Multi-Tier Checkpointing menghapus driver CSI dari node. Tindakan ini akan menghapus disk RAM dan mengosongkan memori untuk workload lainnya. Contoh:
kubectl delete -f checkpoint.yaml
Mengelola retensi data dan pengumpulan sampah untuk cadangan Cloud Storage
Anda bertanggung jawab untuk menerapkan kebijakan retensi untuk cadangan Cloud Storage dari titik pemeriksaan. Pencadangan Multi-Tier hanya menulis cadangan titik pemeriksaan ke Cloud Storage dan tidak pernah mengubah atau menghapusnya.
Banyak alat open source yang dapat menangani retensi dan pengumpulan sampah, termasuk yang berikut:
Contoh berikut menggunakan backup-warden
dengan direktori backup
dipasang ke lokasi cadangan yang menggunakan Cloud Storage FUSE:
# Add --delete option to actually delete the backups, as is it only shows what would be deleted (dry-run)
backup-warden -p backup \
--hourly 24 \
--daily 7 \
--weekly 5 \
--monthly always \
--yearly always \
--prefer-recent
Perbarui manifes JobSet workload
Perbarui manifes JobSet untuk tugas Anda agar menyertakan volume checkpoint berskala besar. Detailnya bergantung pada workload Anda.
Misalnya, untuk memperluas JobSet contoh dari Men-deploy TPU Multislices di GKE, lakukan langkah-langkah berikut:
Tambahkan baris berikut ke penampung
jax-tpu
.volumeMounts: - name: checkpoint mountPath: CHECKPOINT_DIR
Ganti CHECKPOINT_DIR dengan jalur ke direktori titik pemeriksaan Anda. Ini adalah lokasi tempat
replicator.yaml
dibuat dan Checkpointing Multi-Tingkat melakukan operasi penyimpanan checkpoint. Untuk mengetahui informasi selengkapnya, lihat Mengintegrasikan Pembuatan Checkpoint Multi-Tier di aplikasi Anda.Tambahkan baris berikut ke kolom
spec.template.spec
spesifikasi Job.volumes: - name: checkpoint csi: driver: multitier-checkpoint.csi.storage.gke.io
Mengintegrasikan Pembuatan Checkpoint Multi-Tingkat di aplikasi Anda
Untuk membagikan informasi tentang lokasi titik pemeriksaan dan kesiapan replikasi, ubah aplikasi Anda agar menggunakan protokol berikut untuk berkomunikasi dengan Multi-Tier Checkpointing.
Memulai
Bagian ini menjelaskan langkah-langkah awal yang diperlukan aplikasi untuk berinteraksi dengan Checkpointing Multi-Tier.
Replicator adalah komponen inti Multi-Tier Checkpointing, yang berjalan di setiap node sebagai bagian dari driver CSI. Replicator mengelola replikasi titik pemeriksaan di seluruh tingkat penyimpanan, dari disk RAM lokal ke node peer dan ke penyimpanan eksternal seperti Cloud Storage.
File replicator.yaml
berfungsi sebagai bidang kontrol dinamis antara tugas pelatihan ML (kode framework) dan komponen Replicator. Aplikasi ML Anda
membuat file ini secara terprogram di volume lokal (RAMDisk), yang
dapat diakses oleh tugas pelatihan dan layanan Replicator. Manifes ini
memungkinkan framework ML memberikan konfigurasi runtime dan petunjuk pengelolaan siklus proses
ke Replicator, yang berbeda dari parameter infrastruktur statis (
misalnya, frekuensi upload Cloud Storage) yang ditentukan selama penyiapan backend.
Untuk contoh konkret interaksi ini, lihat:
- Project MaxText, yang menggunakan arsitektur ini untuk JAX di Cloud TPU.
- Contoh referensi PyTorch, yang memanfaatkan arsitektur ini dengan PyTorch dan NVIDIA NeMo di GPU.
Aplikasi Anda harus melakukan langkah-langkah berikut selama startup:
Tunggu hingga file
replicator.yaml
tidak ada, yang menunjukkan bahwa Replicator siap dikonfigurasi oleh aplikasi Anda. Filereplicator.yaml
dibuat di lokasi CHECKPOINT_DIR yang Anda konfigurasi di bagian Perbarui manifes JobSet workload.Saat tugas pelatihan model pertama kali dibuat, file
replicator.yaml
tidak akan ada dan aplikasi Anda dapat langsung dilanjutkan. Namun, jika tugas dimulai ulang (misalnya, karena kegagalan atau intervensi manual), sistem mungkin masih memproses instance tugas sebelumnya, danreplicator.yaml
dari instance tersebut mungkin masih ada di volume lokal.Aplikasi atau tugas ML Anda membuat file
replicator.yaml
dengan konfigurasi yang mirip dengan berikut.Orbax
job-name: orbax framework: orbax assume-data-parallelism: 3 node-rank: 0 nodes: 32 peer-ranks: [1, 16] or peers-per-node: 2 backup-interval-minutes: 30
PyTorch
job-name: nemo framework: pytorch.distributed node-rank: 0 nodes: 32 peer-ranks: [1, 16] or peers-per-node: 2 backup-interval-minutes: 30
Contoh konfigurasi ini memiliki kolom berikut:
name
: nama tugas pelatihan.framework
: framework ML yang digunakan oleh tugas pelatihan.node-rank
: ID unik node saat ini dalam tugas pelatihan terdistribusi. Ini mewakili peringkat node dari node yang membuat file ini. Setiap node yang berpartisipasi dalam proses akan memiliki peringkatnya sendiri.nodes
: jumlah total node yang berpartisipasi dalam tugas pelatihan terdistribusi. Nilai ini berasal dari metadata Pod. Tugas pelatihan ML juga dapat melihat nilai ini.peer-ranks
ataupeers-per-node
: dua cara alternatif untuk menentukan topologi replikasi. Hanya salah satu dari dua parameter ini yang boleh ada.peer-ranks
: peringkat eksplisit node peer yang data titik pemeriksaan node saat ini harus direplikasi. Hal ini memberikan kontrol mendetail atas node tertentu yang berfungsi sebagai partner replikasi.peers-per-node
: jumlah node peer per node yang harus dipilih secara otomatis oleh Replicator untuk replikasi.
backup-interval-minutes
: frekuensi, dalam menit, saat titik pemeriksaan dicadangkan ke Cloud Storage. Sebaiknya tetapkan nilai ini ke 30 menit atau lebih.
Tunggu hingga file
replicator.yaml
baru dihapus oleh sistem. Hal ini menandakan bahwa replikator telah dimulai ulang dan melakukan pembersihan. Langkah ini memungkinkan Anda menghindari file sementara atau usang di volume lokal saat aplikasi Anda melakukan langkah-langkah di bagian berikutnya.
Memulihkan dari checkpoint terakhir yang diketahui baik (LKG)
Setelah replikator diinisialisasi, Multi-Tier Checkpointing akan membuat satu link simbolik per pekerja TPU atau GPU. Link simbolis ini dibuat di volume lokal yang sama dengan file
replicator.yaml
yang ter-mount, tempat tugas menyimpan titik pemeriksaan.Link simbolis memiliki bentuk
<job-name>-s{step}-n<node-rank>-w<worker-index>.restore
.Pulihkan setiap pekerja dari file
.restore
yang sesuai. Untuk contohnya, lihat contoh pengelola titik pemeriksaan yang direplikasi Orbax di bagian berikutnya.
Simpan checkpoint
Aplikasi Anda melakukan langkah-langkah ini beberapa kali saat tugas pelatihan berlangsung. Operasi penyimpanan terjadi di lokasi CHECKPOINT_DIR yang Anda konfigurasi di Perbarui manifes JobSet workload.
Orbax
Buat checkpoint Orbax. Direktori diberi nama dengan nomor langkah. Replicator mendeteksi direktori checkpoint yang baru dibuat, melakukan replikasi atau pencadangan sesuai kebutuhan, dan membersihkan secara otomatis.
Untuk mengetahui informasi selengkapnya tentang cara menggunakan pengelola checkpoint replikator Orbax, lihat file
MaxtTest checkpointing
.
Untuk contoh interaksi layanan replikator, lihat file MaxText max_utils
.
PyTorch
Gunakan InClusterLocalCheckpointIO
sebagai pytorch_lightning.CheckpointIO
kustom
untuk mengaktifkan pembuatan titik pemeriksaan terdistribusi yang benar dengan penyimpanan lokal. Contoh perintah berikut mengaktifkan pembuatan titik pemeriksaan multi-tingkatan menggunakan implementasi referensi yang dibangun di framework NVIDIA NeMo:
torchrun train.py <other_train_flags> \
--local-ckpt-dir=CHECKPOINT_DIR \
--local-ckpt-interval=20 \
--job-name=JOB_NAME \
--enable-high-scale-ckpt
Ganti kode berikut:
CHECKPOINT_DIR
: jalur ke direktori titik pemeriksaan Anda.JOB_NAME
: nama workload tugas pelatihan Anda.
Upgrade cluster
Untuk upgrade cluster, Anda dapat menghapus dan membuat ulang objek CheckpointConfiguration
sebelum atau setelah upgrade. Tindakan ini diperlukan karena daemonset checkpointing node, yang di-deploy secara dinamis oleh objek ini, tidak akan diupgrade secara otomatis.
Jika Anda secara khusus ingin mempertahankan spesifikasi daemonset yang sama, Anda tidak perlu melakukan apa pun.
Memecahkan masalah
Bagian ini berisi panduan pemecahan masalah untuk menyelesaikan masalah terkait Checkpointing Multi-Tier. Untuk pemecahan masalah penyimpanan umum, lihat Memecahkan masalah Cloud Storage di GKE.
Checkpointing Multi-Tier tidak diaktifkan
Error berikut menunjukkan bahwa Multi-Tier Checkpointing tidak diaktifkan di cluster Anda:
error: unable to recognize "checkpoint.yaml": no matches for kind "CheckpointConfiguration" in version "checkpointing.gke.io/v1"
Anda mungkin mengalami error ini setelah menjalankan kubectl apply -f checkpoint.yaml
di langkah Buat CheckpointConfiguration.
Untuk mengatasi masalah ini, periksa apakah Anda telah mengaktifkan Pembuatan Checkpoint Multi-Tingkat di cluster Anda dengan perintah berikut:
gcloud container clusters describe CLUSTER_NAME \
--project PROJECT_ID
--location CLUSTER_LOCATION
Jika Multi-Tier Checkpointing diaktifkan, output-nya akan mirip dengan berikut ini:
addonsConfig:
gcePersistentDiskCsiDriverConfig:
enabled: true
gcsFuseCsiDriverConfig:
enabled: true
highScaleCheckpointingConfig:
enabled: true
kubernetesDashboard:
disabled: true
networkPolicyConfig:
disabled: true
Jika Multi-Tier Checkpointing tidak diaktifkan, perbarui cluster Anda untuk mengaktifkan Multi-Tier Checkpointing.
Driver CSI Multi-Tier Checkpointing tidak dapat memasang volume
Anda mungkin mengalami masalah ini jika driver CSI tidak dapat memasang volume Cloud Storage. Mungkin ada beberapa baris yang serupa dengan ini.
kubectl get pod -n gke-managed-checkpointing
NAME READY STATUS RESTARTS AGE
multitier-driver-14694e4d-774f-4104-8bba-f0bd82fd7557-5vxr9 0/5 Init:0/1 0 6m32s
Untuk mengatasi masalah ini, periksa peristiwa Pod driver CSI, seperti yang ditunjukkan dalam contoh berikut:
kubectl describe pod multitier-driver-14694e4d-774f-4104-8bba-f0bd82fd7557-5vxr9 -n gke-managed-checkpointing
Events:
Type Reason Age From Message
---- ------ ---- ---- -------
Normal Scheduled 17m default-scheduler Successfully assigned gke-managed-checkpointing/multitier-driver-14694e4d-774f-4104-8bba-f0bd82fd7557-5vxr9 to gke-my-cluster-default-pool-353c773f-6d8q
Warning FailedMount 82s (x16 over 17m) kubelet MountVolume.SetUp failed for volume "gcs" : rpc error: code = PermissionDenied desc = failed to get GCS bucket "checkpointing-test-bucket": googleapi: Error 403: Caller does not have storage.objects.list access to the Google Cloud Storage bucket. Permission 'storage.objects.list' denied on resource (or it may not exist)., forbidden
Jika masalah terjadi karena error PermissionDenied
bucket Cloud Storage, seperti yang ditunjukkan dalam contoh, Anda dapat menyelesaikan masalah dengan menyiapkan izin dengan benar.
Langkah berikutnya
- Pelajari lebih lanjut cara men-deploy TPU Multislice di Google Kubernetes Engine.
- Pelajari cara mengoptimalkan Driver CSI Cloud Storage FUSE untuk Google Kubernetes Engine demi performa.
- Jelajahi opsi pembuatan checkpoint Orbax.