모든 시스템 정상 작동 14개 리전 · 1.2 TBPS 방어 충전 수단 BTC · XMR · LTC · ETH · USDT +3 코인

GPU 및 AI

프라이빗 GPU 서버에서 LLM을 셀프 호스팅하는 방법

9분 읽기

프라이빗 GPU 서버에서 LLM을 셀프 호스팅하는 방법

대여한 하드웨어에서 언어 모델을 직접 돌리는 것은, 프롬프트가 기록되거나 보관되거나 나 아닌 누군가에게 읽히지 않는다고 확신할 수 있는 유일한 방법이다. 아무리 프라이버시 정책이 훌륭한 호스팅형 API라 해도 보내는 토큰 하나하나를 전부 받아 보게 되며, 그 정책은 당신의 동의 없이도 언제든 바뀔 수 있다. 셀프 호스팅은 이 경계선 자체를 옮겨 놓는다: 가중치는 당신이 통제하는 디스크에 놓이고, 추론은 시간 단위로 대여한 VRAM 안에서 이루어지며, 어딘가로 직접 보내지 않는 한 아무것도 그 머신을 벗어나지 않는다. 소프트웨어 쪽은 이제 정말로 쉬워졌다. 여전히 사람들의 발목을 잡는 것은 카드를 주문하기 전에 크기를 제대로 가늠하는 일과, 열려 있는 추론 포트는 결국 열려 있는 추론 포트일 뿐이라는 사실을 잊지 않는 것이다.

셀프 호스팅이 실제로 가져다주는 것 — 그리고 가져다주지 않는 것

이 이점을 정확히 짚고 넘어가야 한다. '프라이빗 AI'라는 말은 너무 느슨하게 팔리고 있기 때문이다. 자신의 GPU에서 돌리는 모델은 어떤 것은 완전히 바꿔 놓지만, 어떤 것은 전혀 바꾸지 못한다.

  • 프롬프트와 출력 모두 그 머신 안에 머문다 — 제공업체 쪽의 로깅도, 보관 기간도, 당신이 물어본 내용으로 만들어지는 데이터셋도 없다.
  • 계정도, 키별 요청 제한도, 당신과 가중치 사이를 가로막는 정책 계층도 없다. 배포한 모델이 곧 당신이 받는 모델 그 자체다.
  • 대량으로 쓸수록 비용을 예측하기 쉬워진다. 하루 수백만 토큰을 넘어서면 대여한 카드가 토큰당 과금보다 저렴해지며, 제공업체가 가격표를 바꾼다고 해서 그 값이 따라 움직이지도 않는다.
  • 약한 모델을 강하게 만들어주지는 않는다. 자신의 하드웨어에 올린 오픈 웨이트 모델은 여전히 그 모델일 뿐이다 — 셀프 호스팅이 사는 것은 통제권이지, 최첨단 성능이 아니다.
  • 호스트로부터 무언가를 감춰주지도 않는다. 가동 중인 머신에 물리적으로 접근할 수 있는 사람은 원칙적으로 그 메모리를 읽을 수 있으며, 이는 모델의 문제가 아니라 호스트의 문제다.

VRAM이 전부다: 모델을 카드에 맞게 산정하기

처음 시도가 실패하는 경우는 거의 다 VRAM 계산 착오 때문이다. 가중치와 KV 캐시, 그리고 작업 여유 공간까지 모두 한 번에 카드 안에 들어가야 하며, 여기에는 우아한 성능 저하 같은 것이 없다 — 로딩 시작 몇 초 만에 메모리 부족 오류가 뜰 뿐이다. 어림잡는 기준은 이렇다: 16-bit 정밀도에서는 모델이 파라미터 10억 개당 대략 2 GB의 VRAM을 필요로 하며, 8-bit에서는 약 1 GB, 4-bit에서는 약 0.6 GB면 된다. 여기에 컨텍스트 길이와 동시 요청 수에 따라 커지는 KV 캐시를 더해야 하는데, 실제로 발목을 잡는 것은 테스트 단계가 아니라 바로 이 KV 캐시가 프로덕션에서 부풀어 오를 때다.

  • 7B~8B 모델: FP16에서 약 16 GB, 4-bit에서는 8 GB 아래로 여유롭게 들어간다. RTX A4000 16 GB 한 장에 넉넉히 들어맞는 체급이다.
  • 13B~14B 모델: FP16에서 약 28 GB, 4-bit에서는 약 9 GB. RTX 4090 24 GB라면 양자화된 상태로 돌리고도 컨텍스트 여유가 충분히 남는다.
  • 30B~34B 모델: FP16에서 약 68 GB, 4-bit에서는 20 GB 가까이 — RTX 5090 32 GB가 자연스러운 자리다.
  • 70B 모델: FP16에서 약 140 GB, 4-bit에서는 약 40 GB. 이는 곧 A100이나 H100 80 GB가 필요하다는 뜻이며, 완전한 정밀도로 돌리려면 카드가 한 장으로는 부족하다는 뜻이기도 하다.
  • 긴 컨텍스트는 가중치가 아니라 KV 캐시를 불려 놓는다. 대형 모델에서 128k 토큰짜리 창 하나만으로도 수십 기가바이트를 따로 요구할 수 있다 — 이는 주문한 뒤가 아니라 주문하기 전에 예산에 넣어 두어야 한다.
양자화는 앞으로 내릴 결정 중 가장 지렛대 효과가 큰 결정이다. FP16에서 제대로 된 4-bit 양자화로 옮기면 대부분의 작업에서 거의 느껴지지 않는 품질 저하만으로 VRAM을 대략 4분의 3이나 줄일 수 있다 — 'H100이 필요한' 모델을 '4090에서도 돌아가는' 모델로 바꿔 놓는 것이 바로 이것이다. 벤치마크 표를 그대로 믿기보다 자신의 프롬프트로 직접 측정하라.

GPU 고르기: A4000부터 H100까지, 그리고 시간 단위가 월 단위를 이기는 순간

GPU 서버 라인의 모든 플랜은 VRAM을 통째로 갖춘 물리적 카드 한 장 그 자체다 — MIG 파티셔닝도, 시간 분할도 없다 — 그래서 사양표에 적힌 숫자가 곧 실제로 채워 쓸 수 있는 숫자다. 카드는 언젠가 시도해볼지도 모르는 모델이 아니라, 지금 실제로 서빙할 모델에 맞춰 골라야 한다.

  • RTX A4000 16 GB, 월 $89 — 8 vCPU에 64 GB RAM. 양자화된 7B~13B 어시스턴트, 임베딩 서비스, 혹은 하루 종일 돌아가는 분류 파이프라인 정도면 충분하다.
  • RTX 4090 24 GB, 월 $189 — 16 vCPU, 128 GB, 2 TB NVMe. 4-bit로 돌리는 13B~34B 모델에서 토큰당 가성비가 가장 뛰어나며, 소규모 프로덕션 엔드포인트라면 흔히 선택하는 카드다.
  • RTX 5090 32 GB, 월 $279 — 24 vCPU에 192 GB. 이 추가된 8 GB가 34B 모델에 실질적인 컨텍스트까지 들어가느냐 마느냐를 가르는 경우가 많다.
  • A100 80 GB, 월 $690 — 32 vCPU, 256 GB, 4 TB NVMe. HBM2e 대역폭과 넉넉한 메모리 덕분에 긴 컨텍스트 창을 가진 70B를 4-bit로 돌리거나, 배치 규모가 큰 서빙에도 적합하다.
  • H100 80 GB, 월 $1190 — 48 vCPU, 384 GB, 8 TB NVMe, 그리고 10 Gbps 포트. FP8 지원과 HBM3 대역폭 덕분에 본격적인 처리량이나 학습이 목적이라면 사실상 이것이 유일하게 합리적인 선택이다.

과금은 같은 선불 잔액에서 시간 단위로도, 월 단위로도 이루어지며, 이는 사람들이 예상하는 것보다 훨씬 더 계산법을 바꿔 놓는다. H100에서 오후 이틀이면 끝나는 평가 작업이라면 실제로 돌린 시간만큼만 비용이 들지, 한 달 치를 낼 필요는 없다. 반대로 새벽 세 시에도 답해야 하는 채팅 엔드포인트라면 월 단위 박스가 어울린다. 한 머신에 여러 장의 카드가 필요하거나 대용량 로컬 스토리지 옆에 GPU를 두고 싶다면 전용 서버가 더 나은 형태이며, 암호화폐로 결제하는 일반적인 방법은 암호화폐로 GPU 서버 대여하기에서 다룬다.

단계별 안내: 암호화폐 충전부터 가동 중인 엔드포인트까지

  1. 01일회용 이메일로 계정 만들기이메일과 비밀번호만 있으면 된다. 이름도, 전화번호도, 신분증도 필요 없다 — 저희 쪽에는 당신이 돌리는 모델을 당신과 연결할 만한 정보가 전혀 남지 않는다.
  2. 02암호화폐로 잔액 충전하기Bitcoin, Monero를 비롯한 8종의 코인 중 무엇으로든 선불 잔액을 충전할 수 있다. 잔액은 만료되지도, 동결되지도 않는다.
  3. 03CUDA 이미지로 GPU 인스턴스 배포하기카드와 리전, 최신 드라이버와 PyTorch가 준비된 CUDA 이미지를 선택한다. 몇 분이면 박스가 준비된다.
  4. 04무엇을 내려받기 전에 카드부터 확인하기nvidia-smi 한 번이면 GPU와 드라이버 버전, 남은 VRAM을 확인할 수 있다. 10초짜리 점검 하나가 한 시간의 혼란을 막아준다.
  5. 05가중치를 로컬 NVMe로 내려받기네트워크 마운트가 아니라 인스턴스 자체 디스크로 모델을 내려받는다. 가중치는 수십 기가바이트에 이르며, 한 번이 아니라 여러 번 불러오게 된다.
  6. 06localhost에 바인딩한 채로 서버 시작하기vLLM이나 Ollama를 127.0.0.1에서 실행하고, 로컬에서 한 번 완성 응답을 확인한 다음에야 비로소 외부에서 어떻게 접근할지 결정한다.

vLLM, Ollama, llama.cpp: 서빙 스택 고르기

세 가지 스택으로 거의 모든 경우를 커버할 수 있으며, 어느 것이 옳은가는 기술적으로 무엇이 가장 인상적인가가 아니라 그 엔드포인트가 얼마나 많은 요청을 받게 될 것인가에 달려 있다.

  • Ollama — 아무것도 없는 상태에서 작동하는 엔드포인트까지 가장 짧은 길이다. 명령 하나로 양자화된 모델을 내려받아 OpenAI 호환 API 뒤에서 서빙한다. 사용자 한 명, 프로토타입, 혹은 개인용 어시스턴트에 이상적이다.
  • vLLM — 프로덕션을 위한 답이다. 연속 배칭(continuous batching)과 페이지드 어텐션(paged attention) 덕분에 카드 한 장으로도 단순 반복문 대비 몇 배의 처리량으로 다수의 동시 요청을 서빙할 수 있다. 이것이 바로 나 혼자 쓰는 엔드포인트와 애플리케이션이 쓰는 엔드포인트의 차이다.
  • llama.cpp — 실용주의자다. 4-bit 이하까지 내려가는 GGUF 양자화, 들어가지 않는 레이어를 위한 CPU 오프로드, 셋 중 가장 낮은 메모리 하한선을 갖췄다. 이것이 있기에 몸집에 비해 작은 카드에서도 몸집 큰 모델이 어떻게든 돌아간다.
  • TGI, SGLang, TensorRT-LLM은 특정한 상황에서는 이보다도 더 빠르다. 병목을 실제로 측정하고 난 뒤에 손을 뻗어야 할 도구들이지, 그 전에 먼저 집을 것은 아니다.

세 가지 모두 OpenAI 호환 chat-completions 경로를 제공하므로, 상용 API를 대상으로 짠 애플리케이션 코드는 대개 base URL 하나만 바꾸면 그대로 돌아간다. 이 호환성이야말로 셀프 호스팅이 하나의 프로젝트이기를 그만두고 단순한 설정 하나의 문제가 된 실질적인 이유다.

엔드포인트를 프라이빗하게 지키기: 추론 포트는 절대 노출하지 않는다

인증 절차가 없는 추론 서버는 오늘날의 열려 있는 데이터베이스나 다름없다. 스캐너는 몇 시간 안에 새 IP를 찾아내며, 노출된 엔드포인트는 누군가 다른 사람이 당신의 GPU 시간을 대신 써버리거나 — 아니면 당신의 애플리케이션이 그 경로로 보내는 모든 것을 읽고 있다는 뜻이다.

서버는 127.0.0.1에 바인딩하고, 절대 0.0.0.0에는 바인딩하지 마라. 직접 통제하는 WireGuard 터널이나 SSH 터널을 통해 접근하고, 애플리케이션이 접근해야 한다면 그 앞에 실제 토큰을 요구하는 리버스 프록시를 두어라. 11434 포트의 Ollama와 8000 포트의 vLLM은 둘 다 끊임없이 스캔당하며, 둘 다 기본값으로는 인증을 하지 않는다.

엔드포인트가 개인용 어시스턴트가 아니라 제품이라서 정말로 공개되어야 한다면, 리버스 프록시에서 TLS를 종료시키고, 주기적으로 교체하는 베어러 토큰을 요구하며, 키별로 속도를 제한하라. 그 프록시는 별도의 작은 VPS에 두고 GPU 박스는 오직 터널을 통해서만 닿을 수 있게 남겨 두는 편이 더 깔끔한 구성이다. 이는 KYC 없이 웹사이트를 올리는 것과 같은 논리다: 인터넷과 맞닿는 머신은 최대한 아무것도 들고 있지 않아야 한다.

파인튜닝: 대여한 카드로 보내는 오후 한나절이 월 청구서를 이기는 순간

파인튜닝이야말로 구독이 아니라 대여를 선택해야 하는 가장 강력한 근거다. 7B~13B 모델에 대한 LoRA나 QLoRA 학습 — 수천 개의 예시, 몇 번의 에폭 — 은 4090에서 몇 시간이면 끝나며, 정확히 돌린 시간만큼만 비용이 든다. 결과로 나오는 어댑터는 겨우 수백 메가바이트에 불과하므로, 체크포인트만 챙겨 두고 인스턴스는 삭제한 다음, 나중에 그 어댑터를 더 작은 카드에 올려 서빙할 수 있다. 70B 모델을 통째로 파인튜닝하는 것은 예산 규모 자체가 다르며 옵티마이저 상태를 담을 여유가 있는 A100이나 H100이 필요하지만, 그마저도 계약 단위가 아니라 여전히 며칠 단위로 잴 수 있는 일이다.

시간 단위 과금이 가능하게 해 주는 작업 흐름은 단순하다: 배포하고, 학습시키고, 어댑터를 박스 밖으로 복사해 낸 다음, 인스턴스를 삭제한다. 사용한 연산에 대해서만 비용을 치를 뿐, 그 사이에 놀고 있는 카드는 없다. 작업하는 동안에는 데이터셋을 인스턴스 NVMe에 두고, 끝나면 다시 꺼내 두어라 — 대여한 머신에 남겨 두는 것이 유일한 사본이 되는 일은 절대 없어야 한다.

직접 소유하지 않은 GPU의 솔직한 프라이버시 트레이드오프

셀프 호스팅은 가장 크고 가장 구체적인 유출 지점을 없애준다: 모든 프롬프트를 받아 일정 기간 보관하다가 그것을 어떻게 할지 스스로 결정해 버리는 제3자 말이다. 대여한 카드 위에서는 모델과 데이터 모두 오직 당신의 키에만 응답하는 머신 안에 머문다. 대여로도 없앨 수 없는 것은 호스트 그 자체다. 가동 중인 서버에 물리적으로 접근할 수 있는 사람은 원칙적으로 그 메모리를 읽을 수 있으며, 원격 머신의 전체 디스크 암호화는 도난당한 드라이브는 지켜주지만 가동 중인 드라이브는 지켜주지 못한다.

그러니 정작 중요한 질문은 '호스트가 볼 수 있는가'가 아니라 '호스트가 내가 누구인지 아는가'다. No-KYC 호스팅은 바로 그 질문에 답한다: 이메일과 비밀번호뿐, 본인 확인도 없고, 유출되거나 소환될 만한 기록도 남지 않는다. 암호화폐 잔액으로 결제하면 은행이라는 요소도 사라진다. 결제 쪽을 어디까지 신경 쓸지는 위협 모델의 문제다 — Bitcoin은 익명이 아니라 가명(pseudonymous)일 뿐이므로, 인증된 거래소까지 추적된 코인은 결국 어딘가로 이어지는 반면, Monero로 충전하면 프로토콜 수준에서 그 간극을 메울 수 있다.

조용히 GPU 시간을 낭비하게 만드는 실수들

  • 가중치만 보고 크기를 산정하고 KV 캐시를 잊어버리는 경우 — 모델은 멀쩡하게 로딩되었다가 첫 번째 긴 요청에서 죽어버린다.
  • 아무도 실제로 측정해 본 적 없는 품질 걱정 때문에, 4-bit로 돌리면 컨텍스트를 세 배로 쓸 수 있는 카드에서 굳이 FP16으로 서빙하는 경우.
  • 40기가바이트짜리 가중치를 네트워크 마운트에 내려받아 놓고는, 재시작할 때마다 왜 20분씩 걸리는지 의아해하는 경우.
  • '노트북에서 잠깐 테스트만 하려고' 서버를 0.0.0.0에 바인딩한 채로 방치하는 경우 — 공인 IP에서는 바로 그날 발견된다.
  • 작업이 애초부터 배치 작업이었을 뿐인데, 하루 스무 시간을 놀리는 카드에 매달 월 요금을 내는 경우.
  • 한 번에 요청 하나씩만 놓고 벤치마킹한 뒤 vLLM은 수고할 가치가 없다고 결론짓는 경우 — vLLM의 진짜 장점은 동시성 아래에서만 드러난다는 사실을 놓치는 것이다.

이 중 어느 것도 특이한 실패가 아니다. 모델보다 카드를 먼저 고를 때 벌어지는 일들일 뿐이다. 모델과 양자화 방식을 먼저 정하고, VRAM 계산을 정직하게 하고, 포트는 닫아 두면, 셀프 호스팅한 LLM은 그대로 켜 두어도 가장 손이 덜 가는 것 중 하나가 된다.

지금 시작해 볼까요?GPU 서버를 최저 $89/월부터 배포 — KYC 없음, 암호화폐로 결제. 시작하기