학습일지/AI

SK Tech Summit 2023 - Squash: 딥러닝 서비스 추론속도 개선기

inspirit941 2024. 1. 31. 11:08
반응형

Squash: 딥러닝 서비스 추론속도 개선기

https://youtu.be/xUDmsGS_xjg?si=lF1vYad7ssUdcnBx

 

발표자: 제현우

 

스크린샷 2024-01-29 오전 11 59 12

 

자원 최적화 목표 - Efficient AI

스크린샷 2024-01-29 오후 12 12 03스크린샷 2024-01-29 오후 12 17 01

 

작년: image sensor와 AI 기술 결합한 intelligent CiS (iCiS) 소개했음

  • Always-On: 휴대폰 전면 카메라가 사람의 존재 확인 -> 모바일 화면 깨우기

이미지 센서에서 동작하는 초경량 AI 알고리즘이 필요... 경량화, 최적화 기법 체득.

  • Quantization, Pruning, Knowledge Distiliation

스크린샷 2024-01-29 오후 12 18 24

 

그렇지만 AI 서비스 하다 보면 마주하는 근본적인 문제 - computation cost

  • 특히 딥러닝 서비스는 특정 API 호출이 많아지면 응답 지연 발생... 서비스 품질 만족도에 영향을 준다
  • 가장 쉬운 방법은 'scale out - 더 많은 리소스 투입' 이지만, 비용임.

스크린샷 2024-01-29 오후 1 35 04

 

'Inference 비용이 Training 비용보다 더 크다'

  • GPT-3 하나 inference하려면 NVidia A100 5장
  • 구글 검색시장에 쓰려면 30B 투자비용 필요하다는 포브스 분석

즉 inference 최적화 = 품질향상 + 비용절감 둘 다 가능함.

스크린샷 2024-01-30 오후 12 14 13

 

SK하이닉스는 Inference를 위한 기술브랜드로 Squash 명명하고, 사내 서비스 PoC부터 진행하면서 경량화 기술 축적 중.

  • 지금부터 설명할 예시는 실제 PoC 사례는 아니며, 가상의 고객과 상황을 설정했을 때 inference 속도 개선이 가능한 사례임.
  • 실제 PoC나 정량적인 개선효과는 사내보안 문제로 공개할 수 없다.

Case 1: CNN 계열의 EfficientNet 사용하는 Computer Vision

스크린샷 2024-01-30 오후 12 17 39

 

상황: GPU가 너무 비싸서, CPU 활용하는 inference 추진

문제점: 속도가 너무 느림

  • 그냥 전환할 경우 inference에 걸리는 시간이 18배 증가.

해결법으로 두 가지 방식을 제안.

  • Knowledge Distilation
  • Graph Compiler

스크린샷 2024-01-30 오후 12 20 11

 

Knowledge Distilation (KD)

  • 경량 모델인 student model의 성능 향상을 위해, 크기가 크고 복잡한 teacher model을 학습과정에서 동시에 사용하는 것.
  • 단, KD를 쉽게 쓰기 어려운 경우가 있음.
    • 모델 구조가 달라지면 적용이 어렵다.
    • internel feature 간 매핑 구조를 파악하기 힘들고 복잡하다

즉, 복잡하고 모델 구조에 의존적인 KD 방식은 범용성이 떨어진다. 간단하고 안정적인 기법은 없을까?

스크린샷 2024-01-30 오후 12 20 16

 

주목한 기법: Relaxed Match With Relation

  • Teacher model -> student model로 feature를 옮기는 과정에서
    • intra class relation 정보를 loss에 추가.

기존의 loss 비교 방식보다 안정적인 성능을 보장
teacher / student model 구조가 다르더라도 안정적인 성능 향상 가능.
보다 쉽게 학습 pipeline 구성 가능.

스크린샷 2024-01-30 오후 1 56 31

 

Pytorch 기반 inference... runtime SW 적용해서 추가 가속효과

  • 이 사례에서의 target HW 최적화 컴파일 솔루션은 OpenViNo였음.

최종적으로, 기존 모델의 95.9% 성능 유지 조건에서 CPU 사용함에도 GPU 대비 추가적으로 22% 향상.

Case Study 2. RoBERTa 모델 활용해 feature-store에 데이터 적재

스크린샷 2024-01-31 오전 10 11 07

 

  • 트래픽이 많아지면서 GPU 추가 수요가 필요한 상황
  • 모델의 lifecycle이 빨라서, 경량화를 위한 학습시간을 만들 수 없음.

Post Training Quantization 적용 시도

  • 추가적인 학습 없이도, 소량의 calibration dataset만으로도 quantization parameter를 확보할 수 있는 방법.
  • 일반적인 방식으로 적용하면, 성능 하락은 불가피함. 그러나 성능열화는 전혀 없어야 한다는 요구사항이 있음.

스크린샷 2024-01-31 오전 10 35 27

 

transformer 기반 언어모델에서 Quantization 적용 시 발생하는 대표적인 열화 포인트

  • Layer Norm 부분... activation outlier를 증가시켜서 quantization error가 올라감. -> gamma migration 기법 적용.
    • outlier 증폭시키는 역할을 하는 Layer Norm의 gamma parameter를
    • layer norm 이후 단계인 linear에 적용하거나, dequantization scale에 통합... 에러 발생 빈도를 낮춘다.
    • 구조만 바꿀 뿐, 모델에 추가로 오버헤드가 드는 게 전혀 아님.

스크린샷 2024-01-31 오전 10 30 01

 

transformer에 적용하자면

  • layer norm의 gamma parameter는 layer norm 이후에 위치하는 Q,K,V liner parameter에 병합함.

스크린샷 2024-01-31 오전 10 37 41

 

추가 성능향상 방법

  • Quantization에 따른 성능 열화 측정방법 -> Qunatization Sensitivity
    • 성능저하가 크게 발생하는 특정 block은 int8이 아니라 fp16 기반 연산으로 조치 완료
  • 추가 성능향상이 필요한 경우 Quantization Aware Training.
    • 모든 파라미터 대상으로 재학습하는 게 아니라, Quantization 대상 파라미터만 fine tuning

스크린샷 2024-01-31 오전 10 44 20

 

결과

  • int8 quantization된 모델의 성능은 100% 유지하면서
  • Inference latency 12배 감소

클라우드 서비스를 쓰더라도 상당한 양의 비용절감이 가능하다고 볼 수 있음.

Efficient LLM

스크린샷 2024-01-31 오전 10 45 39

 

사실 이 모든 기법이 가장 절실히 필요한 곳은 LLM 분야.

  • inference time
  • GPU Requirement
  • Fine-tuning time

한 가지 기법만으로 해결할 수 있는 성격의 것은 아님. 따라서 아래 세 가지 방향으로 연구하고, 효과 입증을 위해 노력 중.

  • Compression
  • Flash/PagedAttention
  • PEFT

오늘 설명할 내용은 Compression 기법 중 하나로서의 Quantization

스크린샷 2024-01-31 오전 10 48 36

 

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

스크린샷 2024-01-31 오전 10 53 57

 

딥러닝 서비스 개발 / 운영할 때 troubleshooting point 팁

  • Knowledge Distillation -> 연구는 활발한데 쓰기 왜 이렇게 어렵지? 느껴질 경우
    • 모델 lifecycle이 길고, 잘 안 바뀔 모델일 경우 좋다 (학습주기가 빠르면 부적절)
    • 약간의 성능향상 / 학습 수렴을 용이하게 해준다
  • Quantization
    • 성능 저하가 심하다? -> Sensitive Analysis, Mixed Precision 도입
    • 속도향상이 없다?
      • Profiling 잘 해서, int로 연산하는 구간을 최대한 연속적으로 만드는 것을 권장한다.
      • Residual 처럼 성능에 민감한 포인트도 검토하면 좋다.

스크린샷 2024-01-31 오전 10 59 45

반응형