Déployer avec Cerebrium
Cerebrium est une plateforme d'infrastructure IA serverless qui facilite la création et le déploiement d'applications basées sur l'IA. Ils proposent des GPU serverless avec des temps de démarrage à froid faibles, plus de 12 variétés de puces GPU qui passent automatiquement à l'échelle, et vous ne payez que pour le calcul que vous utilisez.
Configurer Cerebrium
Tout d'abord, nous installons Cerebrium et nous connectons pour nous authentifier.
pip install cerebrium
cerebrium loginEnsuite, créons notre premier projet.
cerebrium init mistral-vllmConfigurer l'environnement et le matériel
Vous configurez votre environnement et votre matériel dans le fichier cerebrium.toml créé par la fonction init ci-dessus. Ici, nous utilisons un GPU Ampere A10, etc. Vous pouvez en savoir plus ici.
[cerebrium.deployment]
name = "mistral-vllm"
python_version = "3.11"
docker_base_image_url = "debian:bookworm-slim"
include = "[./*, main.py, cerebrium.toml]"
exclude = "[.*]"
[cerebrium.hardware]
cpu = 2
memory = 14.0
compute = "AMPERE_A10"
gpu_count = 1
provider = "aws"
region = "us-east-1"
[cerebrium.dependencies.pip]
sentencepiece = "latest"
torch = ">=2.0.0"
vllm = "latest"
transformers = ">=4.35.0"
accelerate = "latest"
xformers = "latest"Configurer l'inférence
Exécuter du code dans Cerebrium revient à écrire du Python normal sans syntaxe spéciale. Dans votre fichier main.py, spécifiez ce qui suit :
from vllm import LLM, SamplingParams
from huggingface_hub import login
from cerebrium import get_secret
# Your huggingface token (HF_AUTH_TOKEN) should be stored in your project secrets on your Cerebrium dashboard
login(token=get_secret("HF_AUTH_TOKEN"))
# Initialize the model
llm = LLM(model="mistralai/Mistral-7B-Instruct-v0.3", dtype="bfloat16", max_model_len=20000, gpu_memory_utilization=0.9)
Nous devons ajouter notre token Hugging Face à nos Secrets Cerebrium car l'utilisation du modèle Mistral nécessite une authentification. Assurez-vous que le token Hugging Face que vous avez ajouté dispose des permissions WRITE. Lors du premier déploiement, il téléchargera le modèle et le stockera sur le disque, de sorte que pour les appels suivants, il chargera le modèle depuis le disque.
Ajoutez ce qui suit à votre fichier main.py :
def run(prompt: str, temperature: float = 0.8, top_p: float = 0.75, top_k: int = 40, max_tokens: int = 256, frequency_penalty: int = 1):
sampling_params = SamplingParams(
temperature=temperature,
top_p=top_p,
top_k=top_k,
max_tokens=max_tokens,
frequency_penalty=frequency_penalty
)
outputs = llm.generate([item.prompt], sampling_params)
generated_text = []
for output in outputs:
generated_text.append(output.outputs[0].text)
return {"result": generated_text}Chaque fonction dans Cerebrium est appelable via un endpoint API. Le code au niveau le plus élevé (c'est-à-dire hors fonction) n'est instancié que lors du premier démarrage du conteneur, de sorte que pour les appels suivants, il exécutera simplement le code défini dans la fonction que vous appelez.
Notre fichier main.py final devrait ressembler à ceci :
from vllm import LLM, SamplingParams
from huggingface_hub import login
from cerebrium import get_secret
# Your huggingface token (HF_AUTH_TOKEN) should be stored in your project secrets on your Cerebrium dashboard
login(token=get_secret("HF_AUTH_TOKEN"))
# Initialize the model
llm = LLM(model="mistralai/Mistral-7B-Instruct-v0.3", dtype="bfloat16", max_model_len=20000, gpu_memory_utilization=0.9)
def run(prompt: str, temperature: float = 0.8, top_p: float = 0.75, top_k: int = 40, max_tokens: int = 256, frequency_penalty: int = 1):
sampling_params = SamplingParams(
temperature=temperature,
top_p=top_p,
top_k=top_k,
max_tokens=max_tokens,
frequency_penalty=frequency_penalty
)
outputs = llm.generate([item.prompt], sampling_params)
generated_text = []
for output in outputs:
generated_text.append(output.outputs[0].text)
return {"result": generated_text}Exécuter dans le cloud
cerebrium deployVous verrez votre application se déployer, installer les packages pip et télécharger le modèle. Une fois terminé, il affichera une requête CURL que vous pouvez utiliser pour appeler votre endpoint. N'oubliez pas de terminer l'URL par la fonction que vous souhaitez appeler - dans ce cas /run.
curl --location --request POST 'https://api.cortex.cerebrium.ai/v4/p-<YOUR PROJECT ID>/mistral-vllm/run' \
--header 'Authorization: Bearer <YOUR TOKEN HERE>' \
--header 'Content-Type: application/json' \
--data-raw '{
"prompt: "What is the capital city of France?"
}'Vous devriez alors recevoir un message ressemblant à ceci :
{
"run_id": "nZL6mD8q66u4lHTXcqmPCc6pxxFwn95IfqQvEix0gHaOH4gkHUdz1w==",
"message": "Finished inference request with run_id: `nZL6mD8q66u4lHTXcqmPCc6pxxFwn95IfqQvEix0gHaOH4gkHUdz1w==`",
"result": {
"result": ["\nA: Paris"]
},
"status_code": 200,
"run_time_ms": 151.24988555908203
}