시험 지문은 대개 "무엇을 아끼고 싶은가" 또는 "무엇이 부족한가"를 먼저 말한다. 그 단서부터 잡으면 선택지가 빠르게 정리된다.
지문에서 가장 강조된 제약은?├─ 비용│ ├─ 중단돼도 재개만 되면 됨 → Spot + 체크포인트│ ├─ 튜닝 비용이 큼 → 조기 종료(early stopping)│ └─ 학습량 자체를 줄이고 싶음 → 전이학습 / JumpStart├─ 시간·속도│ ├─ 학습 시작까지 대기가 김 → Pipe / Fast File 모드│ ├─ 매 epoch I/O 병목 → FSx for Lustre│ └─ 한 대로는 너무 느림 → 분산 학습(instance_count↑)├─ 데이터│ ├─ 라벨이 적음 → 전이학습(미세조정)│ ├─ 고차원 희소 → Linear Learner│ └─ 대용량 스트리밍 → RecordIO-protobuf└─ 성능·정확도 ├─ 하이퍼파라미터가 안 맞음 → AMT(Bayesian) ├─ 학습 1회가 수 시간 → Hyperband └─ 이전 튜닝을 이어서 → 워밍 스타트
💡 관련 이론: 이번 주를 관통하는 큰 그림은 "필요한 만큼만, 가장 효율적으로 계산한다"이다. 학습은 비싼 GPU 시간을 쓰므로, ① 애초에 덜 계산하고(전이학습), ② 똑똑하게 탐색하며(베이지안+조기종료), ③ 싼 자원을 쓰고(Spot), ④ 끝나면 자동으로 끈다(자동 종료). 모델 개발의 ML 지식과 클라우드의 비용 효율 사고가 한데 묶이는 지점이 바로 학습 단계다.
네 글의 개념은 실제 코드에서 한 흐름으로 이어진다. 이 스니펫의 각 줄이 어느 날 내용인지 짚어 보면 복습이 된다.
from sagemaker.pytorch import PyTorchfrom sagemaker.tuner import HyperparameterTuner, ContinuousParameter, IntegerParameterfrom sagemaker.inputs import TrainingInputestimator = PyTorch( # Day 1: 프레임워크 Estimator entry_point='train.py', # Day 1: 내 학습 스크립트 role=role, instance_type='ml.g5.xlarge', # Day 1: 딥러닝이므로 GPU instance_count=1, use_spot_instances=True, # Day 1·4: 단가 낮추기 max_run=3600, max_wait=7200, # Day 1: max_wait >= max_run checkpoint_s3_uri='s3://my-bucket/ckpt/', # Day 1: 중단 대비)tuner = HyperparameterTuner( # Day 3: AMT estimator=estimator, objective_metric_name='validation:auc', objective_type='Maximize', hyperparameter_ranges={ 'lr': ContinuousParameter(1e-4, 1e-2), 'batch_size': IntegerParameter(16, 128), }, max_jobs=20, max_parallel_jobs=3, # Day 3: 너무 높이면 Bayesian 이점 감소 strategy='Bayesian', early_stopping_type='Auto', # Day 3·4: 작업량 줄이기)tuner.fit({ # Day 1·2: 입력 채널과 포맷 'train': TrainingInput('s3://my-bucket/train/', input_mode='Pipe'), 'validation': TrainingInput('s3://my-bucket/valid/', input_mode='Pipe'),})
⚠️ 함정: 헷갈리기 쉬운 함정은 "비용 절감"만 보고 Spot을 고르되 체크포인트를 빠뜨리는 것, 그리고 "튜닝"이면 무조건 Grid를 떠올리는 것이다. Spot은 중단 가능성 때문에 체크포인트와 짝이고, 효율적 튜닝의 기본은 전수 조사인 Grid가 아니라 Bayesian이다. 또 "내 스크립트 학습"에 빌트인 컨테이너를 고르는 실수도 잦다 — 커스텀 코드는 프레임워크 Estimator의 entry_point다.
이번 주가 모델을 "만드는" 단계였다면, 다음 주(모델 개발 2)는 만든 모델을 평가하고 분석하는 단계로 이어진다. 학습 곡선과 과적합/과소적합 진단, 평가 지표(정확도·정밀도·재현율·F1·AUC), 그리고 SageMaker Debugger와 Experiments로 학습 과정을 들여다보고 비교하는 도구들을 다룬다. 오늘 정리한 "모델을 어떻게 학습시키는가"가 다음 주 "그 모델이 잘 학습됐는가"의 토대가 된다.
Training Job : SageMaker에서 모델 학습을 실행하는 기본 단위. 인스턴스를 띄웠다가 끝나면 스스로 내린다.
Estimator : 무엇을·어디서·어떻게 학습할지 담은 설계도 객체. 학습 작업을 코드로 정의하는 방법이다.
입력 모드 : 데이터를 인스턴스로 어떻게 들여올지 정하는 방식. File(전부 다운로드) / Pipe(스트리밍) / Fast File.
FSx for Lustre : 초고성능 병렬 파일시스템. 큰 데이터를 여러 번 반복해 읽을 때 S3보다 훨씬 빠르다.
RecordIO-protobuf : 학습 데이터를 이진으로 빽빽이 저장하는 포맷. 크기가 작고 파싱이 빨라 대용량 스트리밍에 유리하다.
Managed Spot Training / 체크포인트 : Spot은 AWS의 남는 용량을 싸게 빌려 학습하는 방식으로 최대 90% 저렴하지만 중간에 회수될 수 있다. 체크포인트는 학습 중간 상태를 S3에 저장해 둔 것으로, 중단돼도 마지막 지점부터 이어서 학습하게 해준다.
AMT (Automatic Model Tuning) : 여러 학습 작업을 자동으로 돌려 가장 좋은 하이퍼파라미터 조합을 찾아주는 기능.
베이지안 최적화 / Hyperband : 베이지안은 지금까지의 결과로 유망한 영역을 추정해 다음 시도를 고르는 전략이고, Hyperband는 여러 구성을 조금씩 학습해 보고 성적이 나쁜 쪽을 빨리 탈락시켜 남은 자원을 몰아주는 전략이다.
워밍 스타트 : 이전 튜닝 작업의 결과를 물려받아 새 튜닝을 그 지점부터 이어 가는 기능.
JumpStart / 전이학습 : JumpStart는 검증된 사전학습 모델과 솔루션 템플릿을 모아 둔 SageMaker의 모델 허브다. 전이학습은 대규모로 학습된 모델의 지식을 내 과제로 옮겨 쓰는 기법으로, 적은 데이터로도 높은 성능을 낸다.
📝 연습 문제
선택지를 클릭하면 정답·해설이 펼쳐집니다.
문제 1
다음 중 SageMaker Training Job과 빌트인 알고리즘에 대한 설명으로 옳은 것은?
문제 2
학습 비용을 줄이려는 여러 시나리오에서 가장 적절하게 짝지어진 것은?
문제 3
수 TB 데이터를 여러 epoch 반복해 읽는 분산 학습에서 I/O가 병목이고, 입력 데이터는 대용량 스트리밍으로 효율적으로 넣고 싶다. 가장 적절한 조합은?
문제 4
AMT(하이퍼파라미터 튜닝)에 대한 설명으로 옳은 것은?
문제 5
검증된 사전학습 텍스트 모델을 내 도메인 데이터로 미세조정해 빠르고 저렴하게 배포하려 한다. 가장 적합한 접근은?