Introduction

CKA: Kubernetes 관리자의 책임을 수행할 수 있는 기술, 지식 및 역량을 갖추고 있음을 보증하는 자격증

CKA curriculum에서 CKA가 포함하는 내용들을 아래와 같이 확인할 수 있다.

v1.29 기준
Domain Weight Key Points
Cluster Architecture,
Installation & Configuration
25% ✅ Manage role based access control (RBAC)
✅ Use Kubeadm to install a basic cluster
✅ Manage a highly-available Kubernetes cluster
✅ Provision underlying infrascruture to deploy a Kubernetes cluster
✅ Implement etcd backup and restore
Workloads & Scheduling 15% ✅ Understand deployments and how to perform rolling update and rollbacks
✅ Use ConfigMaps and Secrets to configure applications
✅ Know how to scale applications
✅ Understand how resource limits can effect Pod scheduling
✅ Awareness of manifest management and common templating tools
Services & Networking 20% ✅ Understand host networking configuration on the cluster nodes
✅ Understand connectivity between Pods
✅ Understand ClusterIP, NodePort, LoadBalancer service types and endpoints
✅ Know how to use Ingress controllers and Ingress resources
✅ Know how to configure and use CoreDNS
✅ Choose an appropriate container network interface plugin
Storage 10% ✅ Understand storage classes, persistent volumes
✅ Understand volume mode, access modes and reclaim polices for volumes
✅ Understand persistent volume claims primitive
✅ Know how to configure applications with persistent storage
Troubleshooting 30% ✅ Evaluate cluster and node logging
✅ Understand how to monitor applications
✅ Manage container stdout & stderr logs
✅ Troubleshoot application failure
✅ Troubleshoot cluster component failure
✅ Troubleshoot networking
Read more »

Introduction

Open source data labeling platform Label Studio에 Label Studio ML Backend의 도입으로 machine learning model을 통합하고 labeling 작업을 위한 자동화된 예측을 제공할 수 있다.
이를 통해 labeling process를 가속화하고 일관성과 정확성을 향상시킬 수 있으며 실시간으로 모델의 성능을 평가하고 빠르게 반복함으로써 model을 지속적으로 개선할 수 있다.
Label Studio와 Label Studio ML Backend의 작동 방식은 아래와 같이 구성된다.

label-studio-ml-backend
  • predict(): 입력된 data에 대해 model의 출력을 Label Studio format으로 변경 후 UI에 제공
  • fit(): Label Studio 내 annotation이 완료된 data를 학습하고 load
Read more »

Image Clustering Conditioned on Text Criteria

Introduction

Image clustering은 unsupervised learning task으로 연구되어 왔으며 대량의 visual data 구축, label이 없는 image dataset의 labeling 비용 감소, image 검색 system 성능 향상에 사용되었다.
최신의 deep image clustering 방법들은 ground truth로 간주되는 dataset의 사전 정의된 class label으로 종종 평가된다.

하지만 실제로는 각 사용자들이 동일한 dataset에 대해 clustering할 때 서로 다른 기준에 따라 여러 결과를 원할 수 있다.
그럼에도 기존 clustering 방법은 사용자가 clustering 기준을 제어할 수 있는 직접적인 mechanism을 제공하지 않는다. (기존 clustering 방법의 기준은 neural network의 inductive bias, loss function, data augmentation, feature extractor에 의해 결정될 가능성이 높다.)
따라서 저자들은 이러한 한계점을 개선하기 위해 사용자가 지정한 기준을 기반으로 단일 dataset에서 다양한 결과를 가능하게 하고 기존의 암묵적으로 지시된 clustering process를 혁신한다.

Read more »

SOLAR 10.7B: Scaling Large Language Models with Simple yet Effective Depth Up-Scaling

Introduction

NLP 분야의 언어 이해와 상호작용에 대한 향상시킨 LLM의 도입으로 큰 변화가 진행되고 있다.
이러한 발전은 performance scaling law에 의해 더욱 큰 model 학습의 필요를 증대시켰다.
Mixture of experts (MoE)와 같은 방법을 통해 효율적이고 효과적이게 LLM을 scale-up을 할 수 있지만 종종 특별한 변화가 필요하여 광범위한 적용이 어려운 한계점이 존재한다.
따라서 효과적이고 효율적이게 LLM을 scaling up하며 사용 편의성을 위한 단순성을 유지하는 것은 매우 중요하다.
본 논문의 저자들은 sparse upcycling에 영감을 받아 효과적이고 효율적이며 단순한 LLM up-scale 방법인 depth up-scaling (DUS)를 제안한다.

Read more »

Introduction

Jenkins를 통해 GitOps 기반으로 Docker image가 빌드되고 Docker Hub에 push 되게 하려면 아래와 같은 여러 방식이 존재한다.

Docker-in-Docker (DinD) Docker Outside of Docker (DooD) Kaniko
Definition Container 내부에 별도의 Docker daemon 실행 Host의 Docker daemon을 사용 Docker daemon 없이 container image 빌드
Security 더 높은 격리 제공, 하지만 보안상의 우려도 존재 Host Docker와 직접적인 상호작용으로 보안상 취약할 수 있음 Docker daemon 없이 작동하여 보안 강화
Performance 성능 overhead 가능성 일반적으로 더 나은 성능 Docker daemon을 사용하지 않기 때문에 성능이 최적화될 수 있음
Complexity 설정과 관리가 더 복잡 상대적으로 간단한 설정 환경 설정에 따라 다르나, 일반적으로 설정이 간단함
Used Tools Jib, Buildah Docker CLI, Docker Compose Kaniko CLI, Kubernetes와의 통합
Suitable Use Cases 격리된 환경에서의 독립적인 container 관리 간단한 CI/CD pipeline 구성 Cloud 환경 및 Kubernetes에서의 image build
Read more »

Introduction

자주 사용하는 Python 함수들을 package로 생성하고 CI/CD pipeline을 Jenkins로 구축하여 자동으로 배포될 수 있게 해보자!
배포는 package 내부의 함수 및 객체를 sphinx로 문서화하고 PyPI (Python Package Index)에 업로드하여 pip로 설치할 수 있게 해볼 것이다.
CI/CD 계획은 아래와 같다.

  • Dev Branch Push
    1. Lint
    2. Build
    3. Test
  • Master Branch PR
    1. Lint
    2. Build
    3. Test
    4. Docs
  • Master Branch Puah
    1. Build
    2. Deploy
      1. PyPI
      2. GitHub

이 사항들을 Jenkins로 개발하고 blue ocean으로 확인해보면 아래와 같이 구성된다.

jenkinsfile

Read more »

Installation (Helm)

Argo CD로 Jenkins를 배포하기 위해 Helm으로 아래와 같이 helm chart를 받는다.

1
2
3
4
$ helm repo add jenkins https://charts.jenkins.io
$ helm repo update
$ helm pull jenkins/jenkins
$ tar -xvf jenkins-4.8.2.tgz

Traefik을 통해 ingress 설정을 https://jenkins.zerohertz.xyz로 정의했다.
따라서 values.yaml 파일을 아래와 같이 수정하고 배포했다.

values.yaml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
...
controller:
...
jenkinsUrlProtocol: "https"
jenkinsUrl: "jenkins.zerohertz.xyz"
...
JCasC:
...
securityRealm: |-
local:
allowsSignup: false
enableCaptcha: false
users:
- id: "${chart-admin-username}"
name: "Jenkins Admin"
password: "${chart-admin-password}"
...

tada

Read more »

Installation

Install.sh
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
$ lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description: Ubuntu 20.04.6 LTS
Release: 20.04
Codename: focal
$ sudo apt-get update
$ sudo apt-get upgrade
$ sudo apt-get install openjdk-17-jdk
$ java -version
openjdk version "17.0.8.1" 2023-08-24
OpenJDK Runtime Environment (build 17.0.8.1+1-Ubuntu-0ubuntu120.04)
OpenJDK 64-Bit Server VM (build 17.0.8.1+1-Ubuntu-0ubuntu120.04, mixed mode, sharing)
$ javac -version
javac 17.0.8.1
$ sudo update-alternatives --config java
There is only one alternative in link group java (providing /usr/bin/java): /usr/lib/jvm/java-17-openjdk-amd64/bin/java
Nothing to configure.
$ vi ~/.zshrc
...

OS 버전 확인 및 업데이트 후 sudo apt-get install openjdk-${VERSION}-jdk로 JDK를 설치한다.
여기서 JDK는 Java Development Kit의 약자로 Java application을 개발하기 위한 software package다.
JDK는 개발, compile, debug 및 실행하는 데 필요한 모든 도구와 library를 포함한다.

Read more »

Introduction

개발을 하다보면 이런 페이지를 한번쯤 들어가본적 있을 것이다.
위 페이지와 같이 개발자로서 코드를 작성하는 것만큼 중요한 것은 해당 코드를 잘 문서화하는 것이다.
특히, 오픈 소스 프로젝트나 여러 사람들과 협업을 진행하는 큰 프로젝트에서는 코드의 문서화가 더욱 중요해진다.
문서화는 다른 개발자들이 코드를 이해하고 사용하는 데 큰 도움을 줄 뿐만 아니라, 코드의 유지 및 관리도 훨씬 쉬워진다.

Python은 그 자체로 간결하고 읽기 쉬운 언어이지만, 복잡한 패키지나 프로젝트를 다루게 되면 적절한 문서화 없이는 그 구조와 기능을 파악하기가 어려울 수 있다.
이때 필요한 것이 바로 문서화 도구다.
그 중에서도 Python 커뮤니티에서 널리 사용되는 도구가 바로 Sphinx다.

Sphinx는 Python 문서화를 위한 강력한 도구로, 간단한 마크다운 형식의 문서를 정교한 HTML, PDF, ePub 등의 형식으로 변환해준다.
또한, 다양한 플러그인과 확장 기능을 지원하여 문서의 내용뿐만 아니라 디자인, 구조, 그리고 상호 작용까지도 사용자의 필요에 맞게 커스터마이즈할 수 있다.

따라서 이 글에서는 Sphinx를 사용하여 Python 패키지를 어떻게 문서화하는지 간략히 알아본다.

Read more »

Introduction

박사 전문연구요원은 TEPS와 한국사능력검정시험을 응시하고 점수에 따라 자신의 학교에서 복무하면 된다.
하지만 석사 전문연구요원은 편입 과정이 박사 전문연구요원과는 다르게 별도의 시험을 응시하는 것이 아닌, 일반 취업과 같다.
물론 TO를 가지고 있는 기업만 편입이 가능하다.
아마 석사를 갓 졸업한 대학원생이고, 주위에 전문연구요원으로 재직하고 있는 선배 혹은 지인이 없다면 매우 막막할 것이라 생각한다.
편입을 위해 업체를 찾아볼 때 전문연구요원을 채용할 수 있는지, 자신의 분야와 맞는지, 복지는 어떤지, 연봉은 어떤지 등 고려할 것이 너무 많아 더욱 어려울 것이다.
회사 공식 페이지에는 구인 글이 존재하지만 사람인이나 wanted와 같은 플랫폼에 구인글이 올라오지 않아 접근성이 떨어지는 경우 TO를 보유한 기업 혹은 전문연구요원 복무자가 존재하는 업체 리스트를 산업지원 병역일터에서 확인할 수 있지만, 매번 다운로드하고 엑셀에서 일일히 찾아볼 수 없는 일이다.
그래서 아래와 같이 전문연구요원 TO를 가지고 있는 업체의 통계적 시각화와 시간에 따른 복무 인원 변화를 제공하는 프로젝트를 진행하게 됐다.
GitHub Actions로 자동화되어 10일에 한번 데이터 및 시각화 자료가 갱신된다.

이 프로젝트에서 얻거나 확인할 수 있는 것들은 아래와 같다.

  1. 시간에 따른 전문연구요원 업체의 데이터 (data/병역지정업체검색_YYYYMMDD.xls)
  2. 현재 전문연구요원 업체의 분야, 위치 등 시각화
  3. 시간과 업체에 따른 복무 인원 데이터 (prop/time.tsv) 및 시각화
Read more »

Introduction

Data 기반 의사결정의 시대에 진입하며, machine learning model은 다양한 비즈니스 application의 중심 요소로 부상하고 있다.
그렇지만 다른 기술과 마찬가지로, model의 효과와 신뢰도는 주로 어떤 data로 훈련받았는가에 큰 영향을 받는다.
이에 따라 data shift 문제를 필연적으로 고려해야한다.
Data shift는 특정 model이 훈련을 받은 data의 분포와 실제 세계에서 접하는 data의 분포 사이에 차이가 생길 때 나타난다.
이로 인해 모델의 성능이 크게 저하되거나 예측이 왜곡될 수 있다.
실제 세계의 데이터는 계절 변화, 시장 동향과 같은 다양한 요인들로 지속적으로 변화하므로, 단순히 모델을 생성하는 것만으로는 그 변화에 대응하기 어렵다.
이 때문에 model이 지속적으로 데이터의 변화에 적응하면서 관련성을 유지할 수 있도록 지원하는 mechanism이 필요하다는 인식이 생겼고, continuous learning이 주목받게 되었다.
Continuous learning은 최근의 데이터 변화를 포착하고 적응하면서 model을 주기적으로 갱신하는 체계다.
그러나 이런 체계를 구축하는 것은 복잡하며 여러 요소를 고려해야 한다.
따라서 이번 글에서는, data shift가 시간에 따라 발생하는 예제 데이터를 생성해 볼 것이며, 그 data를 기반으로 Apache Airflow를 이용해 아래와 같이 continuous training하는 DAG를 만들어 continuous learning에 대한 이해를 조금이나 얻어보려고한다.

result

Read more »

Introduction

Apache Airflow에 적용 가능한 theme를 공식 repository에서 아래와 같이 확인할 수 있다.

airflow/config_templates/default_webserver_config.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
# ----------------------------------------------------
# Theme CONFIG
# ----------------------------------------------------
# Flask App Builder comes up with a number of predefined themes
# that you can use for Apache Airflow.
# http://flask-appbuilder.readthedocs.io/en/latest/customizing.html#changing-themes
# Please make sure to remove "navbar_color" configuration from airflow.cfg
# in order to fully utilize the theme. (or use that property in conjunction with theme)
APP_THEME = "bootstrap-theme.css" # default bootstrap
APP_THEME = "amelia.css"
APP_THEME = "cerulean.css"
APP_THEME = "cosmo.css"
APP_THEME = "cyborg.css"
APP_THEME = "darkly.css"
APP_THEME = "flatly.css"
APP_THEME = "journal.css"
APP_THEME = "lumen.css"
APP_THEME = "paper.css"
APP_THEME = "readable.css"
APP_THEME = "sandstone.css"
APP_THEME = "simplex.css"
APP_THEME = "slate.css"
APP_THEME = "solar.css"
APP_THEME = "spacelab.css"
APP_THEME = "superhero.css"
APP_THEME = "united.css"
APP_THEME = "yeti.css"
Read more »

Introduction

  • CI/CD
    • CI (Continuous Integration)
      • 개발자들이 자주 (일반적으로 하루에 여러 번) 자신의 코드 변경 사항을 메인 브랜치에 통합하는 프로세스
      • 이는 코드의 통합 문제를 조기에 견하고 해결하는 데 도움이 됩니다.
    • CD (Continuous Deployment/Delivery)
      • 자동화된 테스트를 통과한 모든 코드 변경 사항이 자동으로 프로덕션 환경에 배포되는 프로세스 (Continuous Deployment) 또는 프로덕션 환경에 배포될 준비가 되면 수동으로 배포될 수 있게 하는 프로세스 (Continuous Delivery).
  • GitHub Actions: GitHub에서 제공하는 CI/CD 플랫폼
    • Workflow를 .yml 또는 .yaml 파일로 정의하여 코드의 빌드, 테스트, 배포 등 다양한 자동화 작업 수행
  • Argo CD: Kubernetes를 위한 선언적, GitOps 연속 배포 도구
    • Git 저장소에 정의된 Kubernetes 명세를 cluster와 동기화하는 데 사용
    • Application의 배포 상태, 구성 차이 및 동기화 상태 시각화 대시보드 제공

이러한 GitHub Actions와 Argo CD를 통해 아래와 같은 CI/CD를 도전해본다.

cicd

Read more »