실행 프로그램과 확장
GPU를 두 개 쓰면 로컬 LLM도 두 배 빨라질까요?
두 번째 GPU를 알아보기 전에, 큰 모델이 필요한지 응답이 빨라야 하는지 정하세요.
한 장에 원하는 모델이 올라가지 않거나 답변이 오래 걸려 두 번째 GPU1를 고민한다고 해 보겠습니다. 먼저 목표를 정해야 합니다. 더 큰 모델을 실행하려는지, 한 번의 답변을 더 빨리 받으려는지, 여러 요청을 동시에 처리하려는지에 따라 필요한 구성이 다릅니다. 두 장의 VRAM2이 자동으로 합쳐지는 것은 아니며, 실제 결과는 엔진이 지원하는 모델 배치 방식과 카드 사이 연결에 달려 있습니다.
큰 모델, 빠른 응답, 더 많은 요청 중 무엇이 필요한가
한 장의 GPU에 모델을 올릴 수 없거나 답변을 기다리는 시간이 길어 두 번째 카드를 알아보는 상황을 생각해 보겠습니다. 두 장이면 모델도 두 배 빨라질 것 같지만, 먼저 무엇을 해결하려는지 나눠 봐야 합니다. 모델이 한 장에 들어가지 않는 문제와 이미 실행되는 모델의 응답 속도, 여러 사람의 요청을 처리하는 문제는 서로 다릅니다. 두 번째 GPU가 더 큰 모델을 담게 해 줄 수는 있지만, 한 사람의 답변이 두 배 빨라진다고 보장하지는 않습니다.
문서 요약 한 번의 시간을 줄이려는지, 더 큰 모델을 올리려는지, 여러 요청을 동시에 처리하려는지에 따라 비교할 값이 다릅니다. 한 답변에서는 첫 토큰3이 나오는 시간과 이후 토큰 속도를 따로 보고, 여러 사용자 요청은 처리량4으로 봅니다. 이어지는 비교는 이 세 목표 중 어느 것이 현재 작업의 병목인지 찾는 데 초점을 둡니다.

두 장을 꽂아도 VRAM은 자동으로 하나가 되지 않습니다
두 GPU가 OS나 nvidia-smi에 보이는지 먼저 확인할 수는 있지만, 이것만으로 문서 요약 앱이 둘 다 쓰는 것은 아닙니다. 각 카드의 VRAM은 따로 있으며, 실행 엔진이 모델을 나눠 배치하고 카드 사이 데이터를 주고받도록 설정해야 합니다. 앱이 한 장만 선택했거나 멀티 GPU 백엔드가 없는 빌드라면 두 번째 카드는 계산에 참여하지 않습니다.
두 카드의 VRAM을 더한 값이 곧 모델에 쓸 수 있는 용량은 아닙니다. 가중치 외에 문맥을 보관하는 KV 캐시5와 임시 버퍼, 프레임워크와 화면 출력 공간도 필요합니다. 카드 용량이 다르면 어느 쪽에 층과 버퍼가 얼마나 배치되는지도 달라집니다. 문서 요약에 쓸 모델 형식·정밀도와 문맥 길이를 정한 뒤, 모델 로딩 로그에서 GPU별 메모리 배치와 CPU6에 남은 부분을 확인하세요.
목표에 맞춰 모델을 나누거나 복제합니다
llama.cpp 문서에는 none, layer, row, tensor 방식이 있습니다. none은 한 장만 사용합니다. 기본 layer 방식은 모델 층과 KV 캐시를 카드별로 나눕니다. 문서 요약 한 건을 처리할 때 첫 GPU가 맡은 층을 계산한 뒤 중간 결과를 다음 GPU로 보내고, 다음 카드가 이어서 계산합니다. 큰 모델을 두 장에 나눠 올리는 데 쓸 수 있지만, 한 토큰을 만들 때 두 카드가 같은 층을 동시에 계산하는 방식은 아닙니다. 따라서 이 방식만으로 한 답변이 카드 수에 맞춰 빨라지지는 않습니다.
tensor 방식은 같은 계산 단계를 카드 사이에 나눠 동시에 처리합니다. 대신 중간 결과를 카드끼리 자주 주고받아야 할 수 있습니다. llama.cpp 문서에서 row는 폐기 예정으로 표시되어 새 구성에는 권하지 않고, tensor는 실험적 기능이며 지원 아키텍처와 조건이 제한됩니다. vLLM도 tensor·pipeline parallelism7을 제공하지만 GPU, 모델, 배치 조건을 확인해야 합니다. 어느 방식이 문서 요약을 빠르게 할지는 실제 요청으로 비교하고, 한 엔진의 옵션을 다른 엔진에 그대로 옮기지 마세요.
서버에 모델 복제본을 하나씩 띄우면 각 GPU가 서로 다른 문서 요약 요청을 처리할 수 있습니다. 여러 사용자의 전체 처리량을 높이는 방법이지만, 한 요청을 나누는 방식은 아니므로 개인 대화 한 건의 토큰 생성 속도는 자동으로 빨라지지 않습니다. 서버가 요청을 복제본마다 배분해야 하고, 모델이 각 카드의 메모리에 따로 들어가야 합니다.

카드 사이 연결도 응답 시간에 영향을 줍니다
두 카드가 중간 결과를 주고받는 길도 확인해야 합니다. 데스크톱의 기본 연결은 PCI Express지만, 실제 대역폭은 슬롯 배선, CPU·칩셋 구성, 드라이버와 GPU 간 P2P 지원에 따라 달라질 수 있습니다. NVLink는 일부 지원 GPU와 시스템에 있는 별도 고속 연결이고, NVSwitch는 여러 GPU 연결을 확장하는 스위치입니다. 소비자용 카드 모두에 이 기능이 있는 것은 아니며, 카드를 두 장 꽂는 것만으로 NVLink가 생기지 않습니다.
NCCL8은 여러 GPU가 결과를 모으고 맞추도록 돕는 집단 통신 라이브러리입니다. 실제 케이블이나 GPU 연결 자체는 아니며, 시스템은 가능한 직접 통신 경로 또는 다른 전송 방식을 씁니다. tensor 방식처럼 부분 결과를 자주 모으면 계산보다 통신을 기다리는 시간이 커질 수 있습니다. 데이터센터 학습의 수치를 집 PC의 추론 성능으로 옮길 수는 없습니다. 실제 차이는 모델, 분할 방식, 배치와 카드 연결에 따라 달라집니다.

두 번째 GPU를 사기 전에 현재 장비로 확인합니다
먼저 한 장에서 문서 요약에 쓸 모델을 실행하고, 앱 로그에서 GPU별 모델 배치와 CPU에 남은 층, KV 캐시 메모리를 확인합니다. 원하는 문맥 길이와 요청 수를 감당할 여유가 있는지도 봅니다. 두 장을 검토할 때는 사용 중인 엔진이 해당 모델과 분할 방식을 지원하는지, 필요한 빌드 옵션이 있는지 공식 문서에서 확인하세요. 마지막으로 케이스·전원·메인보드가 두 카드를 수용하는지와 PCIe 링크, P2P 지원을 확인합니다. 슬롯 모양만으로 대역폭을 알 수는 없습니다.
목표가 더 큰 모델을 올리는 것이라면, 엔진이 지원하는 layer 방식부터 확인합니다. 한 번의 답변을 줄이려면 해당 모델에서 지원되는 tensor나 pipeline9 방식이 실제 요청 시간을 줄이는지 비교해야 합니다. 여러 사용자의 요청이 밀린다면 각 카드에 모델 복제본을 두는 방법을 검토합니다. 비교할 때는 같은 문서와 프롬프트, 생성 토큰 수, 문맥 길이, 정밀도, 엔진 버전과 동시 요청 수를 유지합니다.
같은 문서 요약을 한 장 구성과 두 장 구성에서 실행해 응답 시간과 GPU별 메모리, 엔진의 전송·대기 로그를 비교합니다. 모델이 한 장에 안정적으로 들어가고 요청이 한두 건이라면 두 번째 GPU는 필요하지 않을 수 있습니다. 모델이 메모리에 들어가지 않는다면 지원되는 layer 분할을, 한 답변이 느리다면 지원되는 병렬 방식을, 여러 요청이 밀린다면 복제본 구성을 시험합니다. 두 번째 카드는 비용·전력·발열도 늘리므로, 로그에서 목표가 해결되지 않았다면 구매 전에 엔진의 다른 지원 방식과 하드웨어 연결 조건을 다시 확인하세요.
용어 각주
GPU — 많은 계산을 병렬로 처리하는 프로세서입니다. AI 모델 실행에서는 모델 계산을 맡습니다.
본문으로 돌아가기VRAM — 그래픽카드의 GPU가 사용하는 메모리입니다. 모델 가중치와 계산 중간값을 저장하며 시스템 RAM과 구분됩니다.
본문으로 돌아가기토큰 — 모델이 입력이나 출력을 나누어 처리하는 단위입니다. 토큰 하나가 글자 하나나 일정한 시간 길이에 해당하지는 않습니다.
본문으로 돌아가기처리량 — 일정 시간 동안 처리하거나 생성한 작업량입니다. 토큰/초, 요청/초처럼 단위를 함께 확인해야 비교할 수 있습니다.
본문으로 돌아가기KV 캐시 — 어텐션에서 이전 토큰의 키·값을 저장해 다음 토큰 생성 때 재사용하는 메모리입니다. 문맥 길이와 배치 크기에 따라 용량이 달라집니다.
본문으로 돌아가기CPU — 컴퓨터에서 일반적인 프로그램 명령을 실행하는 중앙 처리 장치입니다. AI 작업에서는 GPU 등 다른 프로세서와 역할을 나누기도 합니다.
본문으로 돌아가기파이프라인 병렬 — 모델의 층들을 여러 장치의 단계로 나누어 실행하는 방식입니다. 한 요청의 다음 단계가 앞 단계 결과를 기다릴 수 있어, 장치를 늘려도 한 응답이 같은 비율로 빨라지지는 않습니다.
본문으로 돌아가기NCCL — 여러 NVIDIA GPU 사이에서 데이터를 주고받거나 합산하는 집합 통신 라이브러리입니다. GPU를 잇는 케이블이나 NVLink 자체는 아닙니다.
본문으로 돌아가기파이프라인 — 입력부터 결과까지 이어지는 처리 단계의 묶음입니다. 각 단계에서 서로 다른 모델이나 도구를 사용할 수 있습니다.
본문으로 돌아가기