- 로컬에서 최신 수준 LLM과 음성-텍스트 변환을 돌리기 위한 하드웨어 구성, PCIe 스위치 설정, Docker 실행 구성을 한 저장소에 정리함
- 약 $2k 예산은 2× RTX 3090으로 48GB VRAM을 확보해 Qwen3.6-27B와 whisper-large-v3 기반 로컬 STT를 실행하는 구성을 목표로 함
- 약 $40k 예산은 4× RTX PRO 6000 Blackwell Workstation으로 384GB VRAM을 확보해 Claude Opus에 꽤 가까운 모델 지능을 얻는 구성을 전제로 함
- 실제 4× RTX 6000 Pro 시스템은 중고 EPYC/DDR4 기반 본체와 c-payne PCIe Gen4 스위치를 조합해 GPU 간 P2P 통신을 CPU 루트 컴플렉스 대신 스위치 패브릭 안에서 처리함
- BIOS, GRUB, ACS, 전력 제한 설정까지 맞춘 결과 P2P는 27.5GB/s 단방향, 50.4GB/s 양방향, 0.37–0.45µs 지연으로 Gen4 라인레이트에 도달함
로컬 LLM 실행을 위한 예산 구간
- 이 구성은 로컬에서 최신 수준의 모델과 음성-텍스트 변환을 실행하려는 사용자를 대상으로 함
- 저장소에는 사용 중인 하드웨어, 구입 이유, 설정 팁, 로컬 STT 실행 방식, Docker 컨테이너 기반 모델 실행 구성이 포함됨
- README의 표를 제외한 내용은 AI가 작성하지 않았다는 주석이 있음
-
약 $2k 구성
-
약 $40k 구성
- 4× RTX 6000 Pro로 총 384GB VRAM을 확보하는 구성을 전제로 함
- 이 가격대에서는 Claude Opus에 꽤 가까운 수준의 모델 지능을 얻는 단계로 표현됨
- 2026-07 기준 4× RTX6kPRO용 현재 최선 모델로 GLM-5.2-Int8Mix-NVFP4-REAP-594B가 제시됨
- 실행 구성은 runners/GLM-5.2-594B에 있음
- 다른 접근으로는 4× DGX Spark 클러스터를 연결해 512GB VRAM을 확보하고, 느린 큰 브레인으로 Qwen3.7-27B가 반복 작업을 빠르게 처리하게 하는 방식도 언급됨
실제 4× RTX 6000 Pro 하드웨어
- 실제 시스템은 4× RTX PRO 6000 Blackwell Workstation을 중심으로 구성됨
- GPU는 각 96GB, 총 384GB VRAM이며 가격은 약 $46,000임
- 본체는 이전 세대 EPYC와 eBay DDR4 부품을 활용해 기본 시스템 비용을 낮추고 VRAM에 비용을 집중함
- 2026년 7월 기준 PCIe5/DDR5 기반 시스템이 매우 비싸기 때문에 PCIe Gen4 스위치와 DDR4 기반 본체를 선택함
-
기본 시스템 BOM
- 기본 시스템은 대부분 eBay에서 구한 이전 세대 EPYC 부품으로 구성됨
- 주요 부품과 가격은 다음과 같음
- ASRock Rack ROMED8-2T 메인보드: $715
- AMD EPYC Milan 7313P 16코어 3.0GHz CPU: $504
- 8× 16GB Crucial DDR4 ECC RDIMM, 총 128GB RAM: $642
- 2× Super Flower 1700W PSU: $750
- c-payne Microchip Switchtec PM40100 Gen4 PCIe 스위치: 약 $1,330
- 4TB 부팅 NVMe: $291
- 2× 8TB 모델 가중치용 NVMe: $1,200
- 기본 시스템 합계는 $5,587임
-
PCIe Gen4 스위치
- c-payne의 PCIe4 스위치를 사용해 GPU 간 통신을 거의 직접 처리함
- 텐서 병렬화의 allreduce 단계에서 GPU 간 데이터가 PCI 루트 컴플렉스를 거치지 않고 스위치 패브릭 안에서 이동함
- 스위치 서브 BOM은 약 €1,220, 약 $1,330 USD임
- Microchip Switchtec PM40100 기반 PCIe Gen4 5× x16 스위치
- SlimSAS PCIe Gen4 Host Adapter x16
- SlimSAS SFF-8654 8i 케이블 2개
- GPU와 PCI 스위치용 나무 인클로저를 직접 제작했으며 약 하루가 걸림
- PCI 스위치 내장 팬은 매우 시끄럽고 쓸모없어 보여 보드에서 분리함
모델 가중치 저장과 실행 방식
- 모든 모델 가중치는 두 개의 8TB 드라이브에 복제된 ZFS 파일시스템에 로컬 저장됨
- 파일시스템은 ~/storage에 마운트됨
- 실행할 모델은 먼저 다음 명령으로 로컬에 다운로드함
hf download <model-name> --local-dir ~/storage/<model-name>
에이전트 하네스와 도구 구성
- 별도 VM 안에서 ~/src 트리의 각 디렉터리마다 tmux 세션을 만들고, 각 세션에서 opencode 인스턴스를 실행하는 애플리케이션을 사용함
- 각 opencode 인스턴스는 추론 머신의 HTTP API인 http://clank.j.co:5000을 백엔드로 사용함
- 오픈소스 모델을 잘 쓰기 위한 핵심은 도구 구성으로 다뤄짐
- skills/ 요약에는 다음 도구가 포함됨
- camofox, kagi.com API 키, searXNG를 통한 웹 브라우징과 검색
- Telegram 봇을 통한 커뮤니케이션과 알림
- 소스 코드 협업용 로컬 비공개 Gitea 인스턴스
- 에이전트는 세션에서 대화형으로 함께 작업하거나, Gitea 이슈를 처리하고 PR을 올리는 방식으로 맡길 수 있음
- 이 작업은 샌드박스 VM 안에서 실행되며, 호스트와의 통신은 공유 파일시스템 마운트로만 이뤄짐
PCIe 스위치와 멀티 GPU 설정
-
BIOS 설정
- ROMED8-2T 메인보드에서 PCI 스위치 속도가 내려가지 않도록 BIOS 설정을 조정함
- AMD PCIE Link Width는 스위치 슬롯에 대해 x16으로 설정함
- 기존 x8/x8 분기 설정은 슬롯을 나눠 upstream 링크가 Gen4 x8로 훈련되게 함
- SlimSAS 8i 케이블 2개가 모두 연결되어야 하며, 각 케이블은 x8을 담당함
- PCIe Link Speed는 Gen4로 강제함
- Blackwell Gen5 장치가 Gen4 스위치를 통해 자동 협상할 때 훈련에 실패하고 Gen1로 떨어질 수 있음
- ASPM은 Disabled로 설정함
- ASPM L1은 유휴 링크를 2.5GT/s로 낮춤
- lspci에서 Gen1으로 다운그레이드된 것처럼 보이는 원인이었지만, 부하 중에는 Gen4로 동작함
- Re-Size BAR는 Enabled로 설정함
- 전체 96GB VRAM BAR 노출과 GPU P2P에 필요함
- SR-IOV는 Disabled로 설정함
- 베어메탈 추론 환경에서 IOMMU 오버헤드와 P2P 간섭을 피하기 위한 설정임
- Preferred IO는 Auto로 둠
- 수동으로 c-payne 스위치 버스 81을 지정하면 약간의 지연 개선 여지가 있지만, 수정이 아니라 최적화이며 BIOS 변경 후 버스 번호가 바뀔 수 있음
-
Redriver와 케이블
- c-payne 조언에 따라 c-payne tool로 redriver gain을 lvl 3으로 낮춤
- gain 수준은 SAS 커넥터 케이블 길이에 따라 달라짐
- c-payne에서 케이블을 너무 적게 주문해 Amazon에서 비슷해 보이는 SAS 케이블을 샀지만, 약간의 차이로 문제가 생겨 다시 주문함
커널, ACS, 전력 제한
-
GRUB와 NVIDIA UVM
- /etc/default/grub에 다음 커널 파라미터를 설정함
GRUB_CMDLINE_LINUX="iommu=off amd_iommu=off nomodeset"
sudo update-grub
- iommu=off가 없으면 멀티 GPU P2P에서 NCCL이 멈춤
- NVIDIA UVM P2P 수정을 위해 다음 설정을 적용함
echo 'options nvidia_uvm uvm_disable_hmm=1' | sudo tee /etc/modprobe.d/uvm.conf
sudo update-initramfs -u
-
ACS 비활성화
- ACS가 기본값으로 활성화되어 있으면 P2P 트래픽이 스위치 패브릭 안에 머물지 않고 CPU 루트 포트를 거침
- 이 상태에서는 PCIe 스위치의 효과가 사라짐
- pcie_acs_override에는 패치된 커널이 필요하므로 런타임에 setpci로 ACS를 비활성화함
- 부팅 때마다 systemd oneshot 서비스로 /usr/local/bin/disable-acs.sh를 실행함
- 검증 방법은 다음과 같음
- lspci -vvv | grep ACSCtl에서 모두 minus sign으로 표시되어야 함
- nvidia-smi topo -m에서 네 GPU 사이가 PIX로 보여야 하며 PHB/NODE가 아니어야 함
- ./tools/measure-gpu-speed.sh로 P2P 대역폭과 지연을 쉽게 측정할 수 있음
-
GPU 전력 제한
- 220V 회로 설치를 피하기 위해 단일 110V 회로에서 실행하되 GPU 전력을 제한함
- systemd로 부팅 시 persistence mode와 전력 제한을 적용함
sudo nvidia-smi -pm 1
sudo nvidia-smi -pl 350
- GPU 전력 제한은 GPU당 350W이며 기본값은 600W임
- 4×350W는 GPU 부하 1,400W로 PSU 예산에 맞춘 값임
- 240V 회로 전의 단일 1700W PSU 단계에서는 GPU를 약 260W로 운용함
- 4×260W = 1,040W GPU
- 시스템 약 280W를 더해 총 약 1,320W임
- 검증은 nvidia-smi --query-gpu=index,power.limit,power.draw --format=csv로 함
측정 결과와 참고 자료
- CPU 방향 upstream은 Gen4 x16이며 약 30GB/s임
- 스위치를 통한 P2P는 27.5GB/s 단방향, 50.4GB/s 양방향임
- 지연은 0.37–0.45µs로 Gen4 라인레이트 수준임
- ASPM이 어딘가에서 활성화되어 있으면 lspci가 유휴 상태의 downstream GPU 링크를 2.5GT/s (downgraded)로 표시할 수 있음
- 이 표시는 cosmetic이며, 링크는 부하가 걸리면 Gen4로 재훈련됨
-
Resources