Introduction
- 배포 deploy는 일반적으로 ‘모델을 실행하고 액세스 가능하게 함’을 의미하는 포괄적인 용어이다. 모델은 개발 중에는 보통 개발 환경에서 실행되지만 모델을 배포하려면 개발 환경에서 벗어나야 한다. 테스트를 위한 모델을 스테이징 환경에 배포하거나 최종 사용자가 사용할 프로덕션 환경에 배포한다.
- 모델 내보내기란 모델을 다른 애플리케이션에서 사용할 수 있는 형식으로 변환하는 일을 의미한다. 이 프로세스를 직렬화serialization라고 부르기도 한다. 내보낼 때는 모델의 두 부분, 즉 모델 정의와 모델 매개변숫값을 내보낸다. 모델 정의는 히든 레이어 개수와 각 레이어의 유닛 개수 같은 모델 구조를 정의하며 모델 매개변숫값은 이러한 유닛과 레이어에 대한 값을 제공한다. 일반적으로 두 부분을 함계 내보낸다.
- 텐서플로2에서는 tf.keras.Model.save()를 사용해 텐서플로의 SavedModel 형식으로 내보낸다.
- 파이토치에서는 torch.onnx.export()를 사용해 모델을 ONNX 형식으로 내보낸다.
7.1 머신러닝 배포에 대한 통념
7.1.1 통념 1: 한 번에 두 가지 머신러닝 모델만 배포합니다.
- 실제로 우버는 수천 개 모델을 프로덕션에 적용한다. 구글은 항상 수천 억 개의 매개변수 크기를 가진 모델 수천 개를 동시에 훈련한다. 부킹닷컴에는 모델이 150개 이상 있다. 알고리드미아에서 수행한 2021년 연구에 따르면 직원이 2만 5천명 이상인 조직 중 41%가 모델을 100개 이상 프로덕션에 적용하고 있다.
7.1.2 통념 2: 아무것도 하지 않으면 모델 성능은 변하지 않는다.
- 시간에 따라 소프트웨어 프로그램이 아무런 변화가 없어 보임에도 성능이 저하되는 현상을 소프트웨어 부패software rot 또는 비트 부패bit rot라고 한다.
- ML 시스템은 프로덕션에서 모델이 접하는 데이터 분포가 훈련된 데이터 분포와 다를 때 데이터 분포 시프트data distribution shift라는 문제를 겪는다. 따라서 ML 모델은 훈련 직후에 가장 잘 수행되고 점점 성능이 저하되는 경향이 있다.
7.1.3 통념 3: 모델을 자주 업데이트할 필요 없다.
- 모델 성능은 시간에 따라 저하되므로 최대한 빨리 업데이트해야 한다.
- 모델 재 훈련 빈도 → 9장
7.1.4 통념 4: 대부분의 머신러닝 엔지니어는 스케일에 신경 쓰지 않아도 된다.
- 2019년 스택 오버플로 개발자 설문 조사에 따르면 응답자의 절반 이상이 직원이 100명 이상인 회사에서 근무했다.