분류 전체보기 109

[Mojo] Mojo 설치 및 실행

Mojo 🔥: Programming language for all of AI Mojo combines the usability of Python with the performance of C, unlocking unparalleled programmability of AI hardware and extensibility of AI models. www.modular.com 며칠 전 Mojo가 공식 출시되었다. Mojo는 파이썬의 느린 실행 속도를 개선하기 위해 제작한 언어로, 기존에 파이썬으로 작성되어 있던 딥러닝 코드들을 Mojo로 옮겨 실행하면 얼마나 빨라질지 궁금해졌다. 이번 포스팅에서는 Mojo를 설치하고 실행하는 방법에 대해 알아보자. Mojo SDK Mojo SDK는 Mojo의 기본 라이브러리..

AI/기타 2023.09.14

[Airflow] RuntimeError: Cannot re-initialize CUDA in forked subprocess 에러 해결

실행 환경 OS: MacOS apache-airflow: 2.2.3 버전 문제 상황 Airflow로 개발중인 기능은 다음과 같았다. HuggingFace에 업로드 된 크롤링 데이터를 서버로 가져와 학습시킬 수 있는 형태로 전처리한다. 전처리된 데이터를 Lora 활용하여 kullm(구름)의 fine-tuning을 진행한다. 2번 기능을 테스트하던 중 아래와 같은 에러가 발생했다. RuntimeError: Cannot re-initialize CUDA in forked subprocess. To use CUDA with multiprocessing, you must use the 'spawn' start method airflow 없이 독립적으로 실행할 때는 정상적으로 동작하던 코드였는데, Airflow로 ..

Auto Scaling을 통해 고가용성 환경 구축하기

비용 문제로 낮은 사양의 EC2 인스턴스에 웹 서버를 서빙하다보니, 트래픽이 몰리거나 업데이트를 진행할 때 서버에 장애가 발생하는 문제가 종종 발생했다. 이러한 문제가 발생할 때마다 자동으로 서버의 장애를 파악하고 새로운 인스턴스를 실행시켜 장애가 발생한 서버를 대체할 수 있도록 Auto Scaling을 활용하기로 결정했다. 먼저, 장애가 발생한 인스턴스를 교체하기 위해 새롭게 실행되는 인스턴스에 자동으로 웹 서버를 실행시켜야 하기 때문에 웹 서버의 이미지를 생성한다. 여기서 이미지는 도커 이미지와 유사한 개념으로, 웹 서버의 이미지를 사용해 새로운 인스턴스를 실행시키면 기존 웹 서버와 동일한 정보를 가진 인스턴스가 생성된다. EC2 인스턴스 선택 > 작업 > 이미지 및 템플릿 > 이미지 생성을 클릭한다..

Cloud Architect/AWS 2023.08.02

법률 조언 웹 서비스 LawBot 프로젝트 회고

프로젝트 개요 법률 분쟁 상황에서 전문 분야 지식의 부재로 인한 정보의 격차를 해소하고, 누구나 평등하게 대처할 수 있도록 법률 조언을 해주는 챗봇 서비스이다. 서비스 이용자가 본인이 처한 법률적 상황을 설명하는 텍스트를 입력하면 LLM이 생성한 답변과 함께 유사한 상황의 판례에서 판례의 근거 조항들을 보여준다. 이를 바탕으로 사건이 법적 분쟁으로 이어질 때 고려해야 할 법령 조항들과 법률 조언을 확인할 수 있다. 개발 내용 아키텍처 구성 프로젝트 진행을 위해 네이버 커넥트 재단으로부터 제공받은 V100 서버 4대를 모두 활용하기 위해 처음 설계할 때부터 서비스 확장이 쉬운 마이크로 서비스 아키텍처를 고려했다. 또한 서비스 간의 상호 의존도를 낮춰 서버에 장애가 발생할 경우 전체 서비스가 중단되는 것을 ..

프로젝트 회고 2023.08.01

[문제 해결] GitHub Actions가 작동하지 않는 문제 해결

문제 상황 default branch(main branch)가 아닌, 다른 branch에서 GitHub Actions를 실행시키는 과정에서 발생한 문제이다. develop 브랜치에 push하거나, pull request를 할 경우 GitHub Actions가 작동하도록 아래와 같이 workflow 파일을 작성했다. name: CI for backend on: push: paths: "backend/**" branches: [ "develop" ] pull_request: paths: "backend/**" branches: [ "develop" ] ... 그러나, develop 브랜치로 pull request를 해도 GitHub Actions가 동작하지 않았다. 문제 해결 문제의 원인을 한 줄로 요약하자..

Route 53와 ACM을 사용해 도메인에 HTTPS 적용하기

법률 조언 챗봇 서비스의 접근성을 높이기 위해 도메인을 등록하고, 도메인에 HTTPS를 적용했다. 이번 포스팅에서는 AWS의 Route 53와 ACM 서비스를 활용해 진행한 과정을 공유해보려고 한다. 도메인 구매 먼저 Route 53에서 도메인을 구입해야 한다. 가비아와 같은 외부 도메인 기관에서 구매할 수도 있지만, 도메인을 등록하는 절차가 추가로 필요하기 때문에 Route 53에서 도메인을 구매하기로 결정했다. 도메인 등록 > 도메인 이름 선택에서 원하는 도메인을 검색한 후 장바구니에 추가한다. 구매자의 정보를 입력하고 다음 화면으로 넘어간다. 도메인을 자동 갱신할지 선택하고 이용 약관에 동의 후 주문을 완료한다. 주문 완료 후 30분정도 기다리면 도메인 등록이 완료된다. SSL 인증서 발급 AWS ..

Cloud Architect/AWS 2023.07.26

[Airflow] Airflow 아키텍처

DAG 디렉토리 DAG 파일들을 저장한다. 이 디렉토리 내부의 python 스크립트 파일은 Scheduler에 의해 탐색되고 DAG을 파싱한다. Scheduler 각종 메타 정보의 기록을 담당한다. DAG 디렉토리 내부의 python 스크립트 파일에서 DAG를 파싱하여 DB에 저장한다. 실행 진행 상황과 결과를 DB에 저장한다. Excutor를 통해 실제로 스케줄링된 DAG를 실행한다. Executor 스케줄링된 DAG를 Workers에게 작업을 실행시키는 역할을 한다. 크게 Local Executor와 Remote Executor로 나눌 수 있다. Local Executor는 DAG Run을 프로세스 단위로 실행한다. Remote Executor는 DAG Run을 외부 프로세스로 실행한다. Worker..

[Airflow] DAG 작성하기

DAG Airflow에서는 DAG이라는 단위로 스케줄링을 관리한다. DAG는 Directed Acyclic Graph의 약자로, 순환하지 않고 방향이 존재하는 그래프를 의미한다. 위와 그림과 같은 DAG는 a, b, c, d, e라고 하는 task의 조합으로 이루어져 있다. task는 파이프라인에서 실행되는 단위 작업이다. DAG 내에서 task는 이전에 수행되어야 하는 task가 모두 완료되면 실행되고, 여러 task를 동시에 실행시킬 수 있다. 예를 들어 DAG 구조가 위 그림과 같다면, a task가 완료된 후 b, c task가 동시에 실행되고, b와 c task가 모두 완료되어야 d task가 실행된다. DAG 작성하기 먼저 DAG를 담을 디렉토리를 Airflow 기본 디렉토리 경로에서 생성한다..

[Airflow] Airflow 설치 및 실행하기

Airflow 등장 전 Batch Process 구축 방법 Batch Process란? 예약된 시간에 일괄적으로 처리하는 프로세스를 말한다. Linux Crontab OS에 의해 지정된 시간마다 명령어가 수행된다. crontab -e를 입력하면 아래와 같은 에디터가 나온다. 이 에디터에 0 * * * * predict.py를 입력하면 매 시 0분에 predict.py가 실행된다. Linux Crontab의 문제점 명령어를 수행하다가 오류가 발생한 경우, 재실행을 하거나 오류가 발생했다는 알람을 받을 수 없다. 과거 실행 이력 및 실행 로그를 확인하기 어렵다. 여러 파일을 실행하거나, 복잡한 파이프라인을 만들기 힘들다. 따라서 간단한 Batch Process를 처리하는데 Linux Crontab이 적합할 ..

AWS Elastic Load Balancing 적용하기

법률 조언 챗봇 프로젝트를 진행하기 위해 네이버 커넥트재단으로부터 제공받은 V100 서버 5대 중 4대를 모델 서버로 사용하고 1대를 CI 테스트 서버 및 모델 학습 서버로 사용하기로 계획했다. 따라서 이번 포스팅에서는 AWS ELB를 활용해 트래픽을 4대의 모델 서버에 분산시킨 방법을 작성해보려고 한다. Proxy 서버 역할의 EC2 인스턴스 생성 컨테이너로 패키징된 V100 서버가 외부와 통신하기 위해 각각의 V100 서버에 Proxy 서버의 역할을 하는 EC2 인스턴스를 ssh 포트 포워딩으로 연결했다. 이 EC2는 ALB(Application Load Balancer)로부터 넘어온 트래픽을 V100 서버로 전달하는 역할을 할 것이다. Application Load Balancer 이제 이 4대의 ..

Cloud Architect/AWS 2023.07.23