이 글에서는 kubernetes상에서 Ray Cluster를 구축해서 사용해보는 과정을 적어보려고 한다. Ray Cluster를 사용하려는 이유는 다음과 같다.현재 진행하는 프로젝트에서는 실시간으로 쌓이는 대규모 데이터를 분석하고 이것을 활용하기 위함이다.더 자세하게는 보다 효율적으로, 빠르게 데이터를 불러오고 분석하기 위해서 사용을 결정했다. Ray 말고 다른 분산 처리, 학습을 지원하는 다양한 도구들이 존재하지만 Ray를 선택하게 된 이유는 Kubernetes에서 다른 도구들보다 유연하고, 쉽게 사용 가능할 것 같아서이다. 필자와 같은 경우는 대규모 데이터를 효율적으로 처리하기 위해 Apache Spark를 사용해 데이터를 분석, 처리 할것이다.그렇기 때문에 RayDP를 Ray Cluster에 적용시..
전체 글 (11)
kubernetes에서 Ray를 이용해 분산학습을 하기 위해 도커 이미지를 사용해 클러스터를 구축하려고 했지만, 내가 원하는 사항이 들어가지 않아서 도커 이미지를 바꿔서 사용해야 하는 상황이 되었다.그냥 도커 이미지만 바꿔서 사용하면 되지만 Docker hub에 내 이미지를 올려 사용해보고 싶은 생각이 들어서 해보았다. 우선 도커허브 로그인을 해준다docker login -u {user name} 다음 필요한 Dockerfile을 수정한다. FROM rayproject/ray:latest@sha256:c864e37f4ce516ff49425f69cac5503a51e84c333d30928416714a2c3da55b43 ARG HTTP_PROXY ARG HTTPS_PROXY # set htt..
Kubernetes에서 root에서 클러스터를 구성하고 일반 user로 돌아와 명령어를 사용하고 싶을것이다.Unable to connect to the server: tls: failed to verify certificate: x509: certificate signed by unknown authority (possibly because of "crypto/rsa: verification error" while trying to verify candidate authority certificate "kubernetes")그럼 이런 에러를 만나게 될것이다. 필자의 경우에는 다음과 같은 방식으로 해결했다. user로 돌아와서 다음 명령어를 실행한다.mkdir -p $HOME/.kubesudo cp -i ..
노드들의 네트워크 인터페이스 이름을 일치시켜줘야하는 일이 생겨서 변경하게 되었다.커맨드는 생각보다 간단하다.# Deactive network interface.$ sudo ip link set down [interface_name]# Change network interface name.$ sudo ip link set [interface_name] name [new_interface_name]# Active new network interface$ sudo ip link set [new_interface_name] up 사용중인 네트워크 인터페이스 이름을 변경하려면 아마 다음과 같은 안내가 나올것이다.RTNETLINK answers: Device or resource busy 그러므로 네트워크 인터페이..
복잡도(Complexity)란?알고리즘의 성능과 효율성을 나타내는 척도이다.시간복잡도(Time Complexity)와 공간복잡도(Space Complexity)로 나눌 수 있다.시간복잡도(Time Complexity)시간 복잡도는 알고리즘이 문제를 해결하는 데 걸리는 시간을 수량적으로 나타낸다.일반적으로 입력 크기 ( n )에 대한 함수로 표현하고, 보통 최악의 경우를 기준으로 분석한다. 시간 복잡도는 다음과 같은 표기법으로 나타낼 수 있다.O(1): 상수 시간 복잡도 (입력 크기에 관계없이 일정한 시간)O(log n): 로그 시간 복잡도 (입력이 커질수록 시간 증가가 느리게 증가)O(n): 선형 시간 복잡도 (입력 크기에 비례하여 시간 증가)O(n log n): 선형 로그 시간 복잡도 (정렬 알고리즘에..
코드를 짜다 보면 await, aync 문법을 접하게 될것이다.오늘은 이와 관련된 동기, 비동기에 대해서 알아볼 것이다. 동기(Synchronous)?사전적인 의미에서는 '동시에 일어남'이라는 의미를 가지고 있다.하지만 프로그래밍에서 동기는 '순차적인 작업'이라고 생각하면 된다.다시 말해서 어느 한 작업이 완료될 때 까지 다른 작업들은 기다려야 하는 것이다. 프로그래밍에서 자주 사용하지는 않지만 작업에 순서가 중요한 프로그램을 설계한다면 동기 방식을 사용하는 것이 적합하다.비동기(Asynchronous)?사전적인 의미는 동기와 반대로 '동시에 일어나지 않음'을 의미한다.프로그래밍에서 비동기는 동기와 반대로 생각하면 된다. 작업에 순서가 존재하지 않는 것. 이러한 비동기 방식은 주로 I/O(Input/Ou..
CS란 Computer Sience의 약자로, 컴퓨터 관련 분야에서 사용되는 용어, 개념, 알고리즘을 뜻한다. 개발자로써 취업을 준비하기 위해, 또는 문제를 해결하기 위해 중요한 요소이다. 사실 CS 지식이 충분하지 않아도 기본적인 개발을 하는 데에는 큰 지장이 없다고 생각하지만, 보다 복잡한 문제 해결, 서비스, 유지보수 등을 효율적으로 하기 위해서는 필수적이라고 생각한다. 4년제 대학에서 컴퓨터 공학 전공을 해도 CS지식은 분야별로 무궁무진하기 때문에 대학 4년 동안 자신이 부족한 공부를 하지 않는다면 변화하는 속도가 엄청나게 빠른 개발자들 사이에서 무사할 수 없을 것이다. 이 카테고리를 만든 이유는 내가 지난 대학시절에 알았던, 알아야 하는 CS지식들을 정리하여 코딩만 하는 Coder(코더)가 아닌..
쿠버네티스를 설치하고 클러스터를 구성하기 위해 kubeadm init 커멘드를 사용했는데 다음과 같은 에러 메세지가 나왔다.Found multiple CRI endpoints on the host. Please define which one do you wish to use by setting the 'criSocket' field in the kubeadm configuration file: unix:///var/run/containerd/containerd.sock, unix:///var/run/crio/crio.sockTo see the stack trace of this error execute with --v=5 or higher 해당 오류는 cri socket이 두개이상 감지 되었을 때 나타나..
쿠버네티스 클러스터를 새로 구성하기 위해 CRI-O를 설치하는 도중Hit:1 https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2204/x86_64 InReleaseHit:3 https://download.docker.com/linux/ubuntu jammy InRelease Hit:2 https://prod-cdn.packages.k8s.io/repositories/isv:/kubernetes:/core:/stable:/v1.30/deb InRelease Hit:4 ht..
여러 노드들을 운영하다 보면 노드들 사이에 패스워드 없이 접속하는 방법이 필요할 때가 있다.예를 들어 Hadoop을 사용한다던가, OpenMPI를 사용하는 경우에 해당된다.이제 순서대로 패스워드 없이 노드에 ssh 접속을 하는 방법을 정리하도록 하겠다.설치 환경SSH 설정1. 설치 환경Node01- OS: Ubuntu 22.04- Host name: node01- IP: 192.168.0.10Node02- OS: Ubuntu 22.04- Host name: node02- IP: 192.168.0.11 2개의 노드를 준비했다.node01 에서 node02 ssh 접속을 패스워드 없이 하는 과정이다.2. SSH 설정우선 리눅스에 SSH가 설치 되어있지 않다면 설치를 진행해 주어야 한다.모든 노드에서 진행해준..