SK Tech Summit 2023 - Squash: 딥러닝 서비스 추론속도 개선기
Squash: 딥러닝 서비스 추론속도 개선기
https://youtu.be/xUDmsGS_xjg?si=lF1vYad7ssUdcnBx
발표자: 제현우
자원 최적화 목표 - Efficient AI
작년: image sensor와 AI 기술 결합한 intelligent CiS (iCiS) 소개했음
- Always-On: 휴대폰 전면 카메라가 사람의 존재 확인 -> 모바일 화면 깨우기
이미지 센서에서 동작하는 초경량 AI 알고리즘이 필요... 경량화, 최적화 기법 체득.
- Quantization, Pruning, Knowledge Distiliation
그렇지만 AI 서비스 하다 보면 마주하는 근본적인 문제 - computation cost
- 특히 딥러닝 서비스는 특정 API 호출이 많아지면 응답 지연 발생... 서비스 품질 만족도에 영향을 준다
- 가장 쉬운 방법은 'scale out - 더 많은 리소스 투입' 이지만, 비용임.
'Inference 비용이 Training 비용보다 더 크다'
- GPT-3 하나 inference하려면 NVidia A100 5장
- 구글 검색시장에 쓰려면 30B 투자비용 필요하다는 포브스 분석
즉 inference 최적화 = 품질향상 + 비용절감 둘 다 가능함.
SK하이닉스는 Inference를 위한 기술브랜드로 Squash 명명하고, 사내 서비스 PoC부터 진행하면서 경량화 기술 축적 중.
- 지금부터 설명할 예시는 실제 PoC 사례는 아니며, 가상의 고객과 상황을 설정했을 때 inference 속도 개선이 가능한 사례임.
- 실제 PoC나 정량적인 개선효과는 사내보안 문제로 공개할 수 없다.
Case 1: CNN 계열의 EfficientNet 사용하는 Computer Vision
상황: GPU가 너무 비싸서, CPU 활용하는 inference 추진
문제점: 속도가 너무 느림
- 그냥 전환할 경우 inference에 걸리는 시간이 18배 증가.
해결법으로 두 가지 방식을 제안.
- Knowledge Distilation
- Graph Compiler
Knowledge Distilation (KD)
- 경량 모델인 student model의 성능 향상을 위해, 크기가 크고 복잡한 teacher model을 학습과정에서 동시에 사용하는 것.
- 단, KD를 쉽게 쓰기 어려운 경우가 있음.
- 모델 구조가 달라지면 적용이 어렵다.
- internel feature 간 매핑 구조를 파악하기 힘들고 복잡하다
즉, 복잡하고 모델 구조에 의존적인 KD 방식은 범용성이 떨어진다. 간단하고 안정적인 기법은 없을까?
주목한 기법: Relaxed Match With Relation
- Teacher model -> student model로 feature를 옮기는 과정에서
- intra class relation 정보를 loss에 추가.
기존의 loss 비교 방식보다 안정적인 성능을 보장
teacher / student model 구조가 다르더라도 안정적인 성능 향상 가능.
보다 쉽게 학습 pipeline 구성 가능.
Pytorch 기반 inference... runtime SW 적용해서 추가 가속효과
- 이 사례에서의 target HW 최적화 컴파일 솔루션은 OpenViNo였음.
최종적으로, 기존 모델의 95.9% 성능 유지 조건에서 CPU 사용함에도 GPU 대비 추가적으로 22% 향상.
Case Study 2. RoBERTa 모델 활용해 feature-store에 데이터 적재
- 트래픽이 많아지면서 GPU 추가 수요가 필요한 상황
- 모델의 lifecycle이 빨라서, 경량화를 위한 학습시간을 만들 수 없음.
Post Training Quantization 적용 시도
- 추가적인 학습 없이도, 소량의 calibration dataset만으로도 quantization parameter를 확보할 수 있는 방법.
- 일반적인 방식으로 적용하면, 성능 하락은 불가피함. 그러나 성능열화는 전혀 없어야 한다는 요구사항이 있음.
transformer 기반 언어모델에서 Quantization 적용 시 발생하는 대표적인 열화 포인트
- Layer Norm 부분... activation outlier를 증가시켜서 quantization error가 올라감. -> gamma migration 기법 적용.
- outlier 증폭시키는 역할을 하는 Layer Norm의 gamma parameter를
- layer norm 이후 단계인 linear에 적용하거나, dequantization scale에 통합... 에러 발생 빈도를 낮춘다.
- 구조만 바꿀 뿐, 모델에 추가로 오버헤드가 드는 게 전혀 아님.
transformer에 적용하자면
- layer norm의 gamma parameter는 layer norm 이후에 위치하는 Q,K,V liner parameter에 병합함.
추가 성능향상 방법
- Quantization에 따른 성능 열화 측정방법 -> Qunatization Sensitivity
- 성능저하가 크게 발생하는 특정 block은 int8이 아니라 fp16 기반 연산으로 조치 완료
- 추가 성능향상이 필요한 경우 Quantization Aware Training.
- 모든 파라미터 대상으로 재학습하는 게 아니라, Quantization 대상 파라미터만 fine tuning
결과
- int8 quantization된 모델의 성능은 100% 유지하면서
- Inference latency 12배 감소
클라우드 서비스를 쓰더라도 상당한 양의 비용절감이 가능하다고 볼 수 있음.
Efficient LLM
사실 이 모든 기법이 가장 절실히 필요한 곳은 LLM 분야.
- inference time
- GPU Requirement
- Fine-tuning time
한 가지 기법만으로 해결할 수 있는 성격의 것은 아님. 따라서 아래 세 가지 방향으로 연구하고, 효과 입증을 위해 노력 중.
- Compression
- Flash/PagedAttention
- PEFT
오늘 설명할 내용은 Compression 기법 중 하나로서의 Quantization
LLM의 Quantization은 앞선 사례들과 결이 약간 다르다.
- Memory Wall 문제
- Computing 성능은 지난 20년간 9만 배 상승 vs D램 Memory BandWidth는 30배 상승.
- 즉 연산 처리속도 / 메모리에서 데이터 가져오는 속도의 격차는 계속 커지고 있음
- 기존 딥러닝 모델의 inference는 Computing Unit 성능이 중요했는데, LLM의 경우 Memory Wall 때문에 이전까지 문제 없었던 구간에서 병목현상이 발생함.
해결을 위한 대표적인 방법
- Weight-Only Quantization: activation이 아니라 weight만 int4 수준으로 Quantization... inference 속도 향상, GPU Memory 절감
Tips for DL LightWeight
딥러닝 서비스 개발 / 운영할 때 troubleshooting point 팁
- Knowledge Distillation -> 연구는 활발한데 쓰기 왜 이렇게 어렵지? 느껴질 경우
- 모델 lifecycle이 길고, 잘 안 바뀔 모델일 경우 좋다 (학습주기가 빠르면 부적절)
- 약간의 성능향상 / 학습 수렴을 용이하게 해준다
- Quantization
- 성능 저하가 심하다? -> Sensitive Analysis, Mixed Precision 도입
- 속도향상이 없다?
- Profiling 잘 해서, int로 연산하는 구간을 최대한 연속적으로 만드는 것을 권장한다.
- Residual 처럼 성능에 민감한 포인트도 검토하면 좋다.