Berlatih Menggunakan Cluster Heterogen - Amazon SageMaker

Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.

Berlatih Menggunakan Cluster Heterogen

Dengan menggunakan fitur klaster heterogen dari SageMaker Pelatihan, Anda dapat menjalankan pekerjaan pelatihan dengan beberapa jenis instans ML untuk penskalaan dan pemanfaatan sumber daya yang lebih baik untuk tugas dan tujuan pelatihan ML yang berbeda. Misalnya, jika pekerjaan pelatihan Anda di klaster dengan instans GPU mengalami pemanfaatan GPU yang rendah dan masalah kemacetan CPU karena tugas intensif CPU, menggunakan klaster heterogen dapat membantu menurunkan tugas intensif CPU dengan menambahkan grup instans CPU yang lebih hemat biaya, menyelesaikan masalah kemacetan tersebut, dan mencapai pemanfaatan GPU yang lebih baik.

catatan

Fitur ini tersedia di SageMaker Python SDK v2.98.0 dan yang lebih baru.

catatan

Fitur ini tersedia melalui kelas estimator SageMaker PyTorchdan TensorFlowkerangka kerja. Kerangka kerja yang didukung adalah PyTorch v1.10 atau yang lebih baru dan TensorFlow v2.6 atau yang lebih baru.

Cara Mengkonfigurasi Cluster Heterogen

Bagian ini memberikan instruksi tentang cara menjalankan pekerjaan pelatihan menggunakan cluster heterogen yang terdiri dari beberapa jenis instance.

Menggunakan SageMaker Python SDK

Ikuti petunjuk tentang cara mengonfigurasi grup instans untuk klaster heterogen menggunakan SageMaker Python SDK.

  1. Untuk mengonfigurasi grup instance dari cluster heterogen untuk pekerjaan pelatihan, gunakan sagemaker.instance_group.InstanceGroup kelas. Anda dapat menentukan nama kustom untuk setiap grup instans, jenis instans, dan jumlah instance untuk setiap grup instans. Untuk informasi selengkapnya, lihat sagemaker.instance_group. InstanceGroupdalam dokumentasi SageMakerPython SDK.

    catatan

    Untuk informasi selengkapnya tentang jenis instans yang tersedia dan jumlah maksimum grup instans yang dapat Anda konfigurasikan dalam klaster heterogen, lihat referensi InstanceGroupAPI.

    Contoh kode berikut menunjukkan cara mengatur dua grup instance yang terdiri dari dua instance ml.c5.18xlarge khusus CPU bernama instance_group_1 dan satu instance ml.p3dn.24xlarge GPU bernamainstance_group_2, seperti yang ditunjukkan pada diagram berikut.

    The preceding diagram shows a conceptual example of how pre-training processes, such as data preprocessing, can be assigned to the CPU instance group and stream the preprocessed data to the GPU instance group.
    from sagemaker.instance_group import InstanceGroup instance_group_1 = InstanceGroup( "instance_group_1", "ml.c5.18xlarge", 2 ) instance_group_2 = InstanceGroup( "instance_group_2", "ml.p3dn.24xlarge", 1 )
  2. Dengan menggunakan objek grup instance, siapkan saluran input pelatihan dan tetapkan grup instance ke saluran melalui instance_group_names argumen sagemaker.inputs. TrainingInputkelas. instance_group_namesArgumen menerima daftar string nama grup contoh.

    Contoh berikut menunjukkan cara mengatur dua saluran input pelatihan dan menetapkan grup instance yang dibuat dalam contoh langkah sebelumnya. Anda juga dapat menentukan jalur bucket Amazon S3 ke s3_data argumen untuk grup instans untuk memproses data untuk tujuan penggunaan Anda.

    from sagemaker.inputs import TrainingInput training_input_channel_1 = TrainingInput( s3_data_type='S3Prefix', # Available Options: S3Prefix | ManifestFile | AugmentedManifestFile s3_data='s3://your-training-data-storage/folder1', distribution='FullyReplicated', # Available Options: FullyReplicated | ShardedByS3Key input_mode='File', # Available Options: File | Pipe | FastFile instance_groups=["instance_group_1"] ) training_input_channel_2 = TrainingInput( s3_data_type='S3Prefix', s3_data='s3://your-training-data-storage/folder2', distribution='FullyReplicated', input_mode='File', instance_groups=["instance_group_2"] )

    Untuk informasi selengkapnya tentang argumenTrainingInput, lihat tautan berikut.

  3. Konfigurasikan SageMaker estimator dengan instance_groups argumen seperti yang ditunjukkan pada contoh kode berikut. instance_groupsArgumen menerima daftar InstanceGroup objek.

    PyTorch
    from sagemaker.pytorch import PyTorch estimator = PyTorch( ... entry_point='my-training-script.py', framework_version='x.y.z', # 1.10.0 or later py_version='pyxy', job_name='my-training-job-with-heterogeneous-cluster', instance_groups=[instance_group_1, instance_group_2] )
    TensorFlow
    from sagemaker.tensorflow import TensorFlow estimator = TensorFlow( ... entry_point='my-training-script.py', framework_version='x.y.z', # 2.6.0 or later py_version='pyxy', job_name='my-training-job-with-heterogeneous-cluster', instance_groups=[instance_group_1, instance_group_2] )
    catatan

    Pasangan instance_count argumen instance_type dan instance_groups argumen dari kelas SageMaker estimator saling eksklusif. Untuk pelatihan cluster homogen, gunakan pasangan instance_count argumen instance_type and. Untuk pelatihan cluster heterogen, gunakaninstance_groups.

    catatan

    Untuk menemukan daftar lengkap container framework, versi framework, dan versi Python yang tersedia, lihat SageMaker Framework Container di repositori AWS Deep Learning Container GitHub .

  4. Konfigurasikan estimator.fit metode dengan saluran input pelatihan yang dikonfigurasi dengan grup instans dan mulai pekerjaan pelatihan.

    estimator.fit( inputs={ 'training': training_input_channel_1, 'dummy-input-channel': training_input_channel_2 } )

Menggunakan API Tingkat Rendah SageMaker

Jika Anda menggunakan AWS Command Line Interface atau AWS SDK for Python (Boto3) dan ingin menggunakan SageMaker API tingkat rendah untuk mengirimkan permintaan pekerjaan pelatihan dengan klaster heterogen, lihat referensi API berikut.

Pelatihan Terdistribusi dengan Cluster Heterogen

Melalui distribution argumen kelas SageMaker estimator, Anda dapat menetapkan grup instance tertentu untuk menjalankan pelatihan terdistribusi. Misalnya, asumsikan bahwa Anda memiliki dua grup instans berikut dan ingin menjalankan pelatihan multi-GPU pada salah satunya.

from sagemaker.instance_group import InstanceGroup instance_group_1 = InstanceGroup("instance_group_1", "ml.c5.18xlarge", 1) instance_group_2 = InstanceGroup("instance_group_2", "ml.p3dn.24xlarge", 2)

Anda dapat mengatur konfigurasi pelatihan terdistribusi untuk salah satu grup instans. Misalnya, contoh kode berikut menunjukkan cara menetapkan training_group_2 dengan dua ml.p3dn.24xlarge instance ke konfigurasi pelatihan terdistribusi.

catatan

Saat ini, hanya satu grup instance dari cluster heterogen yang dapat ditentukan ke konfigurasi distribusi.

Dengan MPI

PyTorch
from sagemaker.pytorch import PyTorch estimator = PyTorch( ... instance_groups=[instance_group_1, instance_group_2], distribution={ "mpi": { "enabled": True, "processes_per_host": 8 }, "instance_groups": [instance_group_2] } )
TensorFlow
from sagemaker.tensorflow import TensorFlow estimator = TensorFlow( ... instance_groups=[instance_group_1, instance_group_2], distribution={ "mpi": { "enabled": True, "processes_per_host": 8 }, "instance_groups": [instance_group_2] } )

Dengan perpustakaan paralel SageMaker data

PyTorch
from sagemaker.pytorch import PyTorch estimator = PyTorch( ... instance_groups=[instance_group_1, instance_group_2], distribution={ "smdistributed": { "dataparallel": { "enabled": True } }, "instance_groups": [instance_group_2] } )
TensorFlow
from sagemaker.tensorflow import TensorFlow estimator = TensorFlow( ... instance_groups=[instance_group_1, instance_group_2], distribution={ "smdistributed": { "dataparallel": { "enabled": True } }, "instance_groups": [instance_group_2] } )
catatan

Saat menggunakan pustaka paralel SageMaker data, pastikan grup instance terdiri dari tipe instance yang didukung oleh pustaka.

Untuk informasi selengkapnya tentang pustaka paralel SageMaker data, lihat Pelatihan Paralel SageMaker Data.

Dengan perpustakaan paralel SageMaker model

PyTorch
from sagemaker.pytorch import PyTorch estimator = PyTorch( ... instance_groups=[instance_group_1, instance_group_2], distribution={ "smdistributed": { "modelparallel": { "enabled":True, "parameters": { ... # SageMaker model parallel parameters } } }, "instance_groups": [instance_group_2] } )
TensorFlow
from sagemaker.tensorflow import TensorFlow estimator = TensorFlow( ... instance_groups=[instance_group_1, instance_group_2], distribution={ "smdistributed": { "modelparallel": { "enabled":True, "parameters": { ... # SageMaker model parallel parameters } } }, "instance_groups": [instance_group_2] } )

Untuk informasi selengkapnya tentang pustaka paralel SageMaker model, lihat Pelatihan Paralel SageMaker Model.

Ubah Skrip Pelatihan Anda untuk Menetapkan Grup Instance

Dengan konfigurasi klaster heterogen di bagian sebelumnya, Anda telah menyiapkan lingkungan SageMaker pelatihan dan contoh untuk pekerjaan pelatihan Anda. Untuk menetapkan grup instans lebih lanjut ke tugas pelatihan dan pemrosesan data tertentu, langkah selanjutnya adalah memodifikasi skrip pelatihan Anda. Secara default, pekerjaan pelatihan hanya membuat replika skrip pelatihan untuk semua node terlepas dari ukuran instance, dan ini dapat menyebabkan hilangnya kinerja.

Misalnya, jika Anda mencampur instance CPU dan instance GPU dalam cluster heterogen sambil meneruskan skrip pelatihan jaringan saraf dalam ke entry_point argumen SageMaker estimator, skrip direplikasi ke setiap entry_point instance. Ini berarti bahwa, tanpa penugasan tugas yang tepat, instance CPU juga menjalankan seluruh skrip dan memulai pekerjaan pelatihan yang dirancang untuk pelatihan terdistribusi pada instance GPU. Oleh karena itu, Anda harus membuat perubahan dalam fungsi pemrosesan tertentu yang ingin Anda bongkar dan jalankan pada instance CPU. Anda dapat menggunakan variabel SageMaker lingkungan untuk mengambil informasi dari cluster heterogen dan membiarkan proses tertentu berjalan sesuai dengan itu.

Kueri informasi grup instance selama fase inisialisasi pekerjaan SageMaker pelatihan

Ketika pekerjaan pelatihan Anda dimulai, skrip pelatihan Anda membaca informasi lingkungan SageMaker pelatihan yang mencakup konfigurasi klaster heterogen. Konfigurasi berisi informasi seperti grup instance saat ini, host saat ini di setiap grup, dan di grup mana host saat ini berada.

Anda dapat mengambil informasi grup instance dengan cara berikut.

(Disarankan) Membaca informasi grup instance dengan toolkit SageMaker pelatihan

Gunakan modul Python lingkungan yang disediakan perpustakaan toolkit SageMaker pelatihan. Pustaka toolkit sudah diinstal sebelumnya dalam wadah SageMaker kerangka kerja untuk TensorFlow dan PyTorch, jadi Anda tidak memerlukan langkah instalasi tambahan saat menggunakan kontainer bawaan. Ini adalah cara yang disarankan untuk mengambil variabel SageMaker lingkungan dengan lebih sedikit perubahan kode dalam skrip pelatihan Anda.

from sagemaker_training import environment env = environment.Environment()

Variabel lingkungan yang terkait dengan SageMaker pelatihan umum dan cluster heterogen:

  • env.is_hetero— Mengembalikan hasil Boolean apakah cluster heterogen dikonfigurasi atau tidak.

  • env.current_host— Mengembalikan host saat ini.

  • env.current_instance_type— Mengembalikan jenis instance dari host saat ini.

  • env.current_instance_group— Mengembalikan nama grup instance saat ini.

  • env.current_instance_group_hosts— Mengembalikan daftar host dalam kelompok contoh saat ini.

  • env.instance_groups— Mengembalikan daftar nama grup contoh yang digunakan untuk pelatihan.

  • env.instance_groups_dict— Mengembalikan seluruh konfigurasi klaster heterogen dari pekerjaan pelatihan.

  • env.distribution_instance_groups— Mengembalikan daftar kelompok contoh ditugaskan untuk distribution parameter dari kelas SageMaker estimator.

  • env.distribution_hosts— Mengembalikan daftar host milik kelompok instance yang ditugaskan ke distribution parameter kelas SageMaker estimator.

Misalnya, perhatikan contoh berikut dari cluster heterogen yang terdiri dari dua kelompok contoh.

from sagemaker.instance_group import InstanceGroup instance_group_1 = InstanceGroup( "instance_group_1", "ml.c5.18xlarge", 1) instance_group_2 = InstanceGroup( "instance_group_2", "ml.p3dn.24xlarge", 2)

Output env.instance_groups_dict dari contoh cluster heterogen harus serupa dengan berikut ini.

{ "instance_group_1": { "hosts": [ "algo-2" ], "instance_group_name": "instance_group_1", "instance_type": "ml.c5.18xlarge" }, "instance_group_2": { "hosts": [ "algo-3", "algo-1" ], "instance_group_name": "instance_group_2", "instance_type": "ml.p3dn.24xlarge" } }

(Opsional) Membaca informasi grup instance dari file JSON konfigurasi sumber daya

Jika Anda lebih suka mengambil variabel lingkungan dalam format JSON, Anda dapat langsung menggunakan file JSON konfigurasi sumber daya. File JSON dalam instance SageMaker pelatihan terletak di secara /opt/ml/input/config/resourceconfig.json default.

file_path = '/opt/ml/input/config/resourceconfig.json' config = read_file_as_json(file_path) print(json.dumps(config, indent=4, sort_keys=True))

Pertimbangan

Pertimbangkan item berikut saat menggunakan fitur cluster heterogen.

  • Semua grup instance berbagi gambar Docker dan skrip pelatihan yang sama. Oleh karena itu, skrip pelatihan Anda harus dimodifikasi untuk mendeteksi grup instans mana yang dimilikinya dan eksekusi fork yang sesuai.

  • Fitur cluster heterogen tidak didukung dalam mode SageMaker lokal.

  • Aliran CloudWatch log Amazon dari pekerjaan pelatihan klaster heterogen tidak dikelompokkan berdasarkan grup instans. Anda perlu mencari tahu dari log node mana yang ada di grup mana.

  • Fitur cluster heterogen tersedia melalui kelas SageMaker PyTorchand TensorFlowframework estimator. Kerangka kerja yang didukung adalah PyTorch v1.10 atau yang lebih baru dan TensorFlow v2.6 atau yang lebih baru. Untuk menemukan daftar lengkap container framework, versi framework, dan versi Python yang tersedia, lihat SageMaker Framework Container di repositori AWS Deep Learning Container GitHub .

  • Strategi pelatihan terdistribusi hanya dapat diterapkan pada satu kelompok contoh.

Contoh, Blog, dan Studi Kasus

Blog berikut membahas studi kasus tentang penggunaan pelatihan cluster SageMaker heterogen.