
멀티 노드 GPU를 위해 비싼 네트워킹 장비가 필요하지 않습니다: 20달러짜리 USB-이더넷 어댑터를 사용한 2x4060+1x4060
요약
저렴한 USB-이더넷 어댑터를 사용하여 멀티 노드 GPU 환경을 구축하는 방법을 소개합니다. 고가의 네트워킹 장비 없이도 일반 이더넷 케이블을 통한 포인트 투 포인트 연결로 대규모 모델을 실행할 수 있음을 보여줍니다.
핵심 포인트
- 20달러 상당의 USB-이더넷 어댑터로 멀티 노드 GPU 구성 가능
- 일반 이더넷 케이블을 이용한 포인트 투 포인트 네트워크 활용
- GPU 간 트래픽 제한 없이 피크 시 30-70MB/s 대역폭 확보
- 저비용 하드웨어로 대규모 언어 모델(LLM) 실행 성능 검증
2개의 노드 사이에 일반 이더넷 케이블을 사용하여 직접적인 포인트 투 포인트 (point to point) 네트워크로 laguna UD-Q2_K_XL (39.7GB)를 실행할 수 있다는 사실이 밝혀졌습니다. 흥미롭게도 nvidia-smi dmon -s pucvmet -d 2 명령어를 확인했을 때, 이 설정에서 GPU 간/내 (inter/intra) 트래픽이 실제로 제한되지 않았습니다. 피크 시에는 약 30-70MB/s를 사용합니다.
gpu pwr gtemp mtemp sm mem enc dec jpg ofa mclk pclk pviol tviol fb bar1 ccpm sbecc dbecc pci rxpci txpci # Idx W C C % % % % % % MHz MHz % bool MB MB MB errs errs errs MB/s MB/s 0 46 47 - 24 21 0 0 0 0 8751 2610 0 0 14557 4 0 - - 0 0 36 0 46 48 - 19 16 0 0 0 0 8751 2610 0 0 14557 4 0 - - 0 12 31 0 46 48 - 19 16 0 0 0 0 8751 2610 0 0 14557 4 0 - - 0 61 3
11k 토큰 프롬프트, 100k 컨텍스트(context)에 대한 벤치마크: ubatch-size = 768 [58055] 2.53.851.946 I slot print_timing: id 0 | task 0 | prompt eval time = 19413.33 ms / 11719 tokens ( 1.66 ms per token, 603.66 tokens per second) [58055] 2.53.851.950 I slot print_timing: id 0 | task 0 | eval time = 125051.84 ms / 3536 tokens ( 35.37 ms per token, 28.28 tokens per second) [58055] 2.53.851.950 I slot print_timing: id 0 | task 0 | total time = 144465.17 ms / 15255 tokens [58055] 2.53.851.954 I slot print_timing: id 0 | task 0 | graphs reused = 3521 ubatch-size = 896 [44325] 2.25.234.581 I slot print_timing: id 0 | task 0 | prompt eval time = 19977.35 ms / 11719 tokens ( 1.70 ms per token, 586.61 tokens per second) [44325] 2.25.234.584 I slot print_timing: id 0 | task 0 | eval time = 95714.94 ms / 2124 tokens ( 45.06 ms per token, 22.19 tokens per second) [44325] 2.25.234.585 I slot print_timing: id 0 | task 0 | total time = 115692.29 ms / 13843 tokens [44325] 2.25.234.588 I slot print_timing: id 0 | task 0 | graphs reused = 2114 ubatch-size = 1024 [43573] 3.11.407.103 I slot print_timing: id 0 | task 0 | prompt eval time = 13709.73 ms / 11719 tokens ( 1.17 ms per token, 854.79 tokens per second) [43573] 3.11.407.106 I slot print_timing: id 0 | task 0 | eval time = 147916.76 ms / 2824 tokens ( 52.38 ms per token, 19.09 tokens per second) [43573] 3.11.407.107 I slot
print_timing: id 0 | task 0 | total time = 161626.49 ms / 14543 tokens [43573] 3.11.407.111 I slot print_timing: id 0 | task 0 | graphs reused = 2812 몇 가지 주요 시사점:
- 포인트 투 포인트 (point-to-point) 네트워크는 트래픽을 스위치가 아닌 이 2개의 노드 사이로만 유지합니다.
- 워커 CPU (worker CPU)를 사용할 의도가 없다면 device=rpc0/rpc1을 사용하여 제한하십시오. 기본 설정은 호스트 CPU를 건너뛰지만, RPC CPU는 사용합니다.
- 이 설정에서 ubatch 768이 최적의 지점(sweet spot)이었습니다: ubatch가 높을수록 = PP(Pipeline Parallelism)가 높아지고 TG(Token Generation)가 낮아짐, ubatch가 낮을수록 = PP가 낮아지고 TG가 높아짐.
- split-mode tensor는 이 설정에서 작동하지 않으며, 이는 단순히 네트워크 용량 때문만은 아닙. 속도가 1t/s 수준으로 매우 느려집니다.
NCCL 및 RPC로 빌드:
$ diff .devops/cuda_rpc_nccl.Dockerfile .devops/cuda.Dockerfile
35c35 < apt-get install -y gcc-${GCC_VERSION} g++-${GCC_VERSION} build-essential cmake python3 python3-pip git libssl-dev libgomp1 libnccl2 libnccl-dev ---
--- > apt-get install -y gcc-${GCC_VERSION} g++-${GCC_VERSION} build-essential cmake python3 python3-pip git libssl-dev libgomp1
44d43 < ENV LD_LIBRARY_PATH=/usr/lib/x86_64-linux-gnu:${LD_LIBRARY_PATH}
49c48 < cmake -B build -DGGML_NATIVE=OFF -DGGML_CUDA=ON -DGGML_RPC=ON -DGGML_CUDA_NCCL=ON -DGGML_BACKEND_DL=ON -DGGML_CPU_ALL_VARIANTS=ON -DLLAMA_BUILD_TESTS=OFF ${CMAKE_ARGS} -DCMAKE_EXE_LINKER_FLAGS=-Wl,--allow-shlib-undefined . &&
--- > cmake -B build -DGGML_NATIVE=OFF -DGGML_CUDA=ON -DGGML_BACKEND_DL=ON -DGGML_CPU_ALL_VARIANTS=ON -DLLAMA_BUILD_TESTS=OFF ${CMAKE_ARGS} -DCMAKE_EXE_LINKER_FLAGS=-Wl,--allow-shlib-undefined . &&
81c80 < && apt-get install -y libgomp1 curl ffmpeg libnccl2
--- > && apt-get install -y libgomp1 curl ffmpeg \
Playground: 2x 4060ti, 1x 3900x, 4x32GB
Tequila: 1x 4060ti, 1x 9600x, 3x48GB
llama-server가 모든 장치를 사용 가능한 것으로 인식함:
8.37.349.848 I srv load: /app/llama-server
8.37.349.850 I srv load: --rpc
8.37.349.850 I srv load: 10.44.0.2:50052
8.37.349.853 I srv load: --device
8.37.349.854 I srv load: CUDA0,CUDA1,RPC0 ...
[60669] 0.03.803.724 I cmn common_param: device_info: [60669] 0.03.803.783 I cmn common_param: - CUDA0 : NVIDIA GeForce RTX 4060 Ti (15976 MiB, 15722 MiB free) [60669] 0.03.803.801 I cmn common_param: - CUDA1 : NVIDIA GeForce RTX 4060 Ti (15977 MiB, 15722 MiB free) [60669] 0.03.803.806 I cmn common_param: - CPU : AMD Ryzen 9 3900X 12-Core Processor (128219 MiB, 128219 MiB free) [60669] 0.03.804.960 I cmn common_param: - RPC0 : 10.44.0.2:50052 (15976 MiB, 15772 MiB free) [60669] 0.03.805.398 I cmn common_param: - RPC1 : 10.44.0.2:50052 (142083 MiB, 142083 MiB free) # llama-rpc-server (tequila) sees the full details for rpc0 vs rpc1 Starting RPC server v4.0.3 endpoint : 0.0.0.0:50052 local cache : /data/rpccache/rpc/ Devices: CUDA0: NVIDIA GeForce RTX 4060 Ti (15976 MiB, 15836 MiB free) CPU: AMD Ryzen 5 9600X 6-Core Processor (142083 MiB, 142083 MiB free) transport : TCP submitted by /u/Chuyito [link] [comments]
AI 자동 생성 콘텐츠
본 콘텐츠는 r/LocalLLaMA의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기