지난 몇 달 동안 저는 여러 하네스(harnesses)와 엔진을 바꿔가며 마침내 좋은 조합을 찾았습니다. LM Studio와 Copilot 확장 기능을 사용하다가 여기까지 오게 되었으니, 두 개의 5060 Ti를 사용하는 분들을 위한 몇 가지 팁을 공유합니다.
이 카드들에서는 프리필(Prefill) 과정이 까다롭습니다. 하드웨어 측면에서는 다음 사항을 확인해야 합니다: CPU 레인에 두 GPU 모두를 연결할 수 있는 마더보드 (CPU에 직접 연결된 슬롯 2개 또는 PCIe 분기화(bifurcation)가 가능한 x16 슬롯 하나, 즉 x8/x8). 이전에는 두 번째 카드가 칩셋에 매달려 있었는데, 이를 CPU 레인으로 옮긴 후 첫 토큰까지의 시간이 약 2.5배 단축되었고 배칭 처리량(batching throughput)이 두 배가 되었습니다. 시스템 그래픽 전용으로 별도의 저전력 프로파일 GPU를 사용하세요. 만약 5060 Ti 중 하나가 디스플레이를 구동한다면, VRAM의 2~3 GB를 소모하며, 레이어 분할(layer split)이 균등하므로 다른 카드도 같은 양을 손실합니다. 이는 알아두셔야 할 맥락입니다.
모델: 이들은 Blackwell 카드이므로, NVFP4 양자화(quant)가 더 나은 프리필 및 디코딩 성능을 제공합니다. 제가 사용하는 조합은 다음과 같습니다: capy-flash (이전 명칭 ninfer-tp2) + OpenCode, 두 카드에 걸친 텐서 병렬(tensor parallel)을 사용한 Qwen3.8-27B NVFP4, MTP 추측 디코딩(speculative decoding), 그리고 int8 KV 캐시입니다. 저는 176K 컨텍스트에서 디코딩 시 70~95 t/s, 프리필 시 약 1,500 t/s를 얻습니다 (더 짧은 프롬프트에서는 ~3,500-4,000 t/s). 전체 컨텍스트까지는 가능하지만, 세 번째 카드가 없습니다.
현재는 Gen4 익스텐더가 없어 PCIe Gen3으로 구동하고 있습니다 (제 긴 라이저가 Gen3 등급이었고, 두 번째 슬롯은 Gen4에서 충돌이 발생합니다). 프리필은 카드 간에 5~7 GB/s를 전송하며, 이는 Gen3 x8 한계치에 가깝습니다. 따라서 저는 Gen4가 짧거나 중간 길이의 프롬프트에서 대략 +30-60%의 프리필 성능 향상을 가져올 것으로 예상하지만, 어텐션 컴퓨팅(attention compute)이 지배적인 매우 긴 컨텍스트에서는 그 폭이 적을 것입니다. 디코딩은 거의 동일하게 유지될 것입니다.
P2P: 활성화할 수 있습니다 (패치된 오픈 드라이버). 하지만 디코딩에 약 5%만 추가하고 프리필에는 아무것도 추가하지 못합니다. 5060 Ti는 약 4.6K CUDA 코어를 가지고 있으므로, 디코딩의 한계는 링크가 아니라 컴퓨팅 자체입니다.
하네스: 저는 OpenCode를 사용하지만, 솔직히 하네스가 크게 중요하지 않은 것 같으니 자신만의 것을 선택하세요.
제가 시도했던 다른 하네스(harnesses)들은 긴 작업에서 압축(compaction)으로 인해 항상 컨텍스트 이동(context shift)에 도달했고, 집에 돌아와 보니 "컨텍스트 제한 초과(context limit reached)" 오류가 발생해 있었습니다. OpenCode의 압축 기능이 이를 해결해 주었고, 이제 거의 3일 동안 실행할 수 있게 되었습니다.
설정: 2x RTX 5060 Ti 16GB, Ryzen 7 5800X, B550 (x8/x8 분기), capy-f NVFP4, int8 KV 캐시. 컨텍스트별 Prefill (단일 요청, Gen3 x8/x8 CPU 직접 연결, P2P 활성화).
| 프롬프트 토큰 | TTFT | Prefill | Decode |
|---|
| 2k | 0.5 s | 3,860 t/s | 83 t/s |
| 8.5k | 2.0 s | 4,270 t/s | 73 t/s |
| 35k | 9.9 s | 3,520 t/s | 79 t/s |
| 71k | 26.6 s | 2,660 t/s | 84 t/s |
| 142k | 80 s | 1,770 t/s | 71 t/s |
| 176k | 115 s | 1,530 t/s | 72 t/s |
이전 버전 대 현재 버전 대 Gen4 (Gen4 열은 추정치이며 아직 측정되지 않았음)
| 측정 항목 | 칩셋을 통한 두 번째 GPU 연결, P2P 없음 | Gen3 x8/x8 to CPU + P2P | Gen4 x8/x8 + P2P (추정) |
|---|
| GPU-to-GPU 대역폭 ≈ | 4 GB/s | ≈7 GB/s | ≈14 GB/s |
| TTFT, 1.7k 프롬프트 | 1.2 s | 0.47 s | ≈0.33 s |
| Prefill, 35k | 1,600–1,900 t/s | 3,520 t/s | ≈4,500-5,000 t/s |
| Prefill, 176k | 1,000–1,200 t/s | 1,530 t/s | ≈1,800-2,200 t/s |
| Decode, 1 요청 | ≈85 t/s | 72-85 t/s (비슷함) | about the same |
| Decode 총합, 8 병렬 | 240–280 t/s | 290 t/s | ≈300-320 t/s |
| 배치 처리(Batching), 1.7k 프롬프트, 4 병렬 | 0.79 req/s | 1.50 req/s | ≈1.8-2.0 req/s |
| 배치 처리(Batching), 1.7k 프롬프트, 8 병렬 | 0.82 req/s | 1.63 req/s | ≈2.0-2.2 req/s |
| P2P 단독: 디코드 | ~78 → 82 t/s (Prefill 변화 없음) | - | - |
이 게시물은 /u/chocofoxy가 제출한 내용만 AI를 사용하여 형식화했습니다. [링크] [댓글]