네이버 AI 부스트캠프 4기 : AI 서비스 기초 5

nask·2022년 11월 15일

AI 서비스 개발 기초 7강 : Linux & Shell Command

1. Linux

  • 배포판 중 주로 다루기 쉬운 Ubuntu 많이 사용

  • 프로그래머라면, 특히 서버 관련 개발자라면 많이 필수

2. Shell Command

  • UX는 username@hostname:current_folder 형식

  • 쉘스크립트는 .sh 파일 안에 쉘 커맨드를 추가한 것(bash name.sh로 실행 가능)

  • 쉘 커맨드가 베이스이므로 먼저 익숙해진 다음에 사용 권장

쉘의 종류

sh : 최초의 셀

bash : Linux 표준 쉘

zsh : Mac 카탈리나 OS 기본 쉘

basic shell commands

man

  • 커멘드 메뉴얼 문서

ls

  • 현재 접근 폴더의 폴더 및 파일 확인(List Segments)
  • -a : .으로 시작하는 파일, 폴더를 포함해 전체 파일 출력
  • -l : 퍼미션, 소유자, 만든 날짜, 용량까지 출력
  • -h : 용량을 사람이 읽기 쉽도록 GB, MB 등으로 표현(-l과 함께 사용됨)
  • e.g.,) ls ~ / ls / ls -al / ls-lh

pwd

  • 현재 폴더의 절대 경로(Print Working Directory)

echo

  • 터미널에 텍스트 출력

  • echo "hi"

  • 만약 `(백틱) 안에 쉘 커맨드 입력시 그 결과를 출력

  • echo "pwd"

vi

  • vim 편집기로 파일 생성

  • vim 편집기 - Command Mode

  • e.g., vi vi-test.sh

  • i를 눌러서 INSERT 모드로 변경 후 echo "hi" 작성

  • ESC 눌른 뒤 나오는 커맨드 입력

  • 1)wq: 저장후나가기 2)wq! : 1번강제 3) q: 저장안하고나가기

  • Command mode : 기본 mode이며, 방향키를 통해 커서 이동 및 복사/삭제/붙여넣기 등 가능

  • Last Line Mode : ESC 누른 후 콜론(:) 누르면 나오는 mode로, 저장/종료/저장후종료 등을 할 수 있고 그 외에도 '/문자'로 문자를 탐색하거나 set nu로 vi 라인 번호를 출력 가능

bash

  • bash로 쉘 스크립트 실행

  • bash vi-test.sh

  • 앞에서 작성한 “hi”가 출력

  • 터미널에서 Tab을 누르면 자동완성(지원하지 않는 쉘도 존재)

sudo

  • 관리자 혹은 다른 사용자의 권한으로 실행

  • 사용에 주의 필요

cp

  • 파일 또는 폴더 복사

  • -r : recursive하게 그 안의 파일 역시 모두 복사

  • -f : 강제 실행

mv

  • 파일 또는 폴더 이동

  • 이름 바꾸기도 가능

  • mv vi-test.sh vi-test3.sh

cat

  • 특정 파일이나 여러 파일을 합쳐서 출력

  • 저장하고 싶을 경우 > 사용 : cat vi-test2.sh vi-test3.sh > new_test.sh

  • 파일에 추가하고 싶은 경우 >> 사용 : cat vi-test2.sh vi-test3.sh >> new_test.sh

clear

  • 터미널 창 화면 지움

history

  • 최근 입력한 쉘 커맨드 history 출력

  • 히스토리 결과창에서 !30 : 해당 줄의 커맨드 실행

find

  • 파일 및 디렉터리 검색

  • find . -name "File" : 현재 폴더에서 File이란 이름을 가지는 파일 및 디렉토리 검색

export

  • 환경 변수 설정

  • echo $"변수명"으로 불러올 수 있음

  • 매번 쉘을 실행할 때마다 환경변수를 저장하고 싶으면 .bashrc, .zshrc에 저장하면 됨

  • (Linux) vi ~/.bashrc 또는 vi ~/.zshrc (자신이 사용하는 쉘에 따라 다름)

alias

  • 별칭 설정

  • alias ll2=’ls -l’

wget

  • 파일 다운로드

  • -O : 다른 이름으로 저장

  • -c : 이어받기

  • -b : 백그라운드에서 다운

  • -i : 여러 파일 다운

  • -p: html 페이지를 알맞게 표시하기위해 필요한 모든 파일을 다운로드

head, tail

  • 파일의 앞/뒤 n행 출력

  • head -n 3 vi-test.sh

sort

  • 행 단위 정렬

  • -r : 내림차순

  • -n : Numeric Sort

  • ESC :wq로 저장

uniq

  • 중복된 행이 연속으로 있는 경우 중복 제거

  • sort와 함께 사용

  • -c : 중복 행의 개수 출력

grep

  • 파일에 주어진 패턴 목록과 매칭되는 라인 검색

  • grep 옵션 패턴 파일명

  • i : Insensitively하게, 대소문자 구분 없이 찾기

  • w : 정확히 그 단어만 찾기

  • v: 특정 패턴 제외한 결과 출력

  • E : 정규 표현식 사용

  • 정규 표현식 패턴

    ^단어 : 단어로 시작하는 것 찾기
    단어$ : 단어로 끝나는 것 찾기
    . : 하나의 문자 매칭

cut

  • 파일에서 특정 필드 추출

  • -f : 잘라낼 필드 지정

  • -d : 필드를 구분하는 구분자. Default는 \t

  • vi cut_file

Redirection

  • 프로그램의 출력(stdout)을 다른 파일이나 스트림으로 전달

  • 표준 stream이네는 stdin(0, 입력)/stdout(1, 출력)/stderr(2, 디버깅 정보나 에러)가 있음

  • > : 덮어쓰기(Overwrite) 파일이 없으면 생성하고 저장

  • >> : 맨 아래에 추가하기(Append)

  • echo “hi” > vi-test3.sh

  • echo “hello” >> vi-test3.sh

Pipe

  • Pipe : 프로그램의 출력(stdout)을 다른 프로그램의 입력으로 사용하고 싶은 경우

  • A의 Output을 B의 Input으로 사용(다양한 커맨드를 조합)

  • 현재 폴더에 있는 파일명 중 vi가 들어간 단어를 찾고 싶은 경우 : ls | grep “vi”

  • 최근 입력한 커맨드 중 echo가 들어간 명령어를 찾고 싶은 경우
    history | grep “echo”

서버에서 자주 사용하는 쉘 커맨드

ps

  • 현재 실행되고 있는 프로세스 출력하기 : Process Status

  • -e : 모든 프로세스

  • -f : Full Format으로 자세히 보여줌

curl

  • Command Line 기반의 Data Transfer 커맨드 : Client URL Request를 테스트할 수 있는 명령어

  • 웹 서버를 작성한 후 요청이 제대로 실행되는지 확인할 수 있음

  • curl -X localhost:5000/ {data}

  • curl 외에 httpie 등도 있음(더 가독성있게 출력)

df

  • 현재 사용 중인 디스크 용량 확인 : Disk Free

  • -h : 사람이 읽기 쉬운 형태로 출력

scp

  • SSH을 이용해 네트워크로 연결된 호스트 간 파일을 주고 받는 명령어 : Secure Copy(Remote
    file copy program)

  • -r : 재귀적으로 복사

  • -P : ssh 포트 지정

  • -i : SSH 설정을 활용해 실행

  • local => remote
    scp local_path user@ip:remote_directory

  • remote => local
    scp user@ip:remote_directory local_path

  • remote => remote
    scp user@ip:remote_directory user2@ip2:target_remote_directory

nohup

  • 터미널 종료 후에도 계속 작업이 유지하도록 실행(백그라운드 실행)

  • nohup python3 app.py &

  • nohup으로 실행될 파일은 Permission이 755여야 함

  • 종료는 ps ef | grep app.py 한 후, pid(Process ID) 찾은 후 kill -9 pid 로 프로세스를 Kill

  • 로그는 nohup.out에 저장됨

  • nohup 외에도 screen이란 도구도 있음
    c

chmod

  • 파일의 권한을 변경하는 경우 사용 : Change Mode

  • 유닉스에서 파일이나 디렉토리의 시스템 모드를 변경함

  • Permission
    r = Read(읽기), 4
    w = Write(쓰기), 2
    x = eXecute(실행하기), 1
    - = Denied
    r-x : 읽거나 실행할 수는 있지만 수정은 불가능

  • 예를 들어, chmod 755 vi-test2.sh 를 실행하면 파일의 Permission이 변경됨


AI 서비스 개발 기초 8강 : Docker

가상화란?

  • 소프트웨어 가상화란 서버 환경까지도 모두 한번에 소프트웨어화 하는 것

  • Research / Production 환경에서 공통적으로 사용하는 일종의 템플릿

Docker 소개

  • 기존의 무거웠던 VM 방식이 아닌 Container 기술을 쉽게 사용할 수 있도록 나온 도구

  • Docker Image : 컨테이너를 실행할 때 사용할 수 있는 “템플릿”, Read Only

  • Docker Container : Docker Image를 활용해 실행된 인스턴스, Write 가능

  • 원격 저장소인 Container Registry에 이미지를 업로드하거나 이미지를 다운로드 받아서 실행할 수 있음

Docker Commands

docker

동작 확인

docker pull "이미지 이름:태그"

이미지 다운

docker images

다운받은 이미지 확인

docker run "이미지 이름:태그"

다운받은 이미지 기반으로 Docker Container 만들고 실행

컨테이너 이름, 환경변수 설정, 데몬모드, 포트지정을 옵션으로 줄 수 있음



-v: Volume Mount, host(내 컴퓨터)와 container의 저장소를 공유하며 -v Host_Folder:Container_Folder처럼 사용

docker ps

실행한 컨테이너 확인

-a로 작동 멈춘 컨테이너도 확인

docker exec -it "컨테이너 이름(ID)" /bin/bash

컨테이너 실행 확인

"컨테이너 이름" -u root -p

컨테이너 내부에 들어가 프로세스 실행

docker rm "컨테이너 이름(ID)"

멈춘 컨테이너를 삭제

-f로 실행중인 컨테이너도 삭제 가능

Docker Image 만들기

1) 프로젝트 셋팅

폴더 생성 및 가상 환경 세팅과 FastAPI 패키지 설치

2) FastAPI 코드 작성

3) 사용 라이브러리 명시

pip freeze
설치한 라이브러리 모두 보여줌

pip list --not-required --format=freeze
의존성에 따라 자동으로 설치된 라이브러리는 보이지 않음

pip로 설치한 라이브러리를 모두 requirements.txt에 저장
pip freeze > requirements.txt

4) Dockerfile 작성

Dockerfile이라는 파일을 만들어 작성

여기에는 FROM, COPY, WORKDIR, ENV, RUN, CMD 등이 담김





5) Docker Image Build

  • docker build “Dockerfile이 위치한 경로”

  • e.g., docker build . -t my-fastapi-app

  • -t “이미지 이름:태그” 옵션으로 이미지 이름과 태그 지정할 수 있고, 태그는 미 지정시 “latest”로 채워짐

  • . 는 현재 폴더에 Dockerfile이 있음을 의미(Dockerfile이 관레적으로 사용되므로 따르자)

6) 기타

  • EXPOSE : 컨테이너 외부에 노출할 포트 지정

  • ENTRYPOINT : 이미지를 컨테이너로 띄울 때 항상 실행하는 커맨드


AI 서비스 개발 기초 9강 : MLflow

MLflow란?

머신러닝 실험, 배포를 쉽게 관리할 수 있는 오픈소스

MLflow 기능

1) 실험 추적

  • 여러 사람이 하나의 MLflow 서버 위에서 각자 자기 실험을 만들고 공유 가능

  • 각 실행에 사용한 소스 코드, 하이퍼 파라미터, Metric, 부산물 등을 저장

2) 코드 재현

3) 모델 패키징 및 배포

  • 저장소의 모델을 REST API 형태의 서버로 서빙 가능

  • Docker Image 만들지 않아도 생성 가능

4) 모델 관리 중앙 저장소 역할

  • MLflow로 실행한 머신러닝 모델을 Model Registry에 등록 가능

  • 모델을 저장할 때마다 자동 버저닝

  • git, docker처럼 등록된 모델을 다른 사람들과 쉽게 공유 가능

MLflow 구성요소

1) MLflow Tracking

  • 머신러닝 코드 실행, 로깅을 위한 API, UI

  • 팀의 다른 사용자 등 여러 실행을 비교하기 위한 기록 가능

  • experiment(실험) : 머신러닝 프로젝트 단위(개/고양이 이미지 분류 실험)

  • run : 한 번의 학습으로, model과 param, metric 등이 기록됨 (하나의 experiment에 여러 개의 run)

  • experiment 생성하면 mlruns라는 폴더 생김

  • experiment 리스트도 확인 가능

  • localhost:5000으로 MLFlow UI로 접속해 다양한 정보 확인 가능

2) MLflow Project

  • 머신러닝 프로젝트 코드를 패키징하기 위한 표준

  • 소스코드 저장 폴더

  • 의존성 및 어떻게 실행해야 하는지 등 저장

  • MLflow를 사용한 코드의 프로젝트 메타 정보 저장

3) MLflow Model

4) MLflow Registry

추가 기능

MLflow autolog

MLflow parameter

  • argv[i]로 parameter 활용

Hyper parameter tuning

  • mlflow run svc_with_hyperparams_tuning --experiment-name my-first-experiment --no-conda

서버 배포

architecture

  • 팀 내 모든 사람이 하나의 통합된 Tracking server에 실험 기록하고 배포할 때는 Docker Image나 Kubernetes 등으로 진행

  • Artifact Storage(GCS, S3)와 DB(CloudSQL, Aurora RDS) 역시 하나로 운영하며 Tracking server에 의해 관리됨

mlflow server 명령어로 Backend Store URI 지정

mlflow server --backend-store-uri sqlite:///mlflow.db --default-artifact-root $(pwd)/artifacts

0개의 댓글