[부스트캠프 AI-Tech] 5주차 Day 2

LKM·2022년 2월 20일
0

✏️학습 정리


4. Docker

  • 가상화

    • 간단한 정의: 공통적으로 사용하는 일종의 템플릿
    • 개발 서버 Flow
      • Local 환경에서 개발
      • 완료되면 Staging 서버
      • Production 서버에 배포
    • 개발 서버 문제점
      • 개발 환경과 배포 환경이 다른 경우 (여러가지 오류 발생 가능)

      • 같은 OS 환경이어도 올바르게 작동 안할 수 있다.

      • 서버가 100대가 있으면 하나 업데이트 시 모두 업데이트 해줘야 한다.

        —> 서버 환경까지도 모두 한번에 소프트웨어화 할 수 없을까? → 가상화

    • 가상화: 특정 소프트웨어 환경을 만들고, Local, Production 서버에서 그대로 활용
      • 개발과 운영 서버의 환경 불일치 해소
      • 어느 환경에서나 동일한 환경으로 프로그램 실행 가능
  • Docker 소개

    • Docker 이전
      • 주로 VM 사용
      • VM은 OS 위에 OS를 하나 더 실행시키는 점에서 많은 리소스 사용 → 무겁다
    • Container
      • 가상화를 좀 더 경량화된 프로세스의 개념으로 만든 기술
      • 빠르고 가볍게 가상화 구현
    • Docker
      • Container 기술을 쉽게 사용할 수 있도록 나온 도구

      • Docker Image

        • 컨테이너를 실행할 때 사용할 수 있는 템플릿
        • Dockerhub에서 다운받을 수 있다.
      • Docker Container
        - Docker Image를 활용해 실행된 인스턴스

      • 다른 사람이 만든 소프트웨어를 가져와서 바로 사용 가능 (Docker Image 실행)

      • OS에 관계없이 동일하게 실행 가능

      • 서비스 배포시 원격 저장소(Container Registry) 사용

  • Docker 기본 명령어

    • docker pull “이미지 이름:태그” : 원하는 이미지 다운
    • docker images : 다운받은 이미지 확인
    • docker run “이미지 이름:태그” : 다운받은 이미지 기반으로 Docker Container를 만들고 실행
      • docker run --name mysql-test -e MYSQL_ROOT_PASSWORD=1234 -d -p 3306:3306 mysql:8
    • docker ps : 실행중인 컨테이너 확인
    • docker ps -a : 모든 컨테이너 확인
    • docker exec -it “컨테이너 이름(혹은 ID)” /bin/bash : 컨테이너에 진입 (SSH와 유사)
    • docker stop “컨테이너 이름(ID)” : 실행중인 컨테이너 중지
    • docker rm “컨테이너 이름(ID)” : 중지된 컨테이너 삭제
      • docker rm “컨테이너 이름(ID)" -f : 실행중인 컨테이너도 삭제 (지양)
  • Docker 파일 공유

    • Docker Container 내부는 특별한 설정이 없으면 컨테이너 삭제시 파일이 같이 사라짐
    • 파일을 유지하고 싶다면 Host와 Container의 저장소를 공유해야됨
    • Volume Mount (폴더 공유)
      • -v Host_Folder:Container_Folder
      • docker run -it -p 8888:8888 -v /some/host/folder/for/work:/home/jovyan/workspace jupyter/minimal-notebook
  • Docker Image 만들기

    • 프로젝트 셋팅 (ex. 폴더 생성, 가상환경 세팅과 FastAPI 패키지 설치)
    • 간단한 코드 작성 (ex. FastAPI 메세지 전달 코드 작성)
    • 사용한 라이브러리 명시
      • pip frezze : 설치한 라이브러리를 모두 보여줌
        • pip list --not-required --format=freeze : 의존성에 따라 설치된 라이브러리는 보이지 않음
      • pip로 설치한 라이브러리를 모두 requirements.txt에 저장
    • Dockerfile 작성
      • FROM : 베이스 이미지 지정
      • COPY : 로컬 내 디렉토리 및 파일을 컨테이너 내부로 복사
      • WORKDIR : RUN, CMD 등을 실행할 컨테이너 내 디렉토리 지정
      • RUN : 어플리케이션 실행에 필요한 여러 리눅스 명령어들을 실행
      • CMD : 이미지 실행 시 바로 실행할 명령어 지정
    • docker build “Dockerfile이 위치한 경로” : 이미지 생성(빌드)
      • -t “이미지 이름:태그” : 옵션으로 이미지 이름과 태그 지정 가능 (미지정시 latest)
    • EXPOSE : 컨테이너 외부에 노출할 포트 지정
    • ENTRYPOINT : 이미지를 컨테이너로 띄울 때 항상 실행하는 커맨드 (CMD, RUN과의 차이점은?)



5. MLflow

  • MLflow 이전

    • 머신러닝 모델 학습시 사용한 Parameter, Metric을 따로 기록
    • 개인 컴퓨터, 연구실 서버 사용하다 메모리 초과
    • 학습하며 생긴 Weight File을 동료들에게 공유
    • Weight File로 Model Versioning
    • 문제 정리
      • 실험 추적이 어렵다.
      • 코드 재현이 어렵다.
      • 모델 패키징, 배포 방법이 어렵다.
      • 모델 관리하는 중앙 저장소가 없다.
  • MLflow 소개

    • 머신러닝 실험, 배포를 쉽게 관리할 수 있는 오픈소스
    • CLI, GUI(웹 인터페이스) 제공
  • MLflow 핵심 기능

    1. Experiment Management & Tracking
      • 머신러닝 실험들을 관리하고, 기록할 수 있음
      • 하나의 MLflow 서버 위에서 각자 자기 실험을 만들고 공유 가능
      • 각 실행에 사용한 소스 코드, Parameter, Metric 등을 저장
    2. Model Registry
      • MLflow로 실행한 머신러닝 모델을 Model Registry(모델 저장소)에 등록 가능
      • 모델 저장소에 저장될때마다 해당 모델 버전이 자동으로 올라감 (Version 1 → 2 → ..)
      • 모델 저장소를 쉽게 공유하고, 활용할 수 있음
    3. Model Serving
      • Model Registry에 등록한 모델을 REST API 형태의 서버로 Serving 가능
      • Input (Model input)
      • Output (Model output)
      • 직접 Docker Image 만들지 않아도 생성 가능
  • MLflow Component

    1. MLflow Tracking
      • 머신러닝 코드 실행, 로깅을 위한 API, UI
      • 팀원들의 결과와 비교하며 협업 가능
    2. MLflow Project
      • 머신러닝 프로젝트 코드를 패킹하지 위한 표준
      • Project (소스코드, 의존성과 어떻게 실행해야 하는지 저장 등..)
      • Tracking API를 사용하면 프로젝트 Version, Parameter 자동 logging
    3. MLflow Model
      • 모델은 모델 파일(pickle 등)과 코드로 저장
      • 다양한 플랫폼에 배포할 수 있는 여러 도구 제공
    4. MLflow Registry
      • MLflow Model의 전체 Lifecycle에서 사용할 수 있는 중앙 모델 저장소
  • MLflow 실습

    • pip install mlflow : MLflow 설치
    • Experiment (실험)
      • 제일 먼저 생성
      • 프로젝트 단위로 구성
      • 하나의 Experiment는 여러 Run(실행)을 가짐
    • mlflow experiments create --experiment my-first-experiment : Experiment 생성
    • mlruns라는 폴더 생김
    • mlflow experiments list : Experiment 리스트 확인
    • 머신러닝 코드 작성
      • 모델에 필요한 라이브러리 설치
      • 폴더 생성 후, 머신러닝 코드 작성
    • 프로젝트 (MLProject → 이름 고정)
      • MLflow를 사용한 코드의 프로젝트 메타 정보 저장
      • 프로젝트를 어떤 환경에서 어떻게 실행시킬지 정의
    • Run (실행)
      • 하나의 Run은 코드를 1번 실행한 것 의미
      • 보통 Run은 모델 학습 코드를 실행
    • Run에서 로깅하는 것
      • Source: 실행한 Project 이름
      • Version: 실행 Hash
      • Start & End time
      • Parameters: 모델 파라미터
      • Metrics: 모델의 평가 지표, Metric을 시각화 가능
      • Tags: 관련된 Tag
      • Artifacts: 실행 과정에서 생기는 다양한 파일들 (이미지, 모델 pickle 등)
    • mlflow run logistic_regression --experiment-name my-first-experiment : Run 실행
      • --no-conda : conda가 없을 때 추가
    • mlflow ui : UI 실행 (localhost로 MLflow UI 접속)
    • Experiment / Run 관계
      • Run 들은 서로 Parameter와 Metric이 다를 수 있다.
  • 그 외의 TIP

    • autolog
      • 매번 parameter를 명시하는 것을 자동화 시킴
      • parameter가 많을수록 코드 라인이 줄어든다.
      • 자세한 내용
    • Parameter
      • mlflow run 시에 parameter 값을 넣어줄 수 있다 (agrv 사용)
      • MLProject에 모델의 parameter 정보 입력
  • MLflow 서버 배포

profile
함께 자라기

0개의 댓글