Full Stack Deep Learning — Testing and Deployment

이 글은 Full Stack Deep Learning의 여섯번째 코스인 Testing and Deployment를 보고 내용을 정리한 글입니다. 내용의 사진은 모두 발표 슬라이드를 가져왔습니다. 잘못 이해했거나, 의역이나 오타가 있을 수 있습니다. 제보해주시면 감사하겠습니다 🙏

Photo by Elevate on Unsplash

ML Test Score

ML Test Score : A Rubric for Production Readiness and Technical Debt Reduction 이것은 구글 실무자들의 철저한 프레임워크/체크리스트다. 총 28가지 검사항목이 4종류로 나뉘어져있다. 명확하고 준비된 가이드라인과 지표로 사용하며 안정적인 시스템을 개발하는 방향으로 발전시켜갈 수 있다.

Data Tests

  1. 스키마와 잘 맞는다
  2. 모든 피처들은 유익하다
  3. 어떤 피처도 비용이 너무 많이 들지 않는다
  4. 피처는 메타레벨 요구사항을 충족한다
  5. 데이터 파이프라인이 적절하게 개인정보를 제어한다
  6. 새로운 피처도 빠르게 추가될 수 있다
  7. 모든 피처입력코드는 테스트됐다.

Model Test

  1. 모델 스펙이 리뷰를 받고 제출됬다
  2. 온라인/오프라인 metrics가 연관성이 있다(?)
  3. 하이퍼파라미터는 튜닝됬다
  4. 모델의 부실한 점의 영향력을 알고있다.
  5. 더 간단한 모델이 더 좋지는 않다
  6. 모델 성능은 중요한 데이터 조각에 충분하다(?)
  7. 모델은 inclusion을 고려하기 위한 테스트이다(?)

ML Insfrastructure Tests

  1. 트레이닝 결과는 재생산가능하다
  2. 모델 스펙이 단위 테스트를 통과했다
  3. ML 파이프라인은 통합 테스트를 통과했다
  4. 모델 성능은 배포 전 검증됬다
  5. 모델은 디버깅할 수 있다
  6. 모델은 배포전 카나리 테스트를 통과했다(Canaried가 카나리아 테스트를 말하는듯)
  7. 배포된 모델은 롤백할 수 있다.

Monitoring Tests

  1. 의존성 변경 결과를 알려준다
  2. 입력에 대한 데이터 불변성 유지
  3. 학습과 배포는 skewed되지 않는다(??)
  4. 모델은 너무 오래되지 않았다
  5. 모델은 수치적으로 안정돼있다
  6. 계산성능이 퇴보되지 않는다
  7. 예측성능이 퇴보되지 않는다
  • 0–1점: 전부 테스트를 하지 않은건 아니지만, 신뢰도에 큰 구멍이 있을 가능성을 고려해봐야 한다.
  • 1–2점: 간단한 프로덕션화를 통과했다. 하지만 투자가 더 필요하다
  • 2–3점: 합리적으로 테스트됬다. 하지만 아직도 자동화될 수 있는 테스트와 절차들이 남아있다.
  • 3–5점: 테스트, 모니터링 자동화가 잘 됐고 중요한 시스템에도 적절하다.
  • 5점 이상: 엄청난 수준의 테스트와 모니터링 자동화

CI / Testing

  • 유닛 테스트: 모듈 기능을 테스트함.
  • 통합 테스트: 전체 시스템이 작동하는 것을 테스트함.
  • CI(Continuous Integration): repository에 코드가 푸시될때 모든 테스트 작업들을 수행하는 것
  • Jenkins / Buildkite: 자신의 하드웨어나 클라우드에서 CI를 돌린다면 좋은 선택, GPU를 이용해서 예약된 학습 테스트를 할 수 있다. 유연성이 좋다
  • 마지막으로 도커를 이용한 컨테이너화(Docker)

Docker

더 진행하기 전에, 도커에 대해 간단히 알아보자. 도커는 가상머신(VM)이다. 도커는 운영체제 수준의 가상화를 지원한다. 바로 컨테이너화(Containerization)이다.

Web Deployment

웹 배포에는 여러 방법이 있다. 우선 기본적으로 REST API의 형태로 기능을 제공하게된다.

  • 컨테이너를 통해 배포하면, 오케스트레이션으로 스케일링
  • 서버리스 배포를 하면 스케일링 걱정 X
  • 모델 배포 특화 솔루션을 사용할 수도 있다 — Google’s Tensorflow Serving, Amazon’s Model Server for MXNet, Berkeley RISE Lab’s Clipper, etc…
서버가 없다면 다운될 일도 없다 — 명짤..

Monitoring

어떻게 ML 시스템을 모니터링할까?

  • 클라우드 제공자들은 모니터링 솔루션들을 제공한다.
  • 유저가 예측 결과를 교정하는 경우가 증가했다거나

Hardware / Mobile

어떻게 모바일/임베디드 하드웨어에 모델을 배포할까?

Model Pruning & Quantization

모델 가지치기와 양자화는 모델이 더 적은 메모리와 적은 계산량으로 빠르게 동작하게 도와주는 모델 압축 기법이다. 텐서플로우는 Tensorflow Lite, 파이토치는 Pytorch Mobile을 사용할 수 있다.

  • Quantization: 가중치 값을 32비트 부동소수점에서 16비트 부동소수점으로 바꾸는 등의 방법으로 계산을 더 빠르고 메모리 사용량을 줄임.
  • Interchange Format을 고려해볼 수 있다

2020.12.8 ~ 2022.6.7 육군복무중 Serving in the South Korean Military Service

2020.12.8 ~ 2022.6.7 육군복무중 Serving in the South Korean Military Service