오픈소스SW 정리

Mar 19, 2024
오픈소스SW 정리

오픈소스SW 실습 정리

실습 종류

중간고사 실습

  • 아나콘다 가상환경 생성
  • 도커 이미지 pull 후 run
형상관리(CI/CD) 실습
  • git 설치
  • Jenkins(허드슨)
    • docker로 설치
      • docker pull jenkins/jenkins:jdk11 or docker pull jenkins/jenkins:lts
        docker images 확인
        docker run -d -p 8080:8080 -v /var/jenkins_home --name jenkins -u root jenkins/jenkins:jdk11 or docker run -d -p 8080:8080 -v /var/jenkins_home --name jenkins -u root jenkins/jenkins:lts
        docker logs jenkins 초기 비밀번호 확인
         
        1. github 토큰 발급
          1. fjdksljkgljfkjkqljkeljfdkjaubcvizojqeirjidfjklcm
        1. ngrok 토큰 발급 및 설치
          1. docker pull ngrok/ngrok
            docker run --net=host -it -e NGROK_AUTHTOKEN=TOKEN ngrok/ngrok:latest http 8080
         
        // 위 명령어 옵션설명 -d detached mode 흔히 말하는 백그라운드 모드 -p 호스트와 컨테이너의 포트를 연결 (포워딩) -v 호스트와 컨테이너의 디렉토리를 연결 (마운트) –name 컨테이너 이름 설정 -u 실행할 사용자 지정
  • 이슈관리
    • redmine(레드마인)
      • docker로 설치
        • docker run -d --name mysql -e MYSQL_ROOT_PASSWORD=secret -e MYSQL_DATABASE=redmine mysql
          docker run -d --name redmine -p 3000:3000 --link mysql:mysql redmine
          docker exec -it redmine /bin/bash
          git clone --mirror (git repo)
          sudo apt-get update
          sudo apt-get install vim
          sudo apt-get install cron
          sudo service cron start
          sudo service cron status
          # cron 설치 sudo apt update -y sudo apt install -y cron # cron 시작 sudo service cron start # cron systemctl 활성화 sudo systemctl enable cron.service # cron systemctl 등록 확인 sudo systemctl list-unit-files | grep cron sudo service cron status
          # Crontab 편집 crontab -e # Crontab List 조회 crontab -l # Crontab List 전체 삭제 crontab -r
          $ vi git upd.sh
          cd (git repo 위치) git remote update
          $ chmod 777 gitupd.sh
          $ crontab -e
          #gitupd.sh 위치 * * * * * /usr/src/redmine/gitupd.sh >> /usr/src/redmine/cron.log 2>&1
          git update를 해도 문제가 생길 수 있음
          시스템 시간 설정 문제이므로 해결책을 아래와 같음
          1. redmine 서버 시간을 서울로 변경한다.
          1. $ date 를 확인한다.
            1. → 대부분 UST로 설정 되어있을 것임(KST로바꿔줘야함)
          1. $ sudo dpkg-reconfigure tzdata 를 통해 변경
           
도커 새로 빌드하기
$ git clone https://github.com/docker/getting-started.git
$ cd getting-started
$ code .
/app 폴더에 Dockerfiles 만듬
FROM node:12-alpine WORKDIR /app COPY . . RUN yarn install --production --ignore-engines CMD ["node", "src/index.js"]
$ cd /app
$ docker build -t getting-started . → 새로운 image 파일을 만드는거임
$ docker run -dp 3001:3000 getting-started → 새로운 image 파일을 만드는거임
 
도커 새로 빌드하지 말고 run한 컨테이너 내부에서 수정하기
$ docker exec -it (실행중인 컨테이너 ID) /bin/sh
/app $ cd src/static/js
$ vi app.js
 

기말고사 실습

MASK-RCNN
아래의 단계별 지침을 따라 진행해 주세요.

환경 설정

  1. Docker 이미지 가져오기
    1. TensorFlow GPU 버전 이미지를 pull합니다.
      docker pull tensorflow/tensorflow:2.2.0-gpu
  1. Docker 컨테이너 실행
    1. 이름이 tensor인 도커 컨테이너를 실행합니다.
      docker run -dit --name tensor tensorflow/tensorflow:2.2.0-gpu
  1. Docker 컨테이너 접속
    1. 실행된 tensor 컨테이너에 접속합니다.
      docker exec -it tensor /bin/bash

필수 패키지 설치

  1. 패키지 업데이트
    1. apt-get update
  1. Git 설치
    1. apt-get install git
  1. Vim 설치
    1. apt-get install vim
  1. Wget 설치
    1. apt-get install wget

Mask R-CNN 설정

  1. 홈 디렉토리로 이동
    1. cd /home
  1. Mask R-CNN GitHub 리포지토리 클론
    1. git clone https://github.com/akTwelve/Mask_RCNN.git aktwelve_mask_rcnn
  1. 클론된 디렉토리로 이동
    1. cd aktwelve_mask_rcnn/
  1. requirements.txt 파일 수정
    1. vi requirements.txt
      • tensorflow>=2.0.0 항목 삭제
      • opencv-python을 opencv-python==4.1.2.30로 수정
      • shift+; 입력 후 wq와 Enter로 저장 후 종료
  1. 필요 패키지 설치
    1. pip install -r requirements.txt
  1. Mask R-CNN 설치
    1. python setup.py clean --all install

데이터셋 및 가중치 파일 설정

  1. 가중치 파일 다운로드
    1. wget https://github.com/matterport/Mask_RCNN/releases/download/v2.1/mask_rcnn_balloon.h5
  1. Balloon 샘플 디렉토리로 이동
    1. cd samples/balloon/
  1. 데이터셋 다운로드 및 압축 해제
    1. wget https://github.com/matterport/Mask_RCNN/releases/download/v2.1/balloon_dataset.zip unzip balloon_dataset.zip

Mask R-CNN 실행

  1. Balloon 샘플 실행
    1. python3 balloon.py splash --weight=../../mask_rcnn_balloon.h5 --image=balloon/val/14898532020_ba6199dd22_k.jpg

MASK R-CNN 실행 결과

notion image
텔레그램 봇 개발 실습
from datetime import datetime import telegram import asyncio import platform from apscheduler.schedulers.asyncio import AsyncIOScheduler import locale # 시스템에 따라 'ko_KR.utf8'과 같이 적절한 로케일로 변경 locale.setlocale(locale.LC_ALL, 'en_US.UTF-8') async def push_alert(bot, chat_id): time_data = datetime.now().strftime("현재 시간은 %H:%M:%S 입니다.") await bot.sendMessage(chat_id, time_data) async def main(): # bot 관련 설정 bot_name = "jodory_bot" chat_id = "chat id 입력" bot_token = "봇 토큰 입력" # 비동기 관련 설정(윈도우 전용) if platform.system() == "Windows": asyncio.set_event_loop_policy(asyncio.WindowsSelectorEventLoopPolicy()) # 봇 객체 생성 bot = telegram.Bot(bot_token) # 스케줄러 등록 test = AsyncIOScheduler() # 매 초마다 출력 max instances를 10으로 두어 작업이 최대 10개의 인스턴스를 가질 수 있도록 설정 # test.add_job(push_alert, 'cron', hour='*', minute='*', second='*', args=[bot, chat_id], max_instances=10) # 6시부터 test.add_job(push_alert, 'cron', hour='6-22', minute='*/30', args=[bot, chat_id]) # 스케줄러 시작 test.start() while True: await asyncio.sleep(1000) if __name__ == '__main__': try: asyncio.run(main()) except (KeyboardInterrupt, SystemExit): AsyncIOScheduler().shutdown() pass
ChatGPT OPEN API 실습
from openai import OpenAI OPEN_API_KEY = "OPEN_API_KEY 입력" OpenAI.api_key = OPEN_API_KEY client = OpenAI(api_key = OPEN_API_KEY) query = "opensw 실습 공부법 알려주세요." completion = client.chat.completions.create( model="gpt-3.5-turbo", messages=[ {"role": "system", "content": "You are a poetic assistant, skilled in explaining complex programming concepts with creative flair."}, {"role": "user", "content": query} ] ) print(completion.choices[0].message)
Hugging Face 실습

오픈소스SW 기말고사 정리

머신러닝 오픈소스 프로젝트 실습 1

1. Mini 프로젝트 소개 및 데이터 가공

  • 개별 프로세스 수동 실행 + 텔레그램 봇을 활용한 알람 시스템 구축
 

2. 개발 환경구축 및 개발 실습

오픈소스 LabelMe 기반 라벨링 작업
  • 학습 데이터 구축(가공 / 라벨링 / 어노테이션) by LabelMe
      1. Open Dir 열기
      1. Create Polygons
      1. Save (저장 시 본래 파일과 동일한 파일명으로 저장해야함)
텔레그램 봇을 연동 후 알림 보내기
from datetime import datetime import telegram import asyncio import platform from apscheduler.schedulers.asyncio import AsyncIOScheduler import locale # 시스템에 따라 'ko_KR.utf8'과 같이 적절한 로케일로 변경 locale.setlocale(locale.LC_ALL, 'en_US.UTF-8') async def push_alert(bot, chat_id): time_data = datetime.now().strftime("현재 시간은 %H:%M:%S 입니다.") await bot.sendMessage(chat_id, time_data) async def main(): # bot 관련 설정 bot_name = "jodory_bot" chat_id = "chat id 입력" bot_token = "봇 토큰 입력" # 비동기 관련 설정(윈도우 전용) if platform.system() == "Windows": asyncio.set_event_loop_policy(asyncio.WindowsSelectorEventLoopPolicy()) # 봇 객체 생성 bot = telegram.Bot(bot_token) # 스케줄러 등록 test = AsyncIOScheduler() # 매 초마다 출력 max instances를 10으로 두어 작업이 최대 10개의 인스턴스를 가질 수 있도록 설정 # test.add_job(push_alert, 'cron', hour='*', minute='*', second='*', args=[bot, chat_id], max_instances=10) # 6시부터 test.add_job(push_alert, 'cron', hour='6-22', minute='*/30', args=[bot, chat_id]) # 스케줄러 시작 test.start() while True: await asyncio.sleep(1000) if __name__ == '__main__': try: asyncio.run(main()) except (KeyboardInterrupt, SystemExit): AsyncIOScheduler().shutdown() pass
 

3. MLOPs의 이해

  • 기존 프로젝트 개발은 개발과 운영을 분리하여 진행
  • 운영 중 발생한 버그나 추가 요구사항을 다음 프로젝트에 적용
    • → 즉, 한번에 끝나지 않음
      notion image
  • 운영 이슈개발을 동시에 수행해야 할 필요성 증가
  • 운영 중 발생한 이슈사항을 바로 개발에 적용
    • notion image
  • 즉 정리하자면, 운영 + 개발 ⇒ MLOPs
    • MLOps란, ML을 효율적으로 개발하고 성공적으로 서비스화하고 운영할 때 필요한 모든 것을 다루는 분야
notion image

머신러닝 오픈소스 프로젝트 실습 2

1. OPEN API의 이해

  • 공개되어 있는 Application Programming Inferace
  • 서버 또는 서비스 제공 기관에서 제공하는 기능을 프로그램적으로 사용할 수 있는 기능

오픈API 소개

오픈API란 누구나 사용할 수 있도록 공개된 API를 말합니다. 데이터를 표준화하고 프로그래밍해 외부 소프트웨어 개발자나 사용자들과 공유하는 프로그램입니다. 개방된 오픈API를 이용해 다양하고 재미있는 서비스나 애플리케이션, 다양한 형태의 플랫폼을 개발할 수 있습니다.
  • API란? Application Programming Interface의 약자로 응용 프로그램 프로그래밍 인터페이스를 말합니다. 다양한 응용 프로그램에 사용할 수 있는 운영 체제, 혹은 프로그래밍 언어가 제공하는 기능을 제어할 수 있게 만든 인터페이스입니다.
  • REST API란? API를 구현하는 대표적인 방식으로 REST(Representational State Transfer)방식이 있다. “REST 원칙을 따르는 API”라고 하며, RESTful API 혹은 REST API로 불린다.
  • 요청 자체만으로 무엇을 원하는지 알게 하자는 사상으로 등장했으며, 클라이언와 서버는 고유한 url(링크)를 통해 요청과 응답을 주고받는데, 이 url을 보면 어떤 요청인지 바로 추론 가능하게 한 API이다.
  • , 웹의 장점을 가장 잘 살릴 수 있는 가장 간결하고 효율적인 구현 방식이다

2. ChatGPT OPEN API 사용

from openai import OpenAI OPEN_API_KEY = "OPEN_API_KEY 입력" OpenAI.api_key = OPEN_API_KEY client = OpenAI(api_key = OPEN_API_KEY) query = "opensw 실습 공부법 알려주세요." completion = client.chat.completions.create( model="gpt-3.5-turbo", messages=[ {"role": "system", "content": "You are a poetic assistant, skilled in explaining complex programming concepts with creative flair."}, {"role": "user", "content": query} ] ) print(completion.choices[0].message)
Video preview

머신러닝 오픈소스 프로젝트 실습 3

1. Hugging Face 실습

  • Transformers 라이브러리를 활용하여 SOTA 모델을 학습하고 실행해 볼 수 있는 프레임워크 모듈
  • 쉬운 사용방법을 통해 다양한 모델 활용 및 개발 지원
허깅페이스 Start
  • Getting started with our git and git-lfs interface
    • You can create a repository from the CLI (skip if you created a repo from the website)
    • $pip install huggingface_hub #You already have it if you installed transformers or datasets $huggingface-cli login #Log in using a token from huggingface.co/settings/tokens #Create a model or dataset repo from the CLI if needed $huggingface-cli repo create repo_name --type {model, dataset, space}
       
    • Clone your model, dataset or Space locally
    • #Make sure you have git-lfs installed #(https://git-lfs.github.com) $git lfs install $git clone https://huggingface.co/username/repo_name
       
    • Then add, commit and push any file you want, including larges files
    • # save files via `.save_pretrained()` or move them here $git add . $git commit -m "commit from $USER" $git push
    • In most cases, if you're using one of the compatible libraries, your repo will then be accessible from code, through its identifier: username/repo_name
    • For example for a transformers model, anyone can load it with:
    • tokenizer = AutoTokenizer.from_pretrained("username/repo_name") model = AutoModel.from_pretrained("username/repo_name")
NLP 동작 원리
notion image
notion image
notion image
notion image
notion image

2. 인공지능 추론 알고리즘 및 평가 메트릭

  • 자료 없으므로 PASS

쿠버네티스의 이해 및 실습

1. 쿠버네티스 개념

  • 쿠버네티스(Kubernetes)는 오픈 소스 기반 컨테이너 오케스트레이션 도구의 일종(K8S로 불림)
  • 최초 구글에서 개발 후 클라우드 네이티브 컴퓨팅 재단(CNCF) 설립 및 기부
  • 컨테이너 오케스트레이션시스템 전체를 총괄하고 여러 개의 컨테이너를 관리하는 일을 수행
  • 다양한 호환 제품이 존재하며, 대부분의 클라우드 서비스 제공기업에서 맞춤형Kubernetes를 제공
  • 일반적으로 Kubernetes는 대규모 시스템에 적용 / 여러대의 물리적 서버가 존재한다는 것을 전제로 운영
  • 쿠버네티스는 다수의 물리적 위에서 돌아가는 컨테이너들 관리 및 조율하여 서비스를 구성
  • MLOPs에서의 쿠버네티스: MLOPs에서 다양한 종류와 기능을 수행하는 마이크로 서비스 컨테이너에 대한 관리(설치포함) 및 조율
마스터 노드와 워커 노드
  • 마스터 노드워커 노드에는 각기 다른 소프트웨어 설치
    • 역할이 다르기 때문
      notion image
      notion image
    • 마스터 노드: 전체적인 제어를 담당 (컨테이너를 실행 X)
    • 워커 노드: 실제 동작을 담당 (컨테이너 기반 실행 O)
      • notion image
 
파드(POD)
  • 파드(POD)란?: 컨테이너 볼륨을 함께 묶은 개념
    • ⇒도커 이미지 실행 시 -v 옵션으로 wsl과 이미지 저장소 연동, 마운트
      notion image
서비스
  • POD들의 집합으로 구성 된 그룹
여러 개의 POD를 관리하는 대장(선장!?)
notion image
물리적으로 여러 개의 워커 노드에 걸쳐 실행되더라도 하나의 서비스가 관리
요청을 배분
notion image
클라우드 기반의 서비스 제공
notion image
레플리카 세트
  • POD의 수를 관리
  • 장애 등의 이유로 POD가 종료되면, 모자라는 POD를 보충하는 등의 관리 진행
    • → 장애 보수??
      notion image

2. 쿠버네티스 매니페스트 파일 작성

쿠버네티스 매니페트스 파일이란?
  • 쿠버네티스 클러스터에서 리소스를 생성하고 관리하기 위한 명세서(specification)
  • 쿠버네티스가 어떤 리소스를 어떻게 생성하고 관리해야 하는지를 정의
  • 매니페스트 파일쿠버네티스 내의 POD나 SERVICE 설정에 대한 파일
  • 다양한 SERVICE와 POD를 설정에 따라 생성 및 관리
    • notion image
      notion image
특징
  1. 파일 형식: 매니페스트 파일은 주로 YAML 또는 JSON 형식으로 작성. YAML 형식이 더 일반적으로 사용되며, 이해하기 쉽고 읽기 편한 구조를 가지고 있음
  1. 리소스 정의: 이 파일들은 쿠버네티스 클러스터에서 실행할 리소스를 정의.
    1. ⇒ 이 리소스에는 파드(Pods), 서비스(Services), 볼륨(Volumes), 네임스페이스(Namespaces) 등이 포함됨.
  1. 설정 정보: 매니페스트 파일은 리소스에 대한 상세한 설정 정보를 포함
    1. ⇒ 예를 들어, 파드 매니페스트 파일컨테이너 이미지, 포트 설정, 환경 변수 등 파드가 실행되는 데 필요한 모든 정보를 담고 있음
  1. 클러스터 배포: kubectl apply 명령어와 같은 쿠버네티스 도구를 사용하여 매니페스트 파일에 정의된 리소스를 클러스터에 배포
  1. 버전 관리 가능: 매니페스트 파일은 Git과 같은 버전 관리 시스템을 사용하여 관리할 수 있음.
    1. ⇒ 이를 통해 클러스터 구성의 변경 사항을 추적하고 필요한 경우 이전 버전으로 롤백할 수 있습니다.
  1. 매니페스트 파일은 여러 파일로 분할도 가능
    1. notion image
      각 리소스를 ‘---’로 구분하여 이름으로 구분
매니페스트 파일 작성
도커 compose 파일과 마찬가지로 주 항목 중심으로 작성
notion image
notion image
매니페스트 파일에는 메타 데이터스펙(SPEC)을 기재
notion image
파드의 작성 항목은 다음의 구성을 따름
notion image

3. 쿠버네티스 실습

설치
notion image
notion image
매니페스트 기반 설치
  • POD 매니패스트 설치 (kubectl apply)
    • kubectl apply -f apa00dep.yml
  • POD 매니패스트 확인 (kubectl get pods)
    • kubectl get pods
  • 서비스 매니패스트 설치 (kubectl apply)
    • kubectl apply -f apa000ser.yml
  • 서비스 매니패스트 확인 (kubectl get services)
    • kubectl get services
 
매니페스트 기반 수정
  • POD 매니패스트 수정 (kubectl apply)
    • kubectl apply -f apa00dep_2.yml
  • POD 매니패스트 확인 (kubectl get pods)
    • kubectl get pods
  • POD 매니패스트 삭제 (kubectl delete)
    • kubectl delete -f apa000dep_2.yml
  • POD 매니패스트 확인 (kubectl get pods)
    • kubectl get pods
 
Share article

jodory