문법

MLOps


용어


반도체 용어


구조 (kubeflow)


구조 (ml flow)

from mlflow import log_metric, log_param, log_artifacts
# 이하 코드

MLOps(ML Operations)은 머신러닝 모델의 개발, 배포, 운영을 효율적으로 관리하는 방법론입니다. MLOps에서 중요한 요소들은 다음과 같습니다:

  1. 자동화(Automation):

    • CI/CD 파이프라인: 코드 변경이 자동으로 테스트되고 배포되는 지속적 통합(CI)과 지속적 배포(CD) 파이프라인을 구축합니다.
    • 모델 훈련 및 배포 자동화: 모델 훈련과 배포 과정을 자동화하여 일관성과 신뢰성을 높입니다.
  2. 데이터 관리(Data Management):

    • 데이터 버전 관리: 데이터 세트의 버전을 관리하여 재현 가능성을 보장합니다.
    • 데이터 품질 모니터링: 데이터의 품질을 지속적으로 모니터링하고 데이터 드리프트를 감지합니다.
  3. 모니터링 및 관찰성(Monitoring and Observability):

    • 모델 성능 모니터링: 배포된 모델의 성능을 지속적으로 모니터링하여 성능 저하를 빠르게 감지합니다.
    • 로그 및 메트릭 수집: 로그와 메트릭을 수집하여 시스템 상태를 분석하고 문제를 진단합니다.
  4. 협업 및 커뮤니케이션(Collaboration and Communication):

    • 팀 협업 도구: 개발자, 데이터 과학자, 운영 팀 간의 원활한 협업을 위한 도구와 프로세스를 마련합니다.
    • 명확한 문서화: 프로세스와 모델에 대한 명확한 문서를 작성하여 지식 공유와 유지보수를 용이하게 합니다.
  5. 보안(Security):

    • 데이터 보안: 민감한 데이터의 접근 권한을 관리하고 보안 규정을 준수합니다.
    • 모델 보안: 모델이 악용되지 않도록 보안 조치를 취합니다.
  6. 확장성(Scalability):

    • 확장 가능한 인프라: 수요 증가에 따라 시스템을 확장할 수 있는 인프라를 구축합니다.
    • 탄력적인 리소스 관리: 클라우드나 컨테이너 기술을 활용하여 리소스를 효율적으로 관리합니다.
  7. 재현성(Reproducibility):

    • 실험 추적 및 관리: 실험 결과와 하이퍼파라미터를 추적하여 실험의 재현성을 보장합니다.
    • 환경 관리: 개발 환경과 배포 환경을 일치시켜 예측 가능한 결과를 제공합니다.

MLOps는 데이터 과학, 소프트웨어 엔지니어링, DevOps의 교차점에 위치하며, 위의 요소들을 종합적으로 관리함으로써 머신러닝 프로젝트의 성공을 도모합니다.


2. 데이터 관리

데이터 관리는 MLOps에서 매우 중요한 요소로, 데이터의 품질, 버전 관리, 보안 등을 포함합니다. 다음은 데이터 관리의 주요 구성 요소와 예시입니다.

1. 데이터 버전 관리(Data Versioning)

설명:

데이터 버전 관리는 데이터를 시간에 따라 다른 버전으로 관리하는 것입니다. 이를 통해 언제든지 특정 시점의 데이터로 돌아가거나, 데이터 변경의 이력을 추적할 수 있습니다.

예시:

예를 들어, 한 회사가 고객의 구매 데이터를 기반으로 예측 모델을 개발한다고 가정해보겠습니다. 이 회사는 데이터 버전 관리 시스템을 사용하여 2023년 1월 데이터 버전을 v1으로, 2023년 2월 데이터를 v2로 관리할 수 있습니다. 만약 모델이 특정 시점 이후로 성능이 저하되면, 이전 데이터 버전으로 돌아가서 원인을 분석할 수 있습니다.

2. 데이터 품질 관리(Data Quality Management)

설명:

데이터 품질 관리는 데이터의 정확성, 완전성, 일관성 등을 보장하기 위한 프로세스를 의미합니다. 데이터 품질이 떨어지면 모델의 성능도 저하되므로 중요한 요소입니다.

예시:

한 금융 기관에서 신용 점수 예측 모델을 만들기 위해 데이터를 수집한다고 가정해봅시다. 이 과정에서 누락된 값, 중복된 데이터, 이상치 등을 제거하여 데이터 품질을 개선할 수 있습니다. 예를 들어, 결측치를 평균값이나 중앙값으로 대체하고, 데이터의 일관성을 유지하기 위해 형식을 통일합니다.

3. 데이터 보안(Data Security)

설명:

데이터 보안은 민감한 데이터를 보호하고, 무단 접근이나 유출을 방지하는 것을 의미합니다. 이는 개인정보 보호법 등을 준수하는 데 필수적입니다.

예시:

의료 기관에서 환자의 의료 기록을 다루는 경우, 데이터는 암호화되어야 하고 접근 권한이 있는 사용자만 접근할 수 있도록 설정해야 합니다. 또한, 데이터 접근 로그를 기록하여 누가 언제 어떤 데이터에 접근했는지 추적할 수 있습니다.

4. 데이터 수명 주기 관리(Data Lifecycle Management)

설명:

데이터 수명 주기 관리는 데이터 생성부터 폐기까지의 전체 과정을 체계적으로 관리하는 것을 의미합니다.

예시:

전자 상거래 회사에서 고객 데이터를 생성, 사용, 보관, 폐기하는 과정을 관리한다고 가정해봅시다. 데이터 생성 단계에서는 새로운 고객 정보를 수집하고, 사용 단계에서는 이를 분석하여 마케팅 전략을 세우며, 보관 단계에서는 일정 기간 동안 안전하게 보관한 후, 폐기 단계에서는 법적 요구사항에 따라 데이터를 안전하게 삭제합니다.

5. 데이터 통합 및 관리(Data Integration and Management)

설명:

데이터 통합은 다양한 소스에서 데이터를 수집하고 이를 일관성 있게 결합하여 관리하는 것을 의미합니다.

예시:

한 제조업체에서 생산 라인, 재고 관리 시스템, 판매 시스템 등 여러 소스에서 데이터를 수집한다고 가정해보겠습니다. 이 데이터를 통합하여 생산 효율성을 분석하고, 재고 최적화 및 판매 예측을 위한 모델을 개발할 수 있습니다. 이를 위해 ETL(Extract, Transform, Load) 도구를 사용하여 데이터를 추출하고, 변환하여, 적절한 저장소에 로드합니다.

이와 같은 데이터 관리는 머신러닝 프로젝트의 성공에 중요한 역할을 하며, 이를 통해 보다 신뢰할 수 있는 모델을 구축하고 유지할 수 있습니다.

노드추가와 연동 예시

rancher 설치

version: '3'

services:
  rancher:
    image: rancher/rancher:latest
    restart: always

    ports:
    - "22080:80/tcp"
    - "22443:443/tcp"
    volumes:
    - "rancher-data:/var/lib/rancher"
    privileged: true

volumes:
  rancher-data:

MSA transaction

prometheus

스크린샷 2024-04-13 오전 10.12.24.png

명령어

kubectl get node -o=wide
kubectl describe node <NODE_NAME>
kubectl get pod -n <NAMESPACE>
kubectl describe pod <POD_NAME>
kubectl get deploy
kubectl get deployment
kubectl get deployreplicaset,pod
kubectl rollout status deployment <DEPLOYMENT_NAME>
kubectl rollout history deployment <DEPLOYMENT_NAME>
kubectl rollout restart deployment <DEPLOYMENT_NAME>
kubectl get svc
kubectl get svc -n NAME_SPACE
kubectl describe svc -n NAME_SPACE
kubectl get service
Kubectl get ing -n hcms-dev
Kubectl describe ingress -n hcms-dev

- manifest 반영 명령어
	- kubectl apply -f <MANIFEST_FILE>
- 삭제 명령어
	- kubectl delete -f <MANIFEST_FILE>
- rollout 성공 확인 명렁ㅇ
	- kubectl rollout status deploy <DEPLOY_NAME>
- revision 목록 확인 명렁어
	- kubectl rollout history deploy <DEPLOY_NAME>
- revision별 변경사항 상세 확인 명령어
	- kubectl rollout history deploy <DEPLOY_NAME> —revision=<revision_value>
- deploy 현재 revision 상태 확인 명렁
	- kubectl desctibe deploy <DEPLOY_NAME> | grep revision
- event log확인
	- kubectl get event -w #-w : 변경사항이 있을 경우 실시간으로 로그 출력
- pod log 확인
	- kubectl logs <POD_NAME>
- pod 접속
	- kubectl exec -it <POD_NAME> bash
- pod에서 shwll 명령어 실행\
	- kubectl exec -it <POD_NAME> curl 192.168.0.1
- pod를 임시로 띄어 명령어 실행 후 pod삭제
	- kubectl run -it test-pod —image=busybox —rm restart=Never —command — ls -al
	- kubectl run -it test-pod —image=byrnedo/alpine-curl —rm —restart=Never —command — curl 192.168.0.1
- pod끼리 통신 가능여부 확인
	- kubectl exec -n hcms-dev -it hcms-gateway-2.0-fddffcdb8-s6tsf — nslookup 10.42.217.181
	- Kubectl exec -n hcms-dev -it gateway2-6fdfbd877d-mcmfz — pring 10.42.217.181
- Kube pod에 접속하여 명령어 입력
	- kubectl exec -n hcms-dev -it hcms-front-867b559844-5mbmb — npm run start
- curl 예제
	- curl -X POST ‘http://<domain>.<namespace>:<port>/<path>’ -H “content-Type: application/json” -d ‘{}’

#### kubectl 설치
- https://kubernetes.io/ko/docs/tasks/tools/install-kubectl-windows/

#### helm 설치
- choco install kubernetes-helm
- Go templete 설치

#### config map 활용 (rancher ver)
- more resource > core > configmap
- Deployment.yaml

docker 에 curl 추가 (apline ver)

pop끼리 통신 url

kube Account project 관리 (spaceOne cloudforet 기준)