Hub documentation

Размещение моделей на Jobs

Hugging Face's logo
Join the Hugging Face community

and get access to the augmented documentation experience

to get started

Размещение моделей на Jobs

С помощью открытых портов Job может работать как временный сервер инференса: запустите vLLM на GPU-флейворе, укажите URL задачи в любом OpenAI-совместимом клиенте и отмените задачу, когда закончите. Вы платите за каждую минуту работы задачи, а эндпоинт исчезает вместе с ней.

Это хороший вариант, когда конечная точка является средством, а не продуктом: запуск оценки, сессия разметки данных, итерации над промптами с горячей моделью или демо, которому нужно жить только до вечера.

Если вам нужен более постоянный конечный пункт, который не исчезнет, вам подойдут Inference Endpoints, которые предоставляют управляемую инфраструктуру с автоматическим масштабированием, мониторингом и стабильными URL.

Запуск сервера vLLM

Образ vllm/vllm-openai содержит все необходимые компоненты. Одна команда запускает сервер, совместимый с OpenAI:

>>> hf jobs run --detach --expose 8000 --flavor a10g-small -s HF_TOKEN \
...   vllm/vllm-openai \
...   vllm serve LiquidAI/LFM2.5-8B-A1B --max-model-len 8192
✓ Job started
  id: 6a2b137a59bbdade52d4a58c
  url: https://huggingface.co/jobs/davanstrien/6a2b137a59bbdade52d4a58c
Hint: Exposed ports are reachable at (requires an HF token with read access to the job):
  https://6a2b137a59bbdade52d4a58c--8000.hf.jobs

-s HF_TOKEN передаёт ваш токен Hugging Face в задание в качестве секрета, что обеспечивает аутентифицированную загрузку модели — это необходимо для моделей с ограниченным доступом или частных моделей, а для остальных даёт более высокие лимиты запросов и ускоренную загрузку.

Jobs выполняет предоставленную вами команду напрямую — он не передаёт аргументы в entrypoint образа, как это делает docker run. Всегда указывайте полную команду (vllm serve ..., а не только --model ...).

Серверу требуется несколько минут, чтобы стать готовым (загрузка образа, скачивание модели, загрузка модели). Следите за ходом процесса с помощью hf jobs logs -f <job_id>; сервер готов, когда в логах появляется Application startup complete.

Подключение клиента

Открытые порты требуют HF-токен с доступом read к пространству имён задания, передаваемый как Bearer-токен. Для сервера, совместимого с OpenAI, он напрямую подставляется в качестве API-ключа клиента — базовый URL представляет собой URL открытого порта плюс /v1:

import os
from openai import OpenAI

client = OpenAI(
    base_url="https://6a2b137a59bbdade52d4a58c--8000.hf.jobs/v1",
    api_key=os.environ["HF_TOKEN"],  # any token with read access to the job's namespace
)

response = client.chat.completions.create(
    model="LiquidAI/LFM2.5-8B-A1B",
    messages=[{"role": "user", "content": "Write a haiku about ephemeral compute."}],
)
print(response.choices[0].message.content)

LFM2.5 — это модель рассуждений, поэтому в ответе перед финальным результатом содержится её рассуждение внутри тегов <think>.

Или с помощью curl:

>>> curl https://6a2b137a59bbdade52d4a58c--8000.hf.jobs/v1/chat/completions \
...   -H "Authorization: Bearer $HF_TOKEN" \
...   -H "Content-Type: application/json" \
...   -d '{"model": "LiquidAI/LFM2.5-8B-A1B", "messages": [{"role": "user", "content": "Hello!"}]}'

Так как токен передаётся в заголовке Authorization, эти URL-адреса работают из скриптов, блокнотов и агентов — везде, где вы используете API, совместимый с OpenAI. Их нельзя открыть напрямую в браузере. Чтобы запустить порт без HF-токена, используйте --expose-public — см. Expose Ports.

Запуск моделей GGUF с помощью llama.cpp

Такой же подход работает с любым сервером, поддерживающим HTTP. llama serve из llama.cpp загружает файлы GGUF прямо с Hub с помощью флага -hf и предоставляет тот же API, совместимый с OpenAI. Например, чтобы запустить Gemma 4 E4B с рекомендуемыми параметрами сэмплирования для Gemma:

>>> hf jobs run --detach --expose 8080 --flavor a10g-small -s HF_TOKEN \
...   ghcr.io/ggml-org/llama.cpp:server-cuda -- \
...   /app/llama serve -hf ggml-org/gemma-4-E4B-it-GGUF \
...   --host 0.0.0.0 --port 8080 -ngl 99 \
...   --temp 1.0 --top-p 0.95 --top-k 64

-- отделяет команду задания от собственных опций hf jobs run — здесь это необходимо, так как иначе флаги llama serve будут распознаны самим CLI.

Вы можете полностью пропустить загрузку модели, смонтировав репозиторий модели как том только для чтения и указав серверу на файл напрямую:

>>> hf jobs run --detach --expose 8080 --flavor a10g-small -s HF_TOKEN \
...   -v hf://ggml-org/gemma-4-E4B-it-GGUF:/model:ro \
...   ghcr.io/ggml-org/llama.cpp:server-cuda -- \
...   /app/llama serve --model /model/gemma-4-E4B-it-Q4_K_M.gguf \
...   --host 0.0.0.0 --port 8080 -ngl 99

Сервер запускается значительно быстрее, так как ничего не нужно скачивать — модель загружается потоковым образом из смонтированного репозитория по мере её инициализации.

Ваш сервер должен слушать на 0.0.0.0. llama serve по умолчанию привязывается к 127.0.0.1, до которого прокси задач не может достучаться — явно передайте --host 0.0.0.0.

То же самое относится к любому другому серверу, совместимому с OpenAI (SGLang, …): запустите сервер на открытом порту, прослушивайте 0.0.0.0 и подключайтесь, используя токен HF в качестве API-ключа.

Остановить сервер

Задача — и её тарификация — прекращаются при отмене или по достижении тайм-аута (по умолчанию 30 минут; для более длительных сессий явно задайте --timeout):

>>> hf jobs cancel <job_id>

Открытые порты требуют huggingface_hub >= 1.19.0 и тарифицируются сверх стоимости оборудования задания — см. Тарифы на задания.

Update on GitHub