문제정의, EDA, feature engineering, train, result
-> 이러한 프로세스는 고정된 데이터를 사용함(보통 research)
결국 사용하기 위해 우리는 모델을 production 환경에 맞춰 배포해야함
머신러닝 모델 개발과 머신러닝 모델 운영에서 사용되는 문제, 반복을 최소화해 비즈니스 가치를 창출해내는 것이 목표
-> 옛날에 산업혁명 생각해보면 이해가 쉬울듯(결국 프로세스 개선)
batch serving: 많은 데이터를 일정 주기로 한번에 예측(jupyter notebook)
online serving: 실시간 예측, 동시에 많은 요청이 들어오는 경우 확장 가능하도록 준비
기록을 해야지 어떤 조합이 좋은지 알 수 있음
모델을 만들때 feature에서 다 가져옴, 언제든 가져다 쓸 수 있도록 저장
이전에 사용했던 데이터와 비슷한지 확인할 필요가 있음(Data drift)
데이터를 새로받았을 때, 일정기간, 성능이 낮아진경우 training을 해야함
serving이란?
production 환경에 모델을 사용할 수 있도록 배포하는 것
머신러닝 모델을 개발하고, 현실 세계에서 사용할 수 있도록 만드는 행위
주기적으로 학습하는 경우 사용
특정 시간에 반복해서 실행
장점: online serving보다 구현이 수월하다. latency문제 없다.
단점: 실시간 활용이 안된다. 새로생긴 데이터를 바로 사용할 수 없다
요청이 올대마다 실시간 예측
serving할 때 dependency가 굉장히 중요함
재현가능하지 않은 코드는 risk를 가진다.
실시간 예측이므로 지연시간을 최소화해야한다.
문제정의: 특정 현상을 파악하고, 그 현상에 있는 문제를 정의하는 과정! 문제정의는 본질을 파악하는 과정임
Flow
1. 현상파악: 어떤 현상이 발견되었는가?
2. 문제정의: 현상을 더 구체적으로 명확한 용어로 정리
3. 프로젝트 설계: 문제 정의에 기반해서 프로젝트 설계
4. action: 모델 개발 후 배포
5. 추가원인 분석
개발 전에는 mac os 나 window os,
하지만 프로그래밍 하면 리눅스를 다룰 일이 많음..
서버에서 자주 사용하는 os
무료라서 많이 씀
안정성, 신뢰성, 유닉스라 stability, reliability
쉘 커맨드, 쉘 스크립트
CLI(command line interface): terminal 환경
GUI(graphic user interface): 우리가 보통 쓰는 환경
debian
ubuntu: 초보자들이 쉽게 접근할 수 있도록 만듬
redhat
centos: redhat이 공개한 버전을 가져와서 브랜드와 로고를 제거하고 배포한 버전
최초에 자주 사용하는 쉘 커맨드, 쉘 스크립트 위주로 학습
필요한 코드가 있는 경우 검색해서 찾기
해당 코드에서 나오는 새로운 커맨드 학습해서 정리하기
배경지식이 필요한 경우 linux, os학습
****리눅스를 사용하는 방법****
virtualbox에 linux 설치, 도커로 설치
wsl사용
notebook에서 터미널 실행
cloud에서 띄우는 인스턴스에서 연습
쉘: 사용자가 문자를 입력해 컴퓨터에 명령할 수 있도록 하는 프로그램
터미널/콘솔: 쉘을 실행하기 위해 문자 입력을 받아 컴퓨터에 전달, 프로그램의 출력을 화면에 작성
sh: 최초의 쉘
bash:리눅스 표줄 쉘
zsh: mac 카탈리나 표준 쉘
서버에서 접속해서 사용하는 경우
리눅스의 내장 기능을 활용하는 경우
데이터 전처리를 하기위해 쉘 커맨드를 사용
도커를 사용하는 경우
수백대의 서버를 관리할 경우
주피터 노트북의 cell앞에 !를 붙이면 쉘 커맨드가 사용됨
터미널에서 python3, jupyter notebook도 쉘 커맨드
test code실행
배포 파이프라인 실행(github action등에서 실행)
man
vi
echo
ls
pwd
cd
mkdir
bash
sudo
관리자 권한으로 실행하고 싶은 경우 커맨드 앞에 sudo를 붙임
sudo명령어는 최고 권한을 가진 슈퍼유저로 프로그램을 실행
cp
파일 또는 폴더 복사하기
-r: 디렉토리를 복사할 때 디렉토리 안에 파일이 있으면 recursive(재귀적)으로 모두 복사
-f: 복사할 때 강제로 실행
mv: 파일 폴더 이동하기
cat: 특정 파일 내용 출력
clear: 터미널창 깔끔하게 지워줌
history: 최근에 입력한 쉘 커맨드 history 출력
find: 파일 및 디렉토리 검색할 때 사용
export : 환경변수 설정
export water=’물’
echo $water
export로 환경변수 설정한 경우, 터미널이 꺼지면 사라지게 된다.
vi /.bashrc또는 vi/.zshrc에다가 저장하면 됨
그 후 source ~/.zshrc
리눅스 환경 설정을 재로그인 하지 않고 즉시 적용하고 싶은 경우 source 사용
alias: 별칭, 기본 명령어를 간단히 줄일 수 있음
표준 스트림
stdin: 0으로 표현, 입력(비밀번호, 커맨드 등)
stdout: 1로 표현, 출력값(터미널에서 나오는 값)
stderr: 2로 표현, 디버깅 정보나 에러 출력
redirection: 프로그램의 출력을 다른 파일이나 스트림으로 전달
>: 덮어쓰기 파일이 없으면 생성하고 저장
>>: 맨 아래에 추가하기
echo ‘hi’ > vi-test3.sh
echo ‘hello’ >> vi-test3.sh
cat vi-test3.sh
pipe: 프로그램의 출력을 다른 프로그램의 입력으로 사용하고 싶은 경우
A의 output을 B의 input으로 사용
현재 폴더에 있는 파일명 중 vi가 들어간 단어를 찾고 싶은 경우
ls | grep ‘vi’
grep ‘vi’: 특정 단어 찾기
ls | grep ‘vi’
위 결과를 output.txt에 저장하고싶은 경우
ls | grep ‘vi’ > output.txt
PS: 현재 실행되고 있는 프로세스 출력하기
-e: 모든 프로세스
-f: Full Format으로 자세히 보여줌
curl: request를 테스트할 수 있는 명령어
웹 서버를 작성한 후 요청이 제대로 실행되는지 확인할 수 있음
DF: 현재 사용 중인 디스크 용량 확인
-h: 사람이 읽기 쉬운 형태로 출력
scp: ssh를 이용해 네트워크로 연결된 호스트 간 파일을 주고 받는 명령어
-r: 재귀적으로 복사
-P: ssh 포트 지정
-i: ssh 설정을 활용해 실행
개발을 진행한 local환경과 Production 서버 환경이 다른 경우
local 환경은 윈도우
서버 환경은 linux
os가 다르기 때문에 라이브러리, 파이썬 등을 설치할 때 다르게 진행해야함
local 환경과 서버가 같은 os를 사용해도, 서버에서 올바르게 작동하지 않을 수 있음
이전: readme에 기록하고 항상 실행하도록 하는 방법 → 에러도나고 번거로움
가상화?: research/production 환경에서 공통적으로 사용하는 일종의 템플릿
특정 소프트웨어 환경을 만들고 local, production 서버에서 그대로 활용
개발과 운영 서버의 환경 불일치가 해소
어느 환경에서나 동일한 환경으로 프로그램을 실행할 수 있음
개발 외에 research도 동일한 환경을 사용할 수 있음
VM을 사용 os위에 os를 올리는 거
→ VM은 굉장히 리소스를 많이 사용
Container: VM의 무거움을 크게 덜어주어 가볍고 빠르게 가상화를 구현할 수 있음
container기술을 쉽게 사용할 수 있도록 나온 도구가 바로 도커임
Docker Image
컨테이너를 실행할 때 사용할 수 있는 템플릿
read only
Docker Container
Docker Image를 활용해 실행된 인스턴스
write가능
다른 사람이 만든 소프트웨어를 가져와서 바로 사용할 수 있음
ex) mysql을 docker로 실행, jupyter notebook을 docker로 실행
다른사람이 만든 소프트웨어: docker image
어느 환경에서도 동일하게 실행할 수 있음
자신만의 이미지를 만들면 다른사람에게 공유할 수 있음
원격 저장소에 저장하면 어디서든 사용할 수 있음
원격저장소: container registry
없었을때:
각자 코드를 jupyter notebook에서 작성함, 머신러닝 모델 학습시 사용한 parameter, metric을 따로 기록
다른 동료들에게 weight file을 저장해 다른 동료들에게 공유
weight file이름으로 model versioning을 하거나 versioning을 하지 않음
문제:
MLflow:
머신러닝 실험, 배포를 쉽게 관리할 수 있는 오픈소스
관련 오픈소스 중 제일 빠르게 성장 중
CLI, GUI지원
핵심기능: 레시피를 기억, 실험들도 기업, 제일 좋았던 것을 찾을 수 있음, 언제 생겼고 언제 만들었느닞도 알 수 있음, 여러 모델을 운영함
MLflow Components
참고: 부스트캠프 AITech 4기 변성윤 마스터님 강의