Run a vLLM Server on HF Jobs in One Command
Quick Summary
Hugging Face Jobs에서 vLLM OpenAI 호환 서버를 한 줄 명령으로 띄우고, 토큰 인증으로 호출하며, 필요에 따라 대형 모델·Gradio UI·SSH 디버깅·코딩 에이전트 백엔드까지 확장하는 방법을 설명한다.
🖼️ 인포그래픽
🖼️ 4컷 인포그래픽
💡 한 줄 요약
Hugging Face Jobs에서 vLLM OpenAI 호환 서버를 한 줄 명령으로 띄우고, 토큰 인증으로 호출하며, 필요에 따라 대형 모델·Gradio UI·SSH 디버깅·코딩 에이전트 백엔드까지 확장하는 방법을 설명한다.
📌 핵심 요약
- 글은 Hugging Face Jobs를 사용하면 서버 프로비저닝이나 Kubernetes 없이 vLLM 기반의 비공개 OpenAI 호환 LLM 엔드포인트를 빠르게 만들 수 있다고 소개한다.
- 기본 흐름은 결제 수단과 huggingface_hub 1.20.0 이상, 로컬 로그인 상태를 준비한 뒤, vllm/vllm-openai 이미지를 hf jobs run으로 실행하고 GPU flavor와 노출 포트를 지정하는 것이다.
- 실행된 엔드포인트는 HF Jobs 프록시 URL로 접근하며, 모든 요청에는 해당 job namespace에 읽기 권한이 있는 Hugging Face 토큰을 bearer token으로 포함해야 한다.
- 서버는 curl이나 OpenAI Python client로 호출할 수 있고, /v1/models로 간단한 상태 확인을 할 수 있으며, 사용 후에는 hf jobs cancel로 명시적으로 종료해 비용을 줄이는 것이 권장된다.
- 이후 글은 더 큰 모델을 위한 tensor parallel 설정, Gradio 채팅 UI, --ssh를 통한 컨테이너 접속, Pi 코딩 에이전트 백엔드 구성, 그리고 HF Jobs와 Inference Endpoints의 선택 기준을 차례로 설명한다.
🧩 주요 포인트
- 글은 Hugging Face Jobs를 사용하면 서버 프로비저닝이나 Kubernetes 없이 vLLM 기반의 비공개 OpenAI 호환 LLM 엔드포인트를 빠르게 만들 수 있다고 소개한다.
- 기본 흐름은 결제 수단과 huggingface_hub 1.20.0 이상, 로컬 로그인 상태를 준비한 뒤, vllm/vllm-openai 이미지를 hf jobs run으로 실행하고 GPU flavor와 노출 포트를 지정하는 것이다.
- 실행된 엔드포인트는 HF Jobs 프록시 URL로 접근하며, 모든 요청에는 해당 job namespace에 읽기 권한이 있는 Hugging Face 토큰을 bearer token으로 포함해야 한다.
- 서버는 curl이나 OpenAI Python client로 호출할 수 있고, /v1/models로 간단한 상태 확인을 할 수 있으며, 사용 후에는 hf jobs cancel로 명시적으로 종료해 비용을 줄이는 것이 권장된다.
- 이후 글은 더 큰 모델을 위한 tensor parallel 설정, Gradio 채팅 UI, --ssh를 통한 컨테이너 접속, Pi 코딩 에이전트 백엔드 구성, 그리고 HF Jobs와 Inference Endpoints의 선택 기준을 차례로 설명한다.
🧠 상세 정리
1. 한 줄 명령으로 만드는 비공개 OpenAI 호환 엔드포인트
글의 출발점은 Hugging Face 인프라 위에서 vLLM 서버를 매우 빠르게 띄울 수 있다는 점이다. 사용자는 별도의 서버를 마련하거나 Kubernetes를 구성하지 않고도, 한 줄 명령으로 비공개 OpenAI 호환 LLM 엔드포인트를 만들 수 있다. 서버가 올라가면 노트북, 로컬 노트북 환경, 다른 실행 환경 어디서든 같은 API 형식으로 질의할 수 있다. 글은 이 방식이 테스트, 평가, 배치 생성처럼 빠르게 모델을 세워 써야 하는 작업에 특히 적합하다고 설명한다. 다만 장기 운영용 관리형 서비스가 필요하면 후반부에서 설명하는 Inference Endpoints를 고려하라고 전제를 둔다.
2. 사전 준비와 기본 실행 조건
실행 전 필요한 조건은 비교적 단순하다. 먼저 Jobs가 하드웨어 사용량 기준으로 과금되므로 결제 수단이나 양수의 선불 크레딧 잔액이 필요하다. 또한 huggingface_hub 버전은 1.20.0 이상이어야 하며, 글은 pip install -U "huggingface_hub>=1.20.0" 명령으로 업데이트하는 예를 제시한다. 로컬에서는 hf auth login으로 Hugging Face에 로그인되어 있어야 한다. 이 준비가 끝나면 사용자는 별도의 배포 시스템을 구성하지 않고 바로 Jobs 명령으로 컨테이너를 실행할 수 있다.
3. hf jobs run으로 vLLM 서버 실행
핵심 명령은 hf jobs run을 HF 인프라용 docker run처럼 사용하는 것이다. 예시는 공식 vllm/vllm-openai 이미지를 사용하고, --flavor a10g-large로 GPU 하드웨어를 요청하며, --expose 8000으로 vLLM 서버 포트를 외부에서 접근 가능하게 연다. 컨테이너 내부에서는 vllm serve Qwen/Qwen3-4B --host 0.0.0.0 --port 8000을 실행해 Qwen 모델을 서빙한다. 명령에는 timeout 2h도 포함되어 있어 일정 시간이 지나면 자동 중지되는 안전장치가 붙는다. 실행 결과에는 job ID와 Hugging Face Jobs 페이지 URL, 그리고 실제 API 접근에 사용할 <job_id>--8000.hf.jobs 형태의 노출 URL이 출력된다.
4. 토큰 인증으로 어디서든 API 호출
서버가 가중치를 내려받고 부팅을 마치면, 로그에 Application startup complete가 표시되고 API 호출이 가능해진다. vLLM은 OpenAI API 형식을 지원하므로 curl로 /v1/chat/completions에 요청하거나, Python의 OpenAI client에서 base_url을 Jobs 프록시 URL로 지정해 사용할 수 있다. 모든 요청에는 Hugging Face 토큰을 Authorization: Bearer 형식으로 넣어야 하며, 예시는 hf auth token 또는 huggingface_hub의 get_token()을 사용한다. 간단한 헬스 체크로는 /v1/models 엔드포인트를 호출해 모델 목록이 보이는지 확인한다. 응답은 OpenAI 스타일 JSON이며, 실제 답변은 choices[0].message.content에서 확인하는 흐름으로 설명된다.
5. 접근 제어, 비용, 종료 관리
글은 노출 URL이 공개 엔드포인트처럼 보이더라도 실제로는 gated endpoint라고 강조한다. 일반 브라우저 방문은 거부되며, job namespace에 읽기 권한이 있는 HF 토큰을 가진 요청만 통과한다. 따라서 Jobs 프록시는 기본적인 API 게이트 역할을 하지만, URL을 공개 서비스처럼 공유하거나 토큰을 신뢰할 수 없는 곳에 붙여 넣어서는 안 된다고 설명한다. 사용이 끝난 서버는 hf jobs cancel <job_id>로 명시적으로 종료해야 하며, timeout은 안전망일 뿐 직접 취소하는 편이 더 저렴하다. 예시 하드웨어인 a10g-large는 시간당 1.50달러로 제시되고, 전체 가격과 선택 가능한 하드웨어는 hf jobs hardware로 확인하라고 안내한다.
6. 더 큰 모델을 위한 GPU와 vLLM 설정
같은 패턴은 더 큰 모델에도 적용된다. 글은 Qwen3.5-122B-A10B 같은 122B 규모의 mixture-of-experts 모델을 2개의 H200 GPU에서 실행하는 예시를 보여준다. 이때 --flavor h200x2를 선택하고, vLLM에는 --tensor-parallel-size 2를 지정해 모델을 여러 GPU에 나누어 올린다. tensor parallel 크기는 h200x2면 2, h200x8이면 8처럼 flavor의 GPU 수와 맞추는 것이 원칙이라고 설명한다. 대형 모델은 다운로드와 로딩 시간이 더 걸리므로 timeout을 더 길게 잡아야 하며, H200 flavor가 큰 모델에서는 보통 좋은 가치라고 언급한다. 또한 Qwen3.5-122B의 256K 기본 컨텍스트가 메모리에 부담을 주기 때문에 --max-model-len 32768과 --max-num-seqs 256으로 제한하는 예를 제시한다.
7. Gradio UI와 SSH 디버깅으로 사용성 확장
curl이나 Python 호출 대신 채팅창을 원한다면 Gradio를 붙일 수 있다. 글은 vLLM 실행 명령에 --reasoning-parser deepseek_r1을 추가하면 Qwen3의 thinking을 별도 필드로 받을 수 있어, Gradio UI에서 reasoning을 접이식 패널로 보여주고 답변을 아래에 표시할 수 있다고 설명한다. 로컬에서 제시된 Python 코드를 실행하면 http://127.0.0.1:7860에서 채팅 UI를 열 수 있다. 디버깅이 필요할 때는 Jobs 실행 시 --ssh를 붙이고 Hugging Face 설정에 공개키를 등록한 뒤 hf jobs ssh <job_id>로 컨테이너에 접속한다. 내부에서는 nvidia-smi를 실행하거나 프로세스를 살피고 모델 동작을 직접 확인할 수 있어, 외부 로그만 보는 것보다 시작 실패나 GPU 메모리 문제를 조사하기 쉽다.
8. 코딩 에이전트 백엔드와 HF Jobs 선택 기준
글은 마지막 확장 사례로 Pi라는 provider-agnostic 터미널 코딩 에이전트 harness를 소개하며, 방금 띄운 vLLM 엔드포인트를 자체 호스팅 모델 백엔드로 사용할 수 있다고 설명한다. 에이전트는 tool call을 사용하므로 vLLM 서버를 --enable-auto-tool-choice와 모델 계열에 맞는 --tool-call-parser hermes 옵션으로 다시 실행해야 한다. 이후 ~/.pi/agent/models.json에 hf-jobs provider를 추가하고 baseUrl, apiKey 명령, 모델 ID를 설정하면 pi 명령으로 터미널 에이전트를 실행할 수 있다. 글은 HF Jobs가 이미지, vLLM 플래그, 하드웨어를 직접 고르고 실행한 만큼만 비용을 내는 실험·일회성 평가·배치 생성에 적합하다고 정리한다. 반대로 오래 살아 있는 서비스, 더 세밀한 접근 제어, 공개·보호·비공개 엔드포인트 설정, scale-to-zero가 필요하면 Inference Endpoints가 더 알맞다고 구분한다.
🧾 핵심 주장 / 시사점
- HF Jobs의 장점은 “컨테이너를 직접 실행한다”는 유연성과 “Hugging Face 인프라 위에서 바로 접근 가능한 URL을 얻는다”는 편의성을 동시에 제공한다는 데 있다.
- vLLM이 OpenAI 호환 API를 제공하기 때문에 curl, Python OpenAI client, Gradio, 코딩 에이전트처럼 서로 다른 클라이언트가 같은 엔드포인트를 재사용할 수 있다.
- 실험용 Jobs와 운영용 Inference Endpoints의 차이는 단순 성능이 아니라 접근 제어, 과금 방식, 지속 운영 편의성, scale-to-zero 같은 운영 요구사항에서 갈린다.
✅ 액션 아이템
- 결제 수단 등록과 huggingface_hub 1.20.0 이상, 로컬 로그인 상태를 점검한 뒤 GPU flavor와 노출 포트를 지정해 hf jobs run vllm/vllm-openai 실행 절차를 고정한다.
- 실행 엔드포인트는 HF Jobs 프록시 URL로 통일하고, 해당 namespace의 읽기 권한 토큰을 bearer token으로 모든 요청 헤더에 일관 반영해 인증 규칙을 정한다.
- curl 또는 OpenAI Python client로 /v1/models 상태를 확인한 뒤, 사용 종료 시 hf jobs cancel을 즉시 수행해 비용 노출을 최소화한다.
❓ 열린 질문
- HF Jobs 프록시 URL 접근 시 job namespace의 읽기 토큰만 적용했을 때 권한 범위가 실제 운영 요구를 충분히 충족하는지 어떻게 판단할 것인가?
- 큰 모델 전환 시 tensor parallel 값은 어느 수준에서 조정해 GPU flavor별 성능·안정성·비용 균형을 판단할 것인가?
- Gradio UI, --ssh 디버깅, Pi 코딩 에이전트 백엔드 조합을 고려할 때 HF Jobs와 Inference Endpoints 중 최적 선택은 어떤 기준으로 정할 것인가?