
제목
- 데이터센터 GPU를 200파운드에 내 게이밍 PC에 장착했다
요약
- 이미 RTX 4080 16GB로 충분한 듯 보였지만, 로컬에서 더 큰 모델을 돌리려면 VRAM이 부족했습니다. 해결책으로 데이터센터 GPU를 저렴하게 구해 32GB VRAM 구성을 만들고, llama.cpp의 텐서 분할과 NVLink-ish 구성을 통해 27B 파라미터 모델을 약 32토큰/초로 구동했습니다. 총 비용은 약 £200에 불과했고, 두 GPU의 VRAM 합계로 로컬에서 큰 모델을 실행하는 가능성을 보여주었습니다. 다만 팬 소음과 어댑터의 제약 같은 도전도 함께 따라왔습니다. 원문은 블로그에서 자세히 확인할 수 있습니다.
자세한 내용
- 개요와 목표
- 현재 보유: RTX 4080(16GB VRAM)으로 충분한 게임 성능은 확보하지만, 로컬에서 큰 LLM 모델을 운용하기엔 VRAM이 부족함.
- 목표: 더 많은 VRAM을 합쳐 로컬에서 27B 파라미터 모델을 실용적으로 구동하고, 비용은 최대한 낮추기.
- 하드웨어 구성 및 선택 이유
- 선택한 GPU: Tesla V100 SXM2 16GB (Volta, HBM2 16GB, 5120 CUDA 코어, 900 GB/s 대역폭).
- 이유: 2017년식 V100의 메모리 대역폭이 736 GB/s인 RTX 4080보다 높아 로컬 LLM에 이점이 큼.
- 단점: SXM2 모듈은 PCIe 슬롯이 없고 디스플레이 출력도 없으며, 서버 보드 내에서 NVLink로 연결되도록 설계되어 일반 메인보드에 바로 꽂을 수 없음.
- 어댑터와 설치 과정
- 어댑터: SXM2-to-PCIe 어댑터를 사용해 메인보드에 연결. 제조사 비공개, 가격 약 £50.
- 결과: 16GB VRAM GPU가 메인 PC에 장착되어 RTX 4080과 합쳐 총 32GB VRAM 구성.
- 주의점: 어댑터 팬 소음이 매우 큼(약 82dB). 제어 불가한 상태에서 운영되므로 소음 관리가 큰 고민거리.
- 팬 관리 해결책: 팬 핀아웃을 파악하고 PWM 제어를 통해 메인보드 팬 헤더로 제어 가능하도록 수정함.
- 핀아웃 확인 및 제어 시도: 9V 배터리로 간이 점검 시 표준 PC 팬 핀 현상 확인.
- 실제 제어: JST PH2.0 커넥터(팬 측)와 0.1” 표준 2.54mm 핀헤더를 연결하는 점퍼 케이블로 PWM 제어 가능.
- 성능과 소프트웨어 구성
- 모델 구동 방식: llama.cpp에서 텐서 분할(Tensor Split)로 두 GPU에 걸쳐 레이어를 분할. PCIe 버스로 파이프라이닝해 일부 레이어는 4080, 일부는 V100이 수행.
- 모델 정보: Qwen3.6-27B-MTP Q5_K_M(약 19GB)로 설정, 컨텍스트 윈도우 128k 토큰, GPU 레이어 99개(전부 offload 가능).
- 속도: 추론 속도 약 32 토큰/초; 프롬프트 처리 약 133-160 토큰/초. 두 서로 다른 GPU 아키텍처를 PCIe로 연결해도 꽤 빠름.
- 모델 비교: 같은 32GB를 갖춘 RTX 5090 대비 비용은 훨씬 저렴하지만, 두 GPU를 병렬로 쓰는 방식은 가격 대비 가치가 큼.
- 멀티 토큰 예측(MTP): 모델 이름에 포함된 MTP는 다가오는 기능으로, 여러 토큰을 한 번에 예측하고 정답인 경우에만 토큰이 채택되며, 일반적으로 1.5~2배의 속도 향상을 기대. 다만 nixpkgs의 기본 버전은 Qwen3.6 MTP를 아직 지원하지 않아 소스에서 특정 커밋으로 빌드 필요.
- 운영 환경과 설정의 편의성
- 운영 체제: NixOS로 구성. Volta 기반 V100은 드라이버 550.x 계열에서 CUDA 12.2까지만 지원하고, 현재 nixpkgs의 CUDA 12.6 이상과 충돌이 남.
- 커널/드라이버 설정 예시(발췌):
- boot.kernelPackages=pkgs.linuxPackages_6_6
- hardware.nvidia.package=config.boot.kernelPackages.nvidiaPackages.legacy_535
- services.xserver.enable=true
- services.xserver.videoDrivers=[“nvidia”]
- nixpkgs.overlays=[(final: prev: {cudaPackages_12_2=nixpkgs-cuda.legacyPackages.${prev.system}.cudaPackages_12_2;})]
- 결과적으로 두 GPU가 모두 인식되고 CUDA가 작동하며, dotfiles 저장소의 커밋에 전체 머신 정의가 포함됨.
- 멀티 모달 및 네트워크 활용
- 이미지 입력 지원: mmproj를 통해 이미지 입력 가능. 이미지 피드포워딩은 비주얼 인코더가 이미지 픽셀을 벡터로 변환해 LLM 토큰 임베딩 공간으로 보냄.
- 사용 예: 이미지 URL과 텍스트 프롬프트를 함께 보내면 모델이 시각 정보를 설명하고 분석 가능.
- OpenCode와 네트워크: 로컬 모델 서버를 네트워크로 접근해 OpenCode 같은 AI 코딩 도우미 사용. NAS에 저장된 모델은 TrueNAS에서 NFS로 마운트하고, 서버는 NixOS로 부팅되어 두 GPU를 사용할 수 있음.
- NAS 및 저장소 구성
- 모델 저장은 NAS(TrueNAS)에서 NFS로 공유. 대용량 모델 저장 가능.
- 운영은 Corsair MP600 MINI를 도킹 케이스 USB-C NVMe 어댑 with OS가 켜지도록 구성. 게임 시에는 Windows로 부팅해 RTX 4080으로 게임, LLM 작업 시에는 NAS의 NixOS 부팅으로 두 GPU 이용.
- 한계와 주의점
- V100이 warm reboot 시 PCIe 슬롯에서 간헐적으로 인식되지 않는 ACPI 문제: 냉전원 재부팅으로 복구 필요.
- V100이 없어지면 16GB GPU 하나로 모델을 로딩할 수 없어 서비스가 재시작하는 문제가 발생.
- 최종 결과
- 비용: 약 £200로 데이터센터 GPU 16GB + 게이밍 GPU 16GB 합쳐 32GB VRAM 확보.
- 성능: 27B 파라미터 모델을 로컬에서 충분히 작동시키고, 가격 대비 큰 가치 실현.
- 확장 가능성: 동일 모델의 32GB 버전은 더 비싸지만 여전히 가격대가 매력적이며, 2대의 V100 조합은 NVLink 수준의 고대역에서도 상호 작용 가능.
- 참고 및 확장 제안
- proper 멀티 GPU 구성이나 NVLink를 고려한 가까운 시나리오에서 같은 방식으로 확장 가능.
- 두 GPU를 함께 사용할 때의 속도 이득은 단일 32GB GPU만큼은 아니지만, 비용 대비 큰 가치 제공.
- 원문 전체를 참고하면 구성과 설정에 대한 자세한 설명 및 사진/비디오를 포함하고 있습니다.
원문 링크