

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

# Gunakan perpustakaan paralelisme SageMaker model v2
<a name="model-parallel-use-api-v2"></a>

Di halaman ini, Anda akan mempelajari cara menggunakan API library paralelism SageMaker model v2 dan memulai dengan menjalankan tugas pelatihan PyTorch Fully Sharded Data Parallel (FSDP) di platform Pelatihan atau di SageMaker cluster. SageMaker HyperPod 

Ada berbagai skenario untuk menjalankan pekerjaan PyTorch pelatihan dengan SMP v2.

1. Untuk SageMaker pelatihan, gunakan salah satu SageMaker Framework Container pra-build untuk PyTorch v2.0.1 dan yang lebih baru, yang sudah dikemas sebelumnya dengan SMP v2.

1. Gunakan file biner SMP v2 untuk mengatur lingkungan Conda untuk menjalankan beban kerja pelatihan terdistribusi pada cluster. SageMaker HyperPod 

1. Perluas Fram SageMaker ework Containers yang sudah dibuat sebelumnya untuk PyTorch v2.0.1 dan yang lebih baru untuk menginstal persyaratan fungsional tambahan untuk kasus penggunaan Anda. Untuk mempelajari cara memperpanjang wadah yang sudah dibuat sebelumnya, lihat[Perpanjang Pre-built Wadah](prebuilt-containers-extend.md).

1. Anda juga dapat membawa wadah Docker Anda sendiri dan secara manual mengatur semua lingkungan Pel SageMaker atihan menggunakan toolkit Pel [ SageMaker atihan ](https://github.com/aws/sagemaker-training-toolkit) dan menginstal file biner SMP v2. Ini adalah opsi yang paling tidak direkomendasikan karena kompleksitas dependensi. Untuk mempelajari cara menjalankan wadah Docker Anda sendiri, lihat Meng [ adaptasi Wadah Pelatihan Anda Sendiri. ](https://docs.aws.amazon.com/sagemaker/latest/dg/adapt-training-container.html)

Panduan memulai ini mencakup dua skenario pertama.

**Topics**
+ [Langkah 1: Sesuaikan skrip pelatihan PyTorch FSDP Anda](#model-parallel-adapt-pytorch-script-v2)
+ [Langkah 2: Luncurkan pekerjaan pelatihan](#model-parallel-launch-a-training-job-v2)

## Langkah 1: Sesuaikan skrip pelatihan PyTorch FSDP Anda
<a name="model-parallel-adapt-pytorch-script-v2"></a>

Untuk mengaktifkan dan mengkonfigurasi pustaka SMP v2, mulailah dengan mengimpor dan menambahkan `torch.sagemaker.init()` modul di bagian atas skrip. Modul ini mengambil kamus konfigurasi SMP [Parameter konfigurasi fitur inti SMP v2](distributed-model-parallel-v2-reference.md#distributed-model-parallel-v2-reference-init-config) yang akan Anda persiapkan. [Langkah 2: Luncurkan pekerjaan pelatihan](#model-parallel-launch-a-training-job-v2) Selain itu, untuk menggunakan berbagai fitur inti yang ditawarkan oleh SMP v2, Anda mungkin perlu membuat beberapa perubahan lagi untuk menyesuaikan skrip pelatihan Anda. Petunjuk lebih rinci tentang mengadaptasi skrip pelatihan Anda untuk menggunakan fitur inti SMP v2 disediakan di[Fitur inti dari perpustakaan paralelisme SageMaker model v2](model-parallel-core-features-v2.md).

------
#### [ SageMaker Training ]

Dalam skrip pelatihan Anda, tambahkan dua baris kode berikut, yang merupakan persyaratan minimal untuk memulai pelatihan dengan SMP v2. Di[Langkah 2: Luncurkan pekerjaan pelatihan](#model-parallel-launch-a-training-job-v2), Anda akan mengatur objek kelas SageMaker `PyTorch` estimator dengan kamus konfigurasi SMP melalui `distribution` argumen kelas estimator.

```
import torch.sagemaker as tsm
tsm.init()
```

**catatan**  
Anda juga dapat langsung meneruskan kamus konfigurasi [Parameter konfigurasi fitur inti SMP v2](distributed-model-parallel-v2-reference.md#distributed-model-parallel-v2-reference-init-config) ke `torch.sagemaker.init()` modul. Namun, parameter yang diteruskan ke PyTorch estimator dalam [Langkah 2: Luncurkan pekerjaan pelatihan](#model-parallel-launch-a-training-job-v2) mengambil prioritas dan mengganti yang ditentukan ke modul. `torch.sagemaker.init()`

------
#### [ SageMaker HyperPod ]

Dalam skrip pelatihan Anda, tambahkan dua baris kode berikut. Di[Langkah 2: Luncurkan pekerjaan pelatihan](#model-parallel-launch-a-training-job-v2), Anda akan menyiapkan `smp_config.json` file untuk menyiapkan konfigurasi SMP dalam format JSON, dan mengunggahnya ke penyimpanan atau sistem file yang dipetakan dengan cluster Anda SageMaker HyperPod . Kami menyarankan Anda menyimpan file konfigurasi di bawah direktori yang sama tempat Anda mengunggah skrip pelatihan Anda.

```
import torch.sagemaker as tsm
tsm.init("{{/dir_to_training_files/smp_config.json}}")
```

**catatan**  
Anda juga dapat langsung meneruskan kamus konfigurasi [Parameter konfigurasi fitur inti SMP v2](distributed-model-parallel-v2-reference.md#distributed-model-parallel-v2-reference-init-config) ke dalam `torch.sagemaker.init()` modul.

------

## Langkah 2: Luncurkan pekerjaan pelatihan
<a name="model-parallel-launch-a-training-job-v2"></a>

Pelajari cara mengonfigurasi opsi distribusi SMP untuk meluncurkan pekerjaan pelatihan PyTorch FSDP dengan fitur inti SMP.

------
#### [ SageMaker Training ]

Saat Anda menyiapkan objek peluncur pekerjaan pelatihan dari [ kelas estimator ](https://sagemaker.readthedocs.io/en/stable/api/sagemaker_train.html) PyTorch kerangka kerja di SageMaker Python SDK, konfigurasikan [Parameter konfigurasi fitur inti SMP v2](distributed-model-parallel-v2-reference.md#distributed-model-parallel-v2-reference-init-config) melalui `distribution` argumen sebagai berikut.

**catatan**  
`distribution`Konfigurasi untuk SMP v2 terintegrasi dalam SageMaker Python SDK mulai dari v2.200. Pastikan Anda menggunakan SageMaker Python SDK v2.200 atau yang lebih baru.

**catatan**  
Di SMP v2, Anda harus mengkonfigurasi `smdistributed` dengan `torch_distributed` `distribution` argumen SageMaker `PyTorch` estimator. Dengan`torch_distributed`, SageMaker AI berjalan`torchrun`, yang merupakan peluncur pekerjaan multi-node default dari [ PyTorch Distri ](https://pytorch.org/tutorials/beginner/dist_overview.html) buted.

```
from sagemaker.pytorch import PyTorch

estimator = PyTorch(
    framework_version={{2.2.0}},
    py_version="{{310}}"
    # image_uri="<smp-docker-image-uri>" # For using prior versions, specify the SMP image URI directly.
    entry_point="{{your-training-script.py}}", # Pass the training script you adapted with SMP from Step 1.
    ... # Configure other required and optional parameters
    distribution={
        "torch_distributed": { "enabled": True },
        "smdistributed": {
            "modelparallel": {
                "enabled": True,
                "parameters": {
                    "hybrid_shard_degree": {{Integer}},
                    "sm_activation_offloading": {{Boolean}},
                    "activation_loading_horizon": {{Integer}},
                    "fsdp_cache_flush_warnings": {{Boolean}},
                    "allow_empty_shards": {{Boolean}},
                    "tensor_parallel_degree": {{Integer}},
                    "expert_parallel_degree": {{Integer}},
                    "random_seed": {{Integer}}
                }
            }
        }
    }
)
```

**penting**  
Untuk menggunakan salah satu versi sebelumnya PyTorch atau SMP alih-alih yang terbaru, Anda perlu menentukan gambar SMP Docker secara langsung menggunakan `image_uri` argumen alih-alih dan pasangan. `framework_version` `py_version` Berikut ini adalah contoh   

```
estimator = PyTorch(
    ...,
    image_uri="658645717510.dkr.ecr.us-west-2.amazonaws.com/smdistributed-modelparallel:2.2.0-gpu-py310-cu121"
)
```
Untuk menemukan URI gambar SMP Docker, lihat. [Kerangka kerja yang didukung](distributed-model-parallel-support-v2.md#distributed-model-parallel-supported-frameworks-v2)

------
#### [ SageMaker HyperPod ]

Sebelum Anda mulai, pastikan apakah prasyarat berikut terpenuhi.
+ Direktori bersama Amazon FSx yang dipasang (`/fsx`) ke HyperPod cluster Anda.
+ Conda diinstal di direktori bersama FSx. Untuk mempelajari cara menginstal Conda, gunakan petunjuk di Meng [ instal di Linux ](https://docs.conda.io/projects/conda/en/latest/user-guide/install/linux.html) di Panduan Pengguna * Conda. *
+ `cuda11.8`atau `cuda12.1` diinstal pada node kepala dan komputasi HyperPod cluster Anda.

Jika semua prasyarat terpenuhi, lanjutkan ke instruksi berikut tentang meluncurkan beban kerja dengan SMP v2 pada HyperPod cluster.

1. Siapkan `smp_config.json` file yang berisi kamus[Parameter konfigurasi fitur inti SMP v2](distributed-model-parallel-v2-reference.md#distributed-model-parallel-v2-reference-init-config). Pastikan Anda mengunggah file JSON ini ke tempat Anda menyimpan skrip pelatihan Anda, atau jalur yang Anda tentukan ke `torch.sagemaker.init()` modul di [ Langkah 1](#model-parallel-adapt-pytorch-script-v2). Jika Anda telah meneruskan kamus konfigurasi ke `torch.sagemaker.init()` modul dalam skrip pelatihan di [ Langkah 1](#model-parallel-adapt-pytorch-script-v2), Anda dapat melewati langkah ini. 

   ```
   // smp_config.json
   {
       "hybrid_shard_degree": {{Integer}},
       "sm_activation_offloading": {{Boolean}},
       "activation_loading_horizon": {{Integer}},
       "fsdp_cache_flush_warnings": {{Boolean}},
       "allow_empty_shards": {{Boolean}},
       "tensor_parallel_degree": {{Integer}},
       "expert_parallel_degree": {{Integer}},
       "random_seed": {{Integer}}
   }
   ```

1. Unggah `smp_config.json` file ke direktori di sistem file Anda. Jalur direktori harus sesuai dengan jalur yang Anda tentukan pada [ Langkah 1](#model-parallel-adapt-pytorch-script-v2). Jika Anda telah meneruskan kamus konfigurasi ke `torch.sagemaker.init()` modul dalam skrip pelatihan, Anda dapat melewati langkah ini.

1. Pada node komputasi cluster Anda, mulai sesi terminal dengan perintah berikut.

   ```
   sudo su -l ubuntu
   ```

1. Buat lingkungan Conda pada node komputasi. Kode berikut adalah contoh skrip untuk membuat lingkungan Conda dan menginstal SMP, [ SMDDP, CUDA](data-parallel.md), dan dependensi lainnya.

   ```
   # Run on compute nodes
   SMP_CUDA_VER={{<11.8 or 12.1>}}
   
   source /fsx/{{<path_to_miniconda>}}/miniconda3/bin/activate
   
   export ENV_PATH=/fsx/<path to miniconda>/miniconda3/envs/{{<ENV_NAME>}}
   conda create -p ${ENV_PATH} python=3.10
   
   conda activate ${ENV_PATH}
   
   # Verify aws-cli is installed: Expect something like "aws-cli/2.15.0*"
   aws ‐‐version
   # Install aws-cli if not already installed
   # https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html#cliv2-linux-install
   
   # Install the SMP library
   conda install pytorch="{{2.0.1=sm_py3.10_cuda}}${SMP_CUDA_VER}*" packaging ‐‐override-channels \
     -c {{https://sagemaker-distributed-model-parallel.s3.us-west-2.amazonaws.com/smp-2.0.0-pt-2.0.1/2023-12-11/smp-v2/}} \
     -c pytorch -c numba/label/dev \
     -c nvidia -c conda-forge
   
   # Install dependencies of the script as below
   python -m pip install packaging transformers==4.31.0 accelerate ninja tensorboard h5py datasets \
       && python -m pip install expecttest hypothesis \
       && python -m pip install "flash-attn>=2.0.4" ‐‐no-build-isolation
   
   # Install the SMDDP wheel
   SMDDP_WHL="{{smdistributed_dataparallel-2.0.2-cp310-cp310-linux_x86_64.whl}}" \
     && wget -q {{https://smdataparallel.s3.amazonaws.com/binary/pytorch/2.0.1/cu118/2023-12-07/}}${SMDDP_WHL} \
     && pip install ‐‐force ${SMDDP_WHL} \
     && rm ${SMDDP_WHL}
   
   # cuDNN installation for Transformer Engine installation for CUDA 11.8
   # Please download from below link, you need to agree to terms 
   # https://developer.nvidia.com/downloads/compute/cudnn/secure/8.9.5/local_installers/11.x/cudnn-linux-x86_64-8.9.5.30_cuda11-archive.tar.xz
   
   tar xf cudnn-linux-x86_64-8.9.5.30_cuda11-archive.tar.xz \
       && rm -rf /usr/local/cuda-$SMP_CUDA_VER/include/cudnn* /usr/local/cuda-$SMP_CUDA_VER/lib/cudnn* \
       && cp ./cudnn-linux-x86_64-8.9.5.30_cuda11-archive/include/* /usr/local/cuda-$SMP_CUDA_VER/include/ \
       && cp ./cudnn-linux-x86_64-8.9.5.30_cuda11-archive/lib/* /usr/local/cuda-$SMP_CUDA_VER/lib/ \
       && rm -rf cudnn-linux-x86_64-8.9.5.30_cuda11-archive.tar.xz \
       && rm -rf cudnn-linux-x86_64-8.9.5.30_cuda11-archive/
   
   # Please download from below link, you need to agree to terms 
   # https://developer.download.nvidia.com/compute/cudnn/secure/8.9.7/local_installers/12.x/cudnn-linux-x86_64-8.9.7.29_cuda12-archive.tar.xz \
   # cuDNN installation for TransformerEngine installation for cuda12.1
   tar xf cudnn-linux-x86_64-8.9.7.29_cuda12-archive.tar.xz \
       && rm -rf /usr/local/cuda-$SMP_CUDA_VER/include/cudnn* /usr/local/cuda-$SMP_CUDA_VER/lib/cudnn* \
       && cp ./cudnn-linux-x86_64-8.9.7.29_cuda12-archive/include/* /usr/local/cuda-$SMP_CUDA_VER/include/ \
       && cp ./cudnn-linux-x86_64-8.9.7.29_cuda12-archive/lib/* /usr/local/cuda-$SMP_CUDA_VER/lib/ \
       && rm -rf cudnn-linux-x86_64-8.9.7.29_cuda12-archive.tar.xz \
       && rm -rf cudnn-linux-x86_64-8.9.7.29_cuda12-archive/
       
   # TransformerEngine installation
   export CUDA_HOME=/usr/local/cuda-$SMP_CUDA_VER
   export CUDNN_PATH=/usr/local/cuda-$SMP_CUDA_VER/lib
   export CUDNN_LIBRARY=/usr/local/cuda-$SMP_CUDA_VER/lib
   export CUDNN_INCLUDE_DIR=/usr/local/cuda-$SMP_CUDA_VER/include
   export PATH=/usr/local/cuda-$SMP_CUDA_VER/bin:$PATH
   export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/cuda-$SMP_CUDA_VER/lib
   
   python -m pip install ‐‐no-build-isolation git+https://github.com/NVIDIA/TransformerEngine.git@v1.0
   ```

1. Jalankan pekerjaan pelatihan uji.

   1. Di sistem file bersama (`/fsx`), kloning GitHub repositori Pelatihan Terdistribusi [ Awsome](https://github.com/aws-samples/awsome-distributed-training/), dan buka `3.test_cases/11.modelparallel` folder.

      ```
      git clone https://github.com/aws-samples/awsome-distributed-training/
      cd awsome-distributed-training/3.test_cases/11.modelparallel
      ```

   1. Kirim pekerjaan menggunakan `sbatch` sebagai berikut.

      ```
      conda activate <ENV_PATH>
      sbatch -N 16 conda_launch.sh
      ```

      Jika pengiriman pekerjaan berhasil, pesan keluaran dari `sbatch` perintah ini harus serupa dengan`Submitted batch job ABCDEF`.

   1. Periksa file log di direktori saat ini di bawah`logs/`.

      ```
      tail -f ./logs/{{fsdp_smp_ABCDEF.out}}
      ```

------