1. 도입: 공식 지원을 넘어선 진정한 인프라 확장성

지난 글에서는 NuFi 플랫폼의 코어 로직을 유연하게 설계하여, 새로운 NPU인 Furiosa RNGD를 성공적으로 공식 통합하고 RTX 3090 대비 뛰어난 성능을 검증한 사례를 공유했습니다. 단 하나의 DeviceFetcher 인터페이스를 구현하는 것만으로 새로운 하드웨어를 K8s 생태계에 편입시킬 수 있었습니다.
하지만, 엔터프라이즈 환경에서는 플랫폼이 공식적으로 지원 업데이트를 제공하기 전이라도, 새롭게 출시된 AI 가속기를 신속하게 도입하고 테스트해야 하는 요구사항이 빈번하게 발생합니다.
이러한 문제를 해결하기 위해 NuFi는 '커스텀 디바이스 등록(Custom Device Registration)' 기능을 제공합니다. 공식 지원 목록(Nvidia GPU, Furiosa RNGD, Rebellions ATOM 등)에 없는 NPU라도, K8s 클러스터 내에서 디바이스를 인식할 수 있는 표준 환경만 갖춰져 있다면 별도의 코드 레벨 수정 없이 NuFi 대시보드에서 즉시 플랫폼 생태계로 편입시킬 수 있습니다.
이번 글에서는 실제 하드웨어 없이 소프트웨어로 동작하는 Mock Device Plugin과 Mock Metric Exporter를 활용하여 가상의 NPU(LPU) 환경을 구성하고, 이를 NuFi에 커스텀 디바이스로 등록하여 NPUOps 기능과 연동하는 전체 아키텍처 흐름을 소개합니다.
2. 커스텀 디바이스 확장의 핵심 조건: K8s 표준 인터페이스
커스텀 디바이스 등록에 앞서, K8s 클러스터가 해당 하드웨어를 표준 자원으로 인식하고 모니터링할 수 있는 기반이 필요합니다. NuFi는 디바이스 등록 시 resourceKey가 실제로 노드에 존재하는지, 메트릭이 정상적으로 수집되는지 검증하기 때문입니다. 이를 위해 두 가지 컴포넌트가 요구됩니다.
- Device Plugin: K8s에 NPU 리소스를 노출하여 스케줄링이 가능하도록 만듭니다.
- Metric Exporter: NPU의 상태(사용률, 메모리, 온도 등)를 Prometheus 메트릭으로 노출합니다.

본 글에서는 특정 NPU 하드웨어를 직접 다루는 대신, 전체적인 커스텀 디바이스 등록 흐름과 작동 원리를 명확하게 보여드리기 위해 저희가 직접 구현한 가상의 LPU(Mock Device) 환경을 예시로 활용하여 설명하겠습니다.
3. 클러스터 환경 준비: 디바이스 구성
Device Plugin 설치 및 Node Capacity 확인
커스텀 디바이스를 등록하려면 가장 먼저 사용하는 NPU 벤더에서 제공하는 Device Plugin을 K8s 클러스터에 배포해야 합니다.
이번 예시에서는 실제 하드웨어 없이도 리소스 할당을 시뮬레이션할 수 있도록, hyperaccel.ai/lpu라는 커스텀 리소스를 노드에 가상으로 노출하는 Mock Device Plugin을 DaemonSet으로 배포해 보겠습니다.
플러그인 배포가 완료되면, 아래와 같이 노드의 Capacity에 해당 커스텀 리소스가 정상적으로 등록된 것을 확인할 수 있습니다. 이것으로 K8s 스케줄러가 새로운 디바이스를 Pod에 할당할 준비를 마쳤습니다.

Metric Exporter 설치 및 Prometheus 수집 확인
다음으로, NuFi가 디바이스 상태를 모니터링할 수 있도록 벤더에서 제공하는 Metric Exporter를 배포해야 합니다. (만약 벤더에서 공식 Exporter를 제공하지 않는다면, Prometheus 형식에 맞춰 직접 구현하여 연동하는 것도 충분히 가능합니다.)
본 글의 예시에서는 NPU의 상태를 가상으로 생성하여 내보내는 Mock Metric Exporter를 배포했습니다. 이 Exporter는 실제 모니터링 환경과 동일하게 아래 4가지 핵심 메트릭을 노출하도록 구현되었습니다.
lpu_utilization_percent: 디바이스 코어 활용률 (0~100%)lpu_memory_used_bytes: 메모리 사용 크기 (Bytes)lpu_memory_total_bytes: 메모리 전체 크기 (Bytes)lpu_temperature_celsius: 디바이스 온도 (℃)
Prometheus 대시보드에서 PromQL을 실행해 보면, Mock Exporter가 발생시키는 메트릭 데이터들이 정상적으로 수집되고 있음을 확인할 수 있습니다.

4. NuFi 생태계로의 편입: 커스텀 디바이스 등록 과정
클러스터 환경 준비가 끝났다면, NuFi 대시보드를 통해 본격적으로 커스텀 디바이스를 등록할 수 있습니다.
엔터프라이즈 환경을 고려한 안전한 접근 제어 (RBAC)
NuFi는 인프라의 안정성을 보호하기 위해 역할 기반 접근 제어(RBAC)를 엄격하게 적용하고 있습니다. 커스텀 디바이스 등록 API는 관리자 전용 엔드포인트로 보호되며, 일반 사용자의 오조작을 방지하기 위해 Keycloak 인증 시스템과 연동됩니다.
따라서 Keycloak 어드민 콘솔(super-llm realm)에서 nufi-admin 역할(Role)이 부여된 인프라 관리자 계정으로 로그인해야만 대시보드 사이드바에 Admin 메뉴가 활성화되고 등록 절차를 진행할 수 있습니다.

클러스터 환경 준비가 끝났다면, NuFi 대시보드를 통해 본격적으로 커스텀 디바이스를 등록할 수 있습니다. 이 과정은 관리자 전용 API로 보호되므로, Keycloak에서 nufi-admin 역할이 부여된 계정으로 접근해야 합니다.
Admin → Devices 페이지에서 'Add Device'를 클릭하면 3단계의 등록 마법사가 시작됩니다.

Step 1: 기본 정보 및 K8s 리소스 검증
대시보드 UI에 표시될 디바이스 명칭과 벤더 정보를 입력합니다. 이때 가장 중요한 것은 앞서 클러스터에 등록한 Resource Key(hyperaccel.ai/lpu)를 정확히 입력하는 것입니다.
NuFi는 입력 즉시 클러스터 노드의 Capacity를 조회하여 해당 리소스가 실제로 존재하는지 검증합니다. 정상적으로 환경이 구성되었다면 "✓ 클러스터에서 감지된 리소스입니다."라는 확인 메시지가 표시됩니다.

Step 2: 모니터링 설정 (Prometheus)
NuFi의 통합 모니터링 화면에 커스텀 디바이스의 상태를 출력하기 위해 메트릭을 매핑하는 단계입니다.
1) Prometheus Labels (식별자 매핑)
NuFi가 K8s 클러스터 내의 수많은 메트릭 중, 특정 노드와 파드에 할당된 디바이스를 정확히 매칭하기 위해 사용하는 기준점입니다.

- Node Label: 메트릭이 수집된 물리적 노드를 식별하는 키입니다.
- Device Label: 노드 내에 장착된 여러 개의 NPU 카드를 개별적으로 식별하는 키입니다.
- Pod / Namespace Label Key: 해당 디바이스를 점유하고 있는 파드와 네임스페이스를 추적하기 위한 키입니다.
💡 실무 적용 팁: 라벨 정보는 어디서 찾을 수 있을까요?
가장 확실한 방법은 NPU 제조사의 Metric Exporter 공식 문서를 확인하는 것입니다. 예를 들어 Furiosa Metric Exporter의 공식 문서를 보면, 제공되는 기본 메트릭과 함께 어떤 라벨(예: kubernetes_node, npu_dev_node)을 사용하는지 명시되어 있습니다.

만약 벤더 공식 문서에 상세한 설명이 없다면, Prometheus 대시보드에서 직접 메트릭 데이터를 조회하여 파악할 수 있습니다.
NVIDIA DCGM Exporter를 예로 들면, Prometheus 조회 시 노드는 Hostname 라벨로, 개별 GPU는 gpu 라벨로 구분하며, exported_pod와 exported_namespace 라벨을 통해 할당된 워크로드를 추적한다는 것을 직관적으로 확인할 수 있습니다.

2) Metric Expressions (메트릭 쿼리 작성)
디바이스의 상태를 나타내는 지표를 NuFi가 인식할 수 있도록 PromQL 표현식으로 입력합니다. 본 글의 Mock Exporter 예시를 바탕으로 아래와 같이 매핑합니다.
- Utilization: 디바이스 코어 활용률 (예:
lpu_utilization_percent) - Memory: NPU 메모리 사용량을 추적합니다. Exporter가 제공하는 데이터 형태에 따라 'Used & Total(사용량과 전체 용량)' 또는 'Used & Free(사용량과 유휴 용량)' 방식을 선택하여 입력할 수 있습니다. 입력된 값의 단위(Bytes, MiB 등)도 지정합니다. (예:
lpu_memory_used_bytes,lpu_memory_total_bytes) - Temperature / Power: 디바이스의 온도(℃)와 전력(W) 메트릭을 입력합니다. 온도의 경우 앞서 언급한 '디바이스 온도 기반 로드밸런싱 제어' 기능의 핵심 트리거로 사용됩니다. (예:
lpu_temperature_celsius)

Step 3: 확인 및 저장
마지막 단계에서 입력한 전체 설정 내용을 검토합니다.

저장을 완료하면 LPU가 'Custom' 타입의 디바이스로 성공적으로 NuFi 플랫폼에 등록되어 디바이스 목록에 나타납니다.

5. 등록된 디바이스의 즉각적인 활용
커스텀 디바이스 등록 기능이 제공하는 가장 큰 강점은, 등록 직후 별도의 컴포넌트 재시작이나 추가 설정 없이 NuFi의 핵심 기능들을 즉시 활용할 수 있다는 점입니다.
- 통합 모니터링 (Monitoring): 모니터링 대시보드에 LPU 탭이 새롭게 추가됩니다. 매핑한 메트릭을 기반으로 실시간 활용률, 메모리 사용량, 온도가 GPU 등 공식 지원 NPU와 동일한 UI로 출력됩니다.

- 추론 서버 배포 (Deployment): K8s Deployment 생성 시 Accelerator 드롭다운 옵션에서 LPU를 선택할 수 있습니다. 등록된
resourceKey가 K8s Pod의 Resource Limit에 자동으로 반영되어 안정적으로 스케줄링됩니다.

- 개발 환경 구성 (Lab): Jupyter Notebook이나 VS Code 서버 생성 시에도 LPU를 할당받아, 즉각적인 AI 모델 실험 및 코드 테스트를 진행할 수 있습니다.

- 디바이스 온도 기반 로드밸런싱 제어: NuFi가 제공하는 고도화된 운영 안정성 기능 역시 커스텀 메트릭과 완벽하게 연동됩니다. 임계 온도를 설정해 두면, 이를 초과할 경우 해당 노드로의 트래픽을 차단하고 온도가 안정화될 시 다시 로드밸런싱을 허용하는 자동화 제어가 가능합니다.

6. 마무리: 벤더 종속성 없는 유연한 AI 인프라
지난 글의 '코드 레벨 공식 통합(Furiosa RNGD)'에 이어, 이번 글에서는 'UI 기반의 커스텀 디바이스 확장(Mock LPU)'을 통해 NuFi가 가진 아키텍처의 유연성을 증명해 보였습니다.
Kubernetes 표준 Device Plugin과 Prometheus 메트릭 노출이라는 기본 요건만 충족한다면, 벤더사에서 제공하는 어떠한 형태의 가속기라도 플랫폼 개발자의 개입 없이 인프라 관리자가 직접 NuFi 생태계에 편입시킬 수 있습니다.
저희는 NuFi를 특정 하드웨어 벤더에 종속되지 않는 독립적이고 강력한 AI 플랫폼으로 만들어가고 있습니다. 조직의 예산과 서비스 요구사항에 맞춰 최적의 AI 가속기를 유연하게 선택하고, 지체 없이 프로덕션 수준으로 운영할 수 있는 환경을 제공하는 것이 저희의 목표입니다. 국내외 NPU 생태계가 빠르게 성장하고 있는 만큼, 앞으로도 다양한 가속기의 통합을 적극적으로 지원해 나갈 예정입니다.
- 참고자료 - Furiosa Metric Exporter