본문으로 건너뛰기

Kubeflow 생성 및 관리

사전 작업

Kubeflow는 Kubernetes 위에서 실행됩니다. 따라서, Kubeflow를 사용하려면 먼저 카카오클라우드 Kubernetes Engine 서비스의 클러스터가 생성되어 있어야 하며, 사용하고자 하는 클러스터와 동일한 네트워크 및 Subnet으로 설정된 카카오클라우드 File Storage가 있어야 합니다.

이러한 작업을 위해 먼저 IAM '프로젝트 멤버' 이상의 권한이 필요하고, 추후 Kubeflow 생성을 위해서는 'Kubeflow 관리자 권한'도 필요합니다. 자세한 내용은 IAM 프로젝트 레벨 역할을 참고하시기 바랍니다.

안내

클러스터의 네트워크가 Private Subnet일 경우, Private Subnet의 노드는 인터넷 통신이 불가합니다. Private Subnet의 노드가 인터넷을 통해 외부 CR과 통신하기 위해서는 NAT 통신이 필요합니다.
NAT 통신은 NAT Instance를 사용할 수 있으며, 자세한 내용은 NAT Instance 사용을 참고하시기 바랍니다.

쿠버네티스 클러스터 생성

카카오클라우드 콘솔에서 Kubernetes Engine 메뉴를 선택하여, 쿠버네티스 기반의 클러스터를 생성합니다. 이미 생성한 클러스터가 존재한다면, 노드 풀 생성부터 시작하시기 바랍니다.

안내
  • 이미 Kubeflow 연결에 사용된 클러스터는 Kubeflow 만들기 시 재사용할 수 없기 때문에 새로운 클러스터로 연결해야 합니다.
  • 쿠버네티스 클러스터 생성에 대한 자세한 설명은 클러스터 생성을 참고하시기 바랍니다.

노드 풀 생성

Kubeflow 생성에 필요한 필수 노드 풀과 옵션 노드 풀을 생성합니다.

  1. 카카오클라우드 콘솔에서 Kubernetes Engine 메뉴를 선택합니다.

  2. Cluster 탭을 클릭한 후, Kubeflow와 연결할 클러스터의 상세 화면으로 이동합니다.

  3. 노드 풀 탭으로 이동하여, [노드 풀 만들기] 버튼을 클릭합니다.

  4. 노드 풀 만들기 화면에서 필요한 정보 입력 후, [만들기] 버튼을 클릭합니다.
    (Kubeflow를 사용하기 위해서는 연결하고자 하는 클러스터에 반드시 Ingress 노드 풀과 Worker 노드 풀을 사전에 생성해두어야 합니다.)

    Kubeflow 클러스터 노드 풀 최소 사양 정보
    항목구분노드 풀 사양 정보
    Ingress 노드 풀필수  - 인스턴스 유형 : 제한 없음 (kr-central-2 리전의 경우 t1i.small 인스턴스 이상부터 사용 가능)
    - 볼륨 유형/크기 : 50GB 이상
    - 노드 수 : 1대 이상
    - 노드 풀 자동 확장 : 사용 안 함
    Worker 노드 풀필수  - 인스턴스 유형 : 제한 없음 (kr-central-2 리전의 경우 t1i.small 인스턴스 이상부터 사용 가능)
    - 볼륨 유형/크기 : 최소 100GB 이상
    - 노드 수: 최소 4대 이상 (t1i.small 인스턴스의 경우 최소 5대 이상 필요)
    - 노드 풀 자동 확장 : 사용 안 함
    CPU 노트북 노드 풀선택- 인스턴스 유형 : 제한 없음 (kr-central-2 리전의 경우 t1i.small 인스턴스 이상부터 사용 가능)
    - 볼륨 유형/크기 : 최소 100GB 이상
    - 노드 풀 자동 확장 : 사용 안 함
    GPU 노트북 노드 풀선택- 인스턴스 유형 : A100 그룹 중 선택 (p2i 인스턴스 패밀리)
    - 볼륨 유형/크기 : 최소 100GB 이상
    - 노드 풀 자동 확장 : 사용 안 함
    CPU 파이프라인 노드 풀선택- 인스턴스 유형 : 제한 없음 (kr-central-2 리전의 경우 t1i.small 인스턴스 이상부터 사용 가능)
    - 볼륨 유형/크기 : 최소 100GB 이상
    - 노드 풀 자동 확장 : 사용 안 함
    GPU 파이프라인 노드 풀선택- 인스턴스 유형 : A100 그룹 중 선택 (p2i 인스턴스 패밀리)
    - 볼륨 유형/크기 : 최소 100GB 이상
    - 노드 풀 자동 확장 : 사용 안 함
주의
  • Kubeflow 만들기를 하기 전에 인그레스 컨트롤러의 ingress-nginx를 미리 설치하는 경우 오류가 발생할 수 있습니다.
    혹은 이미 인그레스 컨트롤러로 사용한 경우 ingress-nginx 관련 자원을 삭제한 후, Kubeflow 만들기를 진행해 주세요.
  • 생성한 노드 풀의 스케줄링 설정차단으로 선택하는 경우, Kubeflow 만들기를 할 수 없습니다.
    또한 Kubeflow 만들기 이후 해당 노드 풀을 차단으로 변경하는 경우, Kubeflow가 정상적으로 동작하지 않을 수 있습니다. 따라서, 반드시 스케줄링 설정허용으로 선택해 주세요.

파일 스토리지 인스턴스 생성

Kubeflow에서는 디폴트 파일 스토리지 외에 네임스페이스 별로 파일 스토리지를 지정할 수 있으며, 파일 스토리지 인스턴스 생성 방법은 다음과 같습니다.

안내

Kubeflow 만들기에서 사용할 클러스터와 동일한 네트워크와 Subnet으로 설정된 파일 스토리지 인스턴스만 사용할 수 있습니다.

  1. 카카오클라우드 콘솔에서 File Storage 메뉴를 선택합니다.

  2. Instance 탭을 클릭한 후, [Instance 만들기] 버튼을 클릭합니다.

  3. Instance 만들기에서 아래 표의 안내를 확인한 후 정보를 입력하고, [만들기] 버튼을 클릭합니다.

    항목구분설명
    네트워크 설정네트워크Kubeflow 만들기에서 사용할 클러스터와 동일한 네트워크로 선택
    SubnetKubeflow 만들기에서 사용할 클러스터와 동일한 Subnet으로 선택
    접근 제어 설정설정된 네트워크 내 모든 사설 IP에서의 접근을 허용

Kubeflow 만들기

  1. 카카오클라우드 콘솔에서 Kubeflow 메뉴를 선택합니다.

  2. Kubeflow 탭을 클릭한 후, [Kubeflow 만들기] 버튼을 클릭합니다.

  3. 필요한 정보 입력 후, [만들기] 버튼을 클릭합니다.

    이미지. Kubeflow 만들기 화면 Kubeflow 만들기

    항목구분설명
    Kubeflow 이름영어 소문자, 하이픈(-)을 사용해 4~20자 이내로 작성
    - 시작 문자는 영어 소문자만 가능하며 하이픈(-)을 연속해서 사용하거나 이름 끝에 사용할 수 없음
    - 같은 프로젝트 내에서 중복된 Kubeflow 이름은 사용 불가
    Kubeflow 구성Kubeflow 버전Kubeflow 버전 선택
    Kubeflow 서비스 타입Kubeflow 버전에 따라 서비스 유형 선택
    - 지원하는 버전에 대한 자세한 설명은 Kubeflow 서비스 유형 및 사용 컴포넌트 참고
    클러스터 연결Kubeflow에 연결할 카카오클라우드 Kubernetes Engine 서비스의 클러스터 선택
    - 클러스터가 존재하지 않는 경우 사전 작업 참고
    * 이미 Kubeflow 연결에 사용된 클러스터는 사용 불가
    Ingress 노드 풀 (필수)선택한 클러스터의 Ingress 노드 풀 선택
    Worker 노드 풀 (필수)선택한 클러스터의 Worker 노드 풀 선택
    CPU 노트북 노드 풀 (선택)선택한 클러스터에 생성한 CPU 노트북 노드 풀 선택
    CPU 파이프라인 노드 풀 (선택)선택한 클러스터에 생성한 CPU 파이프라인 노드 풀 선택
    GPU 노트북 노드 풀 (선택)선택한 클러스터에 생성한 GPU 노트북 노드 풀 선택
    - GPU MIG : 선택한 노드 풀의 MIG 인스턴스 사양 설정
    - GPU MIG(Default) : Kubeflow 생성 후 추가되는 노드에 적용할 MIG 인스턴스 사양 설정
    * GPU MIG에 대한 자세한 설명은 MIG 인스턴스 사용자 설정 참고
    GPU 파이프라인 노드 풀 (선택)선택한 클러스터에 생성한 GPU 파이프라인 노드 풀 선택
    - GPU MIG : 선택한 노드 풀의 MIG 인스턴스 사양 설정
    - GPU MIG(Default) : Kubeflow 생성 후 추가되는 노드에 적용할 MIG 인스턴스 사양 설정
    * GPU MIG에 대한 자세한 설명은 MIG 인스턴스 사용자 설정 참고
    디폴트 파일 스토리지선택한 클러스터와 동일한 네트워크와 Subnet으로 설정된 파일 스토리지 선택
    Kubeflow 소유자 설정소유자 이메일 계정이메일 규격에 맞게 입력 (소유자는 최소 IAM '프로젝트 멤버' 이상의 권한 필요)
    네임스페이스 이름네임스페이스 이름을 입력
    DB 설정포트숫자만 입력 가능
    비밀번호비밀번호를 입력
    Object Storage 설정(MinIO 선택 시) 아이디아이디를 입력
    (MinIO 선택 시) 비밀번호비밀번호를 입력
    (KC Object Storage 선택 시) KC Object Storage
    (현재 kr-central-2 리전에서만 지원 가능)
    - kubeflow-{kubeflow id} 이름으로 Object Storage 버킷 자동생성
    * 생성된 버킷은 카카오클라우드 콘솔의 Object Storage 메뉴에서 확인 가능 (Object Storage 버킷 목록 보기 참고)
    도메인 연결 (선택)유효한 형식의 도메인 입력
안내
  • Ingress 노드 풀은 다른 노드 풀과 중복하여 사용할 수 없습니다.
  • 최초 생성 후 Kubeflow 이름 수정 및 노드 풀(GPU MIG 등) 추가는 불가합니다.

MIG 인스턴스 사용자 설정

MIG(Multi Instance GPU)는 여러 사용자가 성능에 영향을 주지 않고 동일한 GPU에서 서로 다른 워크로드를 실행할 수 있습니다.

  • 카카오클라우드 Kubeflow 서비스에서는 MIG 인스턴스 설정 시, 해당 인스턴스의 리소스를 최대로 활용해야 합니다.
  • GPU 카드가 2장 이상인 경우, 1장을 기준으로 하며 [설정한 MIG 인스턴스 수 x GPU 카드 장수]로 자동 적용됩니다.
  • GPU MIG 인스턴스를 설정하지 않거나 기본 설정을 선택하는 경우 가장 작은 단위로 적용됩니다. 자세한 설명은 기본 설정 규격을 참고하시기 바랍니다.
  • 제조사 혹은 기타 정책으로 인하여 예외 조합이 있을 수 있습니다. 자세한 설명은 MIG 인스턴스 예외 조합을 참고하시기 바랍니다.

기본 설정 규격

인스턴스 패밀리설명
A100      1g. 10gb 사양으로 7개 설정

MIG 인스턴스 예외 조합

인스턴스 패밀리설명
A100      3g. 40gb와 4g. 40gb를 동시에 사용하는 사양 설정 불가
* 제조사 정책으로 인한 사용 불가 조합

Kubeflow 서비스 유형 및 사용 컴포넌트

버전서비스 유형컴포넌트 및 버전
1.0.0Essential + Hyper Param Tuning (HPT) + Serving API- JupyterLab 3.2.9
- KF Pipelines 2.0.0 beta.0
- Katib 0.15.0
- Tensorboard 2.1.0
- KServe 0.8.0

Kubeflow 관리

Kubeflow는 쿠버네티스의 클러스터 관리 능력을 활용하여 머신러닝 워크플로우를 보다 쉽고 효율적으로 관리할 수 있게 합니다. Kubeflow 서비스에서 관리하는 방법은 다음과 같습니다.

Kubeflow 목록 보기

현재 생성된 Kubeflow 목록과 기본 정보를 확인할 수 있습니다.

  1. 카카오클라우드 콘솔에서 Kubeflow 메뉴를 선택합니다.

  2. Kubeflow 탭에서 현재 생성된 Kubeflow를 확인합니다.

    이미지. Kubeflow 목록화면 Kubeflow 목록화면

    구분설명
    Kubeflow 필터필터를 통해 Kubeflow 조회하거나, 키워드로 검색
    Kubeflow 이름사용자가 설정한 Kubeflow 이름
    Kubeflow 상태- Creating, Active, Failed, Expired, Terminating, Terminated
    - 각 상태값에 대한 자세한 설명은 Kubeflow 생명주기 및 상태 참고
    서비스 타입사용자가 선택한 서비스 유형
    - Essential+HPT+Serving API
    GPU 활성화GPU 활성화 상태
    - 활성, 비활성
    프로파일 수Kubeflow에 생성된 프로파일 수
    - 사용자: 해당 Kubeflow에 등록된 사용자 수
    - 그룹 수: kbm-g로 시작하는 그룹 네임스페이스 수
    생성 시간Kubeflow를 생성한 일시
    가동 시간Kubeflow를 운영한 시간
    더 보기- Kubeflow 삭제 : 해당 Kubeflow를 Terminating 처리
    * Active 상태만 삭제 가능합니다.
주의

삭제된 Kubeflow는 삭제 후 1일 간만 노출됩니다. Kubeflow만 삭제하는 경우 연결된 클러스터 요금이 과금되오니 반드시 확인하시기 바랍니다.

Kubeflow 상세 보기

Kubeflow의 세부 정보, 그룹, 사용자, 구성요소, 모니터링 정보를 확인할 수 있습니다.

  1. 카카오클라우드 콘솔에서 Kubeflow 메뉴를 선택합니다.

  2. Kubeflow 탭에서 정보를 확인할 Kubeflow를 선택합니다.

  3. Kubeflow의 상세 화면에서 정보를 확인합니다.

    이미지. Kubeflow 상세 화면 Kubeflow 상세 화면

    구분설명
    Kubeflow 이름사용자가 설정한 Kubeflow 이름
    Kubeflow 상태- Creating, Active, Failed, Expired, Terminating, Terminated
    - 각 상태값에 대한 자세한 설명은 Kubeflow 생명주기 및 상태 참고
    노드 수Kubeflow에 연결된 클러스터 구성에 사용된 전체 인스턴스의 개수
    GPU[MIG 인스턴스] 버튼 : 버튼 클릭 시, Kubeflow 생성 시 설정한 GPU MIG 인스턴스 설정 정보 JSON 형태로 확인
    - GPU 노드 풀 미사용 시, 미노출
    빠른 실행[대시보드 보기] 버튼 : Private Dashboard, Public Dashboard 버튼 클릭 시, Kubeflow 대시보드로 이동

Kubeflow 탭별 정보

Kubeflow ID, 생성 시간, 연결 클러스터 등 세부 정보를 확인할 수 있습니다.

구분항목설명
Kubeflow 정보Kubeflow IDKubeflow의 고유 ID 값
버전버전
- 1.0.0
서비스 타입서비스 유형
- Essential+HPT+Serving API
- 지원하는 버전에 대한 자세한 설명은 Kubeflow 서비스 유형 및 사용 컴포넌트 참고
생성자Kubeflow 생성한 사용자 계정
생성 시간생성 일시 (가동 시간)
- 생성 요청 이후 응답받은 시간을 기준으로 표시 (Kubeflow를 운영한 시간)
생성자Kubeflow 생성 시 등록된 소유자 계정
- Kubeflow 만들기 시, 사용자가 직접 입력하여 생성
연결 클러스터클러스터 이름Kubeflow와 연결된 클러스터
디폴트 파일 스토리지연결한 클러스터에 설정된 파일 스토리지
- 데이터 저장 및 공유
VPCKubeflow와 연결된 클러스터가 배포된 VPC
SubnetKubeflow와 연결된 클러스터가 배포된 Subnet
안내

GPU 인스턴스 유형에 대한 메트릭은 Kubeflow 상세화면 > 모니터링에서만 확인 가능합니다.

  • 카카오클라우드 Monitoring 서비스의 커스텀 대시보드에서는 추후 지원 예정입니다.

Kubeflow 쿼터 설정

쿼터는 네임스페이스 안에서 사용할 수 있는 자원량을 의미하며, Kubeflow가 설치된 Kubernetes Engine의 자원을 기반으로 네임스페이스별 쿼터를 지정하여 사용할 수 있습니다.

주의

네임스페이스 생성 시 기본적으로 CPU 5 core 및 4 GiB 메모리가 사용됩니다. 원활한 사용을 위해 해당 값 이상의 쿼터를 지정해야 합니다.

쿼터 설정 방법

쿼터는 콘솔 사용자/그룹 생성 및 수정 화면에서 가능합니다. (대시보드에서는 쿼터 설정을 할 수 없습니다.)

  1. 카카오클라우드 콘솔에서 Kubeflow 메뉴를 선택합니다.

  2. Kubeflow 탭에서 사용할 Kubeflow를 선택합니다.

  3. Kubeflow의 상세 화면에서 사용자 탭을 선택합니다.

  4. [사용자 추가] 버튼을 클릭합니다.

  5. 쿼터 할당 사용 체크 후 원하는 쿼터를 지정합니다. 이미지. 사용자 추가 쿼터 설정 사용자 추가 화면

안내

사용자 별 [더 보기] 버튼 클릭 후 사용자 수정을 통해 쿼터 추가 및 변경이 가능하며, 그룹 쿼터의 경우 그룹 탭에서 동일한 방법으로 설정 가능합니다.

주의

이미 사용 중인 네임스페이스의 쿼터를 추가/축소(+/-) 할 경우, 작업 중인 리소스에 영향이 있을 수 있습니다. 반드시 사용 중인 리소스 현황을 확인 후 수정해 주세요.

쿼터 할당 조건

  1. 쿼터는 CPU 수량(개수), CPU 메모리(GiB), GPU 메모리(GiB)로 구분되며 각 영역 별 최대 값은 Kubernetes Engine의 Worker와 Ingress 노드풀을 제외한 모든 노드풀의 합으로 이루어집니다.
    (즉 쿼터 설정을 위해서는 Worker와 Ingress 노드풀 외에 추가적인 노드풀이 필요합니다.)

    쿼터 구분최대 값 기준
    CPU 수량Worker, Ingress 노드풀을 제외한 모든 노드풀의 CPU Core 개수 합 (최소 5 core 이상)
    CPU 메모리Worker, Ingress 노드풀을 제외한 모든 노드풀의 CPU Memory 합 (최소 4 GiB 이상)
    GPU 메모리모든 GPU 노드풀의 GPU Memory 합
  2. 쿼터를 할당받기 위해서는 사용자 네임스페이스 또는 그룹 네임스페이스가 필요합니다.

  3. 이미 최대 쿼터 값을 사용중인 경우 추가 쿼터 설정은 불가합니다.

최대 쿼터 값 계산 방식

최대 쿼터 값은 Ingress 및 Worker 노드풀을 제외한 자원의 합으로 이루어지며, 생성된 자원보다 적게 설정될 수 있습니다.
또한 같은 노드 풀을 여러 번 사용한 경우 중복 계산되지 않습니다.

계산 방식 예시

노드풀플레이버CPU Core   CPU Memory   GPU Memory   노드 수
ingressNodePoola1-2-std28-1
workerNodePoola1-4-std416-6
cpuNotebookNodePoola1-8-std832-6
cpuPipelineNodePoolcpuNotebookNodePool과 동일한 노드풀 사용832-6
gpuNotebookNodePool1a100-32-24432244802
gpuPipelineNodePool2a100-64-488644881602

Kubeflow 생성 시 설정한 노드풀 정보가 위와 같다고 가정할 때, 가용 가능한 각 쿼터 별 최대 값은 아래와 같습니다.

  • CPU Core 최대 값: cpuNotebookNodePool(48) + cpuPipelineNodePool(0) + gpuNotebookNodePool(64) + gpuPipelineNodePool(128) = 240 Core
  • CPU Memory 최대 값: cpuNotebookNodePool(192) + cpuPipelineNodePool(0) + gpuNotebookNodePool(488) + gpuPipelineNodePool(976) = 1656 Memory
  • GPU Memory 최대 값: cpuNotebookNodePool(0) + cpuPipelineNodePool(0) + gpuNotebookNodePool(160) + gpuPipelineNodePool(320) = 480 Core

사용(점유) 중인 쿼터 값 계산 방식

  1. 사용(점유) 중인 쿼터 값은 해당 Kubeflow에서 네임스페이스를 가지는 모든 사용자 및 그룹에 설정된 쿼터의 합계로 계산됩니다.

  2. 네임스페이스는 있지만 쿼터 할당(설정)이 안된 경우 사용(점유) 중인 쿼터로 계산되지 않습니다.

가용 가능 쿼터 값 계산 방식

  1. 가용(사용) 가능 쿼터는 최대 쿼터 값 - 사용(점유) 중인 쿼터 값으로 계산됩니다.

  2. 쿼터 할당(설정) 없이 사용중인 자원은 사용(점유) 중인 쿼터로 계산되지 않습니다.

공인 IP로 Kubeflow 대시보드 연결

Kubeflow 대시보드에 공인 IP를 연결하여 접근할 수 있습니다.

로드밸런서에 공인 IP 연결

서비스 생성 시 Kubeflow 인그레스 컨트롤러를 통해 생성된 로드밸런서에 공인 IP를 연결한 후 할당된 IP 주소를 통해 대시보드에 접근합니다.

안내

Kubeflow 만들기 시, 인그레스 컨트롤러를 통해 자동으로 필요한 Load Balancer 리스너, 타깃 그룹을 정의하기 때문에 별도의 생성 및 수정 작업은 없습니다.

  1. 카카오클라우드 콘솔에서 Load Balancer 메뉴를 선택합니다.

  2. Load Balancer 탭에서 kube_service_{프로젝트 아이디}_{IKE 클러스터명}_ingress-nginx_ingress-nginx-controller 네이밍 규칙의 로드밸런서를 선택합니다.

  3. 로드밸런서 상세 페이지에서 [더 보기] 아이콘을 선택합니다.

  4. 공인 IP 연결 설정 모달에서 정보를 입력하고, [저장] 버튼을 클릭합니다.

    이미지. 로드밸런서에 공인 IP 연결 설정 로드밸런서에 공인 IP 연결 설정

    구분설명
    로드밸런서 이름선택한 로드밸런서의 이름
    사설 IP선택한 로드밸런서의 사설 IP 정보
    공인 IP 할당아래 옵션 중 선택
    - 새로운 공인 IP를 생성하고 자동으로 할당
    - 보유한 공인 IP 목록에서 선택 : 할당할 공인 IP 선택
  5. 공인 IP를 연결한 후, Kubeflow 상세 정보 탭에서 빠른 실행 선택 후 연결된 공인 IP 정보를 선택합니다.

  6. 대시보드에 정상적으로 접근되는지 확인합니다.

    이미지. Kubeflow Dashboard 확인 Kubeflow 대시보드 연결 확인


정보

Kubeflow 서비스를 활용한 더 많은 사용 예제는 튜토리얼의 Machine Learning & AI 카테고리에서 확인할 수 있습니다.