실시간으로 데이터를 처리하고 즉각적으로 결과 반환
실시간성을 요구하는 경우에 유용
주로 Cloud, On-premise 서버에서 모델 호스팅 후, 요청 들어오면 모델이 예측 반환하는 구조
크게 세가지 방법으로 개발을 나눌 수 있다.
직접 웹 서버 개발
Flask, FastAPI 활용하여 서버 구축
localhost/
클라우드 서비스 활용
AWS의 SageMaker, GCP의 Vertex AI
회사에서 리소스가 적은 경우 활용해 볼만 하지만, 매니지드 서비스를 이용하는 것이기에 직접 구축하는 것 보다 비용이 더 나갈 수 있고, 해당 서비스에 의존성이 생기며, 내부 구현 방식을 정확히 확인하지 못하는 경우도 더러 있기에 불안불안할 때가 있다.
오픈소스 활용
Tensorflow Serving, Torch Serve, MLFlow, BentoML 등
Online Serving 적용
어떤 방법을 쓰느냐는 주어진 환경(일정, 인력, 예산, 모델 성능 등)에 따라 다르게 설택할 수 있음
클라우드 건드리다가... 직접 서버만들다가... 서빙 오픈소스 활용하다가... 등등
Online Serving과 Docker
Serving 할 때 Python 버전, 패키지 버전 등 Dependency가 굉장히 중요함.
이를 위해 Docker Image, Docker Compose에 익숙하면 좋음
Online Serving과 Latency
지연시간 최소화는 실시간 예측에서 반드시 고려해야 할 점
- 데이터 전처리 서버 분리
- 모델 경량화
- 병렬 처리
- 예측 결과 캐싱
병목 지점이 모델 서버가 아닌, 데이터를 가져오는 Database 일 수도 있기에 유동적으로 성능을 확인해서 문제를 해결하려하는 역량이 필요함.
Q. 실제 회사에서는 어떻게 서버들이 배포되어 있을까?
HTTP란?
- HTTP(Hyper Text Transfer Protocol)
정보를 주고 받을 때 지켜야 하는 통신 프로토콜(규약), 약속- 약속이 없다? => 사람마다 다르게 쓰게 됨.
- 많은 정보가 오갈 때 이런건 병목을 만듦
- HTTP는 기본적으로 80번 포트를 사용하고 있으며, 서버에서 80번 포트를 열어주지 않으면 HTTP 통신이 불가능
스타일로 HTTP 통신을 활용협업할 때 위와 같은 직관적이고 명시적 요청은 효과적이게 작동함.각 요청이 어떤 동작이나 정보를 위한 것인지 요청 모습 자체로 추론 가능
URI와 URL
- URL: Uniform Resource Locator로 인터넷 상 자원의 위치
- URI: Uniform Resource Identifier로 인터넷 상의 자원을 식별하기 위한 문자열의 구성
URI는 URL을 포함하게 되며, URI가 더 포괄적인 범위
HTTP Header, Payload
HTTP Method와 URL 뿐만 아니라, HTTP Header와 HTTP Payload를 사용하여 요청 가능
curl?
터미널(CLI) 환경에서 HTTP 요청을 할 때 주로 사용하는 도구
curl -X POST -H ~
HTTP 메서드로 POST를 사용
H?
HTTP Header에Content-Type: application/json이라는key: value를 추가
- 우리가 지금 보내는 데이터가 JSON 타입임을 표현
HTTP Header에
key: value형태로 데이터를 저장할 수 있음d?
데이터를 의미하는 것으로, Payload를 사용하여 요청한다.
Payload로 Json을 추가
Payload는 앞 뒤에 따옴표(")를 붙여야 함맨 뒤 주소는 HTTP URL 부분으로 요청을 어디로 보낼 것인지 표현한다.
IP?
네트워크에 연결된 특정 PC의 주소를 나타내는 체계
Internet Protocol의 줄임말로, 인터넷상에서 사용하는 주소체계를 의미함
네 덩이의 숫자로 구성된 IP 주소 체계를 IPv4라고 함
각 덩어리마다 0~255로 나타낼 수 있음
다만, 몇가지는 이미 용도가 정해짐.
localhost, 127.0.0.1: 현재 사용중인 Local PC
0.0.0.0 255.255.255.255: 로컬 네트워크에 접속된 모든 장치와 소통하는 주소
Port란?