[ML] 모델 배포와 예측 서비스

Woong·2024년 8월 19일
0

Python / Machine Learning

목록 보기
21/22

1. 머신러닝 배포에 대한 통념

통념 1. 한번에 한두가지 ML 모델만 배포한다

  • 애플리케이션 기능은 다양하고 각각 자체 모델이 필요하므로 모델 수천개를 동시에 훈련하는 등 실제론 한두개만 배포하진 않음

통념 2. 모델을 업데이트하지 않으면 모델 성능은 변하지 않는다

  • 소프트웨어는 시간이 지남에 따라 성능 저하가 발생.
    • 이러한 현상을 소프트웨어 부패software rot 또는 비트 부패 bit rot 라 함
  • ML 에서는 모델이 접하는 데이터 분포가 훈련된 데이터 분포와 다른 데이터 분포 시프트 (data distribution shift) 문제 발생
    • 훈련 직후 성능이 가장 높고 점점 성능이 저하되는 경향을 보임

통념 3. 모델 업데이트는 자주 하지 않아도 된다

  • 시간에 따른 성능 저하가 있으므로, 최대한 빠르게 업데이트 필요
    • 넷플릭스는 하루 수천회, AWS 는 11.7초마다, 엣시는 하루 50회
    • 웨이보, 알리바바, 바이트댄스 등은 10분마다 업데이트

통념 4. ML 엔지니어는 스케일에 신경쓰지 않아도 된다

  • ML 애플리케이션 확장을 위해 스케일에 신경을 써야한다.

2. 배치 예측 vs 온라인 예측

온라인 예측

  • 요청이 도착하는 즉시 예측을 생성, 반환

    • 실시간 데이터를 반영하거나, 모든 입력에 대한 대응이 불가능한 경우(ex. 언어 번역) 등
    • 데이터 샘플이 생성 즉시 예측해야하거나, 짧은 레이턴시가 필요한 경우 용이
  • 스트리밍 피처와 배치 피처 모두 사용 가능

    • 스트리밍 피처 : 스트리밍 데이터(=실시간 전송 데이터)에서 계산된 피처
  • 동기 synchronous 예측, on-demand 예측이라고도 한다.

  • 모델의 예측 생성에 너무 오래 걸릴 수 있다

    • 배치 예측으로 미리 계산해 DB 저장 후 가져오는 것으로 보완

배치 예측

  • 예측이 주기적 or 트리거될 때마다 예측

  • SQL DB, in-memory 데이터베이스 등에서 저장하고 필요에 따라 검색

  • 넷플릭스는 4시간마다 모든 사용자에 대한 영화 추천을 생성

    • 로그인하면 사전 계산된 추천을 가져와서 표시하는 방식
  • 요청과 비동기식으로 생성하므로 비동기 asynchronous 예측 이라고도 함

  • 배치 피처만 사용 가능

  • 예측을 많이 생성하되, 결과가 즉시 필요하지 않을 때 용이

    • -> 사용자의 선호도 변화에 덜 민감
  • 예측을 생성할 요청을 미리 알아야하는 문제

    • 언어 번역 등 모든 케이스를 준비할 수 없는 경우 -> 온라인 예측으로 대응

3. 모델 압축

  • ML 모델의 빠른 추론을 위한 기술
    • 추론 최적화 : 추론을 더 빠르게 한다
    • 모델 압축 : 모델을 더 작게 한다
      • 저차원 인수분해, 지식 증류, 가지치기, 양자화 등
    • 배포된 하드웨어가 더 빠르게 실행되도록 하기

저차원 인수분해 low-rank-factorization

  • 고차원 텐서를 저차원 텐서로 대체하는 방법

  • 소형 합성곱 필터 compact convolutional filter

    • 합성곱 필터convolusion 를 소형 블록으로 대체
    • 매개변수 개수를 줄이고 속도를 높이기 위함
    • ex) 스퀴즈넷 SqueezeNet : (CNN network 의 일종) 3x3 합성곱을 1x1 합성곱으로 대체
    • ex) 모바일넷 MobileNet : K x K x C 인 표준 합성곱을 깊이별 합성곱 depthwise convolusion 과 점별 합성곱 pointwise convolusion(1 x 1 x C) 로 분해
      • K 는 커널 크기, C 는 채널 개수
      • 매개변수가 K^2C 개가 아닌 K^2+C 개만 사용. (K =3 이면 매개변수 개수가 8~9배 감소)
  • 표준 모델에 비해 작은 모델을 빠른 속도로 개발하는데 사용

  • 특정 모델 유형에만 적용되고, 모델 설계에 아키텍처 지식이 많이 필요해 아직 널리 쓰이진 않음

지식 증류 knowledge distillation

  • 작은 모델이 더 큰 모델 or 모델의 앙상블을 모방하도록 training 하는 방법

    • 작은 모델을 학생, 큰 모델 or 모델의 앙상블을 교사로
  • ex) DistilBERT : Bert 모델보다 매개변수는 40% 적지만 언어 이해 능력 Natural Language Understanding (NLU) 는 97% 성능, 속도는 60% 더 빠름

  • 교사와 학생 네트워크간 아키텍처가 달라도 동작

    • 학생은 랜덤 포레스트, 교사는 트랜스포머 training 해도 OK
  • 단, 교사 네트워크의 가용성에 크게 의존하는 문제

    • 사전 훈련된 교사 모델을 사용해 학생 네트워크를 training -> 필요한 데이터가 적고 빠른 training 이 가능
    • 교사 모델이 없다면 학생 네트워크 training 전에 교사 네트워크를 training 해야
      • -> 교사 네트워크 training 시에는 더 많은 데이터와 오랜 시간이 필요
  • 애플리케이션과 모델 아키텍처에도 민감해 널리 사용되진 않음

가지치기 pruning

  • 분류 작업에 중요하지 않거나 중복된 트리 부분을 제거

  • 신경망 맥락에서 가지치기의 의미

    • 노드를 제거하여 아키텍처를 변경, 매개변수를 줄인다
      • 예측에 유용하지 않은 매개변수를 찾아 0으로 설정
      • -> 매개변수 개수가 아니라 0이 아닌 매개변수를 줄이는 것
      • -> 신경망 아키텍처는 유지됨

양자화 quantization

  • 매개변수를 나타내는데 더 적은 비트를 사용해 모델 크기를 줄이는 방법

    • 가장 일반적이고 흔히 사용
    • ex) 32비트 부동 소수점을 사용하는 single precision 부동 소수점(FP32)을 16비트로 나타내는 half precision(FP16) 으로 적용 -> 메모리 사용이 절반
    • ex) 고정 소수점 fixed point: 부동 소수점 대신 8비트 정수로만 구성.
    • ex) BinaryConnect, XNOR-net 은 각 가중치를 이진 1비트로 사용하기도.
  • 메모리 풋프린트 memory footprint 를 줄이고 계산 속도를 향상하는 효과.

    • memory footprint : 프로그램이 실행되는 동안 사용하거나 참조하는 메인 메모리의 양
    • 배치 크기를 늘릴 수 있고, training 시간과 추론 레이턴시 단축
  • 비트 수를 줄이기에 나타내는 값의 범위가 줄어드는 단점

    • 반올림하거나 범위 내로 스케일링 -> 오차로 인한 성능 변화 발생 가능성
  • training 과정에서 하는 '양자화를 고려한 훈련'quantization aware training, 혹은 사후 훈련 post-training 에서 수행

    • quantization aware training : 낮은 정밀도로 모델 training
      • training 단계에서 더 적은 메모리를 사용하기에 하드웨어 대비 더 큰 모델을 학습 가능
      • ex) 엔비디아 Tensor Core, 구글 TPU 등등
    • post-training : FP32 로 training 된 모델을 추론을 위해 양자화
      • ex) 고정 소수점 추론은 구글 텐서플로 라이트, 파이토치 모바일, 엔비디아 텐서 RT 등등

클라우드와 에지에서의 머신러닝

  • 클라우드는 ML 배포가 쉽지만, 높은 비용 문제.
  • 에지 디바이스는 아래 특징을 가짐
    • 클라우드 불가능한 환경에서도 가능하고,
    • 디바이스에 모델이 있을 경우 네트워크 레이턴시 감소,
    • GDPR 등 개인정보보호법 준수에 용이
    • 에지 디바이스가 계산 처리 가능할 정도로 강력해야하고, 충분한 메모리가 요구됨
    • 모바일의 경우 배터리 소모 문제

모델 최적화 기법

벡터화 Vectorization
  • 루프, 중첩 루프가 있는 경우 한번에 한 항목씩 실행하는 대신 메모리 인접한 여러 요소를 동시 실행
    • -> 데이터 I/O 로 인한 레이턴시 줄이기
병렬화 Parallelization
  • 입력된 n차원 배열을 독립된 작업 청크로 나눠, 각 청크를 개별적으로 수행될 수 있도록 한다
루프 타일링 Loop tiling
  • 루프에서 데이터 액세스 순서를 변경해 하드웨어의 메모리 레이아웃과 캐시 활용
    • ex) CPU 에 유리한 액세스 패턴과 GPU 에서 좋은 액세스 패턴은 다를 수 있음
연산자 융합 Operator fusion
  • 중복 메모리 액세스를 방지하기 위해 여러 연산자를 하나로 통합

reference

  • 도서 머신러닝 시스템 설계

0개의 댓글