모델 훈련·튜닝·평가

MLA-C01 대비 SageMaker Training Job 라이프사이클, 분산 훈련, 하이퍼파라미터 최적화, Debugger·Clarify·Experiments 평가 인프라까지 모델 훈련·튜닝·평가를 정리합니다.

SageMaker Training Job: 훈련의 기본 단위

 

SageMaker에서 모든 모델 훈련은 Training Job이라는 단위로 실행됩니다. Training Job은 완전 관리형 컴퓨팅 작업으로, 훈련이 시작되면 지정한 인스턴스가 자동으로 프로비저닝되고, 훈련이 완료되면 자동으로 종료됩니다. 영구적으로 유지되는 서버 없이 훈련마다 독립적인 컴퓨팅 환경이 실행된다는 것이 핵심입니다.

Training Job의 라이프사이클은 다음 순서로 진행됩니다. 훈련 컨테이너 이미지 로딩, 지정 인스턴스에 컨테이너 배포, S3 또는 EFS에서 훈련 데이터 다운로드(입력 채널), 훈련 스크립트 실행, 모델 아티팩트를 S3에 업로드(출력 채널), 인스턴스 자동 종료 순서입니다.

Training Job 구성에서 핵심 파라미터들을 이해해야 합니다. 은 어떤 훈련 컨테이너(알고리즘 이미지 또는 커스텀 이미지)를 쓸지 지정합니다. 는 훈련 데이터의 S3 위치와 입력 채널 이름, 그리고 입력 모드를 정의합니다. 는 인스턴스 타입과 수량을 지정합니다. 는 모델 아티팩트가 저장될 S3 경로입니다. 는 알고리즘별 하이퍼파라미터 딕셔너리입니다.

 

훈련 입력 모드: File, Pipe, FastFile

 

훈련 데이터를 컨테이너에 어떻게 전달하는지에 따라 훈련 시작 시간과 처리 성능이 크게 달라집니다. 세 가지 입력 모드의 차이를 정확히 이해하는 것이 중요합니다.

File Mode는 가장 간단한 방식입니다. 훈련 시작 전 S3에서 전체 데이터셋을 인스턴스의 로컬 디스크()에 복사합니다. 로컬 파일처럼 접근하므로 코드가 간단하지만, 대용량 데이터셋은 복사 시간이 길어 훈련 시작이 지연됩니다. 소규모 데이터셋이나 반복 접근이 많은 훈련에 적합합니다.

Pipe Mode는 S3 데이터를 디스크에 저장하지 않고 스트리밍으로 컨테이너에 전달합니다. 훈련이 데이터 다운로드 대기 없이 거의 즉시 시작되고, 디스크 공간 제약이 없습니다. 다만 순차 읽기만 지원하므로 랜덤 액세스가 필요한 알고리즘에는 맞지 않습니다. SageMaker 내장 알고리즘 대부분이 Pipe Mode를 지원합니다.

FastFile Mode는 두 방식의 장점을 결합합니다. 파일 시스템 인터페이스(File Mode처럼 경로로 접근)를 유지하면서 실제 데이터는 훈련 중 필요한 시점에 S3에서 직접 스트리밍합니다. 복사 대기 없이 바로 시작 가능하고, 랜덤 액세스도 지원합니다. 대용량 데이터셋에서 File Mode와 Pipe Mode 모두의 대안으로 권장됩니다.

| 입력 모드 | 시작 속도 | 디스크 사용 | 랜덤 접근 | 적합 상황 | |---------|---------|-----------|---------|---------| | File | 느림 (전체 복사) | 높음 | 가능 | 소규모 데이터, 반복 접근 | | Pipe | 빠름 | 없음 | 불가 | 대규모 데이터, 순차 읽기 | | FastFile | 빠름 | 없음 | 가능 | 대규모 데이터, 최신 권장 방식 |

 

분산 훈련: 데이터 병렬화 vs 모델 병렬화

 

단일 GPU로 훈련하기에 데이터가 너무 많거나 모델이 너무 크다면 분산 훈련이 필요합니다. SageMaker는 두 가지 분산 훈련 방식을 지원합니다.

데이터 병렬화(Data Parallelism)는 전체 데이터셋을 여러 GPU에 분배하고 각 GPU에서 동일한 전체 모델을 훈련하는 방식입니다. 각 GPU의 그래디언트를 주기적으로 동기화(All-Reduce)하여 모델 가중치를 일관되게 유지합니다. 모델 자체는 단일 GPU에 들어갈 수 있지만 데이터가 많아 훈련 시간을 단축하고 싶을 때 씁니다. SageMaker Distributed Training Library의 데이터 병렬 라이브러리는 AllReduce 통신을 최적화하여 표준 PyTorch DDP나 Horovod보다 높은 GPU 활용률을 달성합니다.

모델 병렬화(Model Parallelism)는 모델 자체가 단일 GPU 메모리를 초과할 때 필요합니다. 모델 레이어를 여러 GPU에 분배하고 각 GPU가 자신의 레이어만 처리합니다. GPT 계열의 수백억 파라미터 LLM이나 매우 큰 비전 모델에서 필수적입니다. SageMaker Model Parallel Library는 파이프라인 병렬화와 텐서 병렬화를 함께 지원합니다.

두 방식을 혼합한 하이브리드 병렬화도 가능합니다. 초대형 모델을 훈련할 때 모델 병렬화로 메모리를 분산하고, 동시에 데이터 병렬화로 훈련 속도를 높이는 방식입니다.

!데이터 병렬화 vs 모델 병렬화

인스턴스 선택: 훈련 성능과 비용의 균형

 

훈련 인스턴스 타입 선택은 훈련 시간과 비용에 직접 영향을 미칩니다. MLA-C01에서는 주요 인스턴스 패밀리의 특성을 알아야 합니다.

ml.p3 패밀리는 V100 GPU를 탑재한 시리즈입니다. p3.2xlarge(1 GPU)부터 p3dn.24xlarge(8 GPU)까지 있으며, 딥러닝 훈련의 표준 선택지였습니다. ml.p4 패밀리는 A100 GPU를 탑재하여 p3보다 성능이 크게 향상됩니다. 특히 p4d.24xlarge는 8개의 A100 GPU와 400Gbps EFA(Elastic Fabric Adapter) 네트워크를 갖춰 대규모 분산 훈련에 적합합니다. ml.g4dn 패밀리는 T4 GPU를 탑재한 가성비 시리즈입니다. 추론과 소규모 훈련에 자주 쓰입니다. ml.g5 패밀리는 A10G GPU를 탑재하며 g4dn보다 훈련 성능이 좋고 대형 모델 추론에도 적합합니다. EFA 지원 인스턴스(p4d, p3dn 등)는 분산 훈련 시 노드 간 통신 지연을 크게 줄여 선형에 가까운 확장 성능을 달성합니다.

 

Managed Spot Training: 훈련 비용 최대 90% 절감

 

SageMaker Managed Spot Training은 EC2 스팟 인스턴스를 활용하여 훈련 비용을 대폭 낮추는 기능입니다. 스팟 인스턴스는 온디맨드 대비 최대 90% 저렴하지만, AWS가 인스턴스를 임의로 중단(interruption)할 수 있다는 특성이 있습니다. SageMaker Managed Spot Training은 이 중단을 자동으로 처리하고, 중단 후 재시작 시 마지막 체크포인트부터 재개하는 메커니즘을 제공합니다.

체크포인팅이 핵심입니다. 훈련 코드에서 주기적으로 모델 가중치를 디렉터리에 저장하도록 구현하면, SageMaker가 이 디렉터리를 S3와 자동으로 동기화합니다. 인터럽션 후 재시작 시 최신 체크포인트를 S3에서 복원하여 훈련을 이어갑니다. 체크포인팅 없이 Spot 훈련을 사용하면 인터럽션 시 처음부터 다시 시작해야 하므로 오히려 손해입니다.

Warm Pools는 다른 비용 최적화 도구입니다. 훈련 인스턴스를 일정 시간 유지(warm) 상태로 두어 다음 훈련 잡이 시작할 때 인스턴스 프로비저닝 시간을 제거합니다. 반복 실험이 많은 개발 단계에서 총 대기 시간을 크게 줄일 수 있습니다.

 

하이퍼파라미터 튜닝: 자동화된 최적화

 

하이퍼파라미터는 훈련 전에 설정하는 알고리즘 구성값으로, 학습률, 배치 크기, 은닉층 수, 규제 강도 등이 여기에 속합니다. 최적 하이퍼파라미터를 수동으로 찾는 것은 경험과 직관이 필요한 반복 작업이며, 조합 공간이 크면 현실적으로 불가능합니다.

SageMaker Automatic Model Tuning(AMT, 또는 HPO)은 이 과정을 자동화합니다. 튜닝 잡을 설정할 때 탐색할 하이퍼파라미터 범위(연속/이산/카테고리)와 최적화 목표(검증 정확도 최대화, 검증 손실 최소화 등)를 지정하면, AMT가 자동으로 여러 훈련 잡을 실행하며 최적 조합을 찾습니다.

세 가지 탐색 전략을 이해해야 합니다. Random Search는 무작위로 파라미터 조합을 선택합니다. 단순하고 병렬화에 유리하며 각 잡이 독립적입니다. Grid Search는 각 파라미터의 모든 가능한 값 조합을 시도합니다. 완전 탐색이지만 조합 수가 기하급수적으로 늘어 현실적으로 제한된 범위에서만 사용합니다. Bayesian Optimization은 이전 시도 결과를 바탕으로 다음에 시도할 조합을 예측하는 방식입니다. 가장 효율적이지만 이전 잡이 완료된 후 다음 잡을 시작하므로 완전 병렬화가 어렵습니다. SageMaker AMT의 기본값이며 일반적으로 가장 적은 시도로 최적 결과를 찾습니다.

조기 종료(Early Stopping)는 하이퍼파라미터 튜닝과 모델 훈련 두 맥락에서 모두 중요합니다. HPO 수준에서는 성능 개선 가능성이 낮은 훈련 잡을 조기에 중단하여 비용을 절감합니다. 개별 훈련 수준에서는 검증 손실이 더 이상 개선되지 않을 때 훈련을 멈춰 과적합을 방지합니다.

 

정규화: 과적합과 싸우는 방법

 

과적합은 모델이 훈련 데이터에는 잘 맞지만 새로운 데이터에 대한 예측 성능이 떨어지는 현상입니다. 정규화 기법들은 모델의 복잡도를 제한하여 일반화 성능을 높입니다.

L1 정규화(Lasso)는 손실 함수에 파라미터 절댓값의 합을 추가합니다. 일부 가중치를 정확히 0으로 만드는 경향이 있어 피처 선택 효과가 있습니다. 불필요한 피처가 많을 때 효과적입니다. L2 정규화(Ridge)는 파라미터 제곱합을 추가합니다. 가중치를 0에 가깝게 줄이되 완전히 0으로 만들지는 않습니다. 일반적인 과적합 방지에 가장 널리 쓰입니다. Dropout은 딥러닝 전용 정규화로, 훈련 중 무작위로 뉴런을 비활성화하여 특정 뉴런에 과도하게 의존하는 것을 방지합니다. Weight Decay는 옵티마이저 수준에서 L2 정규화를 적용하는 방식으로 Adam, AdamW 옵티마이저와 함께 자주 씁니다. SageMaker Linear Learner는 L1, L2 모두 지원하고, XGBoost는 L1(), L2() 파라미터를 통해 정규화를 제어합니다.

모델 압축도 알아두어야 합니다. 프루닝(Pruning)은 중요도가 낮은 가중치를 제거하여 모델 크기를 줄입니다. 양자화(Quantization)는 부동소수점 가중치를 정수(INT8, INT4)로 변환하여 모델 크기와 추론 지연을 줄입니다. 두 기법은 주로 에지 배포나 추론 비용 최적화 목적으로 사용하며, SageMaker Neo와 함께 쓰입니다.

 

SageMaker Experiments: 실험 추적의 체계화

 

ML 개발에서 재현 가능성과 실험 관리는 무시하기 쉽지만 나중에 큰 문제가 됩니다. "어제 가장 좋은 결과를 낸 그 실험의 하이퍼파라미터가 뭐였더라?" 같은 상황이 반복되면 개발 효율이 크게 떨어집니다. SageMaker Experiments는 이 문제를 해결하는 실험 추적 프레임워크입니다.

Experiment는 최상위 컨테이너로 하나의 ML 프로젝트나 목표에 해당합니다. Trial은 실험 내의 개별 실행 단위로, 한 번의 훈련 잡이나 평가 잡에 대응합니다. Trial Component는 Trial 내의 세부 단계입니다. 훈련 중 , , 를 호출하면 하이퍼파라미터, 지표, 모델 파일이 자동으로 기록됩니다. SageMaker Studio의 Experiments 탭에서 여러 Trial의 결과를 시각적으로 비교할 수 있고, pandas DataFrame으로 프로그래매틱하게 분석하는 것도 가능합니다.

 

SageMaker Debugger: 훈련 내부를 들여다보다

 

훈련이 예상보다 느리거나, 검증 성능이 좀처럼 오르지 않거나, GPU 활용률이 낮다면 무엇이 문제인지 알기 어렵습니다. SageMaker Debugger는 훈련 중 텐서 값과 시스템 메트릭을 실시간으로 캡처하고 분석하여 훈련 문제를 진단하는 도구입니다.

디버거의 핵심 기능은 두 가지입니다. 첫째, Debugger Hook이 훈련 중 가중치, 그래디언트, 활성화 값 같은 텐서를 S3에 저장합니다. 나중에 이 텐서들을 분석하여 소실 그래디언트, 폭발 그래디언트, 가중치 초기화 문제 등을 진단할 수 있습니다. 둘째, 내장 룰(Built-in Rules)이 훈련 중 실시간으로 텐서를 분석하고 문제를 감지하면 훈련을 자동으로 중단합니다. 내장 룰에는 VanishingGradient, ExplodingTensor, OverfitDetector, LossNotDecreasing, ProfilerReport 등이 있습니다.

Debugger Profiler는 시스템 수준 메트릭을 수집합니다. CPU/GPU 활용률, 메모리 사용량, 네트워크 I/O, 데이터 로딩 병목 등을 분석하여 훈련 효율화 포인트를 찾아줍니다. 특히 GPU 활용률이 낮다면 데이터 로딩 병목이 원인인 경우가 많고, 이때 입력 모드를 Pipe Mode나 FastFile Mode로 변경하거나 데이터 로더의 워커 수를 늘리는 것이 해결책입니다.

 

모델 평가 지표: 상황에 맞는 지표 선택

 

모델의 성능을 어떤 지표로 측정하느냐는 비즈니스 문제에 따라 달라집니다. 동일한 분류 모델도 상황에 따라 다른 지표가 더 중요합니다.

분류 문제의 핵심 지표들을 혼동 행렬(Confusion Matrix)에서 유도됩니다. TP(True Positive), TN(True Negative), FP(False Positive), FN(False Negative) 네 가지 경우가 모든 분류 지표의 기반입니다. 정확도(Accuracy)는 전체 예측 중 맞은 비율입니다. 클래스 불균형이 심하면 의미 없는 지표가 됩니다(음성이 95%인 데이터셋에서 항상 음성을 예측하면 95% 정확도). 정밀도(Precision)는 양성으로 예측한 것 중 실제 양성의 비율입니다. FP 비용이 높을 때(스팸 필터에서 정상 메일을 스팸으로 분류) 중요합니다. 재현율(Recall)은 실제 양성 중 양성으로 예측한 비율입니다. FN 비용이 높을 때(암 진단에서 실제 암을 놓치는 경우) 중요합니다. F1 Score는 정밀도와 재현율의 조화 평균입니다. 클래스 불균형 상황에서 균형 잡힌 단일 지표로 자주 씁니다. AUC-ROC는 임계값에 무관한 분류 성능 전반을 나타내며, 0.5(무작위)에서 1.0(완벽)의 범위를 갖습니다.

블로그 목록으로 돌아가기