오픈소스SW 정리
Mar 19, 2024
오픈소스SW 실습 정리
실습 종류
중간고사 실습
- 아나콘다 가상환경 생성
- 도커 이미지 pull 후 run
형상관리(CI/CD) 실습
- git 설치
- Jenkins(허드슨)
- docker로 설치
- github 토큰 발급
- ngrok 토큰 발급 및 설치
→
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 초기 비밀번호 확인fjdksljkgljfkjkqljkeljfdkjaubcvizojqeirjidfjklcm
→
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 실행할 사용자 지정- 이슈관리
- docker로 설치
- redmine 서버 시간을 서울로 변경한다.
-
$ date를 확인한다. $ sudo dpkg-reconfigure tzdata를 통해 변경
redmine(레드마인)
→
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.shcd (git repo 위치) git remote update
→
$ chmod 777 gitupd.sh→
$ crontab -e#gitupd.sh 위치
* * * * * /usr/src/redmine/gitupd.sh >> /usr/src/redmine/cron.log 2>&1git update를 해도 문제가 생길 수 있음
시스템 시간 설정 문제이므로 해결책을 아래와 같음
→ 대부분 UST로 설정 되어있을 것임(KST로바꿔줘야함)
도커 새로 빌드하기
$ 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
아래의 단계별 지침을 따라 진행해 주세요.
환경 설정
- Docker 이미지 가져오기
TensorFlow GPU 버전 이미지를 pull합니다.
docker pull tensorflow/tensorflow:2.2.0-gpu
- Docker 컨테이너 실행
이름이
tensor인 도커 컨테이너를 실행합니다.docker run -dit --name tensor tensorflow/tensorflow:2.2.0-gpu
- Docker 컨테이너 접속
실행된
tensor 컨테이너에 접속합니다.docker exec -it tensor /bin/bash
필수 패키지 설치
- 패키지 업데이트
apt-get update
- Git 설치
apt-get install git
- Vim 설치
apt-get install vim
- Wget 설치
apt-get install wget
Mask R-CNN 설정
- 홈 디렉토리로 이동
cd /home
- Mask R-CNN GitHub 리포지토리 클론
git clone https://github.com/akTwelve/Mask_RCNN.git aktwelve_mask_rcnn
- 클론된 디렉토리로 이동
cd aktwelve_mask_rcnn/
requirements.txt파일 수정tensorflow>=2.0.0항목 삭제opencv-python을opencv-python==4.1.2.30로 수정shift+;입력 후wq와Enter로 저장 후 종료
vi requirements.txt
- 필요 패키지 설치
pip install -r requirements.txt
- Mask R-CNN 설치
python setup.py clean --all install
데이터셋 및 가중치 파일 설정
- 가중치 파일 다운로드
wget https://github.com/matterport/Mask_RCNN/releases/download/v2.1/mask_rcnn_balloon.h5
- Balloon 샘플 디렉토리로 이동
cd samples/balloon/
- 데이터셋 다운로드 및 압축 해제
wget https://github.com/matterport/Mask_RCNN/releases/download/v2.1/balloon_dataset.zip
unzip balloon_dataset.zip
Mask R-CNN 실행
- Balloon 샘플 실행
python3 balloon.py splash --weight=../../mask_rcnn_balloon.h5 --image=balloon/val/14898532020_ba6199dd22_k.jpg
MASK R-CNN 실행 결과

텔레그램 봇 개발 실습
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()
passChatGPT 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
- Open Dir 열기
- Create Polygons
- 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()
pass3. MLOPs의 이해
- 기존 프로젝트 개발은 개발과 운영을 분리하여 진행
- 운영 중 발생한 버그나 추가 요구사항을 다음 프로젝트에 적용
- 운영 이슈와 개발을 동시에 수행해야 할 필요성 증가
- 즉 정리하자면, 운영 + 개발 ⇒ MLOPs
MLOps란, ML을 효율적으로 개발하고 성공적으로 서비스화하고 운영할 때 필요한 모든 것을 다루는 분야

머신러닝 오픈소스 프로젝트 실습 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)
머신러닝 오픈소스 프로젝트 실습 3
1. Hugging Face 실습
- Transformers 라이브러리를 활용하여 SOTA 모델을 학습하고 실행해 볼 수 있는 프레임워크 모듈
- 쉬운 사용방법을 통해 다양한 모델 활용 및 개발 지원
허깅페이스 Start
- Getting started with our
gitandgit-lfsinterface - 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}#Make sure you have git-lfs installed
#(https://git-lfs.github.com)
$git lfs install
$git clone https://huggingface.co/username/repo_name# save files via `.save_pretrained()` or move them here
$git add .
$git commit -m "commit from $USER"
$git pushtokenizer = AutoTokenizer.from_pretrained("username/repo_name")
model = AutoModel.from_pretrained("username/repo_name")2. 인공지능 추론 알고리즘 및 평가 메트릭
- 자료 없으므로 PASS
쿠버네티스의 이해 및 실습
1. 쿠버네티스 개념
- 쿠버네티스(Kubernetes)는 오픈 소스 기반 컨테이너 오케스트레이션 도구의 일종(K8S로 불림)
- 최초 구글에서 개발 후 클라우드 네이티브 컴퓨팅 재단(CNCF) 설립 및 기부
- 컨테이너 오케스트레이션은 시스템 전체를 총괄하고 여러 개의 컨테이너를 관리하는 일을 수행
- 다양한 호환 제품이 존재하며, 대부분의 클라우드 서비스 제공기업에서 맞춤형Kubernetes를 제공함
- 일반적으로 Kubernetes는 대규모 시스템에 적용 / 여러대의 물리적 서버가 존재한다는 것을 전제로 운영
- 쿠버네티스는 다수의 물리적 위에서 돌아가는 컨테이너들을 관리 및 조율하여 서비스를 구성
- MLOPs에서의 쿠버네티스: MLOPs에서 다양한 종류와 기능을 수행하는 마이크로 서비스 컨테이너에 대한 관리(설치포함) 및 조율
마스터 노드와 워커 노드
서비스
2. 쿠버네티스 매니페스트 파일 작성
쿠버네티스 매니페트스 파일이란?
특징
- 파일 형식: 매니페스트 파일은 주로 YAML 또는 JSON 형식으로 작성. YAML 형식이 더 일반적으로 사용되며, 이해하기 쉽고 읽기 편한 구조를 가지고 있음
- 리소스 정의: 이 파일들은 쿠버네티스 클러스터에서 실행할 리소스를 정의.
⇒ 이 리소스에는 파드(Pods), 서비스(Services), 볼륨(Volumes), 네임스페이스(Namespaces) 등이 포함됨.
- 설정 정보: 매니페스트 파일은 리소스에 대한 상세한 설정 정보를 포함
⇒ 예를 들어, 파드 매니페스트 파일은 컨테이너 이미지, 포트 설정, 환경 변수 등 파드가 실행되는 데 필요한 모든 정보를 담고 있음
- 클러스터 배포:
kubectl apply명령어와 같은 쿠버네티스 도구를 사용하여 매니페스트 파일에 정의된 리소스를 클러스터에 배포
- 버전 관리 가능: 매니페스트 파일은 Git과 같은 버전 관리 시스템을 사용하여 관리할 수 있음.
⇒ 이를 통해 클러스터 구성의 변경 사항을 추적하고 필요한 경우 이전 버전으로 롤백할 수 있습니다.
3. 쿠버네티스 실습
매니페스트 기반 설치
- 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 podsShare article























