반응형

전체 글 134

MLOps 시리즈 3편: CI/CD for ML (모델 자동 배포 파이프라인)

"모델을 매번 수동으로 학습·배포한다면?"CI/CD for ML은 모델 학습, 테스트, 배포 과정을 자동화해빠르고 안정적인 ML 시스템 운영을 가능하게 합니다. CI/CD for ML이란?CI (Continuous Integration)모델 코드, 데이터, 설정 변경 시 자동으로 학습 파이프라인을 실행 →학습, 검증, 성능 평가, 아티팩트 저장까지 자동화CD (Continuous Delivery / Deployment)검증된 모델을 자동으로 스테이징/프로덕션 환경에 배포필요 시 Canary Release, A/B Test로 안전하게 롤아웃즉, "모델 빌드 → 테스트 → 배포" 전체 흐름을 자동화한 것왜 중요한가?모델 업데이트 주기가 빨라지고, 데이터가 실시간으로 변하는 환경에서는사람이 수동으로 배포하기엔..

MLOps 시리즈 2편: Dataset Versioning

"같은 모델인데, 왜 다시 학습하니 결과가 다를까?"Dataset Versioning은 데이터를 체계적으로 관리하고 추적하여재현 가능한 학습(Repeatable Training) 을 보장하는 핵심 방법입니다. Dataset Versioning이란?Dataset Versioning은 학습, 검증, 테스트 데이터셋을Git처럼 버전으로 관리하는 프로세스입니다.어떤 데이터로 학습했는지 기록데이터셋 변경 이력 관리모델 결과와 데이터셋 버전을 연결 (experiment reproducibility)왜 중요한가?데이터는 시간이 지남에 따라 계속 업데이트 → 학습 결과 달라짐버전 관리 없이 모델 성능 비교 시 원인 불명 문제 발생규제/감사 환경에서는 모델 학습 시 사용한 데이터 증빙 필요Dataset Versionin..

MLOps 시리즈 1편: 모델 모니터링 (Model Monitoring)

"모델은 배포가 끝이 아니다!"모델 모니터링은 모델이 실제 환경에서 잘 동작하는지 지속적으로 확인하고,이상 징후를 조기에 발견해 대응하는 프로세스입니다. 모델 모니터링이란?모델 모니터링은 배포된 ML/DL 모델이 실제 서비스 환경에서 안정적이고 정확하게 작동하는지계속 추적하고 점검하는 활동입니다.모델의 입력 데이터 분포 변화 (Data Drift)예측 결과 품질 (Performance Monitoring)시스템 지표 (Latency, Throughput, Resource Usage)이런 지표를 실시간으로 관찰하고, 이상이 생기면 알람을 보내거나 자동 재학습 파이프라인을 트리거합니다.왜 중요한가?데이터 드리프트: 서비스 환경의 데이터 분포가 학습 시와 달라지면 모델 정확도 급락컨셉 드리프트: 입력-출력 관..

추론 속도 최적화 시리즈 1편: Operator Fusion (연산자 융합)

"Conv → BN → ReLU, 꼭 따로따로 계산해야 할까?"Operator Fusion은 여러 연산을 하나로 합쳐서 추론 속도를 높이는 기법입니다. Operator Fusion이란?Operator Fusion은 모델 그래프 상에서 연속된 연산들을 하나로 합쳐메모리 접근을 줄이고, 커널 실행 횟수를 최소화하는 최적화 기법입니다.예를 들어 일반적인 CNN 레이어 조합: Conv → BatchNorm → ReLU 각각 독립적으로 실행하면:Conv 연산 → 메모리에 결과 저장BN 연산 → 메모리에서 불러와 연산 후 저장ReLU 연산 → 다시 불러와 연산 후 저장Fusion 하면: Fused Conv BN ReLU → 한 번의 커널에서 연산 완료 즉, 메모리 I/O와 커널 런칭 오버헤드를 줄임 → 속도 ↑왜..

대규모 모델 학습·추론 최적화 시리즈 4편: FSDP · ZeRO · DeepSpeed

"단일 GPU로는 불가능한 대형 모델, 어떻게 학습할까?"FSDP, ZeRO, DeepSpeed는 모델 파라미터와 optimizer state를 여러 GPU에 분산해거대한 모델을 효율적으로 학습할 수 있도록 해줍니다. 문제 정의: 대규모 모델 학습의 한계모델 파라미터 수 → 수십억 이상 (GPT-3, LLaMA 등)GPU 메모리 한계로 모델 전체 weight조차 올릴 수 없음Optimizer state (Adam: m, v 벡터)까지 고려하면 메모리 3~4배 필요데이터 병렬만으로는 한계 → 파라미터 분산 병렬(Sharding) 필요ZeRO (Zero Redundancy Optimizer)ZeRO는 모델 학습 시 중복 저장되는 상태를 GPU마다 나누어 저장합니다.Stage 1: Optimizer stat..

대규모 모델 학습·추론 최적화 시리즈 3편: Gradient Checkpointing

"VRAM이 부족해서 모델을 학습할 수 없다면?"Gradient Checkpointing은 중간 activation을 저장하지 않고 필요할 때 재계산하여메모리를 절약하는 강력한 방법입니다. Gradient Checkpointing이란?일반적으로 모델 학습 시 Forward Pass에서 나온 모든 중간 activation을Backward Pass 때 gradient 계산에 사용하기 위해 저장합니다.하지만 이 activation 저장이 메모리의 대부분을 차지합니다.Gradient Checkpointing은 중간 activation을 저장하지 않고,Backward Pass 시 필요한 구간만 다시 forward 계산하여 gradient를 구합니다.즉, 메모리를 희생하지 않고, 대신 연산량(FLOPs)을 조금 ..

대규모 모델 학습·추론 최적화 시리즈 2편: Gradient Accumulation

"GPU 메모리가 부족해서 batch size를 늘릴 수 없다면?"Gradient Accumulation(그래디언트 누적)은 작은 배치를 여러 번 돌려서 큰 배치 학습 효과를 내는 방법입니다. Gradient Accumulation이란?Gradient Accumulation은 작은 미니배치로 여러 번 forward/backward를 하고,그라디언트를 누적(accumulate)한 뒤 한 번만 optimizer step을 수행하는 기법입니다.즉, "가상의 대형 batch size"를 만드는 방식입니다.왜 필요한가?대규모 모델 학습 시 batch size를 크게 해야:Gradient 안정화Convergence 속도 향상일반화 성능 개선하지만 GPU 메모리가 부족하면 큰 batch size 불가 → 작은 bat..

대규모 모델 학습·추론 최적화 시리즈 1편: Mixed Precision Training (AMP)

"학습 속도를 2배 이상 올리고, VRAM도 절약할 수 있다?"Mixed Precision Training은 FP16/BF16과 FP32를 적절히 섞어 쓰는 학습 기법입니다. Mixed Precision Training이란?기존 딥러닝 학습은 모든 연산을 FP32(32-bit float)로 수행했습니다.하지만 FP16(16-bit float) 연산은 속도가 더 빠르고, 메모리 사용량도 절반입니다.Mixed Precision Training은 다음을 결합합니다:FP16/BF16로 대부분의 연산 (행렬 곱, convolution 등)FP32로 중요한 부분 (loss 계산, weight update, scale 유지)결과:성능 거의 그대로 유지 + 속도 1.5~3배 향상 + 메모리 절감왜 필요한가?대규모 모..

모델 압축·배포 최적화 시리즈 5편: ONNX / TensorRT / TFLite 변환

"모델을 한 번만 학습하고, 모든 디바이스에서 돌리고 싶다!"ONNX, TensorRT, TFLite는 모델을 효율적으로 배포하기 위한 핵심 툴입니다. 모델 배포의 문제점학습은 보통 PyTorch / TensorFlow에서 하지만배포 환경은 서버, 모바일, 임베디드, 브라우저 등 다양프레임워크 종속적 모델은 호환성 문제 발생 →프레임워크 독립적인 포맷으로 변환 필요ONNX (Open Neural Network Exchange)ONNX는 프레임워크 독립 모델 표현(IR)PyTorch, TensorFlow, scikit-learn 등에서 export 가능ONNX Runtime, OpenVINO, TensorRT 등 다양한 런타임에서 추론 가능Graph Optimization (Constant Folding..

모델 압축·배포 최적화 시리즈 4편: Weight Clustering / Sharing

"비슷한 값의 가중치를 굳이 따로 저장할 필요가 있을까?"Weight Clustering(또는 Sharing)은 유사한 가중치를 묶어 모델을 추가로 압축하는 기법입니다. Weight Clustering / Sharing이란?Weight Clustering은 비슷한 값을 가지는 weight들을 같은 그룹(cluster) 으로 묶고,각 그룹의 대표값(centroid) 만 저장하는 방식입니다.이때 모델의 실제 weight는 “클러스터 인덱스”로 참조되며,추론 시 centroid lookup으로 실제 weight 값으로 변환됩니다.왜 필요한가?대부분의 weight 값은 특정 분포(가우시안 등)에 집중되어 있음비슷한 값이 많기 때문에 중복 저장은 메모리 낭비Clustering으로 weight 표현을 더 압축 → ..

반응형