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
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')
asyncdefpush_alert(bot, chat_id):
time_data = datetime.now().strftime("현재 시간은 %H:%M:%S 입니다.")
await bot.sendMessage(chat_id, time_data)
asyncdefmain():
# 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()
whileTrue:
await asyncio.sleep(1000)
if __name__ == '__main__':
try:
asyncio.run(main())
except (KeyboardInterrupt, SystemExit):
AsyncIOScheduler().shutdown()
pass
3. 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이다.
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 동작 원리
2. 인공지능 추론 알고리즘 및 평가 메트릭
자료 없으므로 PASS
쿠버네티스의 이해 및 실습
1. 쿠버네티스 개념
쿠버네티스(Kubernetes)는 오픈 소스 기반 컨테이너 오케스트레이션 도구의 일종(K8S로 불림)
최초 구글에서 개발 후 클라우드 네이티브 컴퓨팅 재단(CNCF) 설립 및 기부
컨테이너 오케스트레이션은 시스템 전체를 총괄하고 여러 개의 컨테이너를 관리하는 일을 수행
다양한 호환 제품이 존재하며, 대부분의 클라우드 서비스 제공기업에서 맞춤형Kubernetes를 제공함
일반적으로 Kubernetes는 대규모 시스템에 적용 / 여러대의 물리적 서버가 존재한다는 것을 전제로 운영
쿠버네티스는 다수의 물리적 위에서 돌아가는 컨테이너들을 관리 및 조율하여 서비스를 구성
MLOPs에서의 쿠버네티스: MLOPs에서 다양한 종류와 기능을 수행하는 마이크로 서비스 컨테이너에 대한 관리(설치포함) 및 조율
마스터 노드와 워커 노드
마스터 노드와 워커 노드에는 각기 다른 소프트웨어 설치
→ 역할이 다르기 때문
마스터 노드: 전체적인 제어를 담당 (컨테이너를 실행X)
워커 노드: 실제 동작을 담당 (컨테이너 기반실행 O)
파드(POD)
파드(POD)란?: 컨테이너 볼륨을 함께 묶은 개념
⇒도커 이미지 실행 시 -v 옵션으로 wsl과 이미지 저장소 연동, 마운트
서비스
POD들의 집합으로 구성 된 그룹
여러 개의 POD를 관리하는 대장(선장!?)
물리적으로 여러 개의 워커 노드에 걸쳐 실행되더라도 하나의 서비스가 관리
⇒ 요청을 배분
클라우드 기반의 서비스 제공
레플리카 세트
POD의 수를 관리
장애 등의 이유로 POD가 종료되면, 모자라는 POD를 보충하는 등의 관리 진행
→ 장애 보수??
2. 쿠버네티스 매니페스트 파일 작성
쿠버네티스 매니페트스 파일이란?
쿠버네티스 클러스터에서 리소스를 생성하고 관리하기 위한 명세서(specification)
쿠버네티스가 어떤 리소스를 어떻게 생성하고 관리해야 하는지를 정의
매니페스트 파일은 쿠버네티스 내의 POD나 SERVICE 설정에 대한 파일
다양한 SERVICE와 POD를 설정에 따라 생성 및 관리
특징
파일 형식: 매니페스트 파일은 주로 YAML 또는 JSON 형식으로 작성. YAML 형식이 더 일반적으로 사용되며, 이해하기 쉽고 읽기 편한 구조를 가지고 있음
리소스 정의: 이 파일들은 쿠버네티스 클러스터에서 실행할 리소스를 정의.
⇒ 이 리소스에는 파드(Pods), 서비스(Services), 볼륨(Volumes), 네임스페이스(Namespaces) 등이 포함됨.
설정 정보: 매니페스트 파일은 리소스에 대한 상세한 설정 정보를 포함
⇒ 예를 들어, 파드 매니페스트 파일은 컨테이너 이미지, 포트 설정, 환경 변수 등 파드가 실행되는 데 필요한 모든 정보를 담고 있음
클러스터 배포: kubectl apply 명령어와 같은 쿠버네티스 도구를 사용하여매니페스트 파일에 정의된 리소스를 클러스터에 배포
버전 관리 가능: 매니페스트 파일은 Git과 같은 버전 관리 시스템을 사용하여 관리할 수 있음.
⇒ 이를 통해 클러스터 구성의 변경 사항을 추적하고 필요한 경우 이전 버전으로 롤백할 수 있습니다.