vLLM
vLLM est un moteur open-source d'inférence et de service pour LLM. Il constitue une plateforme particulièrement adaptée pour déployer les modèles Mistral en local.
Prérequis
- Les exigences matérielles pour vLLM sont listées sur sa page de documentation d'installation.
- Par défaut, vLLM récupère les poids du modèle depuis Hugging Face. Pour accéder aux dépôts des modèles Mistral, vous devez être authentifié sur Hugging Face, donc un jeton d'accès
HF_TOKENavec la permissionREADsera nécessaire. Vous devez également vous assurer d'avoir accepté les conditions d'accès sur chaque page de fiche modèle. - Si vous disposez déjà des artefacts du modèle sur votre infrastructure, vous pouvez les utiliser directement en pointant vLLM vers leur chemin local au lieu d'un ID de modèle Hugging Face. Dans ce scénario, vous pourrez sauter toutes les étapes de configuration liées à Hugging Face.
Démarrage
Les sections suivantes vous guideront dans le processus de déploiement et d'interrogation des modèles Mistral sur vLLM.
Installation de vLLM
- Créez un environnement virtuel Python et installez le package
vllm(version>=0.6.1.post1pour garantir une compatibilité maximale avec tous les modèles Mistral). - Authentifiez-vous sur le Hub HuggingFace en utilisant votre jeton d'accès
$HF_TOKEN:huggingface-cli login --token $HF_TOKEN
Inférence en mode hors ligne
Lorsque vous utilisez vLLM en mode hors ligne, le modèle est chargé et utilisé pour des charges d'inférence par lots ponctuelles.
from vllm import LLM
from vllm.sampling_params import SamplingParams
model_name = "mistralai/Mistral-NeMo-Instruct-2407"
sampling_params = SamplingParams(max_tokens=8192)
llm = LLM(
model=model_name,
tokenizer_mode="mistral",
load_format="mistral",
config_format="mistral",
)
messages = [
{
"role": "user",
"content": "Who is the best French painter? Answer with detailed explanations.",
}
]
res = llm.chat(messages=messages, sampling_params=sampling_params)
print(res[0].outputs[0].text)Inférence en mode serveur
En mode serveur, vLLM démarre un serveur HTTP qui attend en continu que des clients se connectent et envoient des requêtes de manière concurrente. Le serveur expose une API REST qui implémente le protocole OpenAI, vous permettant de réutiliser directement le code existant s'appuyant sur l'API OpenAI.
Démarrez le serveur d'inférence pour déployer votre modèle, par exemple pour Mistral NeMo :
vllm serve mistralai/Mistral-Nemo-Instruct-2407 \
--tokenizer_mode mistral \
--config_format mistral \
--load_format mistralVous pouvez maintenant exécuter des requêtes d'inférence avec une entrée texte :
curl --location 'http://localhost:8000/v1/chat/completions' \
--header 'Content-Type: application/json' \
--header 'Authorization: Bearer token' \
--data '{
"model": "mistralai/Mistral-Nemo-Instruct-2407",
"messages": [
{
"role": "user",
"content": "Who is the best French painter? Answer in one short sentence."
}
]
}'Déploiement avec Docker
Si vous souhaitez déployer vLLM comme serveur d'inférence conteneurisé, vous pouvez utiliser l'image Docker officielle du projet (voir plus de détails dans la documentation Docker de vLLM).
- Définissez la variable d'environnement du jeton d'accès HuggingFace dans votre shell :
export HF_TOKEN=your-access-token - Exécutez la commande Docker pour démarrer le conteneur :
docker run --runtime nvidia --gpus all \ -v ~/.cache/huggingface:/root/.cache/huggingface \ --env "HUGGING_FACE_HUB_TOKEN=${HF_TOKEN}" \ -p 8000:8000 \ --ipc=host \ vllm/vllm-openai:latest \ --model mistralai/Mistral-NeMo-Instruct-2407 \ --tokenizer_mode mistral \ --load_format mistral \ --config_format mistral
Une fois le conteneur démarré et en cours d'exécution, vous pourrez exécuter l'inférence sur votre modèle en utilisant le même code que dans un déploiement autonome.