[boostcamp]Week 5 Linux & Docker & MLflow

허치영·2022년 2월 18일
0

boostcamp

목록 보기
1/5
post-thumbnail

이번주차 내용은 AI 서비스 개발 기초라는 이름으로 진행되었다.
머신러닝 프로젝트의 흐름과 실무에서 사용하게 많이 사용하게 될 Linux, Docker, MLflow에 관한 강의로 구성되어 있었다.

Linux

리눅스는 예전에 학교에 다닐 때 라즈베리파이를 자주 만졌다보니 CLI에 대한 거부감은 없어 생각보다 편안한 기분으로 강의를 들을 수 있었다.
강의는 쉘 커맨드의 설명 위주로 진행되었는데 잘 안써봤던 커맨드나 좀 가물가물한 것들 위주로 정리하고 넘어가려 한다.

  • cat : 파일 내용을 터미널에서 보여주는 커맨드. cat file1 > file2로 overwirte를,         cat file1 >> file2로 file1을 file2에 append 해준다.
  • export : 환경 변수 설정 커맨드. export var="aaa"와 같은 형태로 사용.
                 그냥 export만 치면 설정되어있는 환경 변수를 다 보여준다.
  • head/tail : 파일 앞 뒤 n개 행 출력. head -n 5 file, tail -n 5 file
  • sort : 파일을 행 단위로 정렬. cat file | sort로 정렬한 것 출력해줌.(-n은 numeric sort)
              Default는 오름차순으로 설정되어 있다. -r 옵션 주면 내림차순으로 정렬해줌.
  • uniq : 연속된 중복행 제거. cat file | uniq, -c 옵션주면 중복되는 행의 갯수를 출력
  • grep : 파일 내에서 패턴 목록과 매칭되는 라인을 검색해준다.
              사용은 grep option pattern filename의 형태로 하는데 꽤 옵션이 다양하다.
              -i 대소문자 구분없이 검색, -w 정확히 해당 단어만 찾기
              -v 패턴 제외 결과, -E 정규표현식 사용
  • cut : 파일내의 특정 필드 추출. cat cut -d delimiter -f filed의 형태로 사용
             delimiter의 default는 \t

Command에는 pipe라는 기능도 있는데 커맨드와 커맨드 사이에 |를 끼워넣어 커맨드를 조합해서 사용한다. command1 | command2의 형태로 command1의 실행을 바탕으로 command2를 실행한다.

그리고 서버에서 자주 사용되는 command들에 대한 내용도 있는데, 애들은 거의 안써봐서 좀 더 사용해봐야 알 수 있을 것 같다.

  • ps : Process Status, 현재 실행 중인 프로세스를 출력. -e 모든 프로세스, f full format 출력
  • curl : Client URL, 웹서버로의 request가 제대로 실행되는지 확인 가능
  • df : Disk Free, 사용 중인 디스크 용량 확인. -h 옵션으로 읽기 쉬운 형태로 출력함
  • scp : Secure Copy, SSH를 이용한 네트워크로 연결된 host 간의 파일 주고 받음.
             -r Recursive copy. -P SSH 포트 지정. -i SSH 설정 활용해서 실행
  • nohup : 작업이 터미널 종료 후에도 백그라운드로 실행하도록 하는 커맨드.
                nohup으로 실행한 파일은 755 permission이여야 한다.
  • chmod : Change Mode. 파일의 permission을 변경함.
                이진법을 이용해서 Read(4), Write(2), eXcute(1)을 표현하고 각 자릿수를
                User/Group/Others에 대한 권한으로 나타낸다.
                755 : User(RWX), Group(R-X), Others(R-X)

Special Mission

Linux 강의에서는 special mission이 주어졌다.
단체카톡방의 대화내역을 csv로 저장하고 쉘커맨드 한줄로 가장 대화 많이 보낸 3명 추출하기였다.
내가 작성한 커맨드는 다음과 같다.
cat chatlog.csv | cut -d [ -f 2 | cut -d ] -f 1 | sort | uniq -c | sort | tail -n 5



Docker

Docker는 컨테이너 기반의 오픈소스 가상화 플랫폼이다.
얼마전 지금 회사에서 CV하고 있는 친구에게서 docker는 무조건 공부해라 라는 말을 듣기도 했고 찾아보니 거의 모든 회사에서 사용중인 도구라고 하니 잘 알아둬야겠다.
Docker는 Docker image를 이용해 Docker container를 실행하여 가상환경을 만들어내는 방식으로 동작한다.
이전에도 Virtual Machine이라는 가상화 기술이 있긴했다.
그런데 왜 Docker가 더 많이 사용될까? 많은 사람들이 표현하기를 VM은 무겁다 라고 한다. 왜냐면 Virtural Machine은 Host에 OS를 포함시킨 가상환경을 만들기 때문에 OS위에 OS가 돌아가는 형식이라 리소스를 매우 많이 사용한다.
그에 반해 Container 기반의 docker는 Host의 OS를 공유하기 때문에 VM보다 경량화된 가상화를 제공하여 docker가 선호된다.

Docker는 Docker Image만 있으면 어떤 OS에서든 바로 container로 실행할 수 있다.

Docker commands

  • docker pull image_name:tag : 원하는 docker image의 tag 버전을 다운로드
  • docker images : 다운로드한 이미지 보여줌
  • docker run image_name:tag : 다운로드한 image 기반으로 Docker container를 만들고 실행함.
    docker run --name cont_name -e 환경변수 -d -p host_port:cont_port image_name:tag의 형태로 옵션을 추가해서 Container를 만들 수 있다.
    --name으로 container 이름을, -e로 환경변수를 설정, -d로 백그라운드 모드로, -p로 포트를 지정할 수 있다.
  • docker ps : 현재 실행중인 container를 출력해준다. -a 옵션으로 멈춘 container도 확인 가능
  • docker exec -it container_name /bin/bash : 실행중인 container에 접속한다.
  • docker rm container_name : 현재 멈춰있는 container를 삭제한다. -f 옵션으로 실행중인 container도 삭제할 수 있다. 왠만하면 멈추고 삭제하는게 좋지 싶다.

Volume Mount

Docker container는 따로 설정해두지 않으면 container를 지울 때 파일도 함께 사라진다. 이는 host와 container간의 파일 공유가 안되기 때문인데 파일을 따로 유지하려면 host(컴퓨터)와 container의 저장소 공유를 설정해줘야 한다.
사용법은 docker run -it -p host_port:cont_port -v host_dir:cont_dir로 쓰면된다. 형태는 port number 정하는 방식과 같다.

Docker image는 보통 docker hub에 공개 image가 많이 올라와있어 필요한 image를 쉽게 찾아낼 수 있다.



MLflow

MLflow는 머신러닝 실험과 배포를 쉽게 관리할 수 있도록 도와주는 오픈소스이다.
MLflow가 없던 시절에는 Jupyter 같은 곳에 코드, parameter, metric을 따로 저장하여 공유해야했다. 문제는 전부 따로 기록, 저장하다보니 모델의 실험과 모델 자체에 대한 관리가 상당히 어려웠고 배포도 힘들었다.
그래서 문제들을 해결하고자 만든 것이 MLflow이다.

사용법은 간단하게

import mlflow
...

mlflow.autolog()
...

with mlflow.start_run() as run:
...

과 같이 사용하면 된다.

MLflow 핵심기능

MLflow의 핵심 기능으로 꼽히는 것들은 다음과 같다.

  • Experiment Management & Tracking
    MLflow 서버 위에서 개개인의 실험을 관리하고 기록할 수 있게 해준다
    여기서 사용된 코드, hyperparameter, metric과 모델 artifact 등을 저장한다.
  • Model Registry
    MLflow로 머신러닝 모델을 실행하면 모델 저장소(registry)에 등록되고, 새롭게 모델이 저장될 때 마다 버전이 올라가게 된다.
    이렇게 등록한 모델은 다른 사람들이 쉽게 활용할 수 있다.
  • Model Serving
    등록된 모델은 REST API의 형태로 서버에 serving할 수 있다. Model의 input/output을 그대로 input/output으로 쓸 수 있고 직접 docker image를 안만들어도 생성이 가능하다.

MLflow Component

MLflow Tracking

ML 코드 실행, 로깅을 위한 API와 UI를 제공한다.
이를 사용해 로컬과 서버에 결과를 기록해서 쉽게 비교가 가능하다. 팀일 경우에는 다른 사람들과의 결과를 보며 협업 가능

MLflow Project

ML 프로젝트 코드 패키징의 표준. Tracking API를 이용해 프로젝트의 버전과 모든 파라미터를 자동으로 기록한다. 간단하게 말하면 코드 저장 폴더다.

MLflow Model

모델의 파일, 코드를 저장해둔다. 여러 플랫폼에 배포할 수 있도록 도구를 제공한다.

Model Registry

MLflow 모델의 전체에서 사용하는 중앙 모델 저장소라고 보면 된다.



Docker와 MLflow는 실습 내용이 많아 따로 포스팅하는게 나을듯해 따로 올리려한다.
이번주는 다음주에 있을 대회를 위해 여러가지 도구들에 대한 강의가 제공되었던 것 같다. 아쉽게도 PyTorch를 공부했는데 MLflow는 아직 PyTorch를 지원하지않는 것 같아 방법을 알아봐야 될 듯 하다.

profile
NLP를 공부하는 대학생입니다

0개의 댓글