콘텐츠로 이동

GPU 구성

LabPod는 세 가지 GPU 할당 모드를 지원합니다. 관리자 Resources 페이지 → GPU 정책에서 물리적 GPU별로 각 모드를 구성합니다.

전체 GPU (Container Device Interface, CDI)

섹션 제목: “전체 GPU (Container Device Interface, CDI)”

GPU를 요청하는 각 워크스페이스는 하나의 완전한 물리적 GPU를 받습니다. 공유는 없으며, 한 번에 GPU당 하나의 워크스페이스만 사용합니다.

사전 요구사항:

  1. NVIDIA 드라이버 535.54.03 이상이 설치되어 있고 nvidia-smi가 동작함.
  2. nvidia-container-toolkit 설치됨 (설치 스크립트가 처리합니다).
  3. /etc/cdi/nvidia.yaml에 Container Device Interface(CDI) 스펙 존재 (스크립트가 nvidia-ctk cdi generate를 통해 생성합니다).

관리자 정책: Resources 페이지에서 GPU 정책을 whole로 설정하거나 auto로 두세요 (기본적으로 전체 GPU 요청을 허용합니다).

GPU 모드 = 전체 GPU로 워크스페이스를 시작하면, LabPod가 Podman에 --device nvidia.com/gpu=<index>를 전달합니다. 워크스페이스는 전체 GPU를 봅니다.

여러 워크스페이스가 하나의 물리적 GPU를 동시에 공유합니다. 각 워크스페이스는 필요한 GPU 메모리와 컴퓨팅 양을 선언합니다. 서버는 할당량을 추적해 물리적 GPU 용량을 넘기는 새 워크스페이스는 거부합니다.

사전 요구사항:

분할 GPU는 기본 OFF이며, 기본 설치는 공유 라이브러리를 빌드하지 않습니다. 호스트에 GPU 공유 런타임 라이브러리 (libvgpu.so)가 있어야 합니다. 권장 방법은 공개 설치 스크립트로, Podman 컨테이너 안에서 HAMi-core를 빌드하고(호스트 빌드 도구 불필요) LABPOD_GPU_SHARING_LIB_PATH를 자동으로 설정합니다:

Terminal window
curl -fsSL https://labpod.ai/install.sh | sudo bash -s -- --with-hami
Terminal window
# Run these as root
curl -fsSL https://labpod.ai/install.sh | bash -s -- --with-hami

빌드는 ~3.3 GB CUDA 이미지를 내려받습니다. 일회성 빌드타임 비용이며, 이후 podman image rm으로 회수할 수 있습니다.

직접 빌드했거나 외부에서 받은 라이브러리를 쓰려면 LabPod가 이를 찾도록 직접 지정하세요:

Terminal window
# /etc/labpod/labpod.env에서:
LABPOD_GPU_SHARING_LIB_PATH=/path/to/libvgpu.so

이 변수가 설정되어 있는데 파일이 없으면 서버가 시작을 거부합니다.

LabPod GPU 호스트에는 NVIDIA 드라이버 535.54.03 이상이 필요합니다.

관리자 정책: Resources 페이지에서 대상 GPU의 GPU 정책을 **분할 (Fractional)**로 설정합니다.

사용자 워크스페이스 생성: 사용자가 GPU 모드 = 분할 GPU를 선택한 후 필요한 메모리 (MB)와 컴퓨팅 비율을 설정합니다. 서버는 해당 GPU에서 실행 중인 모든 워크스페이스의 합계가 물리적 한계 내에 있는지 확인합니다.

확인:

Terminal window
sudo labpod admin doctor
# 다음을 확인: GPU sharing runtime: OK (또는 경로와 함께 "not found" 오류)
Terminal window
# Run these as root
labpod admin doctor
# 다음을 확인: GPU sharing runtime: OK (또는 경로와 함께 "not found" 오류)

NVIDIA Multi-Instance GPU (MIG)는 하드웨어 수준에서 물리적 GPU를 독립적인 슬라이스로 분할합니다. LabPod는 현재 슬라이스 인벤토리를 읽어 워크스페이스당 하나의 슬라이스를 할당합니다.

사전 요구사항:

  • NVIDIA A100, H100, H200 또는 유사한 MIG 지원 GPU.
  • 운영자가 nvidia-smi를 사용하여 MIG 모드를 활성화하고 슬라이스를 사전 구성함:
Terminal window
# 예시: GPU 0에서 MIG 모드 활성화 및 슬라이스 생성
sudo nvidia-smi -i 0 -mig 1
sudo nvidia-smi mig -i 0 -cgi 1g.10gb,1g.10gb,2g.20gb -C
Terminal window
# Run these as root
# 예시: GPU 0에서 MIG 모드 활성화 및 슬라이스 생성
nvidia-smi -i 0 -mig 1
nvidia-smi mig -i 0 -cgi 1g.10gb,1g.10gb,2g.20gb -C

관리자 정책: 대상 GPU의 GPU 정책을 mig로 설정합니다. LabPod는 시작할 때와 요청할 때 슬라이스를 읽습니다. 추가 변수는 필요하지 않습니다.

MIG 인벤토리 소스 (선택적 재정의):

Terminal window
# /etc/labpod/labpod.env에서:
LABPOD_MIG_INVENTORY=nvidia-smi # 기본값: nvidia-smi -L을 파싱하여 MIG 슬라이스 열거
LABPOD_MIG_INVENTORY=none # 이 호스트에 MIG 없음

추적되지 않은 GPU 사용량 표시기

섹션 제목: “추적되지 않은 GPU 사용량 표시기”

관리자 Resources 페이지는 nvidia-smi가 LabPod 워크스페이스에 속하지 않는 GPU 컴퓨팅 프로세스를 감지하면 경고를 표시합니다. 보통 누군가가 컨테이너 밖에서 호스트에 직접 훈련을 돌리거나, 워크스페이스가 삭제된 뒤에도 프로세스가 남아 있는 경우입니다.

GPU 프로세스 인스펙터:

Terminal window
# /etc/labpod/labpod.env에서:
LABPOD_GPU_PROCESS_INSPECTOR=nvidia-smi # 기본값
LABPOD_GPU_PROCESS_INSPECTOR=none # 검사 비활성화

승인 시 우회 (권장하지 않음):

Terminal window
LABPOD_ALLOW_GPU_DRIFT=1 # 새 워크스페이스에 대한 추적되지 않은 사용량 게이트 건너뜀

점유된 GPU 해제 방법:

Terminal window
nvidia-smi --query-compute-apps=pid,process_name,gpu_uuid --format=csv
sudo kill -TERM <pid>
# 30초 후에도 살아 있으면:
sudo kill -KILL <pid>
Terminal window
# Run these as root
nvidia-smi --query-compute-apps=pid,process_name,gpu_uuid --format=csv
kill -TERM <pid>
# 30초 후에도 살아 있으면:
kill -KILL <pid>
Terminal window
sudo labpod admin doctor
Terminal window
# Run these as root
labpod admin doctor

doctor가 확인하는 것:

  • CDI 스펙이 /etc/cdi/nvidia.yaml에 존재하는지 (전체 GPU 모드).
  • 분할 GPU 공유 라이브러리를 읽을 수 있는지 (LABPOD_GPU_SHARING_LIB_PATH가 설정된 경우).
  • GPU 프로세스 인스펙터 (nvidia-smi)가 열거된 각 GPU UUID에 대해 도달 가능한지.

전체 워크스테이션 사전 점검을 위해 설치 스크립트의 --check 모드를 사용하세요.

Terminal window
# /etc/labpod/labpod.env에서:
LABPOD_GPU_INVENTORY=nvidia-smi # 기본값: nvidia-smi를 통해 GPU 열거
LABPOD_GPU_INVENTORY=none # 드라이버 없는 호스트에서는 GPU 워크스페이스 없음

nvidia-smi 호출을 건너뛰고 Resources 페이지에서 불필요한 오류를 억제하려면 CPU 전용 워크스테이션에서 none을 사용하세요.