반응형

tensorrt 8

추론 속도 최적화 시리즈 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와 커널 런칭 오버헤드를 줄임 → 속도 ↑왜..

모델 압축·배포 최적화 시리즈 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 표현을 더 압축 → ..

모델 압축·배포 최적화 시리즈 3편: Pruning (가중치 가지치기)

"신경망에서 정말 모든 weight가 필요할까?"Pruning은 중요도가 낮은 weight, 뉴런, 채널을 제거해 모델을 가볍게 만드는 기법입니다. Pruning이란?Pruning(가지치기)은 신경망의 불필요한 파라미터를 제거하여 모델 크기를 줄이고 추론 속도를 높이는 방법입니다.학습이 끝난 모델의 weight 중요도를 측정중요도가 낮은 weight → 0으로 만들거나 제거모델 sparsity 증가 → 연산량 감소왜 중요한가?모델 크기 줄이기 (저장 공간, 메모리 사용량 절약)추론 속도 향상 (특히 하드웨어가 sparsity 가속 지원 시)Overfitting 감소 → 일반화 성능이 더 좋아질 수도 있음Pruning의 종류Unstructured Pruning개별 weight 중요도 기준으로 0으로 만듦 ..

모델 압축·배포 최적화 시리즈 2편: Quantization (양자화)

"모델 크기 4배 줄이고, 추론 속도는 2배 이상 높인다?"Quantization은 weight와 activation을 저비트로 변환해 모델을 경량화하는 핵심 기법입니다. Quantization이란?Quantization은 모델의 weight와 activation 값을 낮은 정밀도(bit) 로 표현하는 기법입니다.일반적으로 학습된 모델은 FP32 (32-bit float)양자화 시 → FP16, INT8, INT4 등으로 변환메모리 차지 공간이 줄고, 정수 연산을 사용해 추론 속도가 빨라짐왜 중요한가?모델 크기 줄이기: 저장 공간 & 메모리 사용량 감소추론 속도 향상: INT 연산은 float 연산보다 빠르고 에너지 효율 높음엣지/모바일 배포 가능: 작은 디바이스에서도 대형 모델 구동 가능Quantiza..

모델 압축·배포 최적화 시리즈 1편: Knowledge Distillation

"큰 모델이 배운 지식을 작은 모델에 전수할 수 없을까?"Knowledge Distillation(지식 증류)은 Teacher-Student 방식으로 모델을 압축하는 대표적인 기법입니다. Knowledge Distillation이란?Knowledge Distillation(KD)은 큰 모델(Teacher) 이 예측한 soft output(로짓, 확률분포)을작은 모델(Student) 이 모방하도록 학습시키는 방법입니다.이 방식으로 Student 모델은:라벨 정보(정답)뿐 아니라,Teacher가 가진 클래스 간 유사성, 결정 경계 정보까지 학습결과적으로 작고 가벼운 모델이 Teacher 모델 수준의 성능을 재현할 수 있습니다.왜 필요한가?대형 모델은 학습/추론에 비용이 많이 듦 → 모바일/엣지 디바이스 배포..

AI 모델 경량화 시리즈 3편: Adapters

"모델을 통째로 다시 학습하지 않고, 중간에 작은 모듈만 추가해 학습한다!"Adapters는 PEFT(파라미터 효율적 파인튜닝) 기법 중 가장 범용적으로 쓰이는 방법입니다. Adapters란?Adapter는 Transformer 블록 사이에 작은 Bottleneck 네트워크를 추가하고이 부분만 학습하는 기법입니다.원본 모델의 weight는 전부 freeze하고,추가된 Adapter layer만 학습하기 때문에 파라미터 수를 크게 줄이면서도기존 모델의 일반화 성능을 유지할 수 있습니다.왜 필요한가?대형 모델은 Full Fine-Tuning 시 GPU 메모리, 학습 시간 부담이 매우 큼LoRA, Prompt-Tuning은 주로 Attention projection 계층이나 입력 쪽만 바꿈Adapter는 모델..

AI 모델 경량화 시리즈 2편: Prefix-Tuning & Prompt-Tuning

프롬프트만 바꿔서 모델을 새로운 태스크에 적응시킨다?LoRA보다 더 가볍게, 심지어 파라미터 몇 퍼센트만 학습하는 방법. Prefix-/Prompt-Tuning이란?Prefix-Tuning 과 Prompt-Tuning 은 Pretrained 모델의 파라미터는 그대로 두고,입력에 붙는 "프롬프트 벡터"만 학습하는 방법입니다.즉, 모델 내부는 전혀 건드리지 않고 입력에 추가적인 learnable embedding을 붙여서모델이 원하는 태스크 방향으로 출력을 내도록 유도합니다.왜 필요한가?대형 LLM(수십억~수천억 파라미터)은 전체 파인튜닝이 사실상 불가능한 경우 많음LoRA도 내부 레이어 일부를 학습하지만, 여전히 weight update 연산 필요Prefix/Prompt-Tuning은 파라미터 효율이 극단..

반응형