Kubeflow Notebook
Kubeflow Notebook은 k8s cluster 내에 pod를 생성해 웹 기반 개발 환경을 제공하고 있다.
1. 제공 환경
크게 JupyterLab, Code server, Rstudio 3가지 환경을 제공하고 있다.
※ 노트북 생성 시 namespace의 resource에 접근 가능하도록 권한이 부여되기 때문에, kubectl을 이용해서 namespace의 내부 자원을 관리할 수 있음 -> Notebook을 이용해 다른 componenet의 resource를 생성 가능
ex) Notebook에서 model serving이 가능, Notebook에서 pipeline 생성이 가능
2. Docker Image
Notebook은 container image를 미리 생성한 후, 이를 호출하는 방식으로 생성되고 있다.
Docker Image는 크게 custom image와 standard image 2가지로 나뉘게 된다.
- Custom image : registry/image:tag 방식으로 custom image를 호출하고,
- Standard image : 기본적으로 kubeflow에서 제공된 이미지를 호출하는 방식
-full과 -cuda-full의 차이점은,
cuda가 있다면 GPU를 사용한다는 것이고, cuda가 없다면 CPU를 사용한다는 것이다.
3. CPU / GPU 할당
CPU는 소수점 단위로 할당 가능하고, GPU는 정수 단위(1, 2, 4, 8)로 할당 가능하다.
얼마나 할당할 지는 본인의 할당 가능한 자원을 살펴보면 된다.
할당을 잘 못할 경우, 0/[n] nodes available: insufficient [resource] 와 같은 오류를 볼 수 있다.
# node의 자원 사용 정보를 확인할 수 있다.
$ kubectl describe nodes
다른 곳에서 GPU 등 자원을 사용하고 있다면, GPU가 할당이 되지 않음을 기억할 것
4. Volume
Workspace Volume의 경우, Notebook은 기본적으로 PV가 생성된다.
Data Volume에서 [Attach existing volume] 을 통해 기존에 만들어두었던 PV를 bounding시킬 수 있다.
Mount path는 Notebook에 mount될 volume의 위치를 나타내고 있다.
# 원하는 namespace에 있는 pod 확인
$ kubectl get pod -n {namespace}
# 원하는 pod의 정보 확인
$ kubectl describe pod -n {namespace} {pod name}
Notebook 생성 후 Volume의 status를 보면,
workspace의 volume이 pending 상태에서 binding 상태로 바뀐 것을 확인할 수 있다.
본인은 testcpu에서 workspace volume을 mount했는데, testcpu notebook으로 connect 시 다음과 같이 vol-1이 존재하는 것을 볼 수 있다.
vol-1 폴더 안에 test.txt 파일을 만들고, local path의 mount된 위치를 확인해보자
$ cd /opt/local-path-provisioner/
$ ls
내가 데이터를 저장했던 경로(workspace)로 들어가면, test.txt가 있는 걸 확인할 수 있다.
Custom Notebook으로 sudo 권한 부여받기
JupyterLab에서 terminal에 들어가서 "sudo" 명령어를 쳐보면, command not found 에러 메세지가 출력된다.
그렇기 때문에 사용 중에 package를 설치하는 게 좀 어렵다.
따라서, custom notebook을 만들어서 jovyan 사용자를 sudo group에 추가하는 방법을 해보도록 한다.
Custom하게 Jupyter Tensorflow notebook 만들기
다음 Dockerfile을 작성하여 진행한다.
FROM kubeflownotebookswg/jupyter-tensorflow-cuda-full:v1.6.0
USER root
# Nvidia GPG Public Key 교체
RUN rm /etc/apt/sources.list.d/cuda.list \
&& rm /etc/apt/sources.list.d/nvidia-ml.list
# jovyan 사용자를 sudo group에 추가하는 코드
RUN apt-get update && apt-get install -y --no-install-recommends \
sudo \
apt-utils \
&& usermod -aG sudo ${NB_USER} \
&& echo ${NB_USER}:${NB_USER} | chpasswd \
&& echo "${NB_USER} ALL=(root) NOPASSWD:SETENV: /init" >> /etc/sudoers
# install - requirements.txt
# COPY requirements.txt requirements.txt
# RUN pip3 install -r requirements.txt
# 사용자를 jovyan으로 교체
USER jovyan
# Dockerfile 기반으로 이름과 태그를 붙여 도커 이미지 빌드 진행
$ docker build -t lg960214/jupyter_nb_gpu:1.6.0 .
이후 build 작업이 끝나면, notebook을 custom image로 생성해주고, data volume을 workspace로 설정한다.
이후 custom notebook에 들어가 다음 명령어를 실행하면(비밀번호 jovyan), sudo를 쓸 수 있을 것이다.
현재 v1.6.0 버전인데, v1.5.0 버전을 깔아서 했는데 다행히 잘 되는 듯 하다.
그러나 custom image를 생성할 시 주의사항이 있으므로(kubeflow 깃허브 참고), 잘 확인해야 할 것이다.
'IT_Study > Ops' 카테고리의 다른 글
[MLOps] Kubeflow pipeline handling (1) : pipeline 개념 및 기본 진행 방법 (0) | 2023.11.09 |
---|---|
[MLOps] Kubeflow 내 Tensorboard 활용 방법 및 MinIO 사용 방법 (webconsole, linux shell, python code 활용) (0) | 2023.11.03 |
[MLOps] Kubeflow 계정 관리, PV와 PVC 개념 (0) | 2023.11.01 |
[MLOps] AWS EC2 Ubuntu 환경에서 Kubeflow 세팅 방법 (1) | 2023.11.01 |
[MLOps] Docker 개념 및 흐름 간단 정리 (1) | 2023.10.31 |