Amazon Web Services 한국 블로그

Amazon SageMaker HyperPod 레시피: 모델 훈련 및 미세 조정 가속화

모든 기술을 갖춘 데이터 과학자와 개발자가 최첨단 성능으로 몇 분 만에 파운데이션 모델(FM) 훈련을 시작하고 미세 조정할 수 있도록 지원하는 Amazon SageMaker HyperPod 레시피의 정식 출시를 발표합니다. 이제 Llama 3.1 405B, Llama 3.2 90B, Mixtral 8x22B와 같이 널리 사용되는 FM을 훈련하고 미세 조정하는 데 최적화된 레시피에 액세스할 수 있습니다.

AWS re:Invent 2023에서는 SageMaker HyperPod를 소개하여 FM 훈련에 소요되는 시간을 최대 40% 줄이고 사전 구성된 분산 훈련 라이브러리를 통해 병렬 구조의 천 개 이상에 해당하는 컴퓨팅 리소스로 규모를 확장할 수 있도록 했습니다. SageMaker HyperPod를 통해 gnsfus에 필요한 가속화된 컴퓨팅 리소스를 찾고, 최적의 훈련 플랜을 생성하고, 컴퓨팅 리소스의 가용성을 기반으로 다양한 용량 블록에 걸쳐 훈련 워크로드를 실행할 수 있습니다.

SageMaker HyperPod 레시피에는 AWS에서 테스트한 훈련 스택이 포함되어 있어 여러 모델 구성을 실험하는 반복 작업을 없애고 몇 주 동안 되풀이되는 평가와 테스트를 수행하지 않아도 됩니다. 레시피는 훈련 데이터세트 로드, 분산 훈련 기법 적용, 결함으로부터의 빠른 복구를 위한 체크포인트 자동화, 엔드투엔드 훈련 루프 관리와 같은 몇 가지의 중요한 단계를 자동화합니다.

간단한 레시피 변경으로 GPU 또는 Trainium 기반 인스턴스 간에 원활하게 전환하여 훈련 성능을 더욱 최적화하고 비용을 절감할 수 있습니다. SageMaker HyperPod 또는 SageMaker 훈련 작업의 프로덕션 과정에서 간편하게 워크로드를 실행할 수 있습니다.

SageMaker HyperPod 레시피 사용 사례
시작하려면 SageMaker HyperPod 레시피 GitHub 리포지토리를 방문하여 공개적으로 사용 가능한 인기 있는 FM을 위한 훈련 레시피를 찾아보세요.

간단한 레시피 파라미터를 편집하여 클러스터 구성에서 데이터세트의 인스턴스 유형과 위치를 지정한 다음, 한 줄 명령으로 레시피를 실행하기만 하면 최첨단 성능을 얻을 수 있습니다.

리포지토리를 복제한 후 레시피 config.yaml 파일을 편집하여 모델 및 클러스터 유형을 지정해야 합니다.

$ git clone --recursive https://github.com/aws/sagemaker-hyperpod-recipes.git
$ cd sagemaker-hyperpod-recipes
$ pip3 install -r requirements.txt.
$ cd ./recipes_collections
$ vim config.yaml

레시피는 SageMaker HyperPod(Slurm 포함), SageMaker HyperPod(Amazon Elastic Kubernetes Service(Amazon EKS) 포함), SageMaker 훈련 작업을 지원합니다. 예를 들어 클러스터 유형(Slurm 오케스트레이터), 모델 이름(Meta Lama 3.1 405B 언어 모델), 인스턴스 유형(ml.p5.48xlarge), 데이터 위치(예: 학습 데이터, 결과, 로그 등)를 설정할 수 있습니다.

defaults:
- cluster: slurm # support: slurm / k8s / sm_jobs
- recipes: fine-tuning/llama/hf_llama3_405b_seq8k_gpu_qlora # name of model to be trained
debug: False # set to True to debug the launcher configuration
instance_type: ml.p5.48xlarge # or other supported cluster instances
base_results_dir: # Location(s) to store the results, checkpoints, logs etc.

이 YAML 파일에서 모델별 훈련 매개변수를 선택적으로 조정할 수 있습니다. 이 파일에는 액셀러레이터 기기 수, 인스턴스 유형, 훈련 정밀도, 병렬화 및 샤딩 기법, 최적화, TensorBoard를 통한 실험 모니터링을 위한 로깅 등 최적의 구성이 요약되어 있습니다.

run:
  name: llama-405b
  results_dir: ${base_results_dir}/${.name}
  time_limit: "6-00:00:00"
restore_from_path: null
trainer:
  devices: 8
  num_nodes: 2
  accelerator: gpu
  precision: bf16
  max_steps: 50
  log_every_n_steps: 10
  ...
exp_manager:
  exp_dir: # location for TensorBoard logging
  name: helloworld 
  create_tensorboard_logger: True
  create_checkpoint_callback: True
  checkpoint_callback_params:
    ...
  auto_checkpoint: True # for automated checkpointing
use_smp: True 
distributed_backend: smddp # optimized collectives
# Start training from pretrained model
model:
  model_type: llama_v3
  train_batch_size: 4
  tensor_model_parallel_degree: 1
  expert_model_parallel_degree: 1
  # other model-specific params

SageMaker HyperPod(Slurm 포함)에서 레시피를 실행하려면 클러스터 설정 지침에 따라 SageMaker HyperPod 클러스터를 준비해야 합니다.

그런 다음 SageMaker HyperPod 헤드 노드에 연결하고 Slurm 컨트롤러에 액세스한 후 편집한 레시피를 복사합니다. 다음으로 헬퍼 파일을 실행하여 해당 작업에 대한 Slurm 제출 스크립트를 생성합니다. 이 스크립트는 훈련 작업을 시작하기 전에 콘텐츠를 검사하는 데 사용할 수 있습니다.

$ python3 main.py --config-path recipes_collection --config-name=config

훈련이 완료되면 학습된 모델이 지정된 데이터 위치에 자동으로 저장됩니다.

SageMaker HyperPod(Amazon EKS 포함)에서 레시피를 실행하려면 GitHub 리포지토리에서 레시피를 복제하고 요구 사항을 설치한 다음 사용하는 노트북에서 레시피(cluster: k8s) 를 편집합니다. 그런 다음 노트북과 실행되는 EKS 클러스터 간에 링크를 생성한 후 HyperPod 명령줄 인터페이스(CLI)를 사용하여 레시피를 실행합니다.

$ hyperpod start-job –recipe fine-tuning/llama/hf_llama3_405b_seq8k_gpu_qlora \
--persistent-volume-claims fsx-claim:data \
--override-parameters \
'{
  "recipes.run.name": "hf-llama3-405b-seq8k-gpu-qlora",
  "recipes.exp_manager.exp_dir": "/data/<your_exp_dir>",
  "cluster": "k8s",
  "cluster_type": "k8s",
  "container": "658645717510.dkr.ecr.<region>.amazonaws.com/smdistributed-modelparallel:2.4.1-gpu-py311-cu121",
  "recipes.model.data.train_dir": "<your_train_data_dir>",
  "recipes.model.data.val_dir": "<your_val_data_dir>",
}'

SageMaker Python SDK를 사용하여 SageMaker 훈련 작업에서 레시피를 실행할 수도 있습니다. 다음 예제에서는 훈련 레시피를 재정의하여 SageMaker 훈련 작업에서 PyTorch 훈련 스크립트를 실행합니다.

...
recipe_overrides = {
    "run": {
        "results_dir": "/opt/ml/model",
    },
    "exp_manager": {
        "exp_dir": "",
        "explicit_log_dir": "/opt/ml/output/tensorboard",
        "checkpoint_dir": "/opt/ml/checkpoints",
    },   
    "model": {
        "data": {
            "train_dir": "/opt/ml/input/data/train",
            "val_dir": "/opt/ml/input/data/val",
        },
    },
}
pytorch_estimator = PyTorch(
           output_path=<output_path>,
           base_job_name=f"llama-recipe",
           role=<role>,
           instance_type="p5.48xlarge",
           training_recipe="fine-tuning/llama/hf_llama3_405b_seq8k_gpu_qlora",
           recipe_overrides=recipe_overrides,
           sagemaker_session=sagemaker_session,
           tensorboard_output_config=tensorboard_output_config,
)
...

훈련이 진행됨에 따라 모델 체크포인트가 완전 자동화된 체크포인트 기능과 함께 Amazon Simple Storage Service(Amazon S3)에 저장되므로 훈련 오류가 발생하거나 인스턴스를 재시작할 시 신속하게 복구할 수 있습니다.

정식 출시
Amazon SageMaker HyperPod 레시피는 이제 SageMaker HyperPod 레시피 GitHub 리포지토리 사용할 수 있습니다. 자세히 알아보려면 SageMaker HyperPod 제품 페이지Amazon SageMaker AI 개발자 안내서를 참조하세요.

SageMaker HyperPod 레시피를 사용해 보시고 SageMaker용 AWS re:Post 또는 일반 AWS Support 문의로 피드백을 보내주세요.

Channy