TECH 으로 돌아가기
TECH HACKER NEWS 오늘 7분 읽기 24 READS

DGX Spark에 Nix와 NixOS를 올리다: AI 워크스테이션의 재현 가능한 환경 만들기

DGX Spark에 Nix와 NixOS를 올리다: AI 워크스테이션의 재현 가능한 환경 만들기
SOURCE IMAGE · HACKER NEWS

엔비디아의 DGX Spark는 데스크톱 크기의 AI 개발용 워크스테이션으로, 아수스가 만든 동종 제품인 Ascent GX10과 함께 개인이나 소규모 팀이 로컬에서 CUDA 기반 작업을 돌릴 수 있도록 겨냥한 하드웨어다. 기본 운영체제는 엔비디아가 우분투를 커스터마이즈한 DGX OS다. 그런데 최근 공개된 오픈소스 프로젝트 nixos-dgx-spark는 이 기기 위에서 Nix 패키지 매니저와 NixOS를 사용할 수 있게 해주는 이미지와 설정 모듈을 제공한다. 개발자 graham33가 GitHub에 올린 이 저장소는 Planet Nix 콘퍼런스의 5분짜리 라이트닝 토크로도 소개됐다.

Nix가 이런 하드웨어에서 의미를 갖는 이유는 재현 가능성에 있다. Nix는 패키지와 그 의존성 전체를 선언적으로 고정해 관리하기 때문에, 같은 설정을 어디에 배포하든 동일한 환경을 재구성할 수 있다. AI 개발에서 흔히 겪는 CUDA 툴킷, cuDNN, NCCL, 파이토치 버전이 서로 얽혀 환경이 깨지는 문제를 두고 보면, 환경 자체를 코드로 못 박아두는 접근은 실무적으로 매력적이다. 이 프로젝트는 그 방식을 DGX Spark 특유의 하드웨어에 맞춰 적용하려는 시도다.

두 갈래의 사용 방식

이 저장소는 크게 두 가지 진입점을 제공한다. 하나는 기존 DGX OS를 그대로 둔 채 Nix만 설치해 개발 셸(devshell)과 플레이북을 쓰는 방식이고, 다른 하나는 아예 NixOS를 설치해 전면적으로 전환하는 방식이다. 전자는 부담이 적다. 공식 설치 스크립트나 Determinate Nix 설치 프로그램으로 Nix를 올리고, nix.conf에서 flakes와 nix-command 기능을 켠 뒤 저장소가 제공하는 플레이북을 실행하면 된다. 여기서 다루는 플레이북들은 엔비디아가 build.nvidia.com/spark에 공개한 것들에 대응한다.

NixOS가 아닌 시스템에서 Nix로 빌드한 CUDA 애플리케이션은 호스트의 GPU 드라이버를 찾지 못하는 문제가 생기는데, 이를 nix-gl-host라는 도구로 해결한다. 저장소의 플레이북 개발 셸은 이 처리를 자동으로 해주도록 설계돼 있다. 컨테이너 기반 플레이북은 애초에 필요가 없고, Nix 네이티브 플레이북은 명령을 nixglhost로 감싸 실행하므로 사용자가 수동으로 손댈 일이 없다. 다만 cuda 같은 다른 개발 셸에서는 nixglhost를 명령 앞에 직접 붙여 써야 한다.

펌웨어와 커널이라는 현실적 장벽

NixOS 전면 설치는 만만치 않다. 저장소가 지적하는 핵심 제약은 공장 출하 펌웨어에서는 오직 DGX OS만 부팅할 수 있다는 점이다. 즉 NixOS를 올리려면 먼저 DGX OS 상태에서 펌웨어를 업데이트해야 한다. 이 프로젝트는 fwupd를 활성화하고, 엔비디아가 LVFS(Linux Vendor Firmware Service)에 펌웨어를 공개하는 점을 활용해 업데이트를 받도록 구성했다. 설치 자체는 시크릿 부트를 끄고 USB로 부팅한 뒤 NixOS 매뉴얼의 수동 설치 절차를 따르는 방식이다.

하드웨어 지원 모듈의 중심에는 커널이 있다. 이 프로젝트는 엔비디아의 데비안 어노테이션에서 커널 설정을 뽑아내고 이를 NixOS 기본값과 비교해, 차이 나는 항목만 남긴 간결한 설정을 생성한다. 저장소 설명에 따르면 이렇게 하면 설정의 장황함이 약 82% 줄어 유지보수가 쉬워진다. GRUB 부팅 메뉴에서 두 가지 커널 옵션을 고를 수 있고, 모듈은 GPU 텔레메트리와 시스템 모니터링을 보여주는 DGX 대시보드 웹 인터페이스를 localhost의 11000 포트에서 함께 켠다.

빌드 시간을 줄이는 캐시 생태계

CUDA 관련 패키지를 소스에서 전부 빌드하면 시간이 오래 걸린다. 이 프로젝트는 캐시로 그 부담을 던다. Flox가 엔비디아의 허가를 받아 aarch64-linux용으로 미리 빌드한 CUDA 패키지를 배포하는데, cudatoolkit, nccl, cuDNN, 파이토치 등이 여기 포함된다. DGX Spark NixOS 모듈을 쓰면 이 Flox 캐시가 substituter로 자동 설정되고, 저장소가 직접 빌드한 dgx-dashboard나 openshell 같은 패키지는 graham33의 Cachix 캐시로 제공된다. 스탠드얼론 Nix 환경에서는 이 캐시들을 nix.conf에 수동으로 추가하면 된다.

헤드리스 환경을 위해 nixos-anywhere를 이용한 원격 설치도 마련돼 있다. SSH 접근만 가능하면 NVMe 디스크를 파티셔닝하고 DGX Spark 모듈이 켜진 NixOS를 원격으로 설치할 수 있으며, 실제 설치 전에 VM에서 디스크 구성을 시험해볼 수도 있다. 다만 저장소는 이 원격 설치 경로가 아직 테스트되지 않았으니 사용에 주의하라고 명시하고 있다.

정리하면 이 프로젝트는 완성된 제품이라기보다 특정 하드웨어를 재현 가능한 환경으로 길들이려는 커뮤니티 작업에 가깝다. Nix 생태계에 이미 익숙하고 DGX Spark나 Ascent GX10 같은 기기를 직접 다루는 실무자에게는, DGX OS 위에 Nix만 얹어 플레이북을 돌려보는 가벼운 진입점부터 시도해볼 만하다. 반면 NixOS 전면 전환은 펌웨어 선행 업데이트, 시크릿 부트 비활성화, 아직 검증되지 않은 일부 경로라는 조건을 감수해야 하므로, 되돌리기 어려운 프로덕션 기기보다는 실험적 환경에서 접근하는 편이 현실적이다.

SOURCE · HACKER NEWS
원문 전체 보기 → https://github.com/graham33/nixos-dgx-spark
SHARE
처리 중...