Hub documentation
Servir des modèles sur des Jobs
Servir des modèles sur des Jobs
Avec des ports exposés, un Job peut servir de serveur d’inférence temporaire : démarrez vLLM sur une saveur GPU, pointez n’importe quel client compatible OpenAI vers l’URL du job, puis annulez le job une fois terminé. Vous payez à la minute pendant l’exécution du job, et le point de terminaison disparaît avec lui.
C'est une bonne option lorsque le point de terminaison est un moyen plutôt que le produit final : une exécution d'évaluation, une session d'étiquetage de données, l'itération sur des prompts face à un modèle chaud, ou une démonstration qui n'a besoin de vivre que l'après-midi.
Si vous souhaitez un point de terminaison plus permanent qui ne disparaîtra pas, vous voulez Inference Endpoints, qui fournit une infrastructure gérée avec mise à l’échelle automatique, surveillance et URL stables.
Démarrer un serveur vLLM
L’image vllm/vllm-openai contient tout le nécessaire préinstallé. Une seule commande démarre un serveur compatible 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 transmet votre jeton Hugging Face au job en tant que secret, ce qui authentifie le téléchargement du modèle — requis pour les modèles à accès restreint ou privés, et vous offre des limites de débit plus élevées et des téléchargements plus rapides pour tout le reste.
Jobs exécute directement la commande que vous fournissez — il ne transmet pas d’arguments à l’entrypoint de l’image comme le ferait
docker run. Indiquez toujours la commande complète (vllm serve ..., et non simplement--model ...).
Le serveur met quelques minutes à être prêt (téléchargement de l’image, téléchargement du modèle, chargement du modèle). Suivez la progression avec hf jobs logs -f <job_id> ; le serveur est prêt lorsque les journaux affichent Application startup complete.
Connecter un client
Les ports exposés nécessitent un jeton HF avec un accès read à l’espace de noms du job, transmis en tant que jeton Bearer. Pour un serveur compatible OpenAI, cela s’intègre directement dans la clé API du client — l’URL de base est l’URL du port exposé suivie de /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 est un modèle de raisonnement, la réponse inclut donc son raisonnement dans les balises <think> avant la réponse finale.
Avec 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!"}]}'Comme le jeton est transmis dans l’en-tête Authorization, ces URL fonctionnent depuis des scripts, des notebooks et des agents — partout où vous utiliseriez une API compatible OpenAI. Elles ne peuvent pas être ouvertes directement dans un navigateur. Pour exposer un port sans jeton HF, utilisez --expose-public — voir Exposer des ports.
Servir des modèles GGUF avec llama.cpp
Le même schéma fonctionne avec n’importe quel serveur qui communique en HTTP. llama serve de llama.cpp récupère directement les fichiers GGUF depuis le Hub grâce à l’option -hf et expose la même API compatible OpenAI. Par exemple, pour servir Gemma 4 E4B avec les paramètres d’échantillonnage recommandés par 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 64Le -- sépare la commande du job des options propres à hf jobs run — nécessaire ici car les drapeaux de llama serve seraient sinon interprétés par le CLI lui-même.
Vous pouvez éviter le téléchargement du modèle en montant le dépôt du modèle comme volume en lecture seule et en pointant le serveur directement vers le fichier :
>>> 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 99Le serveur démarre beaucoup plus rapidement, car il n'y a rien à télécharger — le modèle est diffusé depuis le dépôt monté au fur et à mesure de son chargement.
Votre serveur doit écouter sur
0.0.0.0.llama servese lie par défaut à127.0.0.1, ce que le proxy des jobs ne peut pas atteindre — passez explicitement--host 0.0.0.0.
La même logique s’applique à tout autre serveur compatible OpenAI (SGLang, …) : démarrez le serveur sur un port exposé, écoutez sur 0.0.0.0 et connectez-vous en utilisant votre jeton HF comme clé API.
Arrêter le serveur
Le travail — et sa facturation — s’arrête lorsque vous l’annulez ou lorsque son délai d’attente est atteint (30 minutes par défaut ; définissez --timeout explicitement pour des sessions plus longues) :
>>> hf jobs cancel <job_id>Update on GitHubLes ports exposés nécessitent
huggingface_hub>= 1.19.0 et sont facturés en plus du prix du matériel du job — voir Tarifs des jobs.