Tambahkan Adaptor Kain Elastis ke EKS cluster untuk pelatihan ML - Amazon EKS

Bantu tingkatkan halaman ini

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

Ingin berkontribusi pada panduan pengguna ini? Gulir ke bagian bawah halaman ini dan pilih Edit halaman ini GitHub. Kontribusi Anda akan membantu membuat panduan pengguna kami lebih baik untuk semua orang.

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

Tambahkan Adaptor Kain Elastis ke EKS cluster untuk pelatihan ML

Topik ini menjelaskan cara mengintegrasikan Adaptor Kain Elastis (EFA) dengan Pods diterapkan di EKS cluster Amazon Anda. Elastic Fabric Adapter (EFA) adalah antarmuka jaringan untuk EC2 instans Amazon yang memungkinkan Anda menjalankan aplikasi yang memerlukan komunikasi antar-simpul tingkat tinggi dalam skala besar. AWS Ini merupakan sistem operasi antarmuka bypass hardware yang meningkatkan performa komunikasi antar-instans, yang sangat penting untuk skala aplikasi ini. DenganEFA, aplikasi High Performance Computing (HPC) menggunakan aplikasi Message Passing Interface (MPI) dan Machine Learning (ML) menggunakan NVIDIA Collective Communications Library (NCCL) dapat menskalakan hingga ribuan CPUs atauGPUs. Hasilnya, Anda mendapatkan kinerja aplikasi HPC cluster lokal dengan elastisitas dan fleksibilitas cloud sesuai permintaan. AWS Mengintegrasikan EFA dengan aplikasi yang berjalan di EKS klaster Amazon dapat mengurangi waktu untuk menyelesaikan beban kerja pelatihan terdistribusi skala besar tanpa harus menambahkan instance tambahan ke klaster Anda. Untuk informasi lebih lanjut tentangEFA, Adaptor Kain Elastis.

Jenis instans dengan EFA

Plugin Perangkat AWS EFA Kubernetes mendukung semua jenis EC2 instans Amazon yang memilikinya. EFA Untuk melihat daftar semua jenis instans yang memilikiEFA, lihat Jenis instans yang didukung di Panduan EC2 Pengguna Amazon. Namun, untuk menjalankan aplikasi ML dengan cepat, kami merekomendasikan bahwa sebuah instance memiliki chip akselerasi perangkat keras seperti nVidia GPUs, Keripik AWS inferentia, atau chip AWS Trainium, selain. EFA Untuk melihat daftar jenis instans yang memiliki chip akselerasi perangkat keras danEFA, lihat Komputasi yang dipercepat di Panduan EC2 Pengguna Amazon.

Saat Anda membandingkan jenis instance untuk dipilih di antara mereka, pertimbangkan jumlah kartu EFA jaringan yang tersedia untuk jenis instance itu serta jumlah kartu akselerator, jumlahCPU, dan jumlah memori. Anda dapat menetapkan hingga satu EFA per kartu jaringan. Sebuah EFA dihitung sebagai antarmuka jaringan.. Untuk melihat berapa banyak EFA yang tersedia untuk setiap jenis instans yang dimilikiEFA, lihat daftar Kartu jaringan di Panduan EC2 Pengguna Amazon.

EFAdan EFA -hanya antarmuka

Adaptor Kain Elastis (EFA) adalah antarmuka jaringan yang menggabungkan kemampuan Adaptor Jaringan Elastis (ENA) dan antarmuka OS-bypass, didukung oleh protokol AWS Scalable Reliable Datagram (). SRD EFAFungsionalitas memungkinkan aplikasi untuk berkomunikasi langsung dengan perangkat keras untuk transportasi latensi rendah. Anda dapat memilih untuk mengakses hanya EFA kemampuan menggunakan antarmuka EFA-only, membatasi komunikasi ke antarmuka dalam Availability Zone yang sama.

Untuk membuat node yang dapat memiliki antarmuka EFA -only, Anda harus menggunakan Template EC2 Peluncuran kustom dan mengatur keInterfaceType. efa-only Di Template Peluncuran kustom Anda, Anda tidak dapat mengatur kartu jaringan 0 ke antarmuka EFA -only, karena itu adalah kartu jaringan utama dan antarmuka jaringan EC2 instance. Anda harus memiliki VPC CNI versi 1.18.5 atau yang lebih baru untuk antarmuka EFA -only. Jika Anda menggunakan Amazon Linux 2, versi ami harus v20240928 atau lebih baru untuk antarmuka khusus EFA.

Prosedur berikut memandu Anda untuk membuat EKS cluster eksctl dengan node yang memiliki nVidia GPUsdan EFA antarmuka. Anda tidak dapat menggunakan eksctl untuk membuat node dan grup node yang menggunakan antarmuka EFA -only.

Prasyarat

  • EKSCluster Amazon yang ada. Jika Anda tidak memiliki cluster yang ada, buat satu menggunakanMemulai dengan Amazon EKS.. Cluster Anda harus digunakan di VPC yang memiliki setidaknya satu subnet pribadi dengan alamat IP yang cukup tersedia untuk menyebarkan node. Subnet pribadi harus memiliki akses internet keluar yang disediakan oleh perangkat eksternal, seperti gateway. NAT

    Jika Anda berencana untuk menggunakan eksctl untuk membuat grup node Anda, juga eksctl dapat membuat cluster untuk Anda.

  • Versi 2.12.3 atau yang lebih baru atau versi 1.27.160 atau yang lebih baru dari AWS Command Line Interface (AWS CLI) diinstal dan dikonfigurasi pada perangkat Anda atau AWS CloudShell. Untuk memeriksa versi Anda saat ini, gunakanaws --version | cut -d / -f2 | cut -d ' ' -f1. Package manager sepertiyum,apt-get, atau Homebrew untuk macOS sering beberapa versi di belakang versi terbaru dari AWS CLI. Untuk menginstal versi terbaru, lihat Menginstal dan Konfigurasi cepat dengan aws configure di Panduan Pengguna Antarmuka Baris AWS Perintah. AWS CLIVersi yang diinstal AWS CloudShell mungkin juga beberapa versi di belakang versi terbaru. Untuk memperbaruinya, lihat Menginstal AWS CLI ke direktori home Anda di Panduan AWS CloudShell Pengguna.

  • Alat baris kubectl perintah diinstal pada perangkat Anda atau AWS CloudShell. Versi dapat sama dengan atau hingga satu versi minor lebih awal atau lebih lambat dari versi Kubernetes versi cluster Anda. Misalnya, jika versi cluster Anda1.29, Anda dapat menggunakan kubectl versi1.28,1.29, atau 1.30 dengan itu. Untuk menginstal atau memutakhirkan kubectl, lihat Siapkan kubectl dan eksctl.

  • Anda harus memiliki Amazon VPC CNI plugin for Kubernetes versi 1.7.10 atau yang lebih baru diinstal sebelum meluncurkan node pekerja yang mendukung beberapa Adaptor Kain Elastis, seperti p4d orp5. Untuk informasi lebih lanjut tentang memperbarui Amazon VPC CNI plugin for Kubernetes versi, lihatAmazon VPC CNI.

penting

Pertimbangan penting yang diperlukan untuk mengadopsi dengan EFA Kubernetes mengkonfigurasi dan mengelola Huge Pages sebagai sumber daya di cluster. Untuk informasi selengkapnya, lihat Mengelola Halaman Besar di Kubernetes dokumentasi. EC2Instans Amazon dengan EFA driver yang diinstal sebelumnya mengalokasikan 5128 2MiB Halaman Besar, yang dapat Anda minta sebagai sumber daya untuk digunakan dalam spesifikasi pekerjaan Anda.

Buat grup simpul

Prosedur berikut membantu Anda membuat grup node dengan grup node yang p4d.24xlarge didukung dengan EFA antarmuka dan GPUDirectRDMA, dan menjalankan contoh pengujian NVIDIA Collective Communications Library (NCCL) untuk menggunakan NCCL Kinerja multi-node. EFAs Contoh dapat digunakan template untuk pelatihan pembelajaran mendalam terdistribusi di Amazon EKS menggunakanEFAs.

  1. Tentukan jenis EC2 instans Amazon mana EFA yang mendukung tersedia di AWS Wilayah tempat Anda ingin menerapkan node. Ganti region-code dengan AWS Region tempat Anda ingin menyebarkan grup node Anda.

    aws ec2 describe-instance-types --region region-code \ --filters Name=network-info.efa-supported,Values=true \ --query "InstanceTypes[*].[InstanceType]" --output text

    Saat Anda menerapkan node, jenis instance yang ingin Anda terapkan harus tersedia di AWS Wilayah tempat klaster Anda berada.

  2. Tentukan Availability Zone tempat tipe instans yang ingin Anda gunakan tersedia. Dalam tutorial ini, jenis p5.48xlarge instance digunakan dan harus dikembalikan dalam output untuk AWS Wilayah yang Anda tentukan pada langkah sebelumnya. Saat Anda menerapkan node di cluster produksi, ganti p5.48xlarge dengan jenis instance apa pun yang dikembalikan pada langkah sebelumnya.

    aws ec2 describe-instance-type-offerings --region region-code \ --location-type availability-zone --filters Name=instance-type,Values=p4d.24xlarge,p5.48xlarge \ --query 'InstanceTypeOfferings[*].Location' --output text

    Contoh output adalah sebagai berikut.

    us-west-2a us-west-2c us-west-2b

    Perhatikan Availability Zones yang dikembalikan untuk digunakan di langkah selanjutnya. Saat Anda menyebarkan node ke cluster, Anda VPC harus memiliki subnet dengan alamat IP yang tersedia di salah satu Availability Zones yang dikembalikan dalam output.

  3. Buat grup node menggunakaneksctl. Anda memerlukan versi 0.199.0 atau yang lebih baru dari alat baris eksctl perintah yang diinstal pada perangkat Anda atau AWS CloudShell. Untuk menginstal atau memperbaruieksctl, lihat Instalasi dalam eksctl dokumentasi.

    1. Salin isi berikut ke file bernama efa-cluster.yaml. Ganti example values dengan milik Anda sendiri. Anda dapat mengganti p5.48xlarge dengan instance yang berbeda, tetapi jika Anda melakukannya, pastikan bahwa nilai untuk availabilityZones adalah Availability Zones yang dikembalikan untuk jenis instance di langkah 1.

      apiVersion: eksctl.io/v1alpha5 kind: ClusterConfig metadata: name: my-efa-cluster region: region-code version: "1.XX" iam: withOIDC: true availabilityZones: ["us-west-2a", "us-west-2c"] managedNodeGroups: - name: my-efa-ng instanceType: p5.48xlarge minSize: 1 desiredCapacity: 2 maxSize: 3 availabilityZones: ["us-west-2a"] volumeSize: 300 privateNetworking: true efaEnabled: true
    2. Membuat grup simpul yang dikelola dalam klaster yang sudah ada.

      eksctl create nodegroup -f efa-cluster.yaml

      Jika Anda tidak memiliki cluster yang ada, Anda dapat menjalankan perintah berikut untuk membuat cluster dan grup node.

      eksctl create cluster -f efa-cluster.yaml
      catatan

      Karena tipe instance yang digunakan dalam contoh ini memilikiGPUs, eksctl secara otomatis menginstal plugin perangkat NVIDIA Kubernetes pada setiap instance untuk Anda.

  4. Menerapkan plugin perangkat EFA Kubernetes.

    Plugin perangkat EFA Kubernetes mendeteksi dan mengiklankan EFA antarmuka sebagai sumber daya yang dapat dialokasikan ke Kubernetes. Aplikasi dapat menggunakan tipe sumber daya yang diperluas vpc.amazonaws.com/efa dalam Pod minta spesifikasi seperti CPU dan memori. Untuk informasi selengkapnya, lihat Mengkonsumsi sumber daya yang diperluas di Kubernetes dokumentasi. Setelah diminta, plugin secara otomatis menetapkan dan memasang EFA antarmuka ke Pod. Menggunakan plugin perangkat menyederhanakan EFA pengaturan dan tidak memerlukan Pod untuk berjalan dalam mode istimewa.

    helm repo add eks https://aws.github.io/eks-charts helm install aws-efa-k8s-device-plugin --namespace kube-system eks/aws-efa-k8s-device-plugin

(Opsional) Uji kinerja EFA

Kami menyarankan Anda menguji EFA pengaturannya. Anda dapat menggunakan NCCLTes di aws-samples/awsome-distributed-training repositori pada. GitHub NCCL Tes mengevaluasi kinerja jaringan menggunakan Perpustakaan Komunikasi Kolektif Nvidia. Langkah-langkah berikut mengirimkan NCCL tes di AmazonEKS.

  1. Menerapkan Operator KubeflowMPI:

    Untuk NCCL pengujian Anda dapat menerapkan Operator KubeflowMPI. MPIOperator memudahkan menjalankan pelatihan terdistribusi gaya AllReduce di Kubernetes. Untuk informasi selengkapnya, lihat MPIOperator di GitHub.

  2. Jalankan Uji NCCL Kinerja multi-node untuk memverifikasiGPUDirectRDMA/EFA:

    Untuk memverifikasi NCCL kinerja dengan GPUDirectRDMA overEFA, jalankan uji NCCL Kinerja standar. Untuk informasi lebih lanjut, lihat repo NCCL-Tests resmi di GitHub.

    Selesaikan langkah-langkah berikut untuk menjalankan dua node NCCL Performance Test. Dalam contoh NCCL pekerjaan uji, setiap pekerja meminta delapanGPUs, 5210Mihugepages-2Mi, empat, dan 8000Mi memoriEFAs, yang secara efektif berarti setiap pekerja mengkonsumsi semua sumber daya dari sebuah instance. p5.48xlarge

    1. Buat MPIJob manifes:

      Salin berikut ini ke file bernamanccl-tests.yaml:

      apiVersion: kubeflow.org/v2beta1 kind: MPIJob metadata: name: nccl-tests spec: runPolicy: cleanPodPolicy: Running backoffLimit: 20 slotsPerWorker: 8 mpiReplicaSpecs: Launcher: replicas: 1 template: spec: restartPolicy: OnFailure containers: - image: public.ecr.aws/hpc-cloud/nccl-tests:latest imagePullPolicy: IfNotPresent name: test-nccl-launcher env: - name: PATH value: $PATH:/opt/amazon/efa/bin:/usr/bin - name: LD_LIBRARY_PATH value: /opt/amazon/openmpi/lib:/opt/nccl/build/lib:/opt/amazon/efa/lib:/opt/aws-ofi-nccl/install/lib:/usr/local/nvidia/lib:$LD_LIBRARY_PATH - name: NCCL_DEBUG value: INFO - name: NCCL_BUFFSIZE value: '8388608' - name: NCCL_P2P_NET_CHUNKSIZE value: '524288' - name: NCCL_TUNER_PLUGIN value: /opt/aws-ofi-nccl/install/lib/libnccl-ofi-tuner.so command: - /opt/amazon/openmpi/bin/mpirun - --allow-run-as-root - --tag-output - -np - "16" - -N - "8" - --bind-to - none - -x - PATH - -x - LD_LIBRARY_PATH - -x - NCCL_DEBUG=INFO - -x - NCCL_BUFFSIZE - -x - NCCL_P2P_NET_CHUNKSIZE - -x - NCCL_TUNER_PLUGIN - --mca - pml - ^cm,ucx - --mca - btl - tcp,self - --mca - btl_tcp_if_exclude - lo,docker0,veth_def_agent - /opt/nccl-tests/build/all_reduce_perf - -b - "8" - -e - "16G" - -f - "2" - -g - "1" - -c - "1" - -n - "100" Worker: replicas: 2 template: spec: nodeSelector: node.kubernetes.io/instance-type: "p5.48xlarge" containers: - image: public.ecr.aws/hpc-cloud/nccl-tests:latest imagePullPolicy: IfNotPresent name: nccl-tests-worker volumeMounts: - name: shmem mountPath: /dev/shm resources: limits: nvidia.com/gpu: 8 hugepages-2Mi: 5120Mi vpc.amazonaws.com/efa: 32 memory: 32000Mi requests: nvidia.com/gpu: 8 hugepages-2Mi: 5120Mi vpc.amazonaws.com/efa: 32 memory: 32000Mi volumes: - name: shmem hostPath: path: /dev/shm
    2. Terapkan NCCL -tesMPIJob:

      Kirim MPIJob dengan menerapkan manifes. Ini akan membuat dua EC2 contoh p5.48xlarge Amazon.

      kubectl apply -f nccl-tests.yaml

      Contoh output adalah sebagai berikut.

      mpijob.kubeflow.org/nccl-tests created
    3. Verifikasi bahwa pekerjaan memulai pod:

      Lihat lari Anda Pods.

      kubectl get pods

      Contoh output adalah sebagai berikut.

      NAME READY STATUS RESTARTS AGE nccl-tests-launcher-nbql9 0/1 Init:0/1 0 2m49s nccl-tests-worker-0 1/1 Running 0 2m49s nccl-tests-worker-1 1/1 Running 0 2m49s

      MPIOperator membuat peluncur Pod dan 2 pekerja Pods (satu di setiap node).

    4. Verifikasi bahwa pekerjaan berhasil berjalan dengan log:

      Lihat log untuk nccl-tests-launcher Pod. Ganti nbql9 dengan nilai dari output Anda.

      kubectl logs -f nccl-tests-launcher-nbql9

Jika pengujian berhasil diselesaikan, Anda dapat menerapkan aplikasi yang menggunakan Nvidia Collective Communication Library.

📝 Edit halaman ini di GitHub