TL;DR
Amazon SageMaker Python SDK v3는 framework별 학습 클래스를 ModelTrainer로, 모델 배포 흐름을 ModelBuilder로 통합해 자체 알고리즘을 관리형 인프라에서 실행하는 절차를 단순화합니다. SourceCode가 로컬 학습·추론 코드를 작업 시작 시 컨테이너에 주입하므로 코드 수정마다 Docker 이미지를 다시 만들 필요가 없고, ModelBuilder는 S3 모델 아티팩트와 추론 핸들러를 DJL Serving 규약에 맞춰 패키징합니다. 글은 ml.m5.2xlarge에서 Random Forest를 학습하고 실시간 엔드포인트에 배포하는 흐름과, ml.g5.12xlarge의 4개 A10G GPU에서 Stable Diffusion 3.5를 LoRA와 Accelerate로 Fine-tuning하는 흐름을 같은 API로 구현합니다. S3 입력 채널, YAML 레시피, SageMaker warm pools, AWS Secrets Manager를 조합하면 데이터 배치와 반복 학습, 비밀값 관리까지 동일한 구성 체계 안에서 처리할 수 있습니다.
섹션별 상세
source_code = SourceCode(
source_dir="./train/random_forest",
command=(
"python random_forest.py"
" --n_jobs 4 --max_depth 10 --n_estimators 120"
f" --mlflow_arn {MLFLOW_ARN}"
f" --mlflow_experiment_name {MLFLOW_EXPERIMENT_NAME}"
),
)
compute = Compute(
instance_type="ml.m5.2xlarge",
instance_count=1,
volume_size_in_gb=30,
keep_alive_period_in_seconds=3600, # Warm pool for faster re-runs
)
stopping_condition = StoppingCondition(max_runtime_in_seconds=3600)
output_config = OutputDataConfig(s3_output_path=MODEL_OUTPUT_S3_PATH)
model_trainer = ModelTrainer(
training_image=TRAINING_IMAGE_URI,
source_code=source_code,
compute=compute,
output_data_config=output_config,
stopping_condition=stopping_condition,
role=SAGEMAKER_EXECUTION_ROLE,
base_job_name="random-forest-training",
sagemaker_session=Session(),
)
model_trainer.train(wait=True)로컬 Random Forest 학습 코드를 컨테이너 실행 시 주입하고, CPU 인스턴스에서 SageMaker 학습 작업을 시작합니다.
inference_source_code = SourceCode(
source_dir="./deploy/random_forest",
entry_script="inference.py",
)
# Build and deploy
model_builder = ModelBuilder(
image_uri=INFERENCE_IMAGE_URI,
model_server=ModelServer.DJL_SERVING,
source_code=inference_source_code,
s3_model_data_url=model_artifact_s3_uri,
env_vars={"OPTION_ENTRYPOINT": "code/inference.py"},
sagemaker_session=Session(),
role_arn=SAGEMAKER_EXECUTION_ROLE,
)
model_builder.build(model_name="random-forest-endpoint", mode=Mode.SAGEMAKER_ENDPOINT)학습 결과가 저장된 S3 모델 아티팩트와 추론 핸들러를 ModelBuilder로 묶어 DJL Serving 기반 배포 모델을 구성합니다.
sd_source_code = SourceCode(
source_dir="./train/stable_diffusion",
command=(
"/bin/bash base.sh"
" --config recipes/default-medium-g5_12x.yaml"
" --training-script train_text_to_image_lora.py"
" --accelerate-config accelerate_configs/ddp.yaml"
f" --mlflow-arn {SD_MLFLOW_ARN}"
f" --mlflow-experiment-name {SD_MLFLOW_EXPERIMENT_NAME}"
),
)
sd_compute = Compute(
instance_type="ml.g5.12xlarge", # 4x A10G GPUs
instance_count=1,
volume_size_in_gb=30,
keep_alive_period_in_seconds=3600,
)YAML 레시피와 Bash 런처를 소스 디렉터리에서 읽어 Hugging Face Accelerate 기반 4개 A10G GPU 분산 학습을 시작합니다.
용어 해설
- Script mode
- — 컨테이너 이미지에 학습·추론 코드를 포함하지 않고, 작업 실행 시 로컬 소스 디렉터리를 컨테이너 안으로 주입하는 SageMaker 실행 방식입니다. 이미지 재빌드 없이 알고리즘 코드를 반복 수정할 수 있습니다.
- SourceCode 설정(SourceCode configuration)
- — 로컬 코드 디렉터리와 실행 명령 또는 추론 진입 스크립트를 묶는 SDK v3 구성 객체입니다. SageMaker가 작업 시작 시 파일을 컨테이너로 동기화해 코드와 실행 환경을 분리합니다.
- 모델 서버(Model server)
- — 모델을 로드하고 SageMaker가 요구하는 엔드포인트를 열며 요청을 추론 핸들러로 전달하는 실행 프로세스입니다. 이 글의 예제에서는 DJL Serving이 inference.py의 handle(inputs) 계약을 처리합니다.
- LoRA
- — 기존 모델의 전체 가중치를 업데이트하는 대신 저순위 적응 가중치를 학습하는 Fine-tuning 방식입니다. 글에서는 Stable Diffusion 3.5의 이미지·캡션 데이터 학습과 4개 A10G GPU 분산 학습에 사용됩니다.
- SageMaker warm pools
- — 이전 학습 작업의 인스턴스를 일정 시간 유지해 후속 작업이 초기 인스턴스 준비 시간을 다시 거치지 않도록 하는 기능입니다. 예제는 3,600초 유지 설정으로 반복 실행을 빠르게 만듭니다.
기술
- Amazon SageMaker AI
- SageMaker Python SDK v3
- Amazon ECR
- Amazon S3
- AWS Deep Learning Container
- scikit-learn
- PyTorch
- Stable Diffusion 3.5
- Hugging Face Accelerate
- PEFT
- DeepSpeed
- DJL Serving
- MLflow
- AWS Secrets Manager
- Docker
활용 사례
- scikit-learn Random Forest 학습과 실시간 예측 엔드포인트 배포
- Stable Diffusion 3.5 Medium의 LoRA Fine-tuning
- 4개 A10G GPU를 활용한 분산 생성형 AI 학습
- 로컬 코드 수정과 컨테이너 재빌드를 분리한 반복 개발
- MLflow를 활용한 하이퍼파라미터와 학습 지표 추적
언급된 리소스
AI 요약 · 북마크 · 개인 피드 설정 — 무료
출처 · 인용 안내
인용 시 "요약 출처: AI Trends (aitrends.kr)"를 표기하고, 사실 확인은 원문 보기 기준으로 진행해 주세요. 자세한 기준은 운영 정책을 참고해 주세요.