HyperPod Slurm 클러스터 PEFT-Lora 자습서(GPU)
다음 자습서에서는 Slurm 환경을 설정하고 Llama 80억 파라미터 모델에서 파라미터 효율적인 미세 조정(PEFT) 작업을 시작합니다.
사전 조건
환경을 설정하기 전에 다음 조건을 충족해야 합니다.
-
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 파일 사용에 대한 자세한 내용은 Build AWS-optimized Nemo-Launcher image
를 참조하세요. 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억 파라미터 모델에 대한 PEFT 작업을 시작하려면 시작 스크립트인 launcher_scripts/llama/run_hf_llama3_8b_seq8k_gpu_lora.sh를 다음과 같이 설정합니다.
-
IMAGE: 환경 설정 섹션의 컨테이너입니다. -
HF_MODEL_NAME_OR_PATH: 레시피의 hf_model_name_or_path 파라미터에서 사전 훈련된 가중치의 이름 또는 경로를 정의합니다. -
(선택 사항) HuggingFace에서 사전 훈련된 가중치가 필요한 경우 다음 키-값 페어를 설정하여 HuggingFace 토큰을 제공할 수 있습니다.
recipes.model.hf_access_token=${HF_ACCESS_TOKEN}
#!/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="${YOUR_HF_MODEL_NAME_OR_PATH}" # 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_lora \ base_results_dir=${SAGEMAKER_TRAINING_LAUNCHER_DIR}/results \ recipes.run.name="hf_llama3_lora" \ 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}"
이전 스크립트에서 필요한 모든 파라미터를 구성한 후 이를 실행하여 훈련 작업을 시작할 수 있습니다.
bash launcher_scripts/llama/run_hf_llama3_8b_seq8k_gpu_lora.sh
Slurm 클러스터 구성에 대한 자세한 정보는 HyperPod Slurm에서 훈련 작업 실행 섹션을 참조하세요.