어느덧 벌써 4장을 공부하고 있는 3주차가 되었다.

만날 일요일 밤에 벼락치기하고 있는 불량한 참가자 신세이지만....

이렇게라도 공부하려하는 스스로를 기특해 해야지 !!!!! 쓰담~ 쓰담~

 

 

04-1 로지스틱 회귀 (Logistic Regression)

- 분류 (Classifier) 모델

- vs. KNeighborClassifier

- 이진 분류 : 시그모이드(Sigmoid)

- 다중 분류 : 소프트맥스(Softmax), parameter C

 

04-2 확률적 경사 하강법 (Stochastic Gradient Descent)

- 점진적 학습 → 확률적 경사 하강법

- 손실함수 (loss function)

- 로지스틱 손실 함수 (logistic loss function, Binary Cross-Entropy loss function)

- partial_fit()

 

 

가제트 형사를 그려주신 것 같은데... MZ(GenZ?) 분들은 아시려나!? ㅋㅋㅋ

 

 

 

Homework

 

 

[기본 숙제]

 

 

- ① 시그모이드 함수(Sigmoid Function)

 

→ 기본적으로 선형 함수만 사용하는 경우 결과값이 너무 커지거나 너무 작아질 수 있으므로

     비선형 함수를 이용하여 값을 수렴하게 만드는 것이 계산하기에 용이해진다.

     이 때, 로지스틱 회귀에서 이진 분류를 사용하는 경우 시그모이드 함수를 이용하면

     0에서 1사이의 값으로 변환이 되며, 0.5를 기준으로 0과 1로 결과를 판단하기에 적합하다.

 

[추가 숙제]

반응형

 

고작 2주차인데, 뭔가 많다!

그런데, 여기서 끝이 아니라 뒤에 좀 더 있다!!!

 

다시 한 번 느꼈지만, 이 책은 절대 초보자를 위한 책이 아니다 !!!

 

03-1. K-최근접 이웃 회귀 (K-NN Regression)

- n_neighbors 파라미터를 이용하여 최근접 이웃과의 거리 평균을 이용하여 회귀

- 과대적합 vs. 과소적합

- n_neighbors 값 변경을 통해 과대적합, 과소적합 이슈 해결

 

03-2. 선형 회귀 (Linear Regression)

- coef_, intercept_

- 과대/과소 적합 이슈 → 다항 회귀

 

03-3. 특성공학과 규제

- 다항 특성 만들기 : PolynomialFeatures

- 규제 전에 표준화 : StadardScaler

- Ridge & Lasso

 

 

기본 숙제

동영상 강의에 얼추 나와있는 내용이라 어렵지 않다 ^^

 

n_neioghbors 값을 바꿔가면서 예측하고, 이것을 그래프로 표현하면 된다.

 

눈으로 봐도 얼추 5값이 적당하지 싶다~

 

추가 숙제

[ 모델 파라미터에 대해 설명하기 ]

 

파라미터는 머신러닝 및 딥러닝 모델의 핵심 요소로써,

모델이 데이터를 통해 학습하고 예측을 수행하는 데 필요한 내부 변수들을 의미한다.

이 값들을 적절히 조정하게 되면 모델은 주어진 문제를 효과적으로 해결할 수 있게 된다.

 

K-최근접 이웃 회귀(K-NN Regression) 챕터에서 n_neighbors 값을 조정하면서

과대적합이나 과소적합 문제를 완화하는 과정을 앞에서 살펴보았는데

여기에서 n_neighbors가 바로 모델 파라미터 중 하나이다.

 

 

반응형

첫 주는 조금 여유로울줄 알았는데, 공부할게 많다.

 

 

02-1. 훈련 세트와 테스트 세트

확인 문제를 통해 이 부분을 공부해보자.

 

1. 머신러닝 알고리즘의 한 종유로서 샘플의 입력과 타깃(정답)을 알고 있을 때 사용할 수 있는 학습방법은 무엇인가요?

- 머신러닝은 크게 지도학습과 비지도학습으로 구분할 수 있고, 정답을 알고 있는 경우 지도학습을 적용한다.

→ ① 지도학습

 

2. 훈련 세트와 테스트 세트가 잘못 만들어져 전체 데이터를 대표하지 못하는 현상을 무엇이라고 부르나요?

- 훈련 세트와 테스트 세트를 만들 때 전체적인 데이터 분포를 유지하는 것이 중요하며 그렇지 못한 경우 편향을 보인다.

→ ④ 샘플링 편향

 

3. 사이킷런은 입력 데이터(배열)가 어떻게 구성되어 있을 것으로 기대하나요?

- 문제 해석이 조금 오해의 여지가 있어 보이지만, 특성은 열(column)로 나열되어 있고 데이터의 구분은 행으로 된다.

→ ② 행: 샘플, 열: 특성

 

 

 

02-2. 데이터 전처리

이 책은 초보자를 위한 수준은 아닌 것 같고, 기본 지식이 좀 있어야 따라갈만한 것 같다.

어쩐지 처음 이 책으로 공부할 때 왠지 자괴감이 좀 들더라니..... ㅠㅠ

 

분산 = 기대값(평균)으로부터 얼마나 떨어진 곳에 분포하는지를 가늠하는 숫자

표준편차 = 분산의 제곱근

 

 

표준화(Standardization) = 평균을 0, 분산을 1로 만들어주는 스케일링 기법 (Z-Score 활용)

 

기본이 될만한 것들을 같이 정리하면서 공부해봐야겠다.

반응형

새해를 맞이하여 야심찬 목표를 세우고 힘차게 달리다가 ... 살짝 지치기도 하고 ... 번아웃도 오고 ...

그러던 와중 또 다시 심장을 뛰게 해주는 혼공학습단 12기 모집 공지를 발견했다 !!!

 

그리고, 정말 고맙게도 지원을 받아주셔서 12기로 활동(공부?)하게 되었다 !!!

 

이번에 공부할 책은 바로~ 바로~

"혼자 공부하는 머신러닝+딥러닝"

 

책을 구매한지는 정말 오래되었는데, 사실 완독하지는 못했었다.

예전에 무심코 지나갔던 책 안의 중요한 정보~!!!

 

이제서야 함께 합니다 !!!

 

 

6주 코스, 열심히 완주해야지 !!!

https://hongong.hanbit.co.kr/혼공-게시판/?uid=162&mod=document&pageid=1

 

개인적으로 너무나 존경하고 애정하는 "박해선"님의 서적인만큼,

책 자체의 퀄리티도 너무나 훌륭하고 예제 및 동영상 등 부수적인 부분들도 너무나 훌륭하다.

https://www.youtube.com/playlist?list=PLVsNizTWUw7HpqmdphX9hgyWl15nobgQX

 

저 동영상 녹화할 때 몇 번 라이브에 참여도 했었는데 ^^

 

 

우리를 공부시키기 위해 박해선님은 정말 많은 고민을 하시는 것 같다 ^^

 

챕터 구성에 대해서도 많은 고민의 흔적이 엿보인다.

 

 

 

뭔가 서론이 길었다!

이제 시작해보자.

 

 

Chapter 01. 나의 첫 머신러닝

 

 

01-1. 인공지능과 머신러닝, 딥러닝

박해선님은 직접 그린 그림과 글씨를 좋아하시는 것 같다 ^^

https://www.youtube.com/watch?v=J6wehCO_c58

 

 

 

01-2. 코랩과 주피터 노트북

이제는 이 책이 나온지도 조금 시간이 지나서

사용한 도구/패키지들의 버전들이 좀 옛날 것들이다.

 

Colab에 들어가서 기본적으로 설치된 Python 버전만 확인해봐도 좀 차이가 발생한다.

https://colab.research.google.com/

 

직접 실습들을 해보면서 버전 차이로 발생하는 것들이 있는지 확인해보면 재미있을 것 같다.

 

 

 

01-3. 마켓과 머신러닝

타이틀이 조금 웃기는데, 저런 제목이 나온이유는 다음과 같다.

https://www.youtube.com/watch?v=GOCVVSMeIf8

 

머신러닝을 공부하기 위해서 문제 상황을 다음과 같이 가정해보자.

- 생선을 파는 마켓이 있다.

- 생선의 크기나 무게를 가지고 그 생선이 무엇인지 맞추고 싶다.

 

동영상 강의 듣다보면 소음(?) 이슈가 있는데,

라이브로 참여했었을 때 마이크 켜 놓은 참석자가 한 명 있어서 조금 짜증났던 기억이 있다.

메시지로 그 사람한테 계속 뭐라했는데 강의를 듣지도 않았던 것 같고 메시지도 보지도 않았던 나쁜 사람 !!! ㅋㅋㅋ

 

첫 실습 내용인데,

첫번째 실습 내용부터 이렇게 쭉~ 진도를 나간다는 것이 조금 당황스럽기는 한데 ...

 

일단 Chapter01 진도는 여기까지!

반응형

[문제] Python으로 "Hello world!"를 가장 간단하게 출력하는 방법은?

[정답] 다음과 같은 방법을 생각해낸 사람은 파이썬 고수!!!

Hello world!

 

 

[문제] "python -m antigravity"를 실행하면 어떤 결과가 나올까?

[정답] 'antigravity'의 뜻은 반중력이며, 모든 것을 밀어내는 성질을 의미한다.

antigravity

 

응?! 아무것도 출력되는 것 없이 그냥 끝난다. 그런데... 갑자기 웹 브라우져가 실행되는데...

https://xkcd.com/353/

 

설마 XKCD를 처음보는 분이 계실리가.....?!

 

계실 수도 있으니 ^^ 설명을 해보자면,

 

랜들 먼로(Randall Munroe)가 일주일에 3번 연재하는 Web-Comic으로

공대 개그, Geek스러운 개그가 주된 유머 코드이다.

 

XKCD

 

웹사이트 메뉴 中 WHAT IF? 컨텐츠를 기반으로 책도 출간했다. 번역본도 있다.

아주 위험한 과학책

 

재밌지 않나!?

python CLI 가지고 별 이상한 일이 다 생긴다 ^^

 

 

[문제] python 으로 그래픽 UI를 어떻게 표현할 수 있는지 쉽게 설명할 수 있는 방법은?

[정답] python 에는 오랜 역사(?)를 갖고 있는 거북이(turtle) 모듈이 있다.

turtle demo

 

응!? turtle demo도 지원해준다고!?

turtle example

 

신기한(?) 윈도우가 하나 실행된다.

examples

 

하나 골라 보자.

clock example

 

turtle 모듈을 이용한 예제 코드도 볼 수 있고,

윈도우 하단의 "START"를 클릭하면 실행 결과도 확인할 수 있다.

 

"python -m turtledemo" 실행 하나만으로 이런 어플이 뜬다니,

대체 이런 것들은 어디에 숨어있었던 것인지...

 

그동안 Python을 몇 년 동안 만져왔는데, 지금까지 이런 것들을 전혀 몰랐다니!

 

 

생각보다 재미있어서 이런 것들 찾아서 몇 번 더 포스팅해보겠다 ^^

 

 

반응형

AI 특히 LLM, NLP를 공부하는 사람들이라면 최소한 한 번 이상 들어봤을 '허깅페이스(HuggingFace)'

  - https://huggingface.co/

https://huggingface.co/

 

2016년도에 설립된 뉴욕에 본사가 있는 프랑스계 미국 회사이며,

자연어 처리(NLP: Natural Language Processing), 특히 트랜스포머(Transformer)에 중점을 둔 커뮤니티라고 할 수 있다.

 

 

 

HuggingFace가 어떤 의미일까!?

 

이모지를 보면 한국어로는 '포옹하고 있는 얼굴'로 나오는 것이 있다.

이것이 HuggingFace의 정체이다!!! ^^

Emoji

 

허깅페이스는 작년(23년) 8월 2억3500만 달러(약 3113억원)의 자금을 투자 받았으며

45억 달러(약 6조)의 시장 가치를 평가받았다. 어마어마 하다.

 

그리고, 투자 기업 목록을 보면

구글과 엔비디아, 아마존, AMD, 인텔, IBM, 퀄컴, 세일즈포스 등 AI 개발 하면 떠오르는 테크 기업들이 대부분 포함됐다.

 

 

 

대체 허깅페이스가 무엇이기에 이렇게 많은 업체들이 관심을 갖고 투자를 하고 있을까?!

 

허깅페이스 사이트의 상단 메뉴를 살펴보자.

https://huggingface.co/

 

허깅페이스 사이트에서 제공해주는 기능은 다음 3가지라고 할 수 있다.

  - Models / Datasets / Spaces

 

 

▷ Models

Models

 

자연어 처리 외에도 다양한 유형의 모델들을 등록하고 다운로드 받을 수 있다.

  - Multimodal

  - Computer Vision

  - Natural Language Processing

  - Audio

  - Tabular

  - Reinforcement Learning

  - Other

 

무려 73만여개의 모델들이 등록되어 있는 것을 확인할 수 있다.

 

성능 좋은 LLM 모델을 오픈 공개한다고 하면 일단 허깅페이스에 등록하는 것이 거의 정해진 수순이다.

최근 애플에서도 모델을 오픈했고, 당연하게 허깅페이스에 등록했다고 기사가 나왔다.

apple model

 

지난달에 등록했던 OpenELM과 몇 일 전 등록한 coreml 모델들을 확인할 수 있다.

 

관심있는 모델을 선택하면 상세 정보 페이지가 나온다.

Meta-Llama-3-8B

 

Model Card를 통해 학습데이터에 대한 정보라던지, 어떻게 활용할 수 있는지 등 자세한 설명을 볼 수 있다.

 

 

 

▷ Datasets

Datasets

 

모델보다는 좀 부족한 17만여개의 Datasets도 업로드/다운로드 할 수 있다.

 

마찬가지로 Dataset card를 통해 자세한 정보를 확인해볼 수 있다.

ft-instruction-synthesizer-collection

 

이미지나 오디오 형식의 feature도 보고, 듣기 편하게 제공해준다.

 

 

 

▷ Spaces

Spaces

 

가장 인상적인 Spaces !!!

AI Apps들을 등록하고 사용해볼 수 있다.

 

ai-comic-factory

 

Japanimation 스타일로 AI를 공부하는 스토리를 그려달라고 했더니 저런 결과물을 생성해줬다 ^^

 

구글과 제휴를 했다고 하더니(24년 1월) GCP 리소스를 이용해 이런 서비스도 제공해줄 수 있나보다.

하지만, App 실행하다보면 GPU 할당 받기 위해 잠시 기다리라는 메시지가 종종 나오기는 한다.

 

 

 

▷ Docs

Docs

 

학생 또는 개발자라면 좀 더 관심 깊게 봐야하는 것은 Docs 메뉴이다.

심지어 한글도 비교적 충실히 제공해준다. (물론 유명한 컨텐츠에 한해서 ^^)

Transformers

 

그런데, 내용을 잘 보면 알겠지만, 일반적인 튜토리얼이 아니다.

HuggingFace를 활용하는 방법들을 설명해주는 내용들이다.

 

그렇다!!!

허깅페이스의 매력은 파이썬 패키지에 있다.

transformers

 

허깅페이스에 등록된 모델, 데이터셋 등을 편하게 사용할 수 있다.

추론도할 수 있고, fine-tuning을 해볼 수도 있고, 아니면 내가 다시 학습을 시켜볼 수도 있다.

 

 

 

여기까지 살펴본 결과 .... 

허깅페이스는 ML-Hub / AI-Hub / LLM-Hub 등의 명칭으로 불러야 할 것 같다.

AI Platform 이라고 정의하는 글도 본 것 같다.

 

다음에는 허깅페이스를 이용해서 파인튜닝 해보는 내용을 정리해보려고 한다.

이번 글은 여기에서 ... 이만~

반응형

Docker Compose를 이용한 설치를 한 상황을 기준으로 하겠다.

  - https://www.whatwant.com/entry/Apache-Airflow-install

 

[ Status ]

    - Docker Compose를 이용해서 Apache Airflow를 설치한 상태이다.

 

> docker ps

 

    - 하지만, example들이 엄청 많이 보인다.

        . 공부하기 위해 참조할 수는 있지만, 삭제해도 다시 살아나고..... 지워버리고 싶은 상황이다.

 

http://localhost:8090/home

 

[ Docker Compose Down ]

    - 현재 설치된 것을 모두 지워버려야 한다.

 

> docker compose down

 

> docker compose down

 

[ Edit docker-compose.yaml ]

    - YAML 파일의 내용을 살짝 바꿔줘야 한다.

 

> nano docker-compose.yaml

 

> nano docker-compose.yaml

 

    - 빨간 박스에 있는 것 처럼, 해당 값을 false로 변경해주면 된다.

 

[ Re-install ]

    - 이제 설치/실행 진행하면 된다.

 

❯ docker compose up airflow-init


❯ docker compose up

 

    - 그리고 웹브라우저 다시 열고 접속하고 로그인 하면... 깨끗한 화면을 볼 수 있다!

 

http://localhost:8090/home

 

깔끔!

반응형

'AI_ML > MLOps' 카테고리의 다른 글

Apache Airflow install (아파치 에어플로우 설치)  (1) 2024.05.04

▷ Basic Info ...

    - MLOps에 대해서 공부를 하다보면 누구나 한 번 이상 꼭 듣게 되는 도구 ... Apache Airflow !!!

    - 공식 사이트를 방문해보면 바람개비와 함께 산뜻한 페이지가 반긴다.

        . https://airflow.apache.org/

 

https://airflow.apache.org/

 

    - 하지만, 우리같은(?) 도구쟁이들은 GitHub 사이트가 더 좋다 ^^

        . https://github.com/apache/airflow

 

https://github.com/apache/airflow

 

    - 최신병에 걸려있기 때문에(^^), 릴리즈 정보를 확인해봐야 한다.

        . https://airflow.apache.org/announcements/

 

https://airflow.apache.org/announcements/

 

▷ Prerequisites

    - 기본적으로 POSIX 호환 운영체제에서 Python만 있으면 설치는 가능하다.

        . Linux 배포판 및 MacOS가 기본적인 지원 운영체제이지만

        . WSL2에서도 실행은 가능하다. 다만, 주력 지원 환경은 아니기에 Production 환경으로는 추천하지 않는다.

        . Kubernetes 환경에서 동작 가능한 것이지 설치할 때 필수 환경은 아니다.

 

    - 메모리는 최소 4GB 이상이 필요하다.

 

    - 설치할 때 SQLite를 같이 포함해서 설치를 진행할 수 있지만, Production에서는 별도 DB 구성을 추천한다.

 

https://airflow.apache.org/docs/apache-airflow/2.9.0/installation/prerequisites.html

 

▷ Environments

    - 설치 과정을 함께할 운영체제는 Ubuntu 20.04 환경이다.

        . Airflow는 Debian 계열하고 제일 친한 것 같다. 그렇다면 Ubuntu가 최선이지 않을까!?

 

❯ lsb_release -a

No LSB modules are available.
Distributor ID: Ubuntu
Description: Ubuntu 20.04.6 LTS
Release: 20.04
Codename: focal

 

    - 일단 메모리 상황을 점검해보자.

        . 메모리는 마음대로 할 수 있는 것이 아니니 부족하다면... 다른 서버를 찾아야 한다 ㅠ

 

❯ free -h

                  total        used          free       shared    buff/cache   available
Mem:       7.8Gi       679Mi       6.4Gi          13Mi          677Mi        6.8Gi
스왑:        2.0Gi          0B         2.0Gi

 

    - Python 버전을 확인해보자.

        . Python 버전 관리를 위해서는 Pyenv를 사용하는 것을 권장합니다 !!!

        . https://www.whatwant.com/entry/pyenv

 

❯ pyenv --version   

pyenv 2.3.9-11-g3d83bcdb


❯ python --version

Python 3.8.16

 

▷ Install #1 - PyPI + venv

    - Apache Airflow를 설치하는 여러 방법이 있는데,

      PyPI를 이용하는 방법과 Docker를 이용하는 방법에 대해서 살펴보고자 한다.

 

① pyenv

    - Python 3.10 버전 환경에서 설치를 해보고자 한다.

    - pyenv를 이용해서 원하는 버전을 설치하도록 하겠다.

 

❯ pyenv versions  

  system
* 3.8.16 (set by /home/chani22/.pyenv/version)

# 사용하고자 하는 버전이 설치되어 있는지 확인


❯ pyenv install -l

Available versions:
  2.1.3
  2.2.3
...

# 설치가 가능한 버전 확인


❯ pyenv install 3.10.9

Downloading Python-3.10.9.tar.xz...
-> https://www.python.org/ftp/python/3.10.9/Python-3.10.9.tar.xz
Installing Python-3.10.9...
Installed Python-3.10.9 to /home/chani22/.pyenv/versions/3.10.9

 

② workspace / venv

    - Airflow를 설치할 디렉토리를 확보하고,

    - Python venv를 이용하여 가상환경까지 생성해보자.

 

❯ mkdir airflow

❯ cd airflow

❯ pyenv local 3.10.9 

❯ python -m venv .venv

❯ ls -al

합계 16
drwxrwxr-x 3   chani22 chani22 4096  4월 29 01:18 .
drwxr-xr-x 3    chani22 chani22 4096  4월 29 01:16 ..
-rw-rw-r-- 1      chani22 chani22      7  4월 29 01:16 .python-version
drwxrwxr-x 5   chani22 chani22 4096  4월 29 01:18 .venv

❯ source .venv/bin/activate

 

③ ENV

    - 설치에 필요한 정보들을 위해서 환경 변수들을 설정해준다.

    - "/srv/install/airflow" 디렉토리는 위에서 만들어 놓은 것을 사용해도 된다.

    - "AIRFLOW_VERSION"은 지금 현재 가장 최신 버전을 선택했다.

    - "PYTHON_VERSION"의 경우에 그냥 명시적으로 "3.10"이라고 설정해버려도 된다.

    - "CONSTRAINT_URL" 역시 그냥 명시적으로 버전을 지정할 수도 있다.

 

❯ export AIRFLOW_HOME=/srv/install/airflow

❯ export AIRFLOW_VERSION=2.9.0

❯ export PYTHON_VERSION="$(python -c 'import sys; print(f"{sys.version_info.major}.{sys.version_info.minor}")')"

❯ export CONSTRAINT_URL="https://raw.githubusercontent.com/apache/airflow/constraints-${AIRFLOW_VERSION}/constraints-${PYTHON_VERSION}.txt"


❯ echo $PYTHON_VERSION

3.10


❯ echo $CONSTRAINT_URL

https://raw.githubusercontent.com/apache/airflow/constraints-2.9.0/constraints-3.10.txt

 

④ install

    - 준비 끝. 설치 시작!

 

❯  pip install "apache-airflow==${AIRFLOW_VERSION}" --constraint "${CONSTRAINT_URL}"

...


❯ pip list | grep airflow                                                          

apache-airflow                                          2.9.0
apache-airflow-providers-common-io       1.3.0
apache-airflow-providers-common-sql     1.11.1
apache-airflow-providers-fab                    1.0.2
apache-airflow-providers-ftp                     3.7.0
apache-airflow-providers-http                   4.10.0
apache-airflow-providers-imap                 3.5.0
apache-airflow-providers-smtp                 1.6.1
apache-airflow-providers-sqlite                3.7.1

 

⑤ DB init

    - 그냥 실행하는 방법도 있지만, 하나씩 차근차근 셋업하는 것을 추천한다.

 

❯ airflow db migrate

DB: sqlite:////srv/install/airflow/airflow.db
Performing upgrade to the metadata database sqlite:////srv/install/airflow/airflow.db
[2024-04-29T02:20:10.674+0900] {migration.py:216} INFO - Context impl SQLiteImpl.
[2024-04-29T02:20:10.710+0900] {migration.py:219} INFO - Will assume non-transactional DDL.
[2024-04-29T02:20:10.713+0900] {migration.py:216} INFO - Context impl SQLiteImpl.
[2024-04-29T02:20:10.714+0900] {migration.py:219} INFO - Will assume non-transactional DDL.
INFO  [alembic.runtime.migration] Context impl SQLiteImpl.
INFO  [alembic.runtime.migration] Will assume non-transactional DDL.
INFO  [alembic.runtime.migration] Running stamp_revision  -> 1949afb29106
Database migrating done!

 

⑥ make admin account

    - 관리자 계정을 만들어주자.

    - "--role Admin" 부분만 잘 지켜주고, 나머지는 각자 취향대로.

 

❯ airflow users create --username whatwant --firstname whatwant --lastname boss --role Admin --email whatwant@whatwant.com

...
Password:
Repeat for confirmation:
[2024-04-29T02:31:53.165+0900] {override.py:1516} INFO - Added user whatwant
User "whatwant" created with role "Admin"

 

⑦ run

    - 이제 웹 UI를 확인해보자.

 

airflow webserver --port 8080

 

    - 웹브라우저를 실행해서, 다음 주소로 접속하면 된다.

        . http://localhost:8080

 

http://localhost:8080/

 

    - 앞에서 생성한 계정과 패스워드를 이용해서 Sign in 하면 된다.

 

http://localhost:8080/

 

    - 뭔가 화면은 나왔는데, 위에 뭔가 알람이 많이 보인다.

 

⑧ notice

    - 어?! 그런데 뭔가 경고같은 메시지가 보인다.

 

notice

 

    - 가장 위에 있는 메시지를 보면 실행중인 "scheduler"가 안보인단다. 해결해보자.

 

⑨ scheduler

    - 새로운 터미널을 추가로 띄워서 scheduler를 실행하면 된다.

 

new terminal

 

   - 터미널을 새로 띄우면 Python 가상환경도 추가 설정해야 한다.

 

❯ cd airflow

# 앞에서 진행했던 airflow 디렉토리로 이동


❯ source .venv/bin/activate


❯ airflow scheduler

 

    - 웹브라우저를 reload(F5) 하면 갑자기 못보던 샘플 DAGs 가 보인다.

 

http://localhost:8080/home

 

    - 상단에 보이는 알람 메시지가 3개에서 2개로 줄어들었다.

    - 나머지 2개는 production 환경에서 SQLite나 SeuentialExecutor를 사용하지 말라는 메시지다. 일단 무시!

 

http://localhost:8080/dags/example_params_trigger_ui/grid?tab=graph

 

    - Sample을 하나 선택해서 살펴보면 뭔가 멋지다! ^^

 

 

▷ Install #2 - Docker + Compose

    - docker를 이용한 airflow 설치를 해보자.

    - 그냥 docker image를 이용한 실행말고, 여러 모듈들을 같이 구성하기 위해 docker compose를 사용하겠다.

    - https://airflow.apache.org/docs/apache-airflow/2.9.0/howto/docker-compose/index.html

 

① docker / docker-compose

    - docker 및 docker-compose가 설치되어 있어야 한다.

        . Ubuntu 20.04 기준으로 Quick-Guide는 다음과 같다.

 

❯ mkdir docker 

❯ cd docker      

❯ wget https://download.docker.com/linux/ubuntu/dists/focal/pool/stable/amd64/containerd.io_1.6.31-1_amd64.deb

❯ wget https://download.docker.com/linux/ubuntu/dists/focal/pool/stable/amd64/docker-buildx-plugin_0.14.0-1\~ubuntu.20.04\~focal_amd64.deb

❯ wget https://download.docker.com/linux/ubuntu/dists/focal/pool/stable/amd64/docker-ce-cli_26.1.1-1\~ubuntu.20.04\~focal_amd64.deb

❯ wget https://download.docker.com/linux/ubuntu/dists/focal/pool/stable/amd64/docker-ce_26.1.1-1\~ubuntu.20.04\~focal_amd64.deb

❯ wget https://download.docker.com/linux/ubuntu/dists/focal/pool/stable/amd64/docker-compose-plugin_2.27.0-1\~ubuntu.20.04\~focal_amd64.deb


❯ ls -al

합계 109212
drwxrwxr-x 2 chani22 chani22     4096  5월  1 10:31 .
drwxr-xr-x 4 chani22 chani22     4096  5월  1 10:29 ..
-rw-rw-r-- 1 chani22 chani22 29821672  4월 11 21:01 containerd.io_1.6.31-1_amd64.deb
-rw-rw-r-- 1 chani22 chani22 29650176  4월 30 01:48 docker-buildx-plugin_0.14.0-1~ubuntu.20.04~focal_amd64.deb
-rw-rw-r-- 1 chani22 chani22 14601364  5월  1 00:17 docker-ce-cli_26.1.1-1~ubuntu.20.04~focal_amd64.deb
-rw-rw-r-- 1 chani22 chani22 25267932  5월  1 00:17 docker-ce_26.1.1-1~ubuntu.20.04~focal_amd64.deb
-rw-rw-r-- 1 chani22 chani22 12478416  5월  1 00:17 docker-compose-plugin_2.27.0-1~ubuntu.20.04~focal_amd64.deb


❯ sudo dpkg --install containerd.io_1.6.31-1_amd64.deb 

❯ sudo dpkg --install docker-ce-cli_26.1.1-1\~ubuntu.20.04\~focal_amd64.deb 

❯ sudo dpkg --install docker-ce_26.1.1-1\~ubuntu.20.04\~focal_amd64.deb    

❯ sudo dpkg --install docker-buildx-plugin_0.14.0-1\~ubuntu.20.04\~focal_amd64.deb 

❯ sudo dpkg --install docker-compose-plugin_2.27.0-1\~ubuntu.20.04\~focal_amd64.deb 


sudo usermod -aG docker $USER

# 터미널 재시작


❯ docker --version

Docker version 26.1.1, build 4cf5afa


❯ docker compose version

Docker Compose version v2.27.0

 

② download YAML

    - airflow 설치 과정을 위한 디렉토리 만들고

    - docker-compose YAML 파일을 다운로드 받자

 

❯ mkdir airflow-docker

❯ cd airflow-docker

❯ wget https://airflow.apache.org/docs/apache-airflow/2.9.0/docker-compose.yaml

--2024-05-01 10:44:57--  https://airflow.apache.org/docs/apache-airflow/2.9.0/docker-compose.yaml
airflow.apache.org (airflow.apache.org) 해석 중... 151.101.2.132, 2a04:4e42::644
다음으로 연결 중: airflow.apache.org (airflow.apache.org)|151.101.2.132|:443... 연결했습니다.
HTTP 요청을 보냈습니다. 응답 기다리는 중... 200 OK
길이: 11197 (11K)
저장 위치: `docker-compose.yaml'

docker-compose.yaml                 100%[==========================================>]  10.93K  --.-KB/s    / 0s       

2024-05-01 10:44:57 (45.5 MB/s) - `docker-compose.yaml' 저장함 [11197/11197]

 

    - YAML 파일 내용을 살펴보면 알겠지만, 많은 서비스가 별도의 docker로 구성되어 있다.

        . airflow-scheduler

        . airflow-webserver

        . airflow-worker

        . airflow-triggerer

        . airflow-init

        . postgres

        . redis

 

    - 그래서 메모리가 충분히 필요한데, 최소 4GB / 권장 8GB 이다.

 

③ mkdir

    - 여러 종류의 파일들을 저장할 디렉토리들을 만들어 놓자.

        . ./dags - you can put your DAG files here.
        . ./logs - contains logs from task execution and scheduler.
        . ./config - you can add custom log parser or add airflow_local_settings.py to configure cluster policy.
        . ./plugins - you can put your custom plugins here.

 

❯ mkdir -p ./dags ./logs ./plugins ./config


❯ ls -al

합계 36
drwxrwxr-x 6 chani22 chani22  4096  5월  1 10:53 .
drwxr-xr-x 5 chani22 chani22  4096  5월  1 10:44 ..
drwxrwxr-x 2 chani22 chani22  4096  5월  1 10:53 config
drwxrwxr-x 2 chani22 chani22  4096  5월  1 10:53 dags
-rw-rw-r-- 1 chani22 chani22 11197  4월  8 20:42 docker-compose.yaml
drwxrwxr-x 2 chani22 chani22  4096  5월  1 10:53 logs
drwxrwxr-x 2 chani22 chani22  4096  5월  1 10:53 plugins

 

④ UID

    - airflow가 실행될 UID도 설정해주자.

 

❯ echo -e "AIRFLOW_UID=$(id -u)" > .env


❯ cat .env

AIRFLOW_UID=1000

 

⑤ Customizing

    - YAML 파일을 수정할 수도 있다.

    - port만 살짝 바꿔봤다. (각자 취향)

 

❯ nano docker-compose.yaml

 

⑥ Initialize the database

    - DB 초기화를 진행하자.

 

❯ docker compose up airflow-init

 

    - 잘 실행되면 아래와 같은 화면이 나온다.

 

❯ docker compose up airflow-init

 

    - 아래와 같이 Permission denied 상황이 나올 수도 있는데,

      sock 파일의 권한을 조정하거나 그래도 안되면 재부팅 한 번 해주면 잘 된다.

 

❯ docker compose up airflow-init

permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock: Get "http://%2Fvar%2Frun%2Fdocker.sock/v1.45/containers/json?all=1&filters=%7B%22label%22%3A%7B%22com.docker.compose.config-hash%22%3Atrue%2C%22com.docker.compose.project%3Dairflow-docker%22%3Atrue%7D%7D": dial unix /var/run/docker.sock: connect: permission denied


❯ sudo chown root:docker /var/run/docker.sock

 

    - 현재 상태를 확인해보면 다음과 같다.

 

❯ ls -al

합계 40
drwxrwxr-x 6 chani22 chani22  4096  5월  1 11:00 .
drwxr-xr-x 5 chani22 chani22  4096  5월  1 10:44 ..
-rw-rw-r-- 1 chani22 chani22    17  5월  1 10:55 .env
drwxrwxr-x 2 chani22 chani22  4096  5월  1 10:53 config
drwxrwxr-x 2 chani22 root     4096  5월  1 10:53 dags
-rw-rw-r-- 1 chani22 chani22 11197  5월  1 11:00 docker-compose.yaml
drwxrwxr-x 2 chani22 root     4096  5월  1 10:53 logs
drwxrwxr-x 2 chani22 root     4096  5월  1 10:53 plugins


❯ docker ps

CONTAINER ID   IMAGE          COMMAND                   CREATED         STATUS                   PORTS      NAMES
1dfae6410fa0   postgres:13    "docker-entrypoint.s…"   4 minutes ago   Up 4 minutes (healthy)   5432/tcp   airflow-docker-postgres-1
466bc0539812   redis:latest   "docker-entrypoint.s…"   4 minutes ago   Up 4 minutes (healthy)   6379/tcp   airflow-docker-redis-1

 

⑦ Run Airflow

    - 이제 Airflow를 실행하자.

 

  docker compose up

...

 

   - 뭔가 잔뜩 메시지가 흘러나온다.

 

❯ docker compose up

 

    - 웹브라우저를 열어서 접속해보자.

        . http://localhost:8090/

        . 접속 정보: airflow / airflow

 

http://localhost:8090/

 

    - 어!? 뭔가 되게 깔끔한 화면이 나온다.

 

http://localhost:8090/home

 

    - Container 정보를 살펴보자.

 

> docker ps

 

 

우와~~~~ 뭔가 엄청 길었다.

추가적으로 살펴볼 것이 많이 남아있지만 일단 "설치 후 실행"이라는 것에 주안점을 두었다.

 

"운영" 측면에서는 더 알아봐야할 것이 많겠지만 지금은 여기까지만~~~ ^^

반응형

'AI_ML > MLOps' 카테고리의 다른 글

Airflow remove Example DAGs (에어플로우 예제 삭제)  (0) 2024.05.04

+ Recent posts