

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

# Pelatihan terdistribusi menggunakan Adaptor Kain Elastis
<a name="tutorial-efa"></a>

[Elastic Fabric Adapter](https://aws.amazon.com/hpc/efa/) (EFA) adalah perangkat jaringan yang dapat Anda lampirkan ke instans DLAMI Anda untuk mempercepat aplikasi High Performance Computing (HPC). EFA memungkinkan Anda mencapai kinerja aplikasi klaster HPC lokal, dengan skalabilitas, fleksibilitas, dan elastisitas yang disediakan oleh Cloud. AWS 

Topik berikut menunjukkan cara memulai menggunakan EFA dengan DLAMI.

**catatan**  
Pilih DLAMI Anda dari daftar DLAMI GPU [Dasar](appendix-ami-release-notes.md#appendix-ami-release-notes-base) ini

**Topics**
+ [Meluncurkan AWS Deep Learning AMIs Instance Dengan EFA](tutorial-efa-launching.md)
+ [Menggunakan EFA pada DLAMI](tutorial-efa-using.md)

# Meluncurkan AWS Deep Learning AMIs Instance Dengan EFA
<a name="tutorial-efa-launching"></a>

[Base DLAMI terbaru siap digunakan dengan EFA dan dilengkapi dengan driver yang diperlukan, modul kernel, libfabric, openmpi dan plugin NCCL OFI untuk instance GPU.](https://github.com/aws/aws-ofi-nccl/tree/aws)

[Anda dapat menemukan versi CUDA yang didukung dari DLAMI Dasar di catatan rilis.](appendix-ami-release-notes.md#appendix-ami-release-notes-base)

Catatan:
+ Saat menjalankan Aplikasi NCCL menggunakan `mpirun` EFA, Anda harus menentukan jalur lengkap ke instalasi yang didukung EFA sebagai: 

  ```
  /opt/amazon/openmpi/bin/mpirun <command>  
  ```
+ Untuk mengaktifkan aplikasi Anda menggunakan EFA, tambahkan `FI_PROVIDER="efa"` ke `mpirun` perintah seperti yang ditunjukkan pada[Menggunakan EFA pada DLAMI](tutorial-efa-using.md).

**Topics**
+ [Mempersiapkan Grup Keamanan Berkemampuan EFA](#tutorial-efa-security-group)
+ [Luncurkan Instance Anda](#tutorial-efa-launch)
+ [Verifikasi Lampiran EFA](#tutorial-efa-verify-attachment)

## Mempersiapkan Grup Keamanan Berkemampuan EFA
<a name="tutorial-efa-security-group"></a>

EFA membutuhkan grup keamanan yang memungkinkan semua lalu lintas masuk dan keluar ke dan dari grup keamanan itu sendiri. Untuk informasi selengkapnya, lihat [Dokumentasi EFA](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/efa-start.html#efa-start-security).

1. Buka konsol Amazon EC2 di. [https://console.aws.amazon.com/ec2/](https://console.aws.amazon.com/ec2/) 

1. Di panel navigasi, pilih **Grup Keamanan** lalu pilih **Buat Grup Keamanan**. 

1. Di jendela **Buat Grup Keamanan**, lakukan hal berikut: 
   + Untuk **Nama grup keamanan**, masukkan nama deskriptif untuk grup keamanan, seperti `EFA-enabled security group`. 
   + (Opsional) Untuk **Deskripsi**, masukkan deskripsi singkat grup keamanan. 
   + Untuk **VPC**, pilih VPC untuk tujuan peluncuran instans Anda yang didukung EFA. 
   + Pilih **Buat**. 

1. Pilih grup keamanan yang Anda buat, dan pada tab **Deskripsi**, salin **ID Grup**. 

1. Pada tab **Inbound** dan **Outbound**, lakukan hal berikut: 
   + Pilih **Edit**. 
   + Untuk **Jenis**, pilih **Semua lalu lintas**. 
   + Untuk **Sumber**, pilih **Kustom**. 
   + Rekatkan ID grup keamanan yang Anda salin ke bidang. 
   + Pilih **Simpan**. 

1. Aktifkan lalu lintas masuk yang mengacu pada [Otorisasi Lalu Lintas Masuk untuk Instans Linux Anda](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/authorizing-access-to-an-instance.html). Jika Anda melewati langkah ini, Anda tidak akan dapat berkomunikasi dengan instans DLAMI Anda.

## Luncurkan Instance Anda
<a name="tutorial-efa-launch"></a>

EFA pada saat AWS Deep Learning AMIs ini didukung dengan jenis instance dan sistem operasi berikut:
+  P3dn: Amazon Linux 2, Ubuntu 20.04
+  P4d, P4de: Amazon Linux 2, Amazon Linux 2023, Ubuntu 20.04, Ubuntu 22.04
+  P5, P5e, P5en: Amazon Linux 2, Amazon Linux 2023, Ubuntu 20.04, Ubuntu 22.04

Bagian berikut menunjukkan cara meluncurkan instance DLAMI yang diaktifkan EFA. Untuk informasi selengkapnya tentang meluncurkan instans berkemampuan EFA, lihat [Meluncurkan Instans Berkemampuan EFA ke dalam](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/efa-start.html#efa-start-instances) Grup Penempatan Cluster.

1. Buka konsol Amazon EC2 di. [https://console.aws.amazon.com/ec2/](https://console.aws.amazon.com/ec2/) 

1. Pilih **Luncurkan Instans**. 

1. Pada halaman **Pilih AMI**, pilih DLAMI yang didukung yang ditemukan di Halaman Catatan Rilis [DLAMI](https://docs.aws.amazon.com/dlami/latest/devguide/appendix-ami-release-notes) 

1. Pada halaman **Pilih Jenis Instance**, pilih salah satu jenis instans yang didukung berikut, lalu pilih **Berikutnya: Konfigurasi Detail Instance.** Lihat tautan ini untuk daftar instans yang didukung: [Memulai EFA dan MPI](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/efa-start.html) 

1. Pada halaman **Konfigurasi Detail Instans**, lakukan langkah berikut: 
   + Untuk **Jumlah instans**, masukkan jumlah instans yang diaktifkan EFA yang ingin Anda luncurkan. 
   + Untuk **Jaringan** dan **Subnet**, pilih VPC dan subnet sebagai tujuan peluncuran instans. 
   + [Opsional] Untuk **grup Penempatan**, pilih **Tambahkan instance ke grup penempatan**. Untuk performa terbaik, luncurkan instance dalam grup penempatan. 
   + [Opsional] Untuk **nama grup Penempatan**, pilih **Tambahkan ke grup penempatan baru**, masukkan nama deskriptif untuk grup penempatan, lalu untuk **strategi grup Penempatan**, pilih **klaster**. 
   + Pastikan untuk mengaktifkan **“Adaptor Kain Elastis”** di halaman ini. Jika opsi ini dinonaktifkan, ubah subnet menjadi subnet yang mendukung jenis instans yang Anda pilih. 
   + Di bagian **Antarmuka Jaringan**, untuk perangkat **eth0**, pilih **Antarmuka jaringan baru**. Anda dapat secara opsional menentukan IPv4 alamat utama dan satu atau lebih IPv4 alamat sekunder. Jika Anda meluncurkan instance ke subnet yang memiliki blok IPv6 CIDR terkait, Anda dapat secara opsional menentukan IPv6 alamat utama dan satu atau beberapa alamat sekunder. IPv6 
   + Pilih **Berikutnya: Tambahkan Penyimpanan**. 

1. Di halaman **Tambahkan Penyimpanan**, tentukan volume yang akan dilampirkan ke instans selain volume yang ditentukan oleh AMI (seperti volume perangkat root), lalu pilih **Selanjutnya: Tambahkan Tanda**. 

1. Di halaman **Tambahkan Tanda**, tentukan tanda untuk instans, seperti nama yang mudah digunakan, lalu pilih **Selanjutnya: Konfigurasikan Grup Keamanan**. 

1. **Pada halaman **Konfigurasi Grup Keamanan**, untuk **Menetapkan grup keamanan**, pilih **Pilih grup keamanan yang ada**, lalu pilih grup keamanan yang Anda buat sebelumnya.** 

1. Pilih **Tinjau dan Luncurkan**. 

1. Di halaman **Tinjau Peluncuran Instans**, tinjau pengaturannya, lalu pilih **Luncurkan** untuk memilih pasangan kunci dan meluncurkan instans Anda. 

## Verifikasi Lampiran EFA
<a name="tutorial-efa-verify-attachment"></a>

### Dari Konsol
<a name="tutorial-efa-verify-attachment-console"></a>

Setelah meluncurkan instance, periksa detail instance di AWS Console. Untuk melakukan ini, pilih instance di konsol EC2 dan lihat Tab Deskripsi di panel bawah pada halaman. Temukan parameter 'Network Interfaces: eth0' dan klik eth0 yang membuka pop-up. Pastikan 'Adaptor Kain Elastis' diaktifkan. 

Jika EFA tidak diaktifkan, Anda dapat memperbaikinya dengan:
+ Mengakhiri instans EC2 dan meluncurkan yang baru dengan langkah yang sama. Pastikan EFA terpasang. 
+ Lampirkan EFA ke instance yang ada.

  1. Di Konsol EC2, buka Antarmuka Jaringan.

  1. Klik Buat Antarmuka Jaringan.

  1. Pilih subnet yang sama dengan instans Anda.

  1. Pastikan untuk mengaktifkan 'Adaptor Kain Elastis' dan klik Buat.

  1. Kembali ke Tab Instans EC2 dan pilih instans Anda.

  1. Buka Actions: Instance State dan hentikan instance sebelum Anda melampirkan EFA.

  1. Dari Tindakan, pilih Jaringan: Lampirkan Antarmuka Jaringan.

  1. Pilih antarmuka yang baru saja Anda buat dan klik lampirkan.

  1. Mulai ulang instans Anda.

### Dari Instance
<a name="tutorial-efa-verify-attachment-instance"></a>

Skrip pengujian berikut sudah ada di DLAMI. Jalankan untuk memastikan bahwa modul kernel dimuat dengan benar.

```
$ fi_info -p efa
```

Output-nya semestinya mirip dengan yang berikut.

```
provider: efa
    fabric: EFA-fe80::e5:56ff:fe34:56a8
    domain: efa_0-rdm
    version: 2.0
    type: FI_EP_RDM
    protocol: FI_PROTO_EFA
provider: efa
    fabric: EFA-fe80::e5:56ff:fe34:56a8
    domain: efa_0-dgrm
    version: 2.0
    type: FI_EP_DGRAM
    protocol: FI_PROTO_EFA
provider: efa;ofi_rxd
    fabric: EFA-fe80::e5:56ff:fe34:56a8
    domain: efa_0-dgrm
    version: 1.0
    type: FI_EP_RDM
    protocol: FI_PROTO_RXD
```

### Verifikasi Konfigurasi Grup Keamanan
<a name="tutorial-efa-verify-attachment-security"></a>

Skrip pengujian berikut sudah ada di DLAMI. Jalankan untuk memastikan bahwa grup keamanan yang Anda buat dikonfigurasi dengan benar.

```
$ cd /opt/amazon/efa/test/ 
$ ./efa_test.sh
```

Output-nya semestinya mirip dengan yang berikut.

```
Starting server...
Starting client...
bytes   #sent   #ack     total       time     MB/sec    usec/xfer   Mxfers/sec
64      10      =10      1.2k        0.02s      0.06    1123.55       0.00
256     10      =10      5k          0.00s     17.66      14.50       0.07
1k      10      =10      20k         0.00s     67.81      15.10       0.07
4k      10      =10      80k         0.00s    237.45      17.25       0.06
64k     10      =10      1.2m        0.00s    921.10      71.15       0.01
1m      10      =10      20m         0.01s   2122.41     494.05       0.00
```

Jika berhenti merespons atau tidak selesai, pastikan grup keamanan Anda memiliki inbound/outbound aturan yang benar. 

# Menggunakan EFA pada DLAMI
<a name="tutorial-efa-using"></a>

Bagian berikut menjelaskan cara menggunakan EFA untuk menjalankan aplikasi multi-node pada. AWS Deep Learning AMIs

## Menjalankan Aplikasi Multi-Node dengan EFA
<a name="tutorial-efa-using-multi-node"></a>

Untuk menjalankan aplikasi di seluruh cluster node konfigurasi berikut diperlukan

**Topics**
+ [Aktifkan SSH Tanpa Kata Sandi](#tutorial-efa-using-multi-node-ssh)
+ [Buat File Host](#tutorial-efa-using-multi-node-hosts)
+ [Tes NCCL](#tutorial-efa-using-2node)

### Aktifkan SSH Tanpa Kata Sandi
<a name="tutorial-efa-using-multi-node-ssh"></a>

Pilih satu node di cluster Anda sebagai node pemimpin. Node yang tersisa disebut sebagai node anggota. 

1. Pada node pemimpin, hasilkan keypair RSA.

   ```
   ssh-keygen -t rsa -N "" -f ~/.ssh/id_rsa
   ```

1. Ubah izin kunci privat pada simpul pemimpin.

   ```
   chmod 600 ~/.ssh/id_rsa
   ```

1. Salin kunci publik `~/.ssh/id_rsa.pub` ke dan tambahkan ke `~/.ssh/authorized_keys` node anggota di cluster. 

1. Anda sekarang harus dapat langsung masuk ke node anggota dari node pemimpin menggunakan ip pribadi.

   ```
   ssh <member private ip>
   ```

1. Nonaktifkan strictHostKey Memeriksa dan mengaktifkan penerusan agen pada node pemimpin dengan menambahkan yang berikut ini ke file \$1/.ssh/config pada node pemimpin: 

   ```
   Host *
       ForwardAgent yes
   Host *
       StrictHostKeyChecking no
   ```

1. Pada instans Amazon Linux 2, jalankan perintah berikut pada node pemimpin untuk memberikan izin yang benar ke file konfigurasi:

   ```
   chmod 600 ~/.ssh/config
   ```

### Buat File Host
<a name="tutorial-efa-using-multi-node-hosts"></a>

Pada node pemimpin, buat file host untuk mengidentifikasi node di cluster. File host harus memiliki entri untuk setiap node di cluster. Buat file \$1/hosts dan tambahkan setiap node menggunakan ip pribadi sebagai berikut: 

```
localhost slots=8
<private ip of node 1> slots=8
<private ip of node 2> slots=8
```

### Tes NCCL
<a name="tutorial-efa-using-2node"></a>

**catatan**  
Tes ini telah dijalankan menggunakan EFA versi 1.38.0 dan OFI NCCL Plugin 1.13.2.

 Di bawah ini adalah subset dari Tes NCCL yang disediakan oleh Nvidia untuk menguji fungsionalitas dan kinerja melalui beberapa node komputasi 

 **Instans yang Didukung: P3dn, P4, P5, P5e, P5en** 

#### Tes Kinerja
<a name="tutorial-efa-using-multinode"></a>

##### Uji Kinerja NCCL Multi-node pada P4D.24xLarge
<a name="tutorial-efa-using-multi-node-performance"></a>

[Untuk memeriksa Kinerja NCCL dengan EFA, jalankan uji Kinerja NCCL standar yang tersedia di Repo Pengujian NCCL resmi.](https://github.com/NVIDIA/nccl-tests.git) DLAMI dilengkapi dengan tes ini yang sudah dibangun untuk CUDA XX.X. Anda juga dapat menjalankan skrip Anda sendiri dengan EFA.

Saat membuat skrip Anda sendiri, lihat panduan berikut:
+ Gunakan jalur lengkap ke mpirun seperti yang ditunjukkan pada contoh saat menjalankan aplikasi NCCL dengan EFA.
+ Ubah params np dan N berdasarkan jumlah instance dan GPUs di cluster Anda.
+ Tambahkan flag NCCL\$1DEBUG=INFO dan pastikan bahwa log menunjukkan penggunaan EFA sebagai “Penyedia Terpilih adalah EFA”.
+  Mengatur Lokasi Log Pelatihan untuk mengurai validasi 

  ```
  TRAINING_LOG="testEFA_$(date +"%N").log"
  ```

Gunakan perintah `watch nvidia-smi` pada salah satu node anggota untuk memantau penggunaan GPU. `watch nvidia-smi`Perintah berikut adalah untuk versi CUDA xx.x generik dan bergantung pada Sistem Operasi instance Anda. Anda dapat menjalankan perintah untuk versi CUDA apa pun yang tersedia di instans Amazon EC2 Anda dengan mengganti versi CUDA dalam skrip.
+ Amazon Linux 2, Amazon Linux 2023:

  ```
   $ /opt/amazon/openmpi/bin/mpirun -n 16 -N 8 \
  -x NCCL_DEBUG=INFO --mca pml ^cm \
  -x LD_LIBRARY_PATH=/usr/local/cuda-xx.x/efa/lib:/usr/local/cuda-xx.x/lib:/usr/local/cuda-xx.x/lib64:/usr/local/cuda-xx.x:/opt/amazon/efa/lib64:/opt/amazon/openmpi/lib64:$LD_LIBRARY_PATH \
  --hostfile hosts --mca btl tcp,self --mca btl_tcp_if_exclude lo,docker0 --bind-to none \
  /usr/local/cuda-xx.x/efa/test-cuda-xx.x/all_reduce_perf -b 8 -e 1G -f 2 -g 1 -c 1 -n 100 | tee ${TRAINING_LOG}
  ```
+ Ubuntu 20.04, Ubuntu 20.04:

  ```
  $ /opt/amazon/openmpi/bin/mpirun -n 16 -N 8 \
  -x NCCL_DEBUG=INFO --mca pml ^cm \
  -x LD_LIBRARY_PATH=/usr/local/cuda-xx.x/efa/lib:/usr/local/cuda-xx.x/lib:/usr/local/cuda-xx.x/lib64:/usr/local/cuda-xx.x:/opt/amazon/efa/lib:/opt/amazon/openmpi/lib:$LD_LIBRARY_PATH \
  --hostfile hosts --mca btl tcp,self --mca btl_tcp_if_exclude lo,docker0 --bind-to none \
  /usr/local/cuda-xx.x/efa/test-cuda-xx.x/all_reduce_perf -b 8 -e 1G -f 2 -g 1 -c 1 -n 100 | tee ${TRAINING_LOG}
  ```

Output Anda akan terlihat seperti berikut:

```
# nThread 1 nGpus 1 minBytes 8 maxBytes 1073741824 step: 2(factor) warmup iters: 5 iters: 100 agg iters: 1 validation: 1 graph: 0
#
# Using devices
#  Rank  0 Group  0 Pid  33378 on ip-172-31-42-25 device  0 [0x10] NVIDIA A100-SXM4-40GB
#  Rank  1 Group  0 Pid  33379 on ip-172-31-42-25 device  1 [0x10] NVIDIA A100-SXM4-40GB
#  Rank  2 Group  0 Pid  33380 on ip-172-31-42-25 device  2 [0x20] NVIDIA A100-SXM4-40GB
#  Rank  3 Group  0 Pid  33381 on ip-172-31-42-25 device  3 [0x20] NVIDIA A100-SXM4-40GB
#  Rank  4 Group  0 Pid  33382 on ip-172-31-42-25 device  4 [0x90] NVIDIA A100-SXM4-40GB
#  Rank  5 Group  0 Pid  33383 on ip-172-31-42-25 device  5 [0x90] NVIDIA A100-SXM4-40GB
#  Rank  6 Group  0 Pid  33384 on ip-172-31-42-25 device  6 [0xa0] NVIDIA A100-SXM4-40GB
#  Rank  7 Group  0 Pid  33385 on ip-172-31-42-25 device  7 [0xa0] NVIDIA A100-SXM4-40GB
#  Rank  8 Group  0 Pid  30378 on ip-172-31-43-8 device  0 [0x10] NVIDIA A100-SXM4-40GB
#  Rank  9 Group  0 Pid  30379 on ip-172-31-43-8 device  1 [0x10] NVIDIA A100-SXM4-40GB
#  Rank 10 Group  0 Pid  30380 on ip-172-31-43-8 device  2 [0x20] NVIDIA A100-SXM4-40GB
#  Rank 11 Group  0 Pid  30381 on ip-172-31-43-8 device  3 [0x20] NVIDIA A100-SXM4-40GB
#  Rank 12 Group  0 Pid  30382 on ip-172-31-43-8 device  4 [0x90] NVIDIA A100-SXM4-40GB
#  Rank 13 Group  0 Pid  30383 on ip-172-31-43-8 device  5 [0x90] NVIDIA A100-SXM4-40GB
#  Rank 14 Group  0 Pid  30384 on ip-172-31-43-8 device  6 [0xa0] NVIDIA A100-SXM4-40GB
#  Rank 15 Group  0 Pid  30385 on ip-172-31-43-8 device  7 [0xa0] NVIDIA A100-SXM4-40GB
ip-172-31-42-25:33385:33385 [7] NCCL INFO cudaDriverVersion 12060
ip-172-31-43-8:30383:30383 [5] NCCL INFO Bootstrap : Using ens32:172.31.43.8
ip-172-31-43-8:30383:30383 [5] NCCL INFO NCCL version 2.23.4+cuda12.5
...
ip-172-31-42-25:33384:33451 [6] NCCL INFO NET/OFI Initializing aws-ofi-nccl 1.13.2-aws
ip-172-31-42-25:33384:33451 [6] NCCL INFO NET/OFI Using Libfabric version 1.22
ip-172-31-42-25:33384:33451 [6] NCCL INFO NET/OFI Using CUDA driver version 12060 with runtime 12050
ip-172-31-42-25:33384:33451 [6] NCCL INFO NET/OFI Configuring AWS-specific options
ip-172-31-42-25:33384:33451 [6] NCCL INFO NET/OFI Setting provider_filter to efa
ip-172-31-42-25:33384:33451 [6] NCCL INFO NET/OFI Setting FI_EFA_FORK_SAFE environment variable to 1
ip-172-31-42-25:33384:33451 [6] NCCL INFO NET/OFI Setting NCCL_NVLSTREE_MAX_CHUNKSIZE to 512KiB
ip-172-31-42-25:33384:33451 [6] NCCL INFO NET/OFI Setting NCCL_NVLS_CHUNKSIZE to 512KiB
ip-172-31-42-25:33384:33451 [6] NCCL INFO NET/OFI Running on p4d.24xlarge platform, Setting NCCL_TOPO_FILE environment variable to /opt/amazon/ofi-nccl/share/aws-ofi-nccl/xml/p4d-24xl-topo.xml
...
-----------------------------some output truncated-----------------------------------
#                                                              out-of-place                       in-place          
#       size         count      type   redop    root     time   algbw   busbw #wrong     time   algbw   busbw #wrong
#        (B)    (elements)                               (us)  (GB/s)  (GB/s)            (us)  (GB/s)  (GB/s)       
           8             2     float     sum      -1    180.3    0.00    0.00      0    179.3    0.00    0.00      0
          16             4     float     sum      -1    178.1    0.00    0.00      0    177.6    0.00    0.00      0
          32             8     float     sum      -1    178.5    0.00    0.00      0    177.9    0.00    0.00      0
          64            16     float     sum      -1    178.8    0.00    0.00      0    178.7    0.00    0.00      0
         128            32     float     sum      -1    178.2    0.00    0.00      0    177.8    0.00    0.00      0
         256            64     float     sum      -1    178.6    0.00    0.00      0    178.8    0.00    0.00      0
         512           128     float     sum      -1    177.2    0.00    0.01      0    177.1    0.00    0.01      0
        1024           256     float     sum      -1    179.2    0.01    0.01      0    179.3    0.01    0.01      0
        2048           512     float     sum      -1    181.3    0.01    0.02      0    181.2    0.01    0.02      0
        4096          1024     float     sum      -1    184.2    0.02    0.04      0    183.9    0.02    0.04      0
        8192          2048     float     sum      -1    191.2    0.04    0.08      0    190.6    0.04    0.08      0
       16384          4096     float     sum      -1    202.5    0.08    0.15      0    202.3    0.08    0.15      0
       32768          8192     float     sum      -1    233.0    0.14    0.26      0    232.1    0.14    0.26      0
       65536         16384     float     sum      -1    238.6    0.27    0.51      0    235.1    0.28    0.52      0
      131072         32768     float     sum      -1    237.2    0.55    1.04      0    236.8    0.55    1.04      0
      262144         65536     float     sum      -1    248.3    1.06    1.98      0    247.0    1.06    1.99      0
      524288        131072     float     sum      -1    309.2    1.70    3.18      0    307.7    1.70    3.20      0
     1048576        262144     float     sum      -1    408.7    2.57    4.81      0    404.3    2.59    4.86      0
     2097152        524288     float     sum      -1    613.5    3.42    6.41      0    607.9    3.45    6.47      0
     4194304       1048576     float     sum      -1    924.5    4.54    8.51      0    914.8    4.58    8.60      0
     8388608       2097152     float     sum      -1   1059.5    7.92   14.85      0   1054.3    7.96   14.92      0
    16777216       4194304     float     sum      -1   1269.9   13.21   24.77      0   1272.0   13.19   24.73      0
    33554432       8388608     float     sum      -1   1642.7   20.43   38.30      0   1636.7   20.50   38.44      0
    67108864      16777216     float     sum      -1   2446.7   27.43   51.43      0   2445.8   27.44   51.45      0
   134217728      33554432     float     sum      -1   4143.6   32.39   60.73      0   4142.4   32.40   60.75      0
   268435456      67108864     float     sum      -1   7351.9   36.51   68.46      0   7346.7   36.54   68.51      0
   536870912     134217728     float     sum      -1    13717   39.14   73.39      0    13703   39.18   73.46      0
  1073741824     268435456     float     sum      -1    26416   40.65   76.21      0    26420   40.64   76.20      0
...
# Out of bounds values : 0 OK
# Avg bus bandwidth    : 15.5514
```

#### Tes Validasi
<a name="tutorial-efa-validation"></a>

Untuk memvalidasi bahwa tes EFA mengembalikan hasil yang valid, silakan gunakan tes berikut untuk mengonfirmasi: 
+ Dapatkan jenis instans menggunakan Metadata Instans EC2:

  ```
  TOKEN=$(curl -X PUT "http://169.254.169.254/latest/api/token" -H "X-aws-ec2-metadata-token-ttl-seconds: 21600")
  INSTANCE_TYPE=$(curl -H "X-aws-ec2-metadata-token: $TOKEN" -v http://169.254.169.254/latest/meta-data/instance-type)
  ```
+ Jalankan [Tes Kinerja](#tutorial-efa-using-multinode) 
+  Mengatur Parameter Berikut 

  ```
  CUDA_VERSION
  CUDA_RUNTIME_VERSION
  NCCL_VERSION
  ```
+  Validasi Hasil seperti yang ditunjukkan: 

  ```
  RETURN_VAL=`echo $?`
  if [ ${RETURN_VAL} -eq 0 ]; then
  
      # [0] NCCL INFO NET/OFI Initializing aws-ofi-nccl 1.13.2-aws
      # [0] NCCL INFO NET/OFI Using CUDA driver version 12060 with runtime 12010
  
      # cudaDriverVersion 12060  --> This is max supported cuda version by nvidia driver
      # NCCL version 2.23.4+cuda12.5 --> This is NCCL version compiled with cuda version
  
      # Validation of logs
      grep "NET/OFI Configuring AWS-specific options" ${TRAINING_LOG} || { echo "AWS-specific options text not found"; exit 1; } 
      grep "busbw" ${TRAINING_LOG} || { echo "busbw text not found"; exit 1; } 
      grep "Avg bus bandwidth " ${TRAINING_LOG} || { echo "Avg bus bandwidth text not found"; exit 1; } 
      grep "NCCL version $NCCL_VERSION" ${TRAINING_LOG} || { echo "Text not found: NCCL version $NCCL_VERSION"; exit 1; }
      if [[ ${INSTANCE_TYPE} == "p4d.24xlarge" ]]; then
          grep "NET/Libfabric/0/GDRDMA" ${TRAINING_LOG} || { echo "Text not found: NET/Libfabric/0/GDRDMA"; exit 1; }  
          grep "NET/OFI Selected Provider is efa (found 4 nics)" ${TRAINING_LOG} || { echo "Selected Provider is efa text not found"; exit 1; }   
      elif [[ ${INSTANCE_TYPE} == "p4de.24xlarge" ]]; then
          grep "NET/Libfabric/0/GDRDMA" ${TRAINING_LOG} || { echo "Avg bus bandwidth text not found"; exit 1; }
          grep "NET/OFI Selected Provider is efa (found 4 nics)" ${TRAINING_LOG} || { echo "Avg bus bandwidth text not found"; exit 1; }
      elif [[ ${INSTANCE_TYPE} == "p5.48xlarge" ]]; then
          grep "NET/Libfabric/0/GDRDMA" ${TRAINING_LOG} || { echo "Avg bus bandwidth text not found"; exit 1; }
          grep "NET/OFI Selected Provider is efa (found 32 nics)" ${TRAINING_LOG} || { echo "Avg bus bandwidth text not found"; exit 1; } 
      elif [[ ${INSTANCE_TYPE} == "p5e.48xlarge" ]]; then
          grep "NET/Libfabric/0/GDRDMA" ${TRAINING_LOG} || { echo "Avg bus bandwidth text not found"; exit 1; }
          grep "NET/OFI Selected Provider is efa (found 32 nics)" ${TRAINING_LOG} || { echo "Avg bus bandwidth text not found"; exit 1; }
      elif [[ ${INSTANCE_TYPE} == "p5en.48xlarge" ]]; then
          grep "NET/Libfabric/0/GDRDMA" ${TRAINING_LOG} || { echo "Avg bus bandwidth text not found"; exit 1; }
          grep "NET/OFI Selected Provider is efa (found 16 nics)" ${TRAINING_LOG} || { echo "Avg bus bandwidth text not found"; exit 1; }
      elif [[ ${INSTANCE_TYPE} == "p3dn.24xlarge" ]]; then
          grep "NET/OFI Selected Provider is efa (found 4 nics)" ${TRAINING_LOG} || { echo "Selected Provider is efa text not found"; exit 1; }  
      fi
      echo "***************************** check_efa_nccl_all_reduce passed for cuda version ${CUDA_VERSION} *****************************"
  else
      echo "***************************** check_efa_nccl_all_reduce failed for cuda version ${CUDA_VERSION} *****************************"
  fi
  ```
+ Untuk mengakses data benchmark, kita dapat mengurai baris terakhir dari output tabel dari tes Multi Node all\$1reduce: 

  ```
  benchmark=$(sudo cat ${TRAINING_LOG} | grep '1073741824' | tail -n1 | awk -F " " '{{print $12}}' | sed 's/ //' | sed  's/  5e-07//')
  if [[ -z "${benchmark}" ]]; then
    echo "benchmark variable is empty"
    exit 1
  fi
  
  echo "Benchmark throughput: ${benchmark}"
  ```