Kubeflow 에서 안쓰는 노트북은 중지 시키자!!(Jupyter Notebook Culling)

Seokbin·2022년 2월 10일
1
post-thumbnail

1.overview


ML/DL 등의 AI 학습을 하는 환경에서 하드웨어 리소스 관리는 중요한 이슈입니다. GPU, CPU 등 제한된 자원을 여러 사용자가 할당받아 사용하면서 낭비되는 사례는 굉장히 많습니다.특히 GPU의 가격이 비싼 만큼 사용할 수 있는 자원이 제한적이므로 많은 관리자가 효율적인 자원 관리를 위한 고민을 합니다. 자원 관리 방법 중 jupyter notebook이 생성된 상태에서 사용하지는 노트북은 자동으로 할당받은 자원을 해제하고 stop 상태로 변경하는 Culling 작업을 Kubeflow에서 설정해보겠습니다.

2.Kubeflow 설정


kubeflow가 설치 되어 있는 환경에서 jupyter notebook controller Deploymnet를 수정해야합니다.

kubectl edit deployment jupyter-notebook-controller -n kubeflow

Deployment에 sidecar가 추가 될 수 있도록 label을 추가합니다.

labels:
    app: notebook-controller
    kustomize.component: notebook-controller
    sidecar.istio.io/inject: "true"

Cotainer에 환경 변수를 추가해줍니다 IDLE_TIME 은 Notebook이 해당 시간 동안 유휴 상태일 경우 STOP 되는 시간입니다. CULLING_CHECK_PERIOD 는 Culling을 체크하는 주기입니다. 두 변수 모두 으로 설정됩니다.

#container.env
- name: ENABLE_CULLING
          value: "true"
        - name: IDLE_TIME
          value: "10"
        - name: CULING_CHECK_PERIOD
          value: "5"
apiVersion: security.istio.io/v1beta1
kind: AuthorizationPolicy
metadata:
  name: notebooks-controller-culling
  namespace: istio-system
spec:
  action: ALLOW
  rules:
  - to:
    - operation:
        methods: ["GET"]
        paths: ["*/api/status"]

현재 테스트로 설정한 값에 의해 10분 동안 활동하지 않는 것이 확인 되면 아래와 같이 stop 상태로 바뀌게 됩니다. kubernetes 안에서 해당 파드를 조회 했을 때 replicas가 0으로 바뀐 것을 확인 할 수 있습니다.

jupyter notebook의 경우 default로 persistent volume에 데이터가 저장되기 때문에 재시작을 해도 데이터 유실이 발생하지 않습니다. 다만 이러한 설정을 변경했을 경우 데이터가 유지 되지 않을 수 있습니다.
하지만 pip 의 경우 /opt/conda 에 패키지가 설치 되기 때문에 재시작시 설치한 패키지가 날아갈 수 있으니 이에 대한 설정이 필요합니. (pip.conf 의 default registry를 변경하거나 docker image에 패키지가 포함된 이미지를 사용하는 방법)

실제로 AI 팀에서 많은 분 들이 자원을 할당 받고 사용하지 않아 실제 필요한 사람이 사용하지 못하는 상황은 굉장히 많습니다. 다음과 같이 적절한 설정을 적용 하면 안쓰는 노트북에 대한 관리에 도움이 될 거 같습니다.

0개의 댓글