

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

# Tutorial
<a name="tutorials"></a>

Berikut ini adalah tutorial tentang cara menggunakan AMI Pembelajaran Mendalam dengan perangkat lunak Conda.

**Topics**
+ [

# Mengaktifkan Kerangka Kerja
](activating.md)
+ [

# Pelatihan terdistribusi menggunakan Adaptor Kain Elastis
](tutorial-efa.md)
+ [

# Pemantauan dan Optimasi GPU
](tutorial-gpu.md)
+ [

# Chip AWS Inferentia Dengan DLAMI
](tutorial-inferentia.md)
+ [

# ARM64 DLAMI
](tutorial-arm64.md)
+ [

# Inferensi
](tutorial-inference.md)
+ [

# Penyajian Model
](model-serving.md)

# Mengaktifkan Kerangka Kerja
<a name="activating"></a>

Berikut ini adalah kerangka kerja pembelajaran mendalam yang diinstal pada AMI Pembelajaran Mendalam dengan Conda. Klik pada kerangka kerja untuk mempelajari cara mengaktifkannya.

**Topics**
+ [

# PyTorch
](tutorial-pytorch.md)
+ [

# TensorFlow 2
](tutorial-tensorflow-2.md)

# PyTorch
<a name="tutorial-pytorch"></a>

## Mengaktifkan PyTorch
<a name="tutorial-pytorch-overview"></a>

Ketika paket Conda stabil dari kerangka kerja dirilis, itu diuji dan diinstal sebelumnya pada DLAMI. Jika Anda ingin menjalankan build malam terbaru yang belum teruji, Anda dapat secara manual. [Instal PyTorch Nightly Build (eksperimental)](#tutorial-pytorch-install) 

Untuk mengaktifkan kerangka kerja yang saat ini diinstal, ikuti petunjuk ini pada AMI Pembelajaran Mendalam Anda dengan Conda.

Untuk PyTorch pada Python 3 dengan CUDA dan MKL-DNN, jalankan perintah ini:

```
$ source activate pytorch_p310
```

Mulai terminal IPython.

```
(pytorch_p310)$ ipython
```

Jalankan PyTorch program cepat.

```
import torch
x = torch.rand(5, 3)
print(x)
print(x.size())
y = torch.rand(5, 3)
print(torch.add(x, y))
```

Anda akan melihat array acak awal dicetak, kemudian ukurannya, dan kemudian penambahan array acak lainnya.

## Instal PyTorch Nightly Build (eksperimental)
<a name="tutorial-pytorch-install"></a>

**Cara menginstal PyTorch dari build malam**

Anda dapat menginstal PyTorch build terbaru ke salah satu atau kedua lingkungan PyTorch Conda di AMI Pembelajaran Mendalam Anda dengan Conda.

1. 
   + (Opsi untuk Python 3) - Aktifkan lingkungan Python 3: PyTorch 

     ```
     $ source activate pytorch_p310
     ```

1. Langkah-langkah yang tersisa menganggap Anda menggunakan `pytorch_p310` lingkungan. Hapus yang saat ini diinstal PyTorch:

   ```
   (pytorch_p310)$ pip uninstall torch
   ```

1. 
   + (Opsi untuk instance GPU) - Instal build malam terbaru dengan CUDA.0: PyTorch 

     ```
     (pytorch_p310)$ pip install torch_nightly -f https://download.pytorch.org/whl/nightly/cu100/torch_nightly.html
     ```
   + (Opsi untuk instance CPU) - Instal build malam terbaru PyTorch untuk instance tanpa: GPUs

     ```
     (pytorch_p310)$ pip install torch_nightly -f https://download.pytorch.org/whl/nightly/cpu/torch_nightly.html
     ```

1. Untuk memverifikasi bahwa Anda telah berhasil menginstal build nightly terbaru, mulai IPython terminal dan periksa versi. PyTorch

   ```
   (pytorch_p310)$ ipython
   ```

   ```
   import torch
   print (torch.__version__)
   ```

   Outputnya harus mencetak sesuatu yang mirip dengan `1.0.0.dev20180922`

1. Untuk memverifikasi bahwa PyTorch nightly build berfungsi dengan baik dengan contoh MNIST, Anda dapat menjalankan skrip pengujian dari PyTorch repositori contoh:

   ```
   (pytorch_p310)$ cd ~
   (pytorch_p310)$ git clone https://github.com/pytorch/examples.git pytorch_examples
   (pytorch_p310)$ cd pytorch_examples/mnist
   (pytorch_p310)$ python main.py || exit 1
   ```

## Lebih Banyak Tutorial
<a name="tutorial-pytorch-more"></a>

Untuk tutorial dan contoh lebih lanjut, lihat dokumen resmi kerangka kerja, [PyTorch dokumentasi](http://pytorch.org/docs/master/), dan [PyTorch](http://pytorch.org)situs web.

# TensorFlow 2
<a name="tutorial-tensorflow-2"></a>

Tutorial ini menunjukkan cara mengaktifkan TensorFlow 2 pada instance yang menjalankan AMI Pembelajaran Mendalam dengan Conda (DLAMI di Conda) dan menjalankan program 2. TensorFlow 

Ketika paket Conda stabil dari kerangka kerja dirilis, itu diuji dan diinstal sebelumnya pada DLAMI. 

## Mengaktifkan 2 TensorFlow
<a name="tutorial-tensorflow-2-overview"></a>

**Untuk menjalankan TensorFlow DLAMI dengan Conda**

1. Untuk mengaktifkan TensorFlow 2, buka instance Amazon Elastic Compute Cloud (Amazon EC2) dari DLAMI dengan Conda.

1. Untuk TensorFlow 2 dan Keras 2 pada Python 3 dengan CUDA 10.1 dan MKL-DNN, jalankan perintah ini:

   ```
   $ source activate tensorflow2_p310
   ```

1. Mulai terminal IPython:

   ```
   (tensorflow2_p310)$ ipython
   ```

1. Jalankan program TensorFlow 2 untuk memverifikasi bahwa itu berfungsi dengan baik:

   ```
   import tensorflow as tf
   hello = tf.constant('Hello, TensorFlow!')
   tf.print(hello)
   ```

   `Hello, TensorFlow!`akan muncul di layar Anda.

## Lebih Banyak Tutorial
<a name="tutorial-tensorflow-2-more"></a>

Untuk tutorial dan contoh lainnya, lihat TensorFlow dokumentasi untuk [API TensorFlow Python](https://www.tensorflow.org/api_docs/python/) atau lihat situs webnya. [TensorFlow](https://www.tensorflow.org)

# 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}"
  ```

# Pemantauan dan Optimasi GPU
<a name="tutorial-gpu"></a>

Bagian berikut akan memandu Anda melalui opsi pengoptimalan dan pemantauan GPU. Bagian ini diatur seperti alur kerja biasa dengan pemantauan mengawasi prapemrosesan dan pelatihan. 
+ [Memantau](tutorial-gpu-monitoring.md)
  + [Monitor GPUs dengan CloudWatch](tutorial-gpu-monitoring-gpumon.md)
+ [Pengoptimalan](tutorial-gpu-opt.md)
  + [Pemrosesan awal](tutorial-gpu-opt-preprocessing.md)
  + [Pelatihan](tutorial-gpu-opt-training.md)

# Memantau
<a name="tutorial-gpu-monitoring"></a>

DLAMI Anda sudah diinstal sebelumnya dengan beberapa alat pemantauan GPU. Panduan ini juga menyebutkan alat yang tersedia untuk diunduh dan dipasang.
+ [Monitor GPUs dengan CloudWatch](tutorial-gpu-monitoring-gpumon.md)- utilitas prainstal yang melaporkan statistik penggunaan GPU ke Amazon. CloudWatch
+ [nvidia-smi CLI](https://developer.nvidia.com/nvidia-system-management-interface) - utilitas untuk memantau komputasi GPU secara keseluruhan dan pemanfaatan memori. Ini sudah diinstal sebelumnya pada AWS Deep Learning AMIs (DLAMI) Anda.
+ [Pustaka NVMLC](https://developer.nvidia.com/nvidia-management-library-nvml) - API berbasis C untuk mengakses fungsi pemantauan dan manajemen GPU secara langsung. Ini digunakan oleh CLI nvidia-smi di bawah tenda dan sudah diinstal sebelumnya pada DLAMI Anda. Ini juga memiliki ikatan Python dan Perl untuk memfasilitasi pengembangan dalam bahasa-bahasa tersebut. Utilitas gpumon.py yang sudah diinstal sebelumnya pada DLAMI Anda menggunakan paket pynvml. dari. [nvidia-ml-py](https://pypi.org/project/nvidia-ml-py/)
+ [NVIDIA DCGM](https://developer.nvidia.com/data-center-gpu-manager-dcgm) - Alat manajemen cluster. Kunjungi halaman pengembang untuk mempelajari cara menginstal dan mengkonfigurasi alat ini.

**Tip**  
Lihat blog pengembang NVIDIA untuk info terbaru tentang penggunaan alat CUDA yang diinstal DLAMI Anda:  
[Pemantauan TensorCore pemanfaatan menggunakan Nsight IDE dan nvprof](https://devblogs.nvidia.com/using-nsight-compute-nvprof-mixed-precision-deep-learning-models/).

# Monitor GPUs dengan CloudWatch
<a name="tutorial-gpu-monitoring-gpumon"></a>

Saat Anda menggunakan DLAMI dengan GPU, Anda mungkin menemukan bahwa Anda mencari cara untuk melacak penggunaannya selama pelatihan atau inferensi. Ini dapat berguna untuk mengoptimalkan pipeline data Anda, dan menyetel jaringan pembelajaran mendalam Anda. 

Ada dua cara untuk mengonfigurasi metrik GPU dengan: CloudWatch
+ [Konfigurasikan metrik dengan AWS CloudWatch agen (Disarankan)](#tutorial-gpu-monitoring-gpumon-cloudwatch-agent-guide)
+ [Konfigurasikan metrik dengan skrip yang sudah diinstal sebelumnya `gpumon.py`](#tutorial-gpu-monitoring-gpumon-script)

## Konfigurasikan metrik dengan AWS CloudWatch agen (Disarankan)
<a name="tutorial-gpu-monitoring-gpumon-cloudwatch-agent-guide"></a>

Integrasikan DLAMI Anda dengan agen [ CloudWatch terpadu](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/Install-CloudWatch-Agent.html) untuk mengonfigurasi metrik GPU dan memantau pemanfaatan proses bersama GPU di instans akselerasi Amazon EC2.

Ada empat cara untuk mengonfigurasi [metrik GPU](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/CloudWatch-Agent-NVIDIA-GPU.html) dengan DLAMI Anda:
+ [Konfigurasikan metrik GPU minimal](#tutorial-gpu-monitoring-gpumon-cloudwatch-agent-minimal)
+ [Konfigurasikan metrik GPU sebagian](#tutorial-gpu-monitoring-gpumon-cloudwatch-agent-partial)
+ [Konfigurasikan semua metrik GPU yang tersedia](#tutorial-gpu-monitoring-gpumon-cloudwatch-agent-all)
+ [Konfigurasikan metrik GPU khusus](#tutorial-gpu-monitoring-gpumon-cloudwatch-agent-custom)

Untuk informasi tentang pembaruan dan patch keamanan, lihat [Penambalan keamanan untuk agen AWS CloudWatch](#tutorial-gpu-monitoring-gpumon-cloudwatch-agent-security)

### Prasyarat
<a name="tutorial-gpu-monitoring-gpumon-cloudwatch-agent-prerequisites"></a>

Untuk memulai, Anda harus mengonfigurasi izin IAM instans Amazon EC2 yang memungkinkan instans Anda mendorong metrik. CloudWatch Untuk langkah-langkah mendetail, lihat [Membuat peran IAM dan pengguna untuk digunakan dengan CloudWatch agen](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/create-iam-roles-for-cloudwatch-agent.html).

### Konfigurasikan metrik GPU minimal
<a name="tutorial-gpu-monitoring-gpumon-cloudwatch-agent-minimal"></a>

Konfigurasikan metrik GPU minimal menggunakan layanan. `dlami-cloudwatch-agent@minimal` `systemd` Layanan ini mengonfigurasi metrik berikut:
+ `utilization_gpu`
+ `utilization_memory`

Anda dapat menemukan `systemd` layanan untuk metrik GPU minimal yang telah dikonfigurasi sebelumnya di lokasi berikut:

```
/opt/aws/amazon-cloudwatch-agent/etc/dlami-amazon-cloudwatch-agent-minimal.json
```

Aktifkan dan mulai `systemd` layanan dengan perintah berikut:

```
sudo systemctl enable dlami-cloudwatch-agent@minimal
sudo systemctl start dlami-cloudwatch-agent@minimal
```

### Konfigurasikan metrik GPU sebagian
<a name="tutorial-gpu-monitoring-gpumon-cloudwatch-agent-partial"></a>

Konfigurasikan metrik GPU sebagian menggunakan layanan. `dlami-cloudwatch-agent@partial` `systemd` Layanan ini mengonfigurasi metrik berikut:
+ `utilization_gpu`
+ `utilization_memory`
+ `memory_total`
+ `memory_used`
+ `memory_free`

Anda dapat menemukan `systemd` layanan untuk metrik GPU sebagian yang telah dikonfigurasi sebelumnya di lokasi berikut:

```
/opt/aws/amazon-cloudwatch-agent/etc/dlami-amazon-cloudwatch-agent-partial.json
```

Aktifkan dan mulai `systemd` layanan dengan perintah berikut:

```
sudo systemctl enable dlami-cloudwatch-agent@partial
sudo systemctl start dlami-cloudwatch-agent@partial
```

### Konfigurasikan semua metrik GPU yang tersedia
<a name="tutorial-gpu-monitoring-gpumon-cloudwatch-agent-all"></a>

Konfigurasikan semua metrik GPU yang tersedia menggunakan layanan. `dlami-cloudwatch-agent@all` `systemd` Layanan ini mengonfigurasi metrik berikut:
+ `utilization_gpu`
+ `utilization_memory`
+ `memory_total`
+ `memory_used`
+ `memory_free`
+ `temperature_gpu`
+ `power_draw`
+ `fan_speed`
+ `pcie_link_gen_current`
+ `pcie_link_width_current`
+ `encoder_stats_session_count`
+ `encoder_stats_average_fps`
+ `encoder_stats_average_latency`
+ `clocks_current_graphics`
+ `clocks_current_sm`
+ `clocks_current_memory`
+ `clocks_current_video`

Anda dapat menemukan `systemd` layanan untuk semua metrik GPU yang telah dikonfigurasi sebelumnya di lokasi berikut:

```
/opt/aws/amazon-cloudwatch-agent/etc/dlami-amazon-cloudwatch-agent-all.json
```

Aktifkan dan mulai `systemd` layanan dengan perintah berikut:

```
sudo systemctl enable dlami-cloudwatch-agent@all
sudo systemctl start dlami-cloudwatch-agent@all
```

### Konfigurasikan metrik GPU khusus
<a name="tutorial-gpu-monitoring-gpumon-cloudwatch-agent-custom"></a>

Jika metrik yang telah dikonfigurasi sebelumnya tidak memenuhi persyaratan Anda, Anda dapat membuat file konfigurasi CloudWatch agen kustom.

#### Buat file konfigurasi khusus
<a name="tutorial-gpu-monitoring-gpumon-cloudwatch-agent-custom-create"></a>

Untuk membuat file konfigurasi khusus, lihat langkah-langkah terperinci di [Buat atau edit file konfigurasi CloudWatch agen secara manual](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/CloudWatch-Agent-Configuration-File-Details.html).

Untuk contoh ini, asumsikan bahwa definisi skema terletak di`/opt/aws/amazon-cloudwatch-agent/etc/amazon-cloudwatch-agent.json`.

#### Konfigurasikan metrik dengan file kustom Anda
<a name="tutorial-gpu-monitoring-gpumon-cloudwatch-agent-custom-configure"></a>

Jalankan perintah berikut untuk mengkonfigurasi CloudWatch agen sesuai dengan file kustom Anda:

```
sudo /opt/aws/amazon-cloudwatch-agent/bin/amazon-cloudwatch-agent-ctl \
-a fetch-config -m ec2 -s -c \
file:/opt/aws/amazon-cloudwatch-agent/etc/amazon-cloudwatch-agent.json
```

### Penambalan keamanan untuk agen AWS CloudWatch
<a name="tutorial-gpu-monitoring-gpumon-cloudwatch-agent-security"></a>

Baru dirilis DLAMIs dikonfigurasi dengan patch keamanan AWS CloudWatch agen terbaru yang tersedia. Lihat bagian berikut untuk memperbarui DLAMI Anda saat ini dengan patch keamanan terbaru tergantung pada sistem operasi pilihan Anda.

#### Amazon Linux 2
<a name="tutorial-gpu-monitoring-gpumon-cloudwatch-agent-security-al2"></a>

Gunakan `yum` untuk mendapatkan patch keamanan AWS CloudWatch agen terbaru untuk Amazon Linux 2 DLAMI.

```
 sudo yum update
```

#### Ubuntu
<a name="tutorial-gpu-monitoring-gpumon-cloudwatch-agent-security-ubuntu"></a>

Untuk mendapatkan patch AWS CloudWatch keamanan terbaru untuk DLAMI dengan Ubuntu, Anda perlu menginstal ulang agen AWS CloudWatch menggunakan tautan unduhan Amazon S3.

```
wget https://s3.region.amazonaws.com/amazoncloudwatch-agent-region/ubuntu/arm64/latest/amazon-cloudwatch-agent.deb
```

Untuk informasi selengkapnya tentang menginstal AWS CloudWatch agen menggunakan tautan unduhan Amazon S3, lihat [Menginstal dan menjalankan CloudWatch agen di server Anda](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/install-CloudWatch-Agent-commandline-fleet.html).

## Konfigurasikan metrik dengan skrip yang sudah diinstal sebelumnya `gpumon.py`
<a name="tutorial-gpu-monitoring-gpumon-script"></a>

Sebuah utilitas yang disebut gpumon.py sudah diinstal pada DLAMI Anda. Ini terintegrasi dengan CloudWatch dan mendukung pemantauan penggunaan per-GPU: memori GPU, suhu GPU, dan Daya GPU. Script secara berkala mengirimkan data yang dipantau ke CloudWatch. Anda dapat mengonfigurasi tingkat granularitas untuk data yang dikirim CloudWatch dengan mengubah beberapa pengaturan dalam skrip. Namun, sebelum memulai skrip, Anda harus mengatur CloudWatch untuk menerima metrik. 

**Cara mengatur dan menjalankan pemantauan GPU dengan CloudWatch**

1. Buat pengguna IAM, atau ubah pengguna yang sudah ada agar memiliki kebijakan untuk menerbitkan metrik. CloudWatch Jika Anda membuat pengguna baru, harap perhatikan kredensialnya karena Anda akan membutuhkannya di langkah berikutnya. 

   Kebijakan IAM untuk mencari adalah “cloudwatch:”. PutMetricData Kebijakan yang ditambahkan adalah sebagai berikut:

------
#### [ JSON ]

****  

   ```
   {
      "Version":"2012-10-17",		 	 	 
      "Statement": [
           {
               "Action": [
                   "cloudwatch:PutMetricData"
                ],
                "Effect": "Allow",
                "Resource": "*"
           }
      ]
   }
   ```

------
**Tip**  
Untuk informasi selengkapnya tentang membuat pengguna IAM dan menambahkan kebijakan untuk CloudWatch, lihat [ CloudWatch dokumentasi](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/create-iam-roles-for-cloudwatch-agent.html).

1. Pada DLAMI Anda, [AWS jalankan](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-configure.html#cli-quick-configuration) configure dan tentukan kredenal pengguna IAM. 

   ```
   $ aws configure
   ```

1. Anda mungkin perlu membuat beberapa modifikasi pada utilitas gpumon sebelum menjalankannya. Anda dapat menemukan utilitas gpumon dan README di lokasi yang ditentukan dalam blok kode berikut. Untuk informasi selengkapnya tentang `gpumon.py` skrip, lihat [lokasi skrip Amazon S3.](https://s3.amazonaws.com/aws-bigdata-blog/artifacts/GPUMonitoring/gpumon.py)

   ```
   Folder: ~/tools/GPUCloudWatchMonitor
   Files: 	~/tools/GPUCloudWatchMonitor/gpumon.py
         	~/tools/GPUCloudWatchMonitor/README
   ```

   Opsi:
   + Ubah wilayah di gpumon.py jika instance Anda TIDAK ada di us-east-1.
   + Ubah parameter lain seperti CloudWatch `namespace` atau periode pelaporan dengan`store_reso`.

1. Saat ini skrip hanya mendukung Python 3. Aktifkan lingkungan Python 3 kerangka kerja pilihan Anda atau aktifkan lingkungan umum Python 3 DLAMI. 

   ```
   $ source activate python3
   ```

1. Jalankan utilitas gpumon di latar belakang.

   ```
   (python3)$ python gpumon.py &
   ```

1. Buka browser Anda ke metrik [https://console.aws.amazon.com/cloudwatch/](https://console.aws.amazon.com/cloudwatch/)lalu pilih. Ini akan memiliki namespace ''. DeepLearningTrain 
**Tip**  
Anda dapat mengubah namespace dengan memodifikasi gpumon.py. Anda juga dapat mengubah interval pelaporan dengan menyesuaikan`store_reso`. 

Berikut ini adalah contoh CloudWatch bagan pelaporan pada menjalankan gpumon.py memantau pekerjaan pelatihan pada instance p2.8xlarge. 

![\[Pemantauan GPU pada CloudWatch\]](http://docs.aws.amazon.com/id_id/dlami/latest/devguide/images/gpumon.png)


Anda mungkin tertarik dengan topik lain tentang pemantauan dan pengoptimalan GPU ini:
+ [Memantau](tutorial-gpu-monitoring.md)
  + [Monitor GPUs dengan CloudWatch](#tutorial-gpu-monitoring-gpumon)
+ [Pengoptimalan](tutorial-gpu-opt.md)
  + [Pemrosesan awal](tutorial-gpu-opt-preprocessing.md)
  + [Pelatihan](tutorial-gpu-opt-training.md)

# Pengoptimalan
<a name="tutorial-gpu-opt"></a>

Untuk memaksimalkan GPUs, Anda dapat mengoptimalkan pipeline data dan menyetel jaringan pembelajaran mendalam Anda. Seperti yang dijelaskan bagan berikut, implementasi naif atau dasar dari jaringan saraf mungkin menggunakan GPU secara tidak konsisten dan tidak secara maksimal. Saat Anda mengoptimalkan preprocessing dan pemuatan data, Anda dapat mengurangi hambatan dari CPU ke GPU Anda. Anda dapat menyesuaikan jaringan saraf itu sendiri, dengan menggunakan hibridisasi (bila didukung oleh kerangka kerja), menyesuaikan ukuran batch, dan menyinkronkan panggilan. Anda juga dapat menggunakan pelatihan presisi ganda (float16 atau int8) di sebagian besar kerangka kerja, yang dapat memiliki efek dramatis pada peningkatan throughput. 

Bagan berikut menunjukkan peningkatan kinerja kumulatif saat menerapkan pengoptimalan yang berbeda. Hasil Anda akan tergantung pada data yang Anda proses dan jaringan yang Anda optimalkan.

![\[Peningkatan kinerja untuk GPUs\]](http://docs.aws.amazon.com/id_id/dlami/latest/devguide/images/performance-enhancements.png)


Panduan berikut memperkenalkan opsi yang akan bekerja dengan DLAMI Anda dan membantu Anda meningkatkan kinerja GPU.

**Topics**
+ [

# Pemrosesan awal
](tutorial-gpu-opt-preprocessing.md)
+ [

# Pelatihan
](tutorial-gpu-opt-training.md)

# Pemrosesan awal
<a name="tutorial-gpu-opt-preprocessing"></a>

Preprocessing data melalui transformasi atau augmentasi seringkali dapat menjadi proses yang terikat CPU, dan ini bisa menjadi hambatan dalam keseluruhan pipeline Anda. Kerangka kerja memiliki operator bawaan untuk pemrosesan gambar, tetapi DALI (Data Augmentation Library) menunjukkan peningkatan kinerja dibandingkan opsi bawaan kerangka kerja.
+ Perpustakaan Augmentasi Data NVIDIA (DALI): DALI membongkar augmentasi data ke GPU. Ini tidak diinstal sebelumnya pada DLAMI, tetapi Anda dapat mengaksesnya dengan menginstalnya atau memuat wadah kerangka kerja yang didukung pada DLAMI Anda atau instans Amazon Elastic Compute Cloud lainnya. Lihat [halaman proyek DALI](https://docs.nvidia.com/deeplearning/sdk/dali-install-guide/index.html) di situs web NVIDIA untuk detailnya. Untuk contoh kasus penggunaan dan untuk mengunduh sampel kode, lihat contoh Kinerja [Pelatihan SageMaker Preprocessing](https://github.com/aws-samples/sagemaker-cv-preprocessing-training-performance).
+ NVJPEG: perpustakaan dekoder JPEG yang dipercepat GPU untuk pemrogram C. [Ini mendukung decoding gambar tunggal atau batch serta operasi transformasi berikutnya yang umum dalam pembelajaran mendalam. nvJPEG dilengkapi built-in dengan DALI, atau Anda dapat mengunduh dari halaman nvjpeg situs web NVIDIA dan menggunakannya secara terpisah.](https://developer.nvidia.com/nvjpeg)

Anda mungkin tertarik dengan topik lain tentang pemantauan dan pengoptimalan GPU ini:
+ [Memantau](tutorial-gpu-monitoring.md)
  + [Monitor GPUs dengan CloudWatch](tutorial-gpu-monitoring-gpumon.md)
+ [Pengoptimalan](tutorial-gpu-opt.md)
  + [Pemrosesan awal](#tutorial-gpu-opt-preprocessing)
  + [Pelatihan](tutorial-gpu-opt-training.md)

# Pelatihan
<a name="tutorial-gpu-opt-training"></a>

Dengan pelatihan presisi campuran, Anda dapat menggunakan jaringan yang lebih besar dengan jumlah memori yang sama, atau mengurangi penggunaan memori dibandingkan dengan jaringan presisi tunggal atau ganda Anda, dan Anda akan melihat peningkatan kinerja komputasi. Anda juga mendapatkan manfaat dari transfer data yang lebih kecil dan lebih cepat, faktor penting dalam pelatihan terdistribusi beberapa node. Untuk memanfaatkan pelatihan presisi campuran, Anda perlu menyesuaikan pengecoran data dan penskalaan kerugian. Berikut ini adalah panduan yang menjelaskan cara melakukan ini untuk kerangka kerja yang mendukung presisi campuran.
+ [NVIDIA Deep Learning SDK](https://docs.nvidia.com/deeplearning/sdk/mixed-precision-training/) - dokumen di situs web NVIDIA yang menjelaskan implementasi presisi campuran untuk,, dan. MXNet PyTorch TensorFlow

**Tip**  
Pastikan untuk memeriksa situs web untuk kerangka pilihan Anda, dan cari “presisi campuran” atau “fp16" untuk teknik pengoptimalan terbaru. Berikut adalah beberapa panduan presisi campuran yang mungkin berguna bagi Anda:  
[Pelatihan presisi campuran dengan TensorFlow (video)](https://devblogs.nvidia.com/mixed-precision-resnet-50-tensor-cores/) - di situs blog NVIDIA.
[Pelatihan presisi campuran menggunakan float16 dengan MXNet - artikel](https://mxnet.apache.org/api/faq/float16) FAQ di situs web. MXNet 
[NVIDIA Apex: alat untuk pelatihan presisi campuran yang mudah dengan PyTorch](https://devblogs.nvidia.com/apex-pytorch-easy-mixed-precision-training/) - artikel blog di situs web NVIDIA.

Anda mungkin tertarik dengan topik lain tentang pemantauan dan pengoptimalan GPU ini:
+ [Memantau](tutorial-gpu-monitoring.md)
  + [Monitor GPUs dengan CloudWatch](tutorial-gpu-monitoring-gpumon.md)
+ [Pengoptimalan](tutorial-gpu-opt.md)
  + [Pemrosesan awal](tutorial-gpu-opt-preprocessing.md)
  + [Pelatihan](#tutorial-gpu-opt-training)

# Chip AWS Inferentia Dengan DLAMI
<a name="tutorial-inferentia"></a>

AWS Inferentia adalah chip pembelajaran mesin khusus yang dirancang oleh AWS yang dapat Anda gunakan untuk prediksi inferensi kinerja tinggi. Untuk menggunakan chip, siapkan instans Amazon Elastic Compute Cloud dan gunakan kit pengembangan perangkat lunak AWS Neuron (SDK) untuk memanggil chip Inferentia. Untuk memberikan pengalaman Inferensia terbaik kepada pelanggan, Neuron telah dibangun ke dalam AWS Deep Learning AMIs (DLAMI). 

Topik berikut menunjukkan kepada Anda bagaimana memulai menggunakan Inferentia dengan DLAMI. 

**Topics**
+ [

# Meluncurkan Instance DLAMI dengan Neuron AWS
](tutorial-inferentia-launching.md)
+ [

# Menggunakan DLAMI dengan Neuron AWS
](tutorial-inferentia-using.md)

# Meluncurkan Instance DLAMI dengan Neuron AWS
<a name="tutorial-inferentia-launching"></a>

 DLAMI terbaru siap digunakan AWS dengan Inferentia dan dilengkapi dengan AWS paket Neuron API. Untuk meluncurkan instans DLAMI, [lihat Meluncurkan dan Mengonfigurasi](https://docs.aws.amazon.com/dlami/latest/devguide/launch-config.html) DLAMI. Setelah Anda memiliki DLAMI, gunakan langkah-langkah di sini untuk memastikan bahwa chip Inferentia AWS dan sumber daya Neuron AWS Anda aktif.

**Topics**
+ [

## Verifikasi Instance Anda
](#tutorial-inferentia-launching-verify)
+ [

## Mengidentifikasi Perangkat AWS Inferensia
](#tutorial-inferentia-launching-identify)
+ [

## Lihat Penggunaan Sumber Daya
](#tutorial-inferentia-launching-resource-usage)
+ [

## Menggunakan Neuron Monitor (neuron-monitor)
](#tutorial-inferentia-launching-neuron-monitor)
+ [

## Meningkatkan Perangkat Lunak Neuron
](#tutorial-inferentia-launching-upgrade)

## Verifikasi Instance Anda
<a name="tutorial-inferentia-launching-verify"></a>

 Sebelum menggunakan instance Anda, verifikasi bahwa itu diatur dan dikonfigurasi dengan benar dengan Neuron. 

## Mengidentifikasi Perangkat AWS Inferensia
<a name="tutorial-inferentia-launching-identify"></a>

 Untuk mengidentifikasi jumlah perangkat Inferentia pada instans Anda, gunakan perintah berikut: 

```
neuron-ls
```

 Jika instans Anda memiliki perangkat Inferentia yang terpasang padanya, output Anda akan terlihat mirip dengan yang berikut ini: 

```
+--------+--------+--------+-----------+--------------+
| NEURON | NEURON | NEURON | CONNECTED |     PCI      |
| DEVICE | CORES  | MEMORY |  DEVICES  |     BDF      |
+--------+--------+--------+-----------+--------------+
| 0      | 4      | 8 GB   | 1         | 0000:00:1c.0 |
| 1      | 4      | 8 GB   | 2, 0      | 0000:00:1d.0 |
| 2      | 4      | 8 GB   | 3, 1      | 0000:00:1e.0 |
| 3      | 4      | 8 GB   | 2         | 0000:00:1f.0 |
+--------+--------+--------+-----------+--------------+
```

 Output yang disediakan diambil dari instance INF1.6xLarge dan menyertakan kolom berikut:
+ PERANGKAT NEURON: ID logis yang ditetapkan ke NeuronDevice. ID ini digunakan saat mengonfigurasi beberapa runtime untuk menggunakan yang berbeda. NeuronDevices
+ NEURON CORES: Jumlah NeuronCores hadir di NeuronDevice. 
+ MEMORI NEURON: Jumlah memori DRAM di. NeuronDevice
+ PERANGKAT YANG TERHUBUNG: Lainnya NeuronDevices terhubung ke NeuronDevice. 
+ PCI BDF: ID Fungsi Perangkat Bus PCI (BDF) dari file. NeuronDevice

## Lihat Penggunaan Sumber Daya
<a name="tutorial-inferentia-launching-resource-usage"></a>

 Lihat informasi yang berguna tentang NeuronCore dan pemanfaatan vCPU, penggunaan memori, model yang dimuat, dan aplikasi Neuron dengan perintah. `neuron-top` `neuron-top`Peluncuran tanpa argumen akan menampilkan data untuk semua aplikasi pembelajaran mesin yang memanfaatkan NeuronCores. 

```
neuron-top
```

 Ketika aplikasi menggunakan empat NeuronCores, output akan terlihat mirip dengan gambar berikut: 

![\[Output dari neuron-top perintah, dengan informasi untuk salah satu dari empat yang NeuronCores disorot.\]](http://docs.aws.amazon.com/id_id/dlami/latest/devguide/images/neuron-top-output.png)


[Untuk informasi lebih lanjut tentang sumber daya untuk memantau dan mengoptimalkan aplikasi inferensi berbasis Neuron, lihat Alat Neuron.](https://awsdocs-neuron.readthedocs-hosted.com/en/latest/neuron-guide/neuron-tools/index.html)

## Menggunakan Neuron Monitor (neuron-monitor)
<a name="tutorial-inferentia-launching-neuron-monitor"></a>

Neuron Monitor mengumpulkan metrik dari runtime Neuron yang berjalan di sistem dan mengalirkan data yang dikumpulkan ke stdout dalam format JSON. Metrik ini diatur ke dalam grup metrik yang Anda konfigurasikan dengan menyediakan file konfigurasi. Untuk informasi lebih lanjut tentang Monitor Neuron, lihat [Panduan Pengguna untuk Monitor Neuron](https://awsdocs-neuron.readthedocs-hosted.com/en/latest/neuron-guide/neuron-tools/neuron-monitor-user-guide.html).

## Meningkatkan Perangkat Lunak Neuron
<a name="tutorial-inferentia-launching-upgrade"></a>

[Untuk informasi tentang cara memperbarui perangkat lunak Neuron SDK dalam DLAMI, lihat AWS Panduan Pengaturan Neuron.](https://awsdocs-neuron.readthedocs-hosted.com/en/latest/neuron-intro/neuron-install-guide.html)

**Langkah Selanjutnya**  
[Menggunakan DLAMI dengan Neuron AWS](tutorial-inferentia-using.md)

# Menggunakan DLAMI dengan Neuron AWS
<a name="tutorial-inferentia-using"></a>

 Alur kerja khas dengan AWS Neuron SDK adalah mengkompilasi model pembelajaran mesin yang dilatih sebelumnya di server kompilasi. Setelah ini, distribusikan artefak ke instance Inf1 untuk dieksekusi. AWS Deep Learning AMIs (DLAMI) sudah diinstal sebelumnya dengan semua yang Anda butuhkan untuk mengkompilasi dan menjalankan inferensi dalam instance Inf1 yang menggunakan Inferentia. 

 Bagian berikut menjelaskan cara menggunakan DLAMI dengan Inferentia. 

**Topics**
+ [

# Menggunakan TensorFlow -Neuron dan Kompiler AWS Neuron
](tutorial-inferentia-tf-neuron.md)
+ [

# Menggunakan TensorFlow Penyajian AWS Neuron
](tutorial-inferentia-tf-neuron-serving.md)
+ [

# Menggunakan MXNet -Neuron dan Kompiler AWS Neuron
](tutorial-inferentia-mxnet-neuron.md)
+ [

# Menggunakan Penyajian Model MXNet -Neuron
](tutorial-inferentia-mxnet-neuron-serving.md)
+ [

# Menggunakan PyTorch -Neuron dan Kompiler AWS Neuron
](tutorial-inferentia-pytorch-neuron.md)

# Menggunakan TensorFlow -Neuron dan Kompiler AWS Neuron
<a name="tutorial-inferentia-tf-neuron"></a>

 Tutorial ini menunjukkan cara menggunakan kompiler AWS Neuron untuk mengkompilasi model Keras ResNet -50 dan mengekspornya sebagai model yang disimpan dalam format. SavedModel Format ini adalah format TensorFlow model yang dapat dipertukarkan khas. Anda juga belajar cara menjalankan inferensi pada instance Inf1 dengan input contoh.  

 Untuk informasi lebih lanjut tentang Neuron SDK, lihat dokumentasi [AWS Neuron SDK](https://awsdocs-neuron.readthedocs-hosted.com/en/latest/neuron-guide/neuron-frameworks/tensorflow-neuron/index.html). 

**Topics**
+ [

## Prasyarat
](#tutorial-inferentia-tf-neuron-prerequisites)
+ [

## Aktifkan lingkungan Conda
](#tutorial-inferentia-tf-neuron-activate)
+ [

## Resnet50 Kompilasi
](#tutorial-inferentia-tf-neuron-compilation)
+ [

## ResNet50 Inferensi
](#tutorial-inferentia-tf-neuron-inference)

## Prasyarat
<a name="tutorial-inferentia-tf-neuron-prerequisites"></a>

 Sebelum menggunakan tutorial ini, Anda seharusnya telah menyelesaikan langkah-langkah pengaturan di[Meluncurkan Instance DLAMI dengan Neuron AWS](tutorial-inferentia-launching.md). Anda juga harus memiliki keakraban dengan pembelajaran mendalam dan menggunakan DLAMI. 

## Aktifkan lingkungan Conda
<a name="tutorial-inferentia-tf-neuron-activate"></a>

 Aktifkan lingkungan conda TensorFlow -Neuron menggunakan perintah berikut: 

```
source activate aws_neuron_tensorflow_p36
```

 Untuk keluar dari lingkungan conda saat ini, jalankan perintah berikut: 

```
source deactivate
```

## Resnet50 Kompilasi
<a name="tutorial-inferentia-tf-neuron-compilation"></a>

Buat skrip Python yang disebut **tensorflow\$1compile\$1resnet50.py** yang memiliki konten berikut. Skrip Python ini mengkompilasi model Keras ResNet 50 dan mengekspornya sebagai model yang disimpan. 

```
import os
import time
import shutil
import tensorflow as tf
import tensorflow.neuron as tfn
import tensorflow.compat.v1.keras as keras
from tensorflow.keras.applications.resnet50 import ResNet50
from tensorflow.keras.applications.resnet50 import preprocess_input

# Create a workspace
WORKSPACE = './ws_resnet50'
os.makedirs(WORKSPACE, exist_ok=True)

# Prepare export directory (old one removed)
model_dir = os.path.join(WORKSPACE, 'resnet50')
compiled_model_dir = os.path.join(WORKSPACE, 'resnet50_neuron')
shutil.rmtree(model_dir, ignore_errors=True)
shutil.rmtree(compiled_model_dir, ignore_errors=True)

# Instantiate Keras ResNet50 model
keras.backend.set_learning_phase(0)
model = ResNet50(weights='imagenet')

# Export SavedModel
tf.saved_model.simple_save(
 session            = keras.backend.get_session(),
 export_dir         = model_dir,
 inputs             = {'input': model.inputs[0]},
 outputs            = {'output': model.outputs[0]})

# Compile using Neuron
tfn.saved_model.compile(model_dir, compiled_model_dir)

# Prepare SavedModel for uploading to Inf1 instance
shutil.make_archive(compiled_model_dir, 'zip', WORKSPACE, 'resnet50_neuron')
```

 Kompilasi model menggunakan perintah berikut: 

```
python tensorflow_compile_resnet50.py
```

Proses kompilasi akan memakan waktu beberapa menit. Ketika selesai, output Anda akan terlihat seperti berikut: 

```
...
INFO:tensorflow:fusing subgraph neuron_op_d6f098c01c780733 with neuron-cc
INFO:tensorflow:Number of operations in TensorFlow session: 4638
INFO:tensorflow:Number of operations after tf.neuron optimizations: 556
INFO:tensorflow:Number of operations placed on Neuron runtime: 554
INFO:tensorflow:Successfully converted ./ws_resnet50/resnet50 to ./ws_resnet50/resnet50_neuron
...
```

 ​ 

 Setelah kompilasi, model yang disimpan di-zip di**ws\$1resnet50/resnet50\$1neuron.zip**. Buka zip model dan unduh gambar sampel untuk inferensi menggunakan perintah berikut: 

```
unzip ws_resnet50/resnet50_neuron.zip -d .
curl -O https://raw.githubusercontent.com/awslabs/mxnet-model-server/master/docs/images/kitten_small.jpg
```

## ResNet50 Inferensi
<a name="tutorial-inferentia-tf-neuron-inference"></a>

Buat skrip Python yang disebut **tensorflow\$1infer\$1resnet50.py** yang memiliki konten berikut. Skrip ini menjalankan inferensi pada model yang diunduh menggunakan model inferensi yang dikompilasi sebelumnya. 

```
import os
import numpy as np
import tensorflow as tf
from tensorflow.keras.preprocessing import image
from tensorflow.keras.applications import resnet50

# Create input from image
img_sgl = image.load_img('kitten_small.jpg', target_size=(224, 224))
img_arr = image.img_to_array(img_sgl)
img_arr2 = np.expand_dims(img_arr, axis=0)
img_arr3 = resnet50.preprocess_input(img_arr2)
# Load model
COMPILED_MODEL_DIR = './ws_resnet50/resnet50_neuron/'
predictor_inferentia = tf.contrib.predictor.from_saved_model(COMPILED_MODEL_DIR)
# Run inference
model_feed_dict={'input': img_arr3}
infa_rslts = predictor_inferentia(model_feed_dict);
# Display results
print(resnet50.decode_predictions(infa_rslts["output"], top=5)[0])
```

 Jalankan inferensi pada model menggunakan perintah berikut: 

```
python tensorflow_infer_resnet50.py
```

 Output Anda akan terlihat seperti berikut: 

```
...
[('n02123045', 'tabby', 0.6918919), ('n02127052', 'lynx', 0.12770271), ('n02123159', 'tiger_cat', 0.08277027), ('n02124075', 'Egyptian_cat', 0.06418919), ('n02128757', 'snow_leopard', 0.009290541)]
```

**Langkah Selanjutnya**  
[Menggunakan TensorFlow Penyajian AWS Neuron](tutorial-inferentia-tf-neuron-serving.md)

# Menggunakan TensorFlow Penyajian AWS Neuron
<a name="tutorial-inferentia-tf-neuron-serving"></a>

Tutorial ini menunjukkan cara membuat grafik dan menambahkan langkah kompilasi AWS Neuron sebelum mengekspor model yang disimpan untuk digunakan dengan TensorFlow Serving. TensorFlow Melayani adalah sistem penyajian yang memungkinkan Anda meningkatkan inferensi di seluruh jaringan. Neuron TensorFlow Serving menggunakan API yang sama dengan TensorFlow Serving normal. Satu-satunya perbedaan adalah bahwa model yang disimpan harus dikompilasi untuk AWS Inferentia dan titik masuknya adalah biner yang berbeda bernama`tensorflow_model_server_neuron`. Biner ditemukan di `/usr/local/bin/tensorflow_model_server_neuron` dan sudah diinstal sebelumnya di DLAMI. 

 Untuk informasi lebih lanjut tentang Neuron SDK, lihat dokumentasi [AWS Neuron SDK](https://awsdocs-neuron.readthedocs-hosted.com/en/latest/neuron-guide/neuron-frameworks/tensorflow-neuron/index.html). 

**Topics**
+ [

## Prasyarat
](#tutorial-inferentia-tf-neuron--serving-prerequisites)
+ [

## Aktifkan lingkungan Conda
](#tutorial-inferentia-tf-neuron-serving-activate)
+ [

## Kompilasi dan Ekspor Model Tersimpan
](#tutorial-inferentia-tf-neuron-serving-compile)
+ [

## Melayani Model Tersimpan
](#tutorial-inferentia-tf-neuron-serving-serving)
+ [

## Hasilkan permintaan inferensi ke server model
](#tutorial-inferentia-tf-neuron-serving-inference)

## Prasyarat
<a name="tutorial-inferentia-tf-neuron--serving-prerequisites"></a>

Sebelum menggunakan tutorial ini, Anda seharusnya telah menyelesaikan langkah-langkah pengaturan di[Meluncurkan Instance DLAMI dengan Neuron AWS](tutorial-inferentia-launching.md). Anda juga harus memiliki keakraban dengan pembelajaran mendalam dan menggunakan DLAMI. 

## Aktifkan lingkungan Conda
<a name="tutorial-inferentia-tf-neuron-serving-activate"></a>

 Aktifkan lingkungan conda TensorFlow -Neuron menggunakan perintah berikut: 

```
source activate aws_neuron_tensorflow_p36
```

 Jika Anda perlu keluar dari lingkungan conda saat ini, jalankan: 

```
source deactivate
```

## Kompilasi dan Ekspor Model Tersimpan
<a name="tutorial-inferentia-tf-neuron-serving-compile"></a>

Buat skrip Python yang disebut `tensorflow-model-server-compile.py` dengan konten berikut. Skrip ini membuat grafik dan mengkompilasinya menggunakan Neuron. Kemudian mengekspor grafik yang dikompilasi sebagai model yang disimpan.  

```
import tensorflow as tf
import tensorflow.neuron
import os

tf.keras.backend.set_learning_phase(0)
model = tf.keras.applications.ResNet50(weights='imagenet')
sess = tf.keras.backend.get_session()
inputs = {'input': model.inputs[0]}
outputs = {'output': model.outputs[0]}

# save the model using tf.saved_model.simple_save
modeldir = "./resnet50/1"
tf.saved_model.simple_save(sess, modeldir, inputs, outputs)

# compile the model for Inferentia
neuron_modeldir = os.path.join(os.path.expanduser('~'), 'resnet50_inf1', '1')
tf.neuron.saved_model.compile(modeldir, neuron_modeldir, batch_size=1)
```

 Kompilasi model menggunakan perintah berikut: 

```
python tensorflow-model-server-compile.py
```

 Output Anda akan terlihat seperti berikut: 

```
...
INFO:tensorflow:fusing subgraph neuron_op_d6f098c01c780733 with neuron-cc
INFO:tensorflow:Number of operations in TensorFlow session: 4638
INFO:tensorflow:Number of operations after tf.neuron optimizations: 556
INFO:tensorflow:Number of operations placed on Neuron runtime: 554
INFO:tensorflow:Successfully converted ./resnet50/1 to /home/ubuntu/resnet50_inf1/1
```

## Melayani Model Tersimpan
<a name="tutorial-inferentia-tf-neuron-serving-serving"></a>

Setelah model dikompilasi, Anda dapat menggunakan perintah berikut untuk menyajikan model yang disimpan dengan biner tensorflow\$1model\$1server\$1neuron: 

```
tensorflow_model_server_neuron --model_name=resnet50_inf1 \
    --model_base_path=$HOME/resnet50_inf1/ --port=8500 &
```

 Output Anda akan terlihat seperti berikut ini. Model yang dikompilasi dipentaskan di DRAM perangkat Inferentia oleh server untuk mempersiapkan inferensi. 

```
...
2019-11-22 01:20:32.075856: I external/org_tensorflow/tensorflow/cc/saved_model/loader.cc:311] SavedModel load for tags { serve }; Status: success. Took 40764 microseconds.
2019-11-22 01:20:32.075888: I tensorflow_serving/servables/tensorflow/saved_model_warmup.cc:105] No warmup data file found at /home/ubuntu/resnet50_inf1/1/assets.extra/tf_serving_warmup_requests
2019-11-22 01:20:32.075950: I tensorflow_serving/core/loader_harness.cc:87] Successfully loaded servable version {name: resnet50_inf1 version: 1}
2019-11-22 01:20:32.077859: I tensorflow_serving/model_servers/server.cc:353] Running gRPC ModelServer at 0.0.0.0:8500 ...
```

## Hasilkan permintaan inferensi ke server model
<a name="tutorial-inferentia-tf-neuron-serving-inference"></a>

Membuat skrip Python yang disebut `tensorflow-model-server-infer.py` dengan konten berikut. Skrip ini menjalankan inferensi melalui gRPC, yang merupakan kerangka kerja layanan. 

```
import numpy as np
import grpc
import tensorflow as tf
from tensorflow.keras.preprocessing import image
from tensorflow.keras.applications.resnet50 import preprocess_input
from tensorflow_serving.apis import predict_pb2
from tensorflow_serving.apis import prediction_service_pb2_grpc
from tensorflow.keras.applications.resnet50 import decode_predictions

if __name__ == '__main__':
    channel = grpc.insecure_channel('localhost:8500')
    stub = prediction_service_pb2_grpc.PredictionServiceStub(channel)
    img_file = tf.keras.utils.get_file(
        "./kitten_small.jpg",
        "https://raw.githubusercontent.com/awslabs/mxnet-model-server/master/docs/images/kitten_small.jpg")
    img = image.load_img(img_file, target_size=(224, 224))
    img_array = preprocess_input(image.img_to_array(img)[None, ...])
    request = predict_pb2.PredictRequest()
    request.model_spec.name = 'resnet50_inf1'
    request.inputs['input'].CopyFrom(
        tf.contrib.util.make_tensor_proto(img_array, shape=img_array.shape))
    result = stub.Predict(request)
    prediction = tf.make_ndarray(result.outputs['output'])
    print(decode_predictions(prediction))
```

 Jalankan inferensi pada model dengan menggunakan gRPC dengan perintah berikut: 

```
python tensorflow-model-server-infer.py
```

 Output Anda akan terlihat seperti berikut: 

```
[[('n02123045', 'tabby', 0.6918919), ('n02127052', 'lynx', 0.12770271), ('n02123159', 'tiger_cat', 0.08277027), ('n02124075', 'Egyptian_cat', 0.06418919), ('n02128757', 'snow_leopard', 0.009290541)]]
```

# Menggunakan MXNet -Neuron dan Kompiler AWS Neuron
<a name="tutorial-inferentia-mxnet-neuron"></a>

API kompilasi MXNet -Neuron menyediakan metode untuk mengkompilasi grafik model yang dapat Anda jalankan pada perangkat AWS Inferentia. 

 Dalam contoh ini, Anda menggunakan API untuk mengkompilasi model ResNet -50 dan menggunakannya untuk menjalankan inferensi. 

 Untuk informasi lebih lanjut tentang Neuron SDK, lihat dokumentasi [AWS Neuron SDK](https://awsdocs-neuron.readthedocs-hosted.com/en/latest/neuron-guide/neuron-frameworks/mxnet-neuron/index.html). 

**Topics**
+ [

## Prasyarat
](#tutorial-inferentia-mxnet-neuron-prerequisites)
+ [

## Aktifkan Lingkungan Conda
](#tutorial-inferentia-mxnet-neuron-activate)
+ [

## Resnet50 Kompilasi
](#tutorial-inferentia-mxnet-neuron-compilation)
+ [

## ResNet50 Inferensi
](#tutorial-inferentia-mxnet-neuron-inference)

## Prasyarat
<a name="tutorial-inferentia-mxnet-neuron-prerequisites"></a>

 Sebelum menggunakan tutorial ini, Anda seharusnya telah menyelesaikan langkah-langkah pengaturan di[Meluncurkan Instance DLAMI dengan Neuron AWS](tutorial-inferentia-launching.md). Anda juga harus memiliki keakraban dengan pembelajaran mendalam dan menggunakan DLAMI. 

## Aktifkan Lingkungan Conda
<a name="tutorial-inferentia-mxnet-neuron-activate"></a>

 Aktifkan lingkungan conda MXNet -Neuron menggunakan perintah berikut: 

```
source activate aws_neuron_mxnet_p36
```

Untuk keluar dari lingkungan conda saat ini, jalankan: 

```
source deactivate
```

## Resnet50 Kompilasi
<a name="tutorial-inferentia-mxnet-neuron-compilation"></a>

Membuat skrip Python yang disebut **mxnet\$1compile\$1resnet50.py** dengan konten berikut. Skrip ini menggunakan kompilasi MXNet -Neuron Python API untuk mengkompilasi ResNet model -50. 

```
import mxnet as mx
import numpy as np

print("downloading...")
path='http://data.mxnet.io/models/imagenet/'
mx.test_utils.download(path+'resnet/50-layers/resnet-50-0000.params')
mx.test_utils.download(path+'resnet/50-layers/resnet-50-symbol.json')
print("download finished.")

sym, args, aux = mx.model.load_checkpoint('resnet-50', 0)

print("compile for inferentia using neuron... this will take a few minutes...")
inputs = { "data" : mx.nd.ones([1,3,224,224], name='data', dtype='float32') }

sym, args, aux = mx.contrib.neuron.compile(sym, args, aux, inputs)

print("save compiled model...")
mx.model.save_checkpoint("compiled_resnet50", 0, sym, args, aux)
```

 Kompilasi model menggunakan perintah berikut: 

```
python mxnet_compile_resnet50.py
```

 Kompilasi akan memakan waktu beberapa menit. Ketika kompilasi telah selesai, file-file berikut akan berada di direktori Anda saat ini: 

```
resnet-50-0000.params
resnet-50-symbol.json
compiled_resnet50-0000.params
compiled_resnet50-symbol.json
```

## ResNet50 Inferensi
<a name="tutorial-inferentia-mxnet-neuron-inference"></a>

Membuat skrip Python yang disebut **mxnet\$1infer\$1resnet50.py** dengan konten berikut. Skrip ini mengunduh gambar sampel dan menggunakannya untuk menjalankan inferensi dengan model yang dikompilasi. 

```
import mxnet as mx
import numpy as np

path='http://data.mxnet.io/models/imagenet/'
mx.test_utils.download(path+'synset.txt')

fname = mx.test_utils.download('https://raw.githubusercontent.com/awslabs/mxnet-model-server/master/docs/images/kitten_small.jpg')
img = mx.image.imread(fname)

# convert into format (batch, RGB, width, height)
img = mx.image.imresize(img, 224, 224) 
# resize
img = img.transpose((2, 0, 1)) 
# Channel first
img = img.expand_dims(axis=0) 
# batchify
img = img.astype(dtype='float32')

sym, args, aux = mx.model.load_checkpoint('compiled_resnet50', 0)
softmax = mx.nd.random_normal(shape=(1,))
args['softmax_label'] = softmax
args['data'] = img
# Inferentia context
ctx = mx.neuron()

exe = sym.bind(ctx=ctx, args=args, aux_states=aux, grad_req='null')
with open('synset.txt', 'r') as f:
    labels = [l.rstrip() for l in f]

exe.forward(data=img)
prob = exe.outputs[0].asnumpy()
# print the top-5
prob = np.squeeze(prob)
a = np.argsort(prob)[::-1] 
for i in a[0:5]:
    print('probability=%f, class=%s' %(prob[i], labels[i]))
```

 Jalankan inferensi dengan model yang dikompilasi menggunakan perintah berikut: 

```
python mxnet_infer_resnet50.py
```

 Output Anda akan terlihat seperti berikut: 

```
probability=0.642454, class=n02123045 tabby, tabby cat
probability=0.189407, class=n02123159 tiger cat
probability=0.100798, class=n02124075 Egyptian cat
probability=0.030649, class=n02127052 lynx, catamount
probability=0.016278, class=n02129604 tiger, Panthera tigris
```

**Langkah Selanjutnya**  
[Menggunakan Penyajian Model MXNet -Neuron](tutorial-inferentia-mxnet-neuron-serving.md)

# Menggunakan Penyajian Model MXNet -Neuron
<a name="tutorial-inferentia-mxnet-neuron-serving"></a>

Dalam tutorial ini, Anda belajar menggunakan MXNet model pra-terlatih untuk melakukan klasifikasi gambar real-time dengan Multi Model Server (MMS). MMS adalah easy-to-use alat yang fleksibel dan untuk melayani model pembelajaran mendalam yang dilatih menggunakan pembelajaran mesin atau kerangka pembelajaran mendalam. Tutorial ini mencakup langkah kompilasi menggunakan AWS Neuron dan implementasi MMS menggunakan MXNet.

 Untuk informasi lebih lanjut tentang Neuron SDK, lihat dokumentasi [AWS Neuron SDK](https://awsdocs-neuron.readthedocs-hosted.com/en/latest/neuron-guide/neuron-frameworks/mxnet-neuron/index.html). 

**Topics**
+ [

## Prasyarat
](#tutorial-inferentia-mxnet-neuron-serving-prerequisites)
+ [

## Aktifkan Lingkungan Conda
](#tutorial-inferentia-mxnet-neuron-serving-activate)
+ [

## Unduh Kode Contoh
](#tutorial-inferentia-mxnet-neuron-serving-download)
+ [

## Kompilasi Model
](#tutorial-inferentia-mxnet-neuron-serving-compile)
+ [

## Jalankan Inferensi
](#tutorial-inferentia-mxnet-neuron-serving-inference)

## Prasyarat
<a name="tutorial-inferentia-mxnet-neuron-serving-prerequisites"></a>

 Sebelum menggunakan tutorial ini, Anda seharusnya telah menyelesaikan langkah-langkah pengaturan di[Meluncurkan Instance DLAMI dengan Neuron AWS](tutorial-inferentia-launching.md). Anda juga harus memiliki keakraban dengan pembelajaran mendalam dan menggunakan DLAMI. 

## Aktifkan Lingkungan Conda
<a name="tutorial-inferentia-mxnet-neuron-serving-activate"></a>

 Aktifkan lingkungan conda MXNet -Neuron dengan menggunakan perintah berikut: 

```
source activate aws_neuron_mxnet_p36
```

 Untuk keluar dari lingkungan conda saat ini, jalankan: 

```
source deactivate
```

## Unduh Kode Contoh
<a name="tutorial-inferentia-mxnet-neuron-serving-download"></a>

 Untuk menjalankan contoh ini, unduh kode contoh menggunakan perintah berikut: 

```
git clone https://github.com/awslabs/multi-model-server
cd multi-model-server/examples/mxnet_vision
```

## Kompilasi Model
<a name="tutorial-inferentia-mxnet-neuron-serving-compile"></a>

Membuat skrip Python yang disebut `multi-model-server-compile.py` dengan konten berikut. Skrip ini mengkompilasi model ResNet 50 ke target perangkat Inferentia. 

```
import mxnet as mx
from mxnet.contrib import neuron
import numpy as np

path='http://data.mxnet.io/models/imagenet/'
mx.test_utils.download(path+'resnet/50-layers/resnet-50-0000.params')
mx.test_utils.download(path+'resnet/50-layers/resnet-50-symbol.json')
mx.test_utils.download(path+'synset.txt')

nn_name = "resnet-50"

#Load a model
sym, args, auxs = mx.model.load_checkpoint(nn_name, 0)

#Define compilation parameters#  - input shape and dtype
inputs = {'data' : mx.nd.zeros([1,3,224,224], dtype='float32') }

# compile graph to inferentia target
csym, cargs, cauxs = neuron.compile(sym, args, auxs, inputs)

# save compiled model
mx.model.save_checkpoint(nn_name + "_compiled", 0, csym, cargs, cauxs)
```

 Untuk mengkompilasi model, gunakan perintah berikut: 

```
python multi-model-server-compile.py
```

 Output Anda akan terlihat seperti berikut: 

```
...
[21:18:40] src/nnvm/legacy_json_util.cc:209: Loading symbol saved by previous version v0.8.0. Attempting to upgrade...
[21:18:40] src/nnvm/legacy_json_util.cc:217: Symbol successfully upgraded!
[21:19:00] src/operator/subgraph/build_subgraph.cc:698: start to execute partition graph.
[21:19:00] src/nnvm/legacy_json_util.cc:209: Loading symbol saved by previous version v0.8.0. Attempting to upgrade...
[21:19:00] src/nnvm/legacy_json_util.cc:217: Symbol successfully upgraded!
```

 Buat file bernama `signature.json` dengan konten berikut untuk mengkonfigurasi nama input dan bentuk: 

```
{
  "inputs": [
    {
      "data_name": "data",
      "data_shape": [
        1,
        3,
        224,
        224
      ]
    }
  ]
}
```

Download `synset.txt` file dengan menggunakan perintah berikut. File ini adalah daftar nama untuk kelas ImageNet prediksi. 

```
curl -O https://s3.amazonaws.com/model-server/model_archive_1.0/examples/squeezenet_v1.1/synset.txt
```

Buat kelas layanan kustom mengikuti template di `model_server_template` folder. Salin template ke direktori kerja Anda saat ini dengan menggunakan perintah berikut: 

```
cp -r ../model_service_template/* .
```

 Edit `mxnet_model_service.py` modul untuk mengganti `mx.cpu()` konteks dengan `mx.neuron()` konteks sebagai berikut. Anda juga perlu mengomentari salinan data yang tidak perlu `model_input` karena MXNet -Neuron tidak mendukung NDArray dan APIs Gluon. 

```
...
self.mxnet_ctx = mx.neuron() if gpu_id is None else mx.gpu(gpu_id)
...
#model_input = [item.as_in_context(self.mxnet_ctx) for item in model_input]
```

 Package model dengan model-archiver menggunakan perintah berikut: 

```
cd ~/multi-model-server/examples
model-archiver --force --model-name resnet-50_compiled --model-path mxnet_vision --handler mxnet_vision_service:handle
```

## Jalankan Inferensi
<a name="tutorial-inferentia-mxnet-neuron-serving-inference"></a>

Mulai Multi Model Server dan muat model yang menggunakan RESTful API dengan menggunakan perintah berikut. Pastikan **neuron-rtd** itu berjalan dengan pengaturan default. 

```
cd ~/multi-model-server/
multi-model-server --start --model-store examples > /dev/null # Pipe to log file if you want to keep a log of MMS
curl -v -X POST "http://localhost:8081/models?initial_workers=1&max_workers=4&synchronous=true&url=resnet-50_compiled.mar"
sleep 10 # allow sufficient time to load model
```

 Jalankan inferensi menggunakan contoh gambar dengan perintah berikut: 

```
curl -O https://raw.githubusercontent.com/awslabs/multi-model-server/master/docs/images/kitten_small.jpg
curl -X POST http://127.0.0.1:8080/predictions/resnet-50_compiled -T kitten_small.jpg
```

 Output Anda akan terlihat seperti berikut: 

```
[
  {
    "probability": 0.6388034820556641,
    "class": "n02123045 tabby, tabby cat"
  },
  {
    "probability": 0.16900072991847992,
    "class": "n02123159 tiger cat"
  },
  {
    "probability": 0.12221276015043259,
    "class": "n02124075 Egyptian cat"
  },
  {
    "probability": 0.028706775978207588,
    "class": "n02127052 lynx, catamount"
  },
  {
    "probability": 0.01915954425930977,
    "class": "n02129604 tiger, Panthera tigris"
  }
]
```

 Untuk membersihkan setelah pengujian, keluarkan perintah delete melalui RESTful API dan hentikan server model menggunakan perintah berikut: 

```
curl -X DELETE http://127.0.0.1:8081/models/resnet-50_compiled

multi-model-server --stop
```

 Anda akan melihat output berikut: 

```
{
  "status": "Model \"resnet-50_compiled\" unregistered"
}
Model server stopped.
Found 1 models and 1 NCGs.
Unloading 10001 (MODEL_STATUS_STARTED) :: success
Destroying NCG 1 :: success
```

# Menggunakan PyTorch -Neuron dan Kompiler AWS Neuron
<a name="tutorial-inferentia-pytorch-neuron"></a>

API kompilasi PyTorch -Neuron menyediakan metode untuk mengkompilasi grafik model yang dapat Anda jalankan pada perangkat AWS Inferentia. 

Model terlatih harus dikompilasi ke target Inferentia sebelum dapat digunakan pada instance Inf1. Tutorial berikut mengkompilasi model torchvision ResNet 50 dan mengekspornya sebagai modul yang disimpan. TorchScript Model ini kemudian digunakan untuk menjalankan inferensi.

Untuk kenyamanan, tutorial ini menggunakan instance Inf1 untuk kompilasi dan inferensi. Dalam praktiknya, Anda dapat mengkompilasi model Anda menggunakan tipe instance lain, seperti keluarga instance c5. Anda kemudian harus menerapkan model yang dikompilasi ke server inferensi Inf1. Untuk informasi lebih lanjut, lihat [Dokumentasi AWS Neuron PyTorch SDK](https://awsdocs-neuron.readthedocs-hosted.com/en/latest/neuron-guide/neuron-frameworks/pytorch-neuron/index.html).

**Topics**
+ [

## Prasyarat
](#tutorial-inferentia-pytorch-neuron-prerequisites)
+ [

## Aktifkan Lingkungan Conda
](#tutorial-inferentia-pytorch-neuron-activate)
+ [

## Resnet50 Kompilasi
](#tutorial-inferentia-pytorch-neuron-compilation)
+ [

## ResNet50 Inferensi
](#tutorial-inferentia-pytorch-neuron-inference)

## Prasyarat
<a name="tutorial-inferentia-pytorch-neuron-prerequisites"></a>

Sebelum menggunakan tutorial ini, Anda seharusnya telah menyelesaikan langkah-langkah pengaturan di[Meluncurkan Instance DLAMI dengan Neuron AWS](tutorial-inferentia-launching.md). Anda juga harus memiliki keakraban dengan pembelajaran mendalam dan menggunakan DLAMI. 

## Aktifkan Lingkungan Conda
<a name="tutorial-inferentia-pytorch-neuron-activate"></a>

Aktifkan lingkungan conda PyTorch -Neuron menggunakan perintah berikut: 

```
source activate aws_neuron_pytorch_p36
```

Untuk keluar dari lingkungan conda saat ini, jalankan: 

```
source deactivate
```

## Resnet50 Kompilasi
<a name="tutorial-inferentia-pytorch-neuron-compilation"></a>

Membuat skrip Python yang disebut **pytorch\$1trace\$1resnet50.py** dengan konten berikut. Skrip ini menggunakan kompilasi PyTorch -Neuron Python API untuk mengkompilasi ResNet model -50. 

**catatan**  
Ada ketergantungan antara versi torchvision dan paket obor yang harus Anda ketahui saat mengkompilasi model torchvision. Aturan ketergantungan ini dapat dikelola melalui pip. Torchvision==0.6.1 cocok dengan rilis torch==1.5.1, sedangkan torchvision==0.8.2 cocok dengan rilis torch==1.7.1.

```
import torch
import numpy as np
import os
import torch_neuron
from torchvision import models

image = torch.zeros([1, 3, 224, 224], dtype=torch.float32)

## Load a pretrained ResNet50 model
model = models.resnet50(pretrained=True)

## Tell the model we are using it for evaluation (not training)
model.eval()
model_neuron = torch.neuron.trace(model, example_inputs=[image])

## Export to saved model
model_neuron.save("resnet50_neuron.pt")
```

Jalankan skrip kompilasi.

```
python pytorch_trace_resnet50.py
```

Kompilasi akan memakan waktu beberapa menit. Ketika kompilasi telah selesai, model yang dikompilasi disimpan seperti `resnet50_neuron.pt` di direktori lokal.

## ResNet50 Inferensi
<a name="tutorial-inferentia-pytorch-neuron-inference"></a>

Membuat skrip Python yang disebut **pytorch\$1infer\$1resnet50.py** dengan konten berikut. Skrip ini mengunduh gambar sampel dan menggunakannya untuk menjalankan inferensi dengan model yang dikompilasi. 

```
import os
import time
import torch
import torch_neuron
import json
import numpy as np

from urllib import request

from torchvision import models, transforms, datasets

## Create an image directory containing a small kitten
os.makedirs("./torch_neuron_test/images", exist_ok=True)
request.urlretrieve("https://raw.githubusercontent.com/awslabs/mxnet-model-server/master/docs/images/kitten_small.jpg",
                    "./torch_neuron_test/images/kitten_small.jpg")


## Fetch labels to output the top classifications
request.urlretrieve("https://s3.amazonaws.com/deep-learning-models/image-models/imagenet_class_index.json","imagenet_class_index.json")
idx2label = []

with open("imagenet_class_index.json", "r") as read_file:
    class_idx = json.load(read_file)
    idx2label = [class_idx[str(k)][1] for k in range(len(class_idx))]

## Import a sample image and normalize it into a tensor
normalize = transforms.Normalize(
    mean=[0.485, 0.456, 0.406],
    std=[0.229, 0.224, 0.225])

eval_dataset = datasets.ImageFolder(
    os.path.dirname("./torch_neuron_test/"),
    transforms.Compose([
    transforms.Resize([224, 224]),
    transforms.ToTensor(),
    normalize,
    ])
)

image, _ = eval_dataset[0]
image = torch.tensor(image.numpy()[np.newaxis, ...])

## Load model
model_neuron = torch.jit.load( 'resnet50_neuron.pt' )

## Predict
results = model_neuron( image )

# Get the top 5 results
top5_idx = results[0].sort()[1][-5:]

# Lookup and print the top 5 labels
top5_labels = [idx2label[idx] for idx in top5_idx]

print("Top 5 labels:\n {}".format(top5_labels) )
```

Jalankan inferensi dengan model yang dikompilasi menggunakan perintah berikut: 

```
python pytorch_infer_resnet50.py
```

Output Anda akan terlihat seperti berikut: 

```
Top 5 labels:
 ['tiger', 'lynx', 'tiger_cat', 'Egyptian_cat', 'tabby']
```

# ARM64 DLAMI
<a name="tutorial-arm64"></a>

AWS ARM64 GPU DLAMIs dirancang untuk memberikan kinerja tinggi dan efisiensi biaya untuk beban kerja pembelajaran mendalam. Secara khusus, tipe instans G5G menampilkan [prosesor AWS Graviton2](https://aws.amazon.com/ec2/graviton/) berbasis ARM64, yang dibangun dari bawah ke atas AWS dan dioptimalkan untuk bagaimana pelanggan menjalankan beban kerja mereka di cloud. AWS ARM64 GPU sudah DLAMIs dikonfigurasi sebelumnya dengan Docker, NVIDIA Docker, NVIDIA Driver, CUDA, cuDNN, NCCL, serta kerangka kerja pembelajaran mesin populer seperti dan. TensorFlow PyTorch

Dengan tipe instans G5G, Anda dapat memanfaatkan manfaat harga dan kinerja Graviton2 untuk menerapkan model pembelajaran mendalam yang dipercepat GPU dengan biaya yang jauh lebih rendah jika dibandingkan dengan instans berbasis x86 dengan akselerasi GPU.

## Pilih ARM64 DLAMI
<a name="tutorial-arm64-select-dlami"></a>

Luncurkan [instans G5G](https://aws.amazon.com/ec2/instance-types/g5g/) dengan ARM64 DLAMI pilihan Anda. 

Untuk step-by-step petunjuk tentang meluncurkan DLAMI, [lihat Meluncurkan dan Mengonfigurasi](https://docs.aws.amazon.com/dlami/latest/devguide/launch-config.html) DLAMI. 

Untuk daftar yang terbaru ARM64 DLAMIs, lihat [Catatan Rilis untuk DLAMI](https://docs.aws.amazon.com/dlami/latest/devguide/appendix-ami-release-notes.html).

## Mulai
<a name="tutorial-arm64-get-started"></a>

Topik berikut menunjukkan cara memulai menggunakan ARM64 DLAMI. 

**Topics**
+ [

## Pilih ARM64 DLAMI
](#tutorial-arm64-select-dlami)
+ [

## Mulai
](#tutorial-arm64-get-started)
+ [

# Menggunakan ARM64 DLAMI GPU PyTorch
](tutorial-arm64-pytorch.md)

# Menggunakan ARM64 DLAMI GPU PyTorch
<a name="tutorial-arm64-pytorch"></a>

 AWS Deep Learning AMIs Ini siap digunakan dengan berbasis prosesor Arm64 GPUs, dan dioptimalkan untuk. PyTorch PyTorch DLAMI ARM64 GPU mencakup lingkungan Python yang [PyTorch](https://aws.amazon.com/pytorch)telah dikonfigurasi sebelumnya [TorchVision](https://pytorch.org/vision/stable/index.html)dengan, [TorchServe](https://pytorch.org/serve/), dan untuk pelatihan pembelajaran mendalam dan kasus penggunaan inferensi.

**Topics**
+ [

## Verifikasi PyTorch Lingkungan Python
](#tutorial-arm64-pytorch-environment)
+ [

## Jalankan Sampel Pelatihan dengan PyTorch
](#tutorial-arm64-pytorch-training)
+ [

## Jalankan Sampel Inferensi dengan PyTorch
](#tutorial-arm64-pytorch-inference)

## Verifikasi PyTorch Lingkungan Python
<a name="tutorial-arm64-pytorch-environment"></a>

Hubungkan ke instans G5G Anda dan aktifkan lingkungan dasar Conda dengan perintah berikut:

```
source activate base
```

Prompt perintah Anda harus menunjukkan bahwa Anda bekerja di lingkungan dasar Conda, yang berisi PyTorch TorchVision, dan pustaka lainnya.

```
(base) $
```

Verifikasi jalur alat default PyTorch lingkungan:

```
(base) $ which python
(base) $ which pip
(base) $ which conda
(base) $ which mamba
>>> import torch, torchvision
>>> torch.__version__
>>> torchvision.__version__
>>> v = torch.autograd.Variable(torch.randn(10, 3, 224, 224))
>>> v = torch.autograd.Variable(torch.randn(10, 3, 224, 224)).cuda()
>>> assert isinstance(v, torch.Tensor)
```

## Jalankan Sampel Pelatihan dengan PyTorch
<a name="tutorial-arm64-pytorch-training"></a>

Jalankan contoh pekerjaan pelatihan MNIST:

```
git clone https://github.com/pytorch/examples.git
cd examples/mnist
python main.py
```

Output-nya semestinya mirip dengan yang berikut:

```
...
Train Epoch: 14 [56320/60000 (94%)]    Loss: 0.021424
Train Epoch: 14 [56960/60000 (95%)]    Loss: 0.023695
Train Epoch: 14 [57600/60000 (96%)]    Loss: 0.001973
Train Epoch: 14 [58240/60000 (97%)]    Loss: 0.007121
Train Epoch: 14 [58880/60000 (98%)]    Loss: 0.003717
Train Epoch: 14 [59520/60000 (99%)]    Loss: 0.001729
Test set: Average loss: 0.0275, Accuracy: 9916/10000 (99%)
```

## Jalankan Sampel Inferensi dengan PyTorch
<a name="tutorial-arm64-pytorch-inference"></a>

Gunakan perintah berikut untuk mengunduh model densenet161 yang telah dilatih sebelumnya dan jalankan inferensi menggunakan: TorchServe

```
# Set up TorchServe
cd $HOME
git clone https://github.com/pytorch/serve.git
mkdir -p serve/model_store
cd serve

# Download a pre-trained densenet161 model
wget https://download.pytorch.org/models/densenet161-8d451a50.pth >/dev/null

# Save the model using torch-model-archiver
torch-model-archiver --model-name densenet161 \
    --version 1.0 \
    --model-file examples/image_classifier/densenet_161/model.py \
    --serialized-file densenet161-8d451a50.pth \
    --handler image_classifier \
    --extra-files examples/image_classifier/index_to_name.json  \
    --export-path model_store 

# Start the model server
torchserve --start --no-config-snapshots \
    --model-store model_store \
    --models densenet161=densenet161.mar &> torchserve.log

# Wait for the model server to start
sleep 30

# Run a prediction request
curl http://127.0.0.1:8080/predictions/densenet161 -T examples/image_classifier/kitten.jpg
```

Output-nya semestinya mirip dengan yang berikut:

```
{
  "tiger_cat": 0.4693363308906555,
  "tabby": 0.4633873701095581,
  "Egyptian_cat": 0.06456123292446136,
  "lynx": 0.0012828150065615773,
  "plastic_bag": 0.00023322898778133094
}
```

Gunakan perintah berikut untuk membatalkan pendaftaran model densenet161 dan menghentikan server:

```
curl -X DELETE http://localhost:8081/models/densenet161/1.0
torchserve --stop
```

Output-nya semestinya mirip dengan yang berikut:

```
{
  "status": "Model \"densenet161\" unregistered"
}
TorchServe has stopped.
```

# Inferensi
<a name="tutorial-inference"></a>

Bagian ini menyediakan tutorial tentang cara menjalankan inferensi menggunakan kerangka kerja dan alat DLAMI.

## Alat Inferensi
<a name="tutorial-inference-tools"></a>
+ [TensorFlow Melayani](tutorial-tfserving.md)

# Penyajian Model
<a name="model-serving"></a>

Berikut ini adalah opsi penyajian model yang diinstal pada AMI Pembelajaran Mendalam dengan Conda. Klik salah satu opsi untuk mempelajari cara menggunakannya.

**Topics**
+ [

# TensorFlow Melayani
](tutorial-tfserving.md)
+ [

# TorchServe
](tutorial-torchserve.md)

# TensorFlow Melayani
<a name="tutorial-tfserving"></a>

[TensorFlow Melayani](https://www.tensorflow.org/tfx/guide/serving) adalah sistem penyajian yang fleksibel dan berkinerja tinggi untuk model pembelajaran mesin.

`tensorflow-serving-api`Ini sudah diinstal sebelumnya dengan DLAMI framwork tunggal. Untuk menggunakan penyajian tensorflow, aktifkan lingkungan terlebih dahulu. TensorFlow 

```
$ source /opt/tensorflow/bin/activate
```

Kemudian gunakan editor teks pilihan Anda untuk membuat skrip yang memiliki konten berikut. Nama itu`test_train_mnist.py`. Skrip ini direferensikan dari [TensorFlow Tutorial](https://github.com/tensorflow/docs/blob/master/site/en/tutorials/quickstart/beginner.ipynb) yang akan melatih dan mengevaluasi model pembelajaran mesin jaringan saraf yang mengklasifikasikan gambar.

```
import tensorflow as tf
mnist = tf.keras.datasets.mnist

(x_train, y_train),(x_test, y_test) = mnist.load_data()
x_train, x_test = x_train / 255.0, x_test / 255.0

model = tf.keras.models.Sequential([
  tf.keras.layers.Flatten(input_shape=(28, 28)),
  tf.keras.layers.Dense(128, activation='relu'),
  tf.keras.layers.Dropout(0.2),
  tf.keras.layers.Dense(10, activation='softmax')
])

model.compile(optimizer='adam',
              loss='sparse_categorical_crossentropy',
              metrics=['accuracy'])

model.fit(x_train, y_train, epochs=5)
model.evaluate(x_test, y_test)
```

Sekarang jalankan skrip melewati lokasi server dan port dan nama file foto husky sebagai parameter.

```
$ /opt/tensorflow/bin/python3 test_train_mnist.py
```

 Bersabarlah, karena skrip ini mungkin memakan waktu beberapa saat sebelum memberikan output apa pun. Ketika pelatihan selesai, Anda harus melihat yang berikut: 

```
I0000 00:00:1739482012.389276    4284 device_compiler.h:188] Compiled cluster using XLA!  This line is logged at most once for the lifetime of the process.
1875/1875 [==============================] - 24s 2ms/step - loss: 0.2973 - accuracy: 0.9134 
Epoch 2/5
1875/1875 [==============================] - 3s 2ms/step - loss: 0.1422 - accuracy: 0.9582
Epoch 3/5
1875/1875 [==============================] - 3s 1ms/step - loss: 0.1076 - accuracy: 0.9687
Epoch 4/5
1875/1875 [==============================] - 3s 2ms/step - loss: 0.0872 - accuracy: 0.9731
Epoch 5/5
1875/1875 [==============================] - 3s 1ms/step - loss: 0.0731 - accuracy: 0.9771
313/313 [==============================] - 0s 1ms/step - loss: 0.0749 - accuracy: 0.9780
```

## Lebih Banyak Fitur dan Contoh
<a name="tutorial-tfserving-project"></a>

Jika Anda tertarik untuk mempelajari lebih lanjut tentang TensorFlow Melayani, lihat [TensorFlow situs webnya](https://www.tensorflow.org/serving/).

# TorchServe
<a name="tutorial-torchserve"></a>

TorchServe adalah alat yang fleksibel untuk melayani model pembelajaran mendalam yang telah diekspor dari PyTorch. TorchServe datang pra-instal dengan AMI Pembelajaran Mendalam dengan Conda. 

Untuk informasi selengkapnya tentang penggunaan TorchServe, lihat [Server Model untuk PyTorch Dokumentasi](https://github.com/pytorch/serve/blob/master/docs/README.md). 

 **Topik** 

## Sajikan Model Klasifikasi Gambar pada TorchServe
<a name="tutorial-torchserve-serving"></a>

Tutorial ini menunjukkan cara menyajikan model klasifikasi gambar dengan TorchServe. Ini menggunakan model DenseNet -161 yang disediakan oleh. PyTorch Setelah server berjalan, ia mendengarkan permintaan prediksi. Saat Anda mengunggah gambar, dalam hal ini, gambar anak kucing, server mengembalikan prediksi 5 kelas pencocokan teratas dari kelas tempat model dilatih. 

**Untuk menyajikan contoh model klasifikasi gambar pada TorchServe**

1. Connect ke instans Amazon Elastic Compute Cloud (Amazon EC2) dengan Deep Learning AMI dengan Conda v34 atau versi lebih baru. 

1. Aktifkan `pytorch_p310` lingkungan. 

   ```
   source activate pytorch_p310
   ```

1. Kloning TorchServe repositori, lalu buat direktori untuk menyimpan model Anda.  

   ```
   git clone https://github.com/pytorch/serve.git
   mkdir model_store
   ```

1. Arsipkan model menggunakan pengarsipan model. `extra-files`Param menggunakan file dari `TorchServe` repo, jadi perbarui jalur jika perlu. Untuk informasi selengkapnya tentang pengarsipan model, lihat [Pengarsip Model Obor](https://github.com/pytorch/serve/blob/master/model-archiver/README.md) untuk. TorchServe 

   ```
   wget https://download.pytorch.org/models/densenet161-8d451a50.pth
   torch-model-archiver --model-name densenet161 --version 1.0 --model-file ./serve/examples/image_classifier/densenet_161/model.py --serialized-file densenet161-8d451a50.pth --export-path model_store --extra-files ./serve/examples/image_classifier/index_to_name.json --handler image_classifier
   ```

1. Jalankan TorchServe untuk memulai titik akhir. Menambahkan `> /dev/null` menenangkan output log. 

   ```
   torchserve --start --ncs --model-store model_store --models densenet161.mar > /dev/null
   ```

1. Unduh gambar anak kucing dan kirimkan ke titik akhir TorchServe prediksi: 

   ```
   curl -O https://s3.amazonaws.com/model-server/inputs/kitten.jpg
   curl http://127.0.0.1:8080/predictions/densenet161 -T kitten.jpg
   ```

   Titik akhir prediksi mengembalikan prediksi di JSON yang mirip dengan lima prediksi teratas berikut, di mana gambar memiliki probabilitas 47% mengandung kucing Mesir, diikuti oleh kemungkinan 46% memiliki kucing kucing kucing. 

   ```
   {
    "tiger_cat": 0.46933576464653015,
    "tabby": 0.463387668132782,
    "Egyptian_cat": 0.0645613968372345,
    "lynx": 0.0012828196631744504,
    "plastic_bag": 0.00023323058849200606
   }
   ```

1. Setelah Anda selesai menguji, hentikan server: 

   ```
   torchserve --stop
   ```

 **Contoh Lain** 

TorchServe memiliki berbagai contoh yang dapat Anda jalankan pada instance DLAMI Anda. Anda dapat melihatnya di halaman [contoh repositori TorchServe proyek](https://github.com/pytorch/serve/tree/master/examples). 

 **Info Lebih Lanjut** 

 Untuk TorchServe dokumentasi selengkapnya, termasuk cara mengatur TorchServe dengan Docker dan TorchServe fitur terbaru, lihat [halaman TorchServe proyek](https://github.com/pytorch/serve) di GitHub. 