3. Kubeflow - Notebooks 사용하기

Jk Lim·2023년 10월 9일
0
post-thumbnail

Kubeflow의 Notebook은 Kubeflow UI에서 컨테이너 이미지 기반의 자체적 Jupyter Notebook 서버를 만들고 사용할 수 있는 기능입니다.
이번 글에서는 지난 글에서 구축한 Kubeflow 환경 내에서 네임스페이스를 생성하고 Jupyter Notebook 서버를 구축해 보겠습니다.

진행 순서

  1. 네임스페이스 생성
  2. Notebook 생성 및 접속

1. 네임스페이스 생성

  • Manifest를 통해 Kubeflow 환경을 구축하면 기본적으로 kubeflow-user-example-com라는 네임스페이스가 생성됩니다.
  • 원하는 네임스페이스를 생성하기 위해서, Manifest의 네임스페이스 템플릿 디렉토리를 복사한 후, Parameter 부분<네임스페이스> 을변경하고 Kustomize 명령어로 변경된 부분을 적용시킵니다.
# 템플릿 디렉토리 복사
$ cp -r ~/manifests/common/user-namespace ~/manifests/common/<네임스페이스>-namespace

$ vim ~/manifests/common/<네임스페이스>-namespace/base/params.env
# [params.env]
user=user@example.com
profile-name=<네임스페이스>

# 변경 부분 적용 (manifests 디렉토리에서)
$ kustomize build common/<네임스페이스>-namespace/base | kubectl apply -f -
  • Kustomize 명령어로 변경사항을 적용시키면, Kubeflow UI나 kubectl get ns 명령어로 생성된 네임스페이스를 확인 할 수 있습니다.

2. Notebook 생성 및 접속

(1) Notebook 생성

  • Kubeflow UI의 왼쪽 탭에서 Notebooks을 선택하면 Notebook리스트를 확인할 수 있는 페이지로 이동합니다.
  • 왼쪽 위의 +New Notebook을 선택하면 새로운 Notebook서버를 생성을 위한 페이지로 이동합니다.
  • Jupyter 외에 VisualStudio Code,나 RStudio도 생성할 수 있는데, 이 글에서는 Jupyter에 대해서만 설명합니다.
  • Custom Notebook 이미지를 사용하면 필요한 패키지가 미리 설치된 Notebook을 생성할 수 있습니다.
  • 이 글에서는 docker hub에 업로드 한 이미지를 사용하여 Notebook을 생성합니다.
  • 필요한 만큼의 CPU, RAM, GPU를 Notebook에 할당 할 수 있습니다.
  • Notebook 서버의 Home Directory와 Mount되는 PV를 Notebook 생성과 동시에 같이 생성할 수 있습니다.
  • 연결된 PV의 세부 설정이 가능하고, 기존에 이미 생성된 PV를 연결 할 수도 있습니다.
  • 여기까지가 기본적인 Notebook 설정이고 해당 페이지 가장 아래에 LAUNCH를 실행하면, Container 이미지를 Pull하고 Notebook 서버가 생성됩니다.

(2) CSRF 에러 발생 시

  • LAUNCH를 실행하면 아마 아래 사진에 나와있는 것 처럼 CSRF 에러가 발생하면서 Notebook이 생성이 되지 않을 것입니다.
  • 공식 Manifest Github의 내용을 참고하면, Kubeflow UI로 접속하려면 HTTPS를 설정해야 하고, 만약 HTTP 프로토콜을 사용하고싶다면 Kubeflow 구성요소(각각의 APP)에 대하 Secure Cookies를 Disable 해야 한다고 합니다.
  • HTTPS를 설정하는 부분은 좀 더 복잡하므로, 지금은 HTTP 프로토콜에서 Kubeflow APP의 Secure Cookies 설정을 변경하므로써, Notebook 서버를 실행해 보겠습니다. (추후에 HTTPS 적용을 다루어 보겠습니다.)
  • Kubeflow UI에서 Secure Cookies를 사용하는 리소스는 manifest/app/ 디렉토리의 하위 디렉토리에 "<리소스이름>-web-app" 이라는 이름의 디렉토리로 관리됩니다. (jupyter-web-app, jupyter-web-app 등)
  • 따라서 HTTP 프로토콜을 유지하면서 Kubeflow UI에서 특정 리소스를 사용하려면, 해당 리소스 디렉토리에서 Secure Cookies를 False로 변경하고, Kustomize로 변경된 것을 적용해 줍니다.
$vim manifests/apps/jupyter/jupyter-web-app/upstream/base/params.env
# [params.env]
JWA_UI=default
JWA_PREFIX=/jupyter
JWA_CLUSTER_DOMAIN=cluster.local
JWA_USERID_HEADER=kubeflow-userid
JWA_USERID_PREFIX=
JWA_APP_SECURE_COOKIES=false # 이 부분 변경
# 변경된 사항만 적용해줌 (manifests 디렉토리에서 실행)
$ kustomize build apps/jupyter/jupyter-web-app/upstream/overlays/istio | kubectl apply -f -

  • 적용후에 Notebook을 생성하면 정상적으로 생성됩니다.
  • 생성이 완료되면 CONNECT 버튼이 파란색으로 활성화 되고 Jupyter Lab 환경으로 접속할 수 있습니다.
  • 왼쪽 탭에 생성되는 파일 및 디렉토리들은 Notebook 생성 시에 연결한 PV에 영구 저장됩니다. 따라서, 연결된 PV를 확인 후, 직접 필요한 파일을 저장하거나 불러올 수 있습니다.

이렇게 Kubeflow Notebooks를 사용하면 필요한 패키지가 설치된 Customizing된 Container 이미지를 바탕으로 Notebook 서버를 Kubeflow 환경 내에서 구축할 수 있습니다. 이렇게 Notebook 서버를 구축하면 Kubeflow 환경 내에서 사용자가 다양한 ML/DL 관련 실험 및 테스트를 수행할 수 있습니다.
다음 글 부터는 본격적으로 Kubeflow를 활용한 Pipeline구축을 진행해 보겠습니다.

0개의 댓글