





패스트캠퍼스 챌린지를 참여하면서 아주 많은 것을 얻게 됐습니다. 강의의 내용을 듣기에 끝났다면 강의가 끝나고 학습일지를 작성하면서 전에와는 다른 학습 체득량을 느낄 수 있었습니다. 지식 기억도 더욱 오래 유지 중 입니다. 찾아보니 강의를 듣고 글을 쓰는 것이 output 방식으로 이것은 학습 방법중에 초효율 방법이라는 것을 이번의 계기를 통해 알게 되었습니다. 앞으로도 수많은 공부를 하면서, 강의를 들으면서 학습 일지를 작성하여 학습한 지식을 더욱 더 오래 유지하는 방법을 실천하겠습니다. mlops 강의를 듣기 전에는 미래의 중요한 기술 비전은 머신러닝과 AI인데 그것을 위해서는 mlops가 필요하다고 알게되었다. mlops단어에만 관심이 있었지 어떤 건지는 정확하게 몰랐다. 그런데 챌린지를 하면서 많이 알 수 있게 되었다. MLOps는 ML 시스템 개발(Dev)과 ML 시스템 운영(Ops)을 통합하는 것으로, 데이터 레이블링의 일관성을 위해 인프라를 만들어 자동으로 운영되도록 만드는 역할을 합니다. 데이터의 품질을 높이려면 데이터의 양만큼이나 질도 중요하기 때문에 데이터를 체계적으로 관리하고 개선시키는 MLOps의 중요성이 강조되고 있습니다. 왜 MLops를 머신러닝/AI에 사용할려는 이유가 무엇일까? MLOps를 배우면 무엇이 좋을까?의문을 해결할 수 있었다. 그 이유는 이렇다.1. 지속적 통합(CD)과 지속적 배포(CD)를 운영 과정에 도입해 개발 주기를 단축시킵니다.2. 머신러닝 모델 배포 속도를 증가시키고, 안정적인 출시를 가능케 해줍니다.3. 데이터 품질을 일정하게 유지하게 해줍니다.4. 프로덕션까지 살아남는 성공적인 모델이 많아지고, 자연스럽게 모델 부채 문제가 해결됩니다.mlops를 구성하는 데 필요한 오픈소스 프로그램들이 어떤 것들이 있는지 알 수 있게되었고 그 다양한 것들은 이런 것들이 있다.
도커,쿠버네티스,DVC,mlflow,prometheus,grafana,kubeflow,minikube,HELM,katib,jenkins,seldon core,feast,github actions 등 정말 다양한 오픈소스들로 구성되어 있다는 걸 알 수 있었다.하나 이상의 서버로 묶인 쿠버네티스 클러스터는 보통 마스터 역할을 하는 소수의 컨트롤 Plane 노드와 Worker 역할을 하는 다수의 노드들로 구성되어 있다.
컨트롤 plane 노드는 여러 개의 worker 노드들을 관리하고 모니터링 하면서 클라이언트로부터 요청을 받게되고 어떠한 요청이 오면 요청에 맞는 worker 노드들을 스케줄 링해서 해당 노드로 요청을 전달하는 역할을 한다. 그리고 이때 사용자,클라이언트가 보내는 요청을 받는 컴포넌트 이름이 쿠버네티스 cube API서버이며 사용자가 보낸 요청의 desired state를 key value 형식으로 저장하는 DB가 etc라는 컴포넌트이다
컨트롤 plane의 내부의 cube api 서버가 전달해주는 요청을 worker 노드에서는 실제로 수행을 해야한다.
그 과정에 있어서 컨트롤 plane 으로부터 명령을 받고 또 본인의 worker 노드의 상태를 다시 컨트롤 plane 에게 cube api 서버에게 전달하는 역할을 하는 컴포넌트가 kubelet이다. 각각의 worker 노드 내부에서는 kubelet 명령을 다시 받아서 도커나 컨테이너-d 같은 컨테이너 런타임 엔진이 실제로 컨테이너를 생성하고 관리하는 역할을 담당한다.
쿠버네티스를 제대로 알려면 10시간 강의가 든다고 한다.
핸즈온의 형태로, 쿠버네티스의 기본적인 리소스들을 관리자가 아닌 사용자의 입장에서만 배워보는 시간이었다.
Prometheus Server
시계열 데이터를 수집하고 저장
metrics 수집 주기를 설치 시 정할 수 있으며 default 는 15초
Service Discovery
Monitoring 대상 리스트를 조회
사용자는 쿠버네티스에 등록하고, Prometheus Server 는 쿠버네티스 API Server 에게 모니터링 대상을 물어보는 형태
Exporter
Prometheus 가 metrics 을 수집해갈 수 있도록 정해진 HTTP Endpoint 를 제공하여 정해진 형태로 metrics 를 Export
Prometheus Server 가 이 Exporter 의 Endpoint 로 HTTP GET Request 를 보내 metrics 를 Pull 하여 저장한다.
하지만, 이런 pull 방식은 수집 주기와 네트워크 단절 등의 이유로 모든 Metrics 데이터를 수집하는 것을 보장할 수 없기 때문에
Push 방식을 위한 Pushgateway 제공
Pushgateway
보통 Prometheus Server 의 pull 주기(period) 보다 짧은 lifecycle 을 지닌 작업의 metrics 수집 보장을 위함
AlertManager
PromQL 을 사용해 특정 조건문을 만들고, 해당 조건문이 만족되면 정해진 방식으로 정해진 메시지를 보낼 수 있음
ex) service A 가 5분간 응답이 없으면, 관리자에게 slack DM 과 e-mail 을 보낸다.
Grafana
Prometheus 와 항상 함께 연동되는 시각화 툴
Prometheus 자체 UI 도 있고, API 제공을 하기에 직접 시각화 대시보드를 구성할 수도 있음
PromQL
Prometheus 가 저장한 데이터 중 원하는 정보만 가져오기 위한 Query Language 제공
Time Series Data 이며, Multi-Dimensional Data 이기 때문에 처음 보면 다소 복잡할 수 있나 Prometheus 및 Grafana 를 잘사용하기 위해서는 어느 정도 익혀두어야 함
단점
Scalability, High Availability
Prometheus Sever 가 Single node 로 운영되어야 하기 때문에 발생하는 문제
⇒ Thanos 라는 오픈소스를 활용해 multi prometheus server 를 운영
Grafana Dashboard 모범 사례
수많은 Metric 중 모니터링해야할 대상을 정하고 어떤 방식으로 시각화할 것인지에 대한 정답은 없습니다. (Task 마다 달라지는 요구사항)
다만, Google 에서 제시한 전통 SW 모니터링을 위한 4 가지 황금 지표는 다음과 같음
Latency
사용자가 요청 후 응답을 받기까지 걸리는 시간
Traffic
시스템이 처리해야 하는 총 부하
Errors
사용자의 요청 중 실패한 비율
Saturation
시스템의 포화 상태
ML 기반의 서비스를 모니터링할 때도 위 4가지 지표를 염두에 두고 대시보드를 구성하는 것을 권장
다만 처음 시작할 때는 위의 다양한 오픈소스 대시보드 중 하나를 import 하는 것부터 시작
예전에 ML모델을 서버에 올리기 위해 엄청 애를 먹은 적이 있었는 데 이 강의를 들으면서 어떤 방법으로 ML모델을 서버에 올리는 지를 알 수 있게 되었다 이를 모델 서빙이라한다. 그 실습자료를 올려본다. 강의에서는 Flask를 이용하여 모델 서빙을 하였다. Flask 를 사용해 여러분의 컴퓨터에 간단한 Web Server 를 띄워보겠습니다.
from flask import Flask
app = Flask(__name__)
@app.route("/")
def hello_world():
return "<p>Hello, World!</p>"
@app.route("/fastcampus")
def hello_fastcampus():
return "<p>Hello, Fast Campus!</p>"
if __name__ == "__main__":
app.run(debug=True, host='0.0.0.0', port=5000)
저장했던 모델(pickle 파일)을 load 하여, POST /predict API 를 제공하는 Flask Server 를 구현합니다.
import pickle
import numpy as np
from flask import Flask, jsonify, request
# 지난 시간에 학습한 모델 파일을 불러옵니다.
model = pickle.load(open('./build/model.pkl', 'rb'))
# Flask Server 를 구현합니다.
app = Flask(__name__)
# POST /predict 라는 API 를 구현합니다.
@app.route('/predict', methods=['POST'])
def make_predict():
# API Request Body 를 python dictionary object 로 변환합니다.
request_body = request.get_json(force=True)
# request body 를 model 의 형식에 맞게 변환합니다.
X_test = [request_body['sepal_length'], request_body['sepal_width'],
request_body['petal_length'], request_body['petal_width']]
X_test = np.array(X_test)
X_test = X_test.reshape(1, -1)
# model 의 predict 함수를 호출하여, prediction 값을 구합니다.
y_test = model.predict(X_test)
# prediction 값을 json 화합니다.
response_body = jsonify(result=y_test.tolist())
# predict 결과를 담아 API Response Body 를 return 합니다.
return response_body
if __name__ == '__main__':
app.run(port=5000, debug=True)
seldon core 이용한 방법이다.
import numpy as np
from seldon_core.seldon_client import SeldonClient
sc = SeldonClient(
gateway="ambassador",
transport="rest",
gateway_endpoint="10.100.33.197:80", # Make sure you use the port above
namespace="seldon",
)
client_prediction = sc.predict(
data=np.array([[1, 2, 3, 4]]),
deployment_name="iris-model",
names=["text"],
payload_type="ndarray",
)
print(client_prediction)
또한 각 플랫폼에서의 ML 모델 배포 방법 AWS(Sagemaker, AutoML), Azure, 구글 클라우드 플랫폼 등 Public Cloud와 실무에서 가장 많이 활용하는 Private Cloud에서의 ML 파이프라인 생성법과 모델 배포 노하우를 알고 실습할 수 있어서 좋았다.
#패스트캠퍼스 #패캠챌린지 #직장인인강 #직장인자기계발 #패스트캠퍼스후기#온라인패키지:머신러닝서비스구축을위한실전MLOps#머신러닝서비스구축을위한실전MLOps온라인패키지Online.
https://bit.ly/37BpXiC
패스트캠퍼스 [직장인 실무교육]
프로그래밍, 영상편집, UX/UI, 마케팅, 데이터 분석, 엑셀강의, The RED, 국비지원, 기업교육, 서비스 제공.
fastcampus.co.kr
본 포스팅은 패스트캠퍼스 환급 챌린지 참여를 위해 작성되었습니다.
'MLops' 카테고리의 다른 글
패스트캠퍼스 챌린지 50일차 (0) | 2022.03.14 |
---|---|
패스트캠퍼스 챌린지 49일차 (0) | 2022.03.13 |
패스트캠퍼스 챌린지 48일차 (0) | 2022.03.12 |
패스트캠퍼스 챌린지 47일차 (0) | 2022.03.11 |
패스트캠퍼스 챌린지 46일차 (0) | 2022.03.10 |