0. 머신러닝 추론 시스템이란

최근 머신러닝 모델을 서비스하기 위한 파이프라인을 구축하는 프로젝트를 진행하게 되었다. 경험 없이 밑바닥에서부터 시작하는 입장이었기 때문에 프로젝트를 본격적으로 진행하기에 앞서 여러가지 케이스를 분석하고 참고하는 시간을 가져보았다. 그 과정의 일환으로, 이번 글에서는 머신러닝 파이프라인의 한 부분을 담당하는 추론 시스템(ML inference system)에 대해 간단히 정리해보았다.

머신러닝 추론 시스템은 학습된 머신러닝 모델을 불러와 실제 데이터에 대한 추론 결과를 사용자에게 제공하는 기능을 한다. 추론시스템은 누군가가 실제로 머신러닝 모델 프로덕트를 사용한다. 따라서, 머신러닝에서 우리가 익숙한 [데이터수집 -> 데이터정제 -> 모델링 -> 학습 -> 성능평가 -> 실험반복]의 패턴과는 확연히 다르며, 다양한 관점에서 고려해야할 부분들이 생긴다.

추론시스템은 목적과 자원에 따라 여러가지가 있어, 각 케이스와 구현 방식에 따라 정보가 매우 파편적이었지만, 머신러닝 시스템 디자인 패턴(저자: 시부이 유우스케) 에서 포괄적으로 여러가지 케이스에 대해 다루고 있어 아주 좋은 자료가 되었다. 패턴에 대한 네이밍은 다양하게 있을 수 있으나, 해당 포스트에서는 책의 네이밍과 내용을 참고하여 정리했다.

 


1. 추론 시스템의 베이스 패턴

1.1. 웹 싱글 패턴

개념과 구조:

  • 하나의 API 서버에 하나의 추론 모델이 동작함.
  • 사용자는 API에 데이터를 전송하여, 그에 따른 모델 추론 결과를 받음.

목적 또는 사용 예시:

  • 모델 구현 등 간단한 프로젝트의 시연 결과물
  • 실제 데이터를 대상으로 모델의 성능을 검증하는 단계에 적합

장점:

  • 간단하게 구현 가능.

주의점:

  • 2개 이상의 모델이 추가되어야 하거나, 전처리 등의 추가 단계를 거쳐야 한다면 적합한 패턴이 될 수 없음.

 

1.2. 전처리 추론 패턴

개념과 구조:

  • 대부분의 경우 실제 데이터에 대하여 전처리 이후 추론하는 경우가 많음.
  • 전처리와 추론을 분리하여 코드 관리와 유지보수를 용이하게 함.
  • 전처리와 추론 시스템을 개별 API 서버로 구분하여 개발함.

목적 또는 적용 예시:

  • 전처리와 추론에서 필요로 하는 라이브러리, 코드 베이스, 리소스 등이 크게 다를 경우
  • 전처리와 추론 시스템의 개발의 구분해야 하는 경우

장점:

  • 전처리와 추론 과정 간 장애의 격리하고, 각 과정의 개발을 구분함.
  • 사용되는 리소스를 효율적으로 관리할 수 있음.
  • 사용할 수 있는 라이브러리와 버전 등을 유연하게 선택할 수 있음.

주의점:

  • 추론시스템은 학습된 시점에 사용된 전처리 방식과 모델을 사용해야 하므로, 전처리 시스템과 추론 시스템은 늘 동일한 버전을 유지해야 함.

 

1.3. 배치 추론 패턴

개념과 구조:

  • 배치 추론 패턴은 일정한 주기마다 다량의 데이터에 대하여 추론을 실시함.
  • 학습된 모델이 API 서버가 아닌, 스케쥴러에 의해 동작함.

목적 또는 적용 예시:

  • 모델이 동작하는 방식이 굳이 실시간(real-time) 또는 실시간에 준하는(near-real-time) 추론이 요구되지 않는 경우
  • 일정한 시간동안 데이터를 적재한 뒤 주기적으로 주기적으로 추론하는 경우
  • 과거의 데이터에 대하여 추론하고 싶은 경우 (historical data)

장점:

  • 배치 추론이 실행될 때만 자원을 사용하면 되기에, 비용 절감 가능
  • 장애 대응 등 시간적 여유를 가지고 추론이 가능함 (단, 비즈니스가 이러한 여유를 허용할 경우)

주의점:

  • 시간의 지남에 따라 데이터의 특성이 변화하는 상황이 발생한 경우 적기에 대응이 쉽지 않으므로, 모니터링 기준이 필요함.
  • 소량의 데이터라도 짧은 주기에 한번씩 추론을 실행하여 결과를 확인하는 과정이 필요할 수 있음.

 


2. 순서에 대한 패턴

2.1. 동기 추론 패턴

개념과 구조:

  • 모델이 동작하는 서버에 요청을 하여 추론 결과가 나올 때까지 기다리는 구조를 동기추론 패턴이라 함.

목적 또는 적용 예시:

  • 추론 이후의 단계가 추론 결과에 의존 하는 경우.
  • 예시) 불량품 검출 모델 결과를 반환받아, 불량품을 정상 제품으로부터 분리 함.

장점:

  • 각 작업이 순차적이고 직관적임.
  • 개발이 다소 간단함.

주의점:

  • 프로세스에 병목현상을 야기하는 작업단계가 있을 경우, 사용자는 추론 결과를 받기까지 기다려야 하는 시간이 길어짐.
  • 따라서 작업의 속도를 개선하거나, 모델의 경량화 또는 비동기 추론 패턴을 적용한 프로세스를 고려하는 것이 적합함.

 

2.2. 비동기 추론 패턴

개념과 구조:

  • 사용자는 추론 요청을 하고 결과가 반환 때까지 기다리지 않고 다른 작업을 수행할 수 있으며, 추론이 완료되었을 때 개별적으로 결과를 확인할 수 있음. (비동기적인 처리)
  • 사용자의 요청을 큐 또는 캐시로 저장하여 순차적으로 추론한 뒤, 추론이 완료되었을 결과를 DB에 저장하고 사용자에게 추론 결과가 반환되었으며 확인이 가능함을 알림.

목적 또는 적용 예시:

  • 비즈니스 로직에 따라, 모델의 결과를 즉시 반환하지 않아도 되는 경우.
  • 모델의 추론 시간이 오래 걸리는 경우.

장점:

  • 추론 과정에서 발생할 수 있는 병목현상을 해결할 수 있음.
  • 어떻게 설계했는지에 따라 사용자 경험을 개선할 수 있음.

주의점:

  • 사용자의 요청을 저장하고 추론하는 순서를 경우에 따라 선택해야하며, 시스템 장애가 발생하는 경우 대응 방법을 고려해야 함.

 


3. 2개 이상의 모델에 대한 추론 패턴

3.1. 직렬 마이크로서비스 패턴

개념과 구조:

  • 2개 이상의 모델 추론이 필요한 어플리케이션에서, 모델 간의 순서의 의존성이 존재하는 경우.
  • 단, 여러 개의 추론 시스템을 마이크로서비스로 구현하여, 각 모델 간의 결합도를 낮춤.
  • 모델이 구동되는 여러 개의 추론 마이크로서비스를 워크플로우 파이프라인을 통해 DAG(directed acyclic graph)의 형태로 연결하여 구현할 수 있음.

목적 또는 적용 예시:

  • 여러 개의 모델이 순차적으로 실행되어 최종적으로 하나의 결과를 반환하는 유형에 적합.

장점:

  • 모델과 추론 시스템의 사이즈가 커질 수록, 마이크로서비스 패턴은 리소스 비용을 효율적으로 관리할 수 있음.
  • 독립적으로 구성되어 있기 때문에 직전 추론 결과에 따라 분기처리 또한 가능.

주의점:

  • 동기 추론 패턴과 마찬가지로 추론에 걸리는 시간에 따라 병목현상이 발생할 수 있음.
  • 마이크로서비스 패턴은 서버간 통신으로 인한 지연도 발생할 수 있음.

 

3.2. 병렬 마이크로서비스 패턴

개념과 구조:

  • 여러 개의 추론 마이크로서비스가 의존관계 없이 병렬로 실행되어 결과가 저장됨. 필요에 따라서는 각 추론 결과를 마지막에 집계하는 구조도 가능함.

목적 또는 적용 예시:

  • 하나의 데이터에 대해 여러가지의 모델이 추론을 해야하는 상황에 적합함.

장점:

  • 의존 관계가 없어 유연하게 설계가 가능함.
  • 각 모델의 추론 서버가 구별되어, 리소스 관리나 장애 대응이 용이해짐.

주의점:

  • 각 추론 서버들의 결과 반환 속도가 다르므로, 결과를 집계하는 방식에 대한 고려가 필요함.

 


4. 캐싱 패턴

4.1. 추론 캐시 패턴

개념과 구조:

  • 추론 결과를 캐시로 저장하고, 추후 동일한 데이터에 대해 추론 요청이 있을 때는 추론할 필요 없이 캐시된 결과를 반환하는 개념.
  • 입력된 데이터가 저장되고 식별 및 검색이 가능해야 함. 데이터에 매핑되어 저장된 추론 결과를 반환해야 하기 때문.

목적 또는 적용 예시:

  • 동일한 데이터가 추후에도 입력될 수 있고, 추론 시간을 단축해야 하는 경우.

장점:

  • 추론 속도를 단축할 수 있으며, 추론 시스템이 구동되는 리소스의 비용을 줄일 수 있음.

주의점:

  • 입력 데이터가 적재되는 저장공간과 추론 결과가 저장되는 캐시로 인한 비용이 발생할 수 있음.
  • 동일한 데이터가 발생되는 유형의 목적에 유효한 패턴이며, 그 외 “유사한 데이터” 수준인 경우에는 적용되지 않음.

 

4.2. 데이터 캐시 패턴

개념과 구조:

  • 동일한 데이터에 대해 추론 요청이 있을 경우, 데이터 전처리 결과를 캐시하여 추론하는 경우. 추론 캐시 패턴과 유사하며 함께 사용될 수 있음.
  • 추론 캐싱 패턴과 마찬가지로 입력 데이터가 식별이 가능해야 함.

목적 또는 적용 예시:

  • 데이터 전처리, 피쳐 추출 등 데이터 처리와 관련된 시간이나 비용이 클 경우 적용할 수 있음.

장점:

  • 빈번하게 발생하는 동일한 데이터 전처리와 피쳐 추출로 인해 발생하는 비용을 줄일 수 있음.

주의점:

  • 추론 캐싱 패턴과 마찬가지로, 캐시가 적재되는 용량과 그에 따른 비용이 커질 수 있음.

 


5. 추론 시스템의 안티 패턴

추론 시스템을 구축할 때는 지양해야 하지만 간과하기 쉬운 안티 패턴이 몇 가지 있다.

5.1. 온라인 빅사이즈 패턴

개념:

  • 실시간 처리, 스트리밍 데이터에 대한 추론에 큰 규모의 모델을 적용, 이에 따라 서비스 지연이 발생하는 경우
  • 배치 추론의 구조를 가지고 있지만, 1회 배치 추론의 시간이 배치 추론 주기를 초과하는 경우

접근 방법:

  • 리소스 규모를 확대하여 처리 속도를 개선함.
  • 2개 이상의 모델일 경우 가벼운 모델과 무거운 모델의 서비스를 분리함.
  • 캐싱 패턴을 통해 속도를 개선함.
  • 완벽하고 거대한 모델이 아닌 비즈니스 요구에 충족하는 수준의 모델을 개발함.

5.2. 올인원 패턴

개념:

  • 하나의 서버에서 전처리, 2개 이상의 모델 등 모든 것을 가동하는 경우
  • 활용하는 리소스의 비용은 절약할 수 있으나, 다음과 같은 측면에서 운영이 용이하지 않음.
    • 장애 대응
    • 시스템 갱신
    • 모델 갱신 및 관리
    • 라이브러리 갱신

접근 방법:

  • 전처리, 추론 모델 서버 등을 마이크로서비스로 구현함.

 


7. 마무리하며

추론 시스템을 개발하기 위한 다양한 패턴과 고려해야할 점들을 훑어보았다. 기존의 데이터사이언티스트 관점에서 막막한 영역이었으나, 개념이 정리되어 앞으로의 업무에 도움이 많이 되었다. 현업에서는 훨씬 복잡한 서비스를 위해 위에서 정리한 패턴에 그치지 않고 이를 조합하거나 새로운 패턴을 고안할 것으로 생각된다. 정리한 내용을 토대로 앞으로는 다른 기업의 케이스 등을 분석해보고 업무에 참고할 수 있을 것 같다.