HyperPod Slurm 클러스터 DPO 자습서(GPU) - Amazon SageMaker AI

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

HyperPod Slurm 클러스터 DPO 자습서(GPU)

다음 자습서에서는 Slurm 환경을 설정하고 Llama 80억 파라미터 모델에서 직접 기본 설정 최적화(DPO) 작업을 시작합니다.

사전 조건

환경을 설정하기 전에 다음 조건을 충족해야 합니다.

  • HyperPod GPU Slurm 클러스터 설정

    • HyperPod Slurm 클러스터에는 Nvidia Enroot 및 Pyxis가 활성화되어 있어야 합니다(기본적으로 활성화되어 있음).

  • 공유 스토리지 위치가 있어야 합니다. Amazon FSx 파일 시스템 또는 클러스터 노드에서 액세스할 수 있는 NFS 시스템일 수 있습니다.

  • 다음 형식 중 하나의 토큰화된 이진 기본 설정 데이터세트가 있어야 합니다.

    • JSON

    • JSONGZ(압축된 JSON)

    • ARROW

  • (선택 사항) HuggingFace에서 사전 훈련된 가중치가 필요하거나 Llama 3.2 모델을 훈련하는 경우 훈련을 시작하기 전에 HuggingFace 토큰을 받아야 합니다. 토큰 가져오기에 대한 자세한 내용은 User access tokens 섹션을 참조하세요.

HyperPod GPU Slurm 환경 설정

Slurm 클러스터에서 훈련 작업을 시작하려면 다음을 수행합니다.

  • Slurm 클러스터의 헤드 노드에 SSH로 연결합니다.

  • 로그인한 후 가상 환경을 설정합니다. Python 3.9 이상을 사용하고 있는지 확인합니다.

    #set up a virtual environment python3 -m venv ${PWD}/venv source venv/bin/activate
  • SageMaker HyperPod 레시피와 SageMaker HyperPod 어댑터 리포지토리를 공유 스토리지 위치에 복제합니다. 공유 스토리지 위치는 Amazon FSx 파일 시스템 또는 클러스터 노드에서 액세스할 수 있는 NFS 시스템일 수 있습니다.

    git clone https://github.com/aws/sagemaker-hyperpod-training-adapter-for-nemo.git git clone --recursive https://github.com/aws/sagemaker-hyperpod-recipes.git cd sagemaker-hyperpod-recipes pip3 install -r requirements.txt
  • Enroot를 사용하여 스쿼시 파일을 생성합니다. SMP 컨테이너의 최신 릴리스를 찾으려면 SageMaker 모델 병렬 처리 라이브러리 릴리스 노트 섹션을 참조하세요. Enroot 파일 사용에 대한 자세한 내용은 빌드 AWS최적화 Nemo-Launcher 이미지를 참조하세요.

    REGION="<region>" IMAGE="658645717510.dkr.ecr.${REGION}.amazonaws.com/smdistributed-modelparallel:2.4.1-gpu-py311-cu121" aws ecr get-login-password --region ${REGION} | docker login --username AWS --password-stdin 658645717510.dkr.ecr.${REGION}.amazonaws.com enroot import -o $PWD/smdistributed-modelparallel.sqsh dockerd://${IMAGE} mv $PWD/smdistributed-modelparallel.sqsh "/fsx/<any-path-in-the-shared-filesystem>"
  • Enroot 스쿼시 파일을 사용하여 훈련을 시작하려면 다음 예시를 사용하여 recipes_collection/config.yaml 파일을 수정합니다.

    container: /fsx/path/to/your/smdistributed-modelparallel.sqsh

훈련 작업 시작

단일 Slurm 컴퓨팅 노드에서 시퀀스 길이가 8,192인 Llama 80억 파라미터 모델에 대한 DPO 작업을 시작하려면 시작 스크립트인 launcher_scripts/llama/run_hf_llama3_8b_seq8k_gpu_dpo.sh를 다음과 같이 설정합니다.

  • IMAGE: 환경 설정 섹션의 컨테이너입니다.

  • HF_MODEL_NAME_OR_PATH: 레시피의 hf_model_name_or_path 파라미터에서 사전 훈련된 가중치의 이름 또는 경로를 정의합니다.

  • (선택 사항) HuggingFace에서 사전 훈련된 가중치가 필요한 경우 다음 키-값 페어를 설정하여 HuggingFace 토큰을 제공할 수 있습니다.

    recipes.model.hf_access_token=${HF_ACCESS_TOKEN}
참고

이 설정에서 DPO에 사용되는 참조 모델은 훈련되는 기본 모델에서 자동으로 파생됩니다(별도의 참조 모델은 명시적으로 정의되지 않음). DPO에 특정한 하이퍼파라미터는 다음 기본값으로 미리 구성됩니다.

  • beta: 0.1(KL 발산 정규화의 강도 제어)

  • label_smoothing: 0.0(기본 설정 레이블에 다듬기가 적용되지 않음)

recipes.dpo.beta=${BETA} recipes.dpo.label_smoothing=${LABEL_SMOOTHING}
#!/bin/bash IMAGE="${YOUR_IMAGE}" SAGEMAKER_TRAINING_LAUNCHER_DIR="${SAGEMAKER_TRAINING_LAUNCHER_DIR:-${PWD}}" TRAIN_DIR="${YOUR_TRAIN_DIR}" # Location of training dataset VAL_DIR="${YOUR_VAL_DIR}" # Location of validation dataset # experiment output directory EXP_DIR="${YOUR_EXP_DIR}" HF_ACCESS_TOKEN="${YOUR_HF_TOKEN}" HF_MODEL_NAME_OR_PATH="${HF_MODEL_NAME_OR_PATH}" BETA="${BETA}" LABEL_SMOOTHING="${LABEL_SMOOTHING}" # Add hf_model_name_or_path and turn off synthetic_data HYDRA_FULL_ERROR=1 python3 ${SAGEMAKER_TRAINING_LAUNCHER_DIR}/main.py \ recipes=fine-tuning/llama/hf_llama3_8b_seq8k_gpu_dpo \ base_results_dir=${SAGEMAKER_TRAINING_LAUNCHER_DIR}/results \ recipes.run.name="hf_llama3_dpo" \ recipes.exp_manager.exp_dir="$EXP_DIR" \ recipes.model.data.train_dir="$TRAIN_DIR" \ recipes.model.data.val_dir="$VAL_DIR" \ recipes.model.hf_model_name_or_path="$HF_MODEL_NAME_OR_PATH" \ container="${IMAGE}" \ +cluster.container_mounts.0="/fsx:/fsx" \ recipes.model.hf_access_token="${HF_ACCESS_TOKEN}" \ recipes.dpo.enabled=true \ recipes.dpo.beta="${BETA}" \ recipes.dpo.label_smoothing="${LABEL_SMOOTHING}$" \

이전 스크립트에서 필요한 모든 파라미터를 구성한 후 이를 실행하여 훈련 작업을 시작할 수 있습니다.

bash launcher_scripts/llama/run_hf_llama3_8b_seq8k_gpu_dpo.sh

Slurm 클러스터 구성에 대한 자세한 정보는 HyperPod Slurm에서 훈련 작업 실행 섹션을 참조하세요.