[부스트캠프 AI Tech 5기] Week 8 정리 및 회고

araseo·2023년 4월 30일
0
post-thumbnail

Week8 강의 요약

좋은 소프트웨어란?

  • 높은 응집도(모듈 내 교류)와 낮은 결합도(모듈끼리의 교류)를 가진 소프트웨어를 좋은 소프트웨어라고 할 수 있음

파이썬 버전 관리

설치 방법설치 명령어장단점사용하는 경우
condaconda install python=3.11.0- conda를 사용 중이라면 별다른 도구 없이 설치 가능
- conda의 용량이 큰 편
conda를 이미 사용하고 있고, conda 중심으로 세팅하는 경우
Dockerdocker pull python:3.11.0- 로컬 환경에 바이너리를 설치하지 않기 때문에 파이썬 설치, 삭제가 쉬움
- 파이썬을 이용하기 위해 컨테이너에 매번 접속해야 함
로컬 환경과 파이썬 설치 환경을 완전히 분리하고 싶은 경우
패키지 관리자- brew install python@3.11
- apt install python3.11
- winget install Python3.11
- 설치가 간단
- 패치 버전까지 포함하는 파이썬 특정 버전을 설치할 수는 없음(예: 3.11.1)
CLI를 통해 빠르고 간단하게 설치하고 싶은 경우
pyenvpyenv install 3.11.0- 파이썬의 여러 버전을 설치하고, 다룰 수 있음
- pyenv를 먼저 설치해야함
여러 파이썬 버전을 바꿔가며 사용해야 하는 경우

파이썬 프로젝트 버전 관리

가상 환경

  • 다양한 방법으로 가상 환경을 생성할 수 있음
    • ex) venv, conda, pyenv-virtualenv, pipenv
  • venv?
    • 파이썬 가상 환경 구축에 가장 많이 사용되는 방법
    • python -m venv "가상 환경 폴더를 만들 경로"

패키지 매니저

  • 패키지 설치 및 버전 관리를 해주는 도구
    • ex) pip, poetry, conda
  • pip : 파이썬 내장 패키지 매지너로, 가장 많이 이용
# 패키지 설치
pip install "패키지 이름[==버전]"

# 설치된 패키지 목록 출력
pip list 

# 의존성 패키지는 제외하고 출력
pip list --not-required --format==freeze

# requirements.txt에 설치한 패키지 목록을 저장
pip freeze > requirements.txt

# requirements.txt 내의 패키지를 다른 컴퓨터 혹은 다른 가상 환경에 설치
pip install -r requirements.txt

# 최신 버전의 pip을 이용하기 위해 pip upgrade
pip install --upgrade pip
  • pip의 단점
    (1) 개발 환경과 배포 환경의 패키지를 분리할 수 없음
    (2) 패키지 간 의존성을 확인할 수 없음
    (3) pip uninstall 시 의존성이 있는 패키지들까지 삭제되지는 않음
  • poetry는 앞선 pip의 문제점들을 해결함
    • poetry add 명령어로 패키지를 설치하며, -D 옵션을 붙이면 개발 환경에서만 사용할 패키지를 설치할 수 있음
    • 설치한 패키지와 간접적으로 설치된 패키지들 간의 의존성도 확인 가능
    • 특정 패키지 삭제 시 의존성 패키지도 함께 삭제 가능

리눅스(Linux)의 기본 명령어

  • mkdir : 폴더를 생성
  • cd : 특정 폴더의 위치로 이동
  • ls : 현재 위치 내의 파일 혹은 폴더 확인
  • echo : 터미널에 텍스트를 출력
  • vi : 리눅스의 편집기를 실행시킴
  • find : 파일 및 폴더 검색 시 사용
  • pwd : 현재 위치의 절대 경로를 반환
  • mv : 파일, 또는 폴더를 이동
  • cp : 파일 또는 폴더를 복사
  • clear : 터미널 창을 지워줌
  • history : 최근에 입력한 shell command의 history를 출력
    • history 실행 후 ![실행을 원하는 command 앞에 붙어있는 숫자]를 입력하면 해당 command를 다시 실행할 수 있음
  • cat : 특정 파일의 내용을 출력
  • bash : bash로 쉘 스크립트를 실행 ex) bash vi-test.sh
  • export : 환경 변수를 설정해 줌
  • alias : 자주 사용하는 명령어의 별칭 설정 가능

Docker의 기본 명령어

# 필요한 이미지 다운
docker pull "이미지 이름:태그"

# 다운받은 이미지 목록 확인
docker images

# 이미지를 기반으로 컨테이너 생성
docker run "이미지 이름:태그"

# 실행 중인 컨테이너 목록 확인
docker ps

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

# 실행 중인 컨테이너를 중지
docker stop "컨테이너 이름(ID)"

# 중지된 컨테이너 삭제
docker rm "컨테이너 이름(ID)"
  • Volume Mount
    • Docker Container 내부는 특별한 설정이 없다면 컨테이너를 삭제할 때 내부의 파일도 함께 삭제됨
    • 파일을 유지하고 싶으면 Volume Mount를 진행하여 Host(우리의 컴퓨터)와 Container의 저장소를 공유해야 함
    • -v 옵션을 사용하면 쉽게 Volumn Mount 진행이 가능
      • -v Host_Folder:Container_Folder
docker run -it -p 8888:8888 -v /some/host/folder/for/work:/home/jovyan/workspace

Debugging

  • (1) 문제 발생
  • (2) 문제 인식
  • (3) 해결책 찾기
    • 과거에 경험한 문제인가?
    • Yes : 오답 노트를 찾아보기
    • No : 해결책 검색
      • 오답노트에 기록

MLOps 개론

  • 머신러닝 모델을 운영하면서 반복이 필요한 업무를 자동화시키는 과정을 의미
  • ML Dev(모델 개발)와 Ops(모델 운영)에서 사용되는 문제 및 반복을 최소화함으로써 비즈니스 가치를 창출하는 것이 목표

MLOps component

  • Infra(Server,GPU)
  • Serving
    • Batch Serving, Online Serving
  • Experiment, Model Management
  • Feature Store
  • Data Validation(Data Management)
  • Continuous Training
  • Monitering
  • AutoML

Model Serving

  • 머신러닝 모델을 Production(Real World)환경에 배포하는 행위를 의미
  • Online Serving
    • 요청(Request)가 올 때마다 실시간으로 예측하는 방식
    • Serving 시 python 버전, package 버전 등 depency 고려
    • 실시간 예측을 해야 하기 때문에 지연 시간(latency)를 최소화
    • 결괏값에 대한 보정이 필요한지 확인해 봐야 함
  • Batch serving
    • 주기적으로 학습을 하거나 예측하는 방식
    • 여러 데이터를 한꺼번에 처리함
    • 관련 라이브러리가 따로 존재하지 않음

비즈니스 모델 파악하기

(1) 회사의 비즈니스를 파악
(2) 데이터에 대해 파악
(3) 예측 결과의 활용성에 대해 파악

웹서비스 형태 - Streamlit

  • 파이썬 스트립트 코드를 조금만 수정하는 것만으로도 웹페이지를 만들 수 있음
  • 다양한 Component를 제공하여 쉽게 대시보드 UI 구성이 가능
  • Streamlit Cloud가 존재하여 배포도 쉬움
  • 화면 녹화 기능이 존재함

부캠에서 살아남기 - (4기 CV 전영주 캠퍼님, NLP 유선종 캠퍼님, Recsys 김성연 캠퍼님)

  • 깊이 파고들기
  • 순위에 연연하지 않기
  • 기록 열심히 하기
  • 건강 관리도 필수!
  • 알고리즘 및 CS 지식 열심히 챙기기
  • 좋은 협업 문화를 형성하기 위해 노력하기

한 주 요약

랩업 리포트 작성까지 마무리하니 정말 대회가 끝났다는 실감이 났다. 리포트를 충분히 잘 작성하였다고 생각하면서도 '이런 부분이 조금 더 보완이 되면 좋겠다' 하는 생각이 조금씩 들기는 한다. 부캠에서 살아남기에서 4기 선배 캠퍼분들께서도 기록이 정말 중요하다고 강조를 해주셨던 만큼, 개인적으로도 시간이 날 때 랩업 리포트를 기반으로 경진대회에서 진행한 것들에 대하여 조금 더 다듬어서 기록해야겠다.
과제를 통해 streamlit을 이용하여 웹에 서비스를 배포하는 과정을 처음으로 경험해 보았다. 학습한 모델을 이용하여 classification을 할 수 있도록 하니 실제 회사 입사해서 서비스를 배포하는 느낌도 들고(?) 정말 신기했다. 머신러닝 모델링 코드는 머신러닝 시스템 중 일부에 불과하다는 것의 의미가 더 와닿았다. 앞으로 프로젝트를 진행하면서 머신러닝 모델에 대한 것뿐만 아니라, 머신러닝 시스템에 대한 전반적인 지식을 잘 습득할 수 있도록 해야겠다.

profile
AI를 공부하고 있는 학생입니다:)

0개의 댓글