VPC 환경에서 이용 가능합니다.
Notebooks 화면 구성에 대해 설명합니다. Notebooks에서는 사용자가 학습 과정을 모니터링하기 위해 Notebook 생성, 삭제하거나 운영중인 Notebook 목록을 확인할 수 있습니다. 또한 운영중인 Notebook의 상세 정보 및 최근 이벤트 이력을 조회할 수 있습니다.
Notebooks
Notebooks 화면의 기본적인 설명은 다음과 같습니다.
| 영역 | 설명 |
|---|---|
| ① 메뉴 이름 | 현재 확인 중인 메뉴 이름 |
| ② 기본 기능 | Notebook 추가, Notebook 삭제 |
| ③ Notebook 목록 | 운영중인 Notebook 목록 및 정보 확인 |
Notebook 목록 조회
사용자가 생성한 Notebook 목록의 정보는 다음과 같습니다.
- Notebook 이름: 최초 생성시 설정한 Notebook 이름
- 생성 일시: 최초 생성 일시
- 상태: Notebook 상태
- 타입: Notebook 생성시 선택한 구동 프로그램
- JupyterLab
- VisualStudio Code
- 이미지: Notebook 생성시 선택한 이미지
- Actions: 생성한 Notebook 접근 혹은 상태 변경
- CONNECT: 클릭시 새 창으로 Notebook 실행 환경 접근
- STOP: Notebook 사용 중지
- START: Notebook 사용
Notebook 생성
신규 Notebook을 생성하는 방법은 다음과 같습니다.
- [추가] 를 클릭해 주십시오.
- Create Notebook 화면이 나타나면 Notebook 이름을 입력해 주십시오.
- 영소문자(a-z), 숫자(0-9), 하이픈(-)을 사용하여 3~30자 사이로 입력
- 첫 글자는 영문, 마지막 글자는 영문이나 숫자
- livy 키워드 사용 불가능
- Tensorboard 및 기존 Notebook과 중복 사용 불가능
- Notebook을 구동할 프로그램을 선택해 주십시오.
- JupyterLab
- VisualStudio Code
- Image를 선택해 주십시오. ML expert Platform에서 제공하는 이미지는 다음과 같습니다.
kubeflow-jupyter-*: kubeflow 공식 이미지 기반의 jupyter-labkubeflow-codeserver-*: kubeflow 공식 이미지 기반의 codeserver
- 별도로 제작한 Custom Image 사용을 원하시면, Custom Image를 제작하여 Notebook 사용하기를 참고해 주시기 바랍니다.
- Notebook에서 사용할 CPU와 Memory 스펙을 설정해 주십시오.
- 최소값은 Kubernetes의 resource requests, 최대값은 Kubernetes 의 resource limit 에 대응됩니다.
- 최소값이 너무 높으면 스케줄링이 제대로 되지 않을 수 있기 때문에, 기본으로 설정된 값을 권장합니다.
- Notebook에서 사용할 GPU 인스턴스 스펙을 설정해 주십시오.
- Workspace Volume을 설정해 주십시오. Workspace Volume 용도로 새로운 Volume을 만들거나, 기존에 생성했던 Volume을 사용할 수 있습니다.
- 단일 Volume 마운트만 가능합니다.
- Workspace Volume 설정 시 마운트 경로가 Notebook 이미지 내부 사용자의 HOME PATH 설정과 같지 않을 수 있습니다.
- Workspace Volume을 이미지의 HOME PATH (e.g.
/home/irteam)에 마운트할 경우, 해당 경로에 존재하던 기존 이미지 데이터를 덮어쓸 수 있습니다.- 이미지의 HOME PATH에 마운트되는 Volume이 ReadOnlyMany(ROX) 모드일 경우 오류가 발생합니다.
- 이미지 HOME PATH에 포함된 프로파일, 유틸리티 등의 데이터를 사용해야 하는 경우, Workspace Volume의 마운트 경로를 이미지 HOME PATH와 다른 경로로 설정해야 합니다.
- Workspace Volume을 마운트하지 않아도 Notebook을 실행할 수 있습니다. 단, 컨테이너의 내부 저장소를 사용하기 때문에 Notebook 종료 시 삭제됩니다.
- Data Volume을 설정해 주십시오. 별도의 Data Volume을 Notebook에 마운트하여 데이터를 가져오거나, 작업 내역을 저장하는 용도로 사용합니다. 별도의 Data Volume이 필요 없는 경우 설정하지 않아도 됩니다. Data Volume 용도로 새로운 PVC를 만들거나, 기존에 생성했던 PVC를 사용할 수 있습니다.
- 복수의 Volume 마운트 가능합니다.
- Notebook에서 작업한 내용을 별도 스토리지에 보관하기 위해 Data Volume을 생성하여 마운트할 수 있습니다.
- Readonly 옵션을 사용해 마운트할 경우, 마운트 경로는 이미지의 HOME PATH (e.g.
/home/irteam) 하위 디렉토리가 아닌 외부에 있어야 합니다.
- Advanced Settings에서 Configurations을 선택해 주십시오.
- 현재 ML expert Platform은 Private Zone으로 GPU 리소스를 제공중이므로, 반드시 사용자의 Workspace가 배정된 GPU Zone 정보를 선택해주시기 바랍니다.
- GPU Zone 정보는 사용 가능한 GPU Zone 정보 조회를 참고하시기 바랍니다.
- 필요시 Advanced Settings에서 Miscellaneous Settings 옵션을 설정해 주십시오.
- [Launch] 를 클릭해 주십시오.
- 현재 ML expert Platform에서는 NVMe 기반의 Local Path 볼륨과 DDN 기반의 고성능 스토리지를 제공합니다.
- Local Path 볼륨은 NVMe 스토리지를 제공하고 있습니다. NVMe는 특정 호스트에 물리적으로 직결된 스토리지로, GPU 인스턴스에 직접 할당해 사용됩니다.
- GPU 인스턴스의 Failover 또는 호스트 마이그레이션으로 다른 호스트로 이동할 경우, 기존 호스트에 연결된 NVMe 스토리지는 자동으로 함께 이동하지 않습니다. 그로 인해 다른 호스트로 이동한 GPU 인스턴스에서 기존 NVMe 데이터에 접근할 수 없습니다.
- 따라서 장기 보존이 필요한 데이터는 Data Manager나 NCloud Storage, Object Storage를 사용해 주시기 바랍니다.
Notebook 삭제
운영중인 Notebook을 삭제할 수 있습니다.
- 삭제할 Notebook을 선택한 다음 [삭제] 버튼을 클릭해 주십시오.
- Notebook 삭제 팝업 창이 나타나면 삭제할 Notebook의 이름을 입력한 다음 [삭제] 버튼을 클릭해 주십시오.
- Notebook 목록에서 선택한 Notebook이 삭제된 것을 확인해 주십시오.
Notebook 상세정보 조회
선택한 Notebook의 상세정보를 조회할 수 있습니다. 각 정보는 탭으로 나눠져 있습니다.
Overview
선택한 Notebook의 상세정보는 다음과 같습니다.
- Volumes: Notebook에 마운트한 Volume 정보
- Shared memory enabled:
- Notebook creator: Notebook 생성한 사용자 정보
- Configurations: Notebook 생성시 설정한 Configuration 정보
- Type: Notebook을 구동한 프로그램
- Minimum CPU: 최초 생성시 설정한 CPU 최소값
- Maximum CPU: 최초 생성시 설정한 CPU 최대값
- Minimum memory: 최초 생성시 설정한 Memory 최소값
- Maximum memory: 최초 생성시 설정한 Memory 최대값
- Image: Notebook 생성시 선택한 이미지
- Environment: Notebook 실행 환경
Logs
선택한 Notebook의 최근 로그 정보를 조회할 수 있습니다.
Events
선택한 Notebook의 최근 이벤트 이력을 조회할 수 있습니다.
- Type: 발생한 이벤트의 종류
- Reason: 발생한 이벤트의 이름
- Created At: 이벤트 발생 일시
- Message: 발생한 이벤트의 설명
YAML
선택한 Notebook의 yaml 형태의 설정을 보여줍니다.
콘솔에서는 조회만 가능하며 수정은 불가능합니다.
Custom Image를 제작하여 Notebook 사용하기
이미 사용할 이미지가 준비되었다면 이미지 제작 및 업로드 과정은 생략하실 수 있습니다.
이미지 제작 및 업로드
아래 코드는 Custom Image를 빌드하는 Dockerfile 예시입니다.
특히 sudo는 특정 root 권한의 명령이 Notebook 실행 환경에 문제를 발생시킬 수 있으므로 반드시 필요한 경우에만 설치해 주시기 바랍니다.
FROM nvcr.io/nvidia/pytorch:24.05-py3
# Kubectl 명령어 사용할 수 있도록 설치
RUN apt update && apt install curl -y && curl -LO "https://dl.k8s.io/release/$(curl -L -s https://dl.k8s.io/release/stable.txt)/bin/linux/amd64/kubectl" && \
install -o root -g root -m 0755 kubectl /usr/local/bin/kubectl && \
rm -f kubectl
# jupyterlab 설치
RUN pip install notebook==6.0.2 jupyterlab==1.2.4 jupyterlab-server==1.0.6
# sudo 설치 및 설정: 필요한 경우에만 주석을 해제하여 설치
#RUN apt install -y sudo && \
# echo "irteam ALL=(ALL) NOPASSWD:ALL" > /etc/sudoers.d/irteam && \
# chmod 0440 /etc/sudoers.d/irteam
# Notebook 사용자 생성
ENV NB_USER irteam
ENV NB_UID 500
RUN useradd -M -s /bin/bash -U -u ${NB_UID} ${NB_USER} \
&& mkdir -p /home/$NB_USER \
&& chown -R ${NB_USER}:${NB_USER} /home/$NB_USER
USER ${NB_USER}
WORKDIR /home/$NB_USER
# Notebook 생성시 사용할 기초 스크립트 작성
CMD ["sh", "-c", "jupyter lab --notebook-dir=/home/$NB_USER --ip=0.0.0.0 --no-browser --allow-root --port=8888 --LabApp.token='' --LabApp.password='' --LabApp.allow_origin='*' --LabApp.base_url=${NB_PREFIX}"]
위 파일을 작성한 후, 다음 명령어를 입력하여 새로운 도커 이미지를 빌드할 수 있습니다. 원하시는 REPOSITORY와 TAG의 값을 지정해주시기 바랍니다.
또한 이미지를 관리할 도커 레지스트리 서비스를 미리 정해서 준비해 주시기 바랍니다.
$ docker build -t REPOSITORY:TAG -f Dockerfile .
성공적으로 이미지를 빌드하였다면 도커 레지스트리에 이미지를 업로드합니다.
$ docker push REPOSITORY:TAG
Custom Image 설정
이미지 준비가 완료되었다면 Notebook 생성 단계의 Image 항목에 있는 'Advanced Settings' 를 펼친 후 'Custom Image' 체크박스를 체크한 후에, 'Custom Image' 입력란에 REPOSITORY:TAG 형식의 image 정보를 입력해주시기 바랍니다. 이렇게 입력하여 Notebook을 생성하면 해당 이미지를 사용하여 Notebook이 실행됩니다.

Private 레지스트리
아래 내용들은 인증이 필요한 private 레지스트리를 사용하는 경우에 대한 설명입니다.
Private 레지스트리에 업로드 되어있는 Custom Image를 사용하여 Notebook을 실행하면, 다음과 같은 에러 메시지를 확인하게 됩니다.
ImagePullBackOff: Back-off pulling image "reg.image.com/xxx/yyy:z": ErrImagePull: failed to pull and unpack image "reg.image.com/xxx/yyy:z": failed to resolve reference "reg.image.com/xxx/yyy:z": unexpected status from HEAD request to reg.image.com/xxx/yyy:z: 403 Forbidden
Private 레지스트리에 접근하기 위한 imagePullSecret 이 등록되어 있지 않아 발생하는 에러 메시지입니다.
다음 두 가지 방법 중 하나를 선택하여 해결할 수 있습니다.
먼저 아래와 같이 실행하여 Secret을 생성합니다. 생성할 Secret의 이름, 레지스트리 주소, username, password 를 입력합니다.
$ kubectl create secret docker-registry {image-pull-secret-name} \
--docker-server='{my-registry}' \
--docker-username='{my-username}' \
--docker-password='****'
1. PodDefault 활용하기
다음과 같이 PodDefault를 정의한 yaml 파일을 작성하여 배포하는 방법입니다.
apiVersion: kubeflow.org/v1alpha1
kind: PodDefault
metadata:
name: add-image-secret
namespace: p-{projectName}
spec:
selector:
matchLabels:
add-image-secret: "true"
desc: "add imagePullSecrets to pod"
imagePullSecrets:
- name: "{image-pull-secret-name}"
$ kubectl apply -f {yaml file name}
PodDefault가 정상적으로 배포되었다면 Notebook 생성 단계의 'Advanced Settings' 를 펼친 후 'Configurations' 항목에서 'add imagePullSecrets to pod' 설정이 보이고 선택할 수 있게 됩니다. 이 설정을 선택하여 Notebook을 생성합니다.

2. Notebook spec에 imagePullSecret 추가하기
실행이 실패하고 있는 Notebook spec을 직접 편집하여 imagePullSecret 을 추가하는 방법입니다.
Notebook spec을 다음과 같이 편집하여 imagePullSecrets 필드에, 위에서 생성한 Secret 이름을 입력하고 저장합니다.
잠시 후에 Notebook이 정상적으로 Running 상태가 되어서 Notebook을 사용할 수 있습니다.
$ kubectl edit notebook {notebook-name}
apiVersion: kubeflow.org/v1
kind: Notebook
...
spec:
template:
spec:
imagePullSecrets: # 추가할 부분
- name: {image-pull-secret-name} # 추가할 부분
containers:
...