Sagify fournit une interface simplifiée pour gérer les flux de travail d'apprentissage automatique sur AWS SageMaker, vous aidant à vous concentrer sur la construction de modèles ML plutôt que sur l'infrastructure. Son architecture modulaire comprend un module de passerelle LLM pour fournir une interface unifiée pour tirer parti des modèles de grande langue open source et propriétaire. La passerelle LLM donne accès à divers LLM via une API simple, vous permettant de les intégrer facilement dans vos workflows.
Pour une référence détaillée à Sagify, veuillez consulter: Lisez les documents
Sagify nécessite ce qui suit:
À la ligne de commande:
pip install sagify
Assurez-vous de configurer votre compte AWS en suivant les instructions de la section Configurer le compte AWS
Enfin, exécutez la commande suivante:
sagify cloud foundation-model-deploy --model-id model-txt2img-stabilityai-stable-diffusion-v2-1-base --model-version 1. * -n 1 -e ml.p3.2xlarge --aws-region us-east-1 --aws-profile sagemaker-devVous pouvez modifier les valeurs pour le type EC2 (-E), la région AWS et le profil AWS avec vos préférés.
Une fois le modèle de diffusion stable déployé, vous pouvez utiliser l'extrait de code généré pour l'interroger. Apprécier!
Les modèles suivants sont proposés pour les compléments de chat:
| Nom du modèle | URL |
|---|---|
| gpt-4 | https://platform.openai.com/docs/models/gpt-4-and-gpt-4-turbo |
| GPT-4-32K | https://platform.openai.com/docs/models/gpt-4-and-gpt-4-turbo |
| GPT-3,5-turbo | https://platform.openai.com/docs/models/gpt-4-and-gpt-4-turbo |
Pour la création d'images, vous pouvez compter sur les modèles suivants:
| Nom du modèle | URL |
|---|---|
| dall-e-3 | https://platform.openai.com/docs/models/dall-e |
| dall-e-2 | https://platform.openai.com/docs/models/dall-e |
Et pour les intégres:
| Nom du modèle | URL |
|---|---|
| texton | https://platform.openai.com/docs/models/embedings |
| Texte-incliné-3-Small | https://platform.openai.com/docs/models/embedings |
| Texte-embelli-ADA-002 | https://platform.openai.com/docs/models/embedings |
Toutes ces listes de modèles prises en charge sur OpenAI peuvent être récupérées en exécutant les sagify llm models --all --provider openai . Si vous souhaitez vous concentrer uniquement sur les modèles de compléments de chat, exécutez sagify llm models --chat-completions --provider openai . Pour les créations d'images et les incorporations, sagify llm models --image-creations --provider openai et sagify llm models --embeddings --provider openai , respectivement.
Les modèles open source suivants sont proposés pour les compléments de chat:
| Nom du modèle | URL |
|---|---|
| lama-2-7b | https://huggingface.co/meta-llama/llama-2-7b |
| lama-2-13b | https://huggingface.co/meta-llama/llama-2-13b |
| lama-2-70b | https://huggingface.co/meta-llama/llama-2-70b |
Pour la création d'images, vous pouvez compter sur les modèles open source suivants:
| Nom du modèle | URL |
|---|---|
| stabilité-stable-diffusion-v2 | https://huggingface.co/stabilityai/stable-diffusion-20 |
| Stabilité-stabilité-stable-diffusion-v2-1 | https://huggingface.co/stabilityai/stable-diffusion-2-1-base |
| stabilité-stable-diffusion-v2-fp16 | https://huggingface.co/stabilityai/stable-diffusion-2/tree/fp16 |
Et pour les intégres:
| Nom du modèle | URL |
|---|---|
| bge-large-en | https://huggingface.co/baai/bge-large-en |
| BGE-base-en | https://huggingface.co/baai/bge-base-en |
| enterre | https://huggingface.co/thenlper/gte-large |
| base GTE | https://huggingface.co/thenlper/gte-base |
| E5-Large-V2 | https://huggingface.co/intfloat/e5-large-v2 |
| BGE-SMALL-EN | https://huggingface.co/baai/bge-small-en |
| E5-base-V2 | https://huggingface.co/intfloat/e5-base-v2 |
| multilingue-e5-grand | https://huggingface.co/intfloat/multilingal-e5-large |
| E5 bien | https://huggingface.co/intfloat/e5-large |
| petit | https://huggingface.co/thenlper/gte-small |
| base E5 | https://huggingface.co/intfloat/e5-base |
| E5-Small-V2 | https://huggingface.co/intfloat/e5-small-v2 |
| bassin multiplituel-e5 | https://huggingface.co/intfloat/multilingal-e5-base |
| All-Minilm-L6-V2 | https://huggingface.co/sence-transformers/all-minilm-l6-v2 |
Toutes ces listes de modèles open source pris en charge sont prises en charge sur AWS SageMaker et peuvent être récupérées en exécutant les sagify llm models --all --provider sagemaker . Si vous souhaitez vous concentrer uniquement sur les modèles de compléments de chat, exécutez sagify llm models --chat-completions --provider sagemaker . Pour les créations d'images et les incorporations, sagify llm models --image-creations --provider sagemaker et sagify llm models --embeddings --provider sagemaker , respectivement.
Vous devez définir les variables Env suivantes avant de démarrer le serveur de passerelle LLM:
OPENAI_API_KEY : Votre clé API OpenAI. Exemple: export OPENAI_API_KEY=...OPENAI_CHAT_COMPLETIONS_MODEL : il devrait avoir une des valeurs ici ou ici.OPENAI_EMBEDDINGS_MODEL : il devrait avoir une des valeurs ici.OPENAI_IMAGE_CREATION_MODEL : il devrait avoir une des valeurs ici. La première étape consiste à déployer le ou les modèles LLM. Vous pouvez choisir de déployer tous les services backend (compléments de chat, créations d'images, intégres) ou certains d'entre eux.
Si vous souhaitez les déployer tous, exécutez sagify llm start --all . Cette commande déploiera tous les services backend (complétions de chat, créations d'images, intégres) avec la configuration suivante:
{
"chat_completions" : {
"model" : " llama-2-7b " ,
"instance_type" : " ml.g5.2xlarge " ,
"num_instances" : 1 ,
},
"image_creations" : {
"model" : " stabilityai-stable-diffusion-v2-1-base " ,
"instance_type" : " ml.p3.2xlarge " ,
"num_instances" : 1 ,
},
"embeddings" : {
"model" : " gte-small " ,
"instance_type" : " ml.g5.2xlarge " ,
"num_instances" : 1 ,
},
} Vous pouvez modifier cette configuration en supprimant votre propre fichier de configuration, vous pouvez ensuite exécuter sagify llm start -all --config YOUR_CONFIG_FILE.json .
Il faut 15 à 30 minutes pour déployer tous les services backend en tant que points de terminaison Sagemaker.
Les noms de modèles déployés, qui sont les noms de point de terminaison SageMaker, sont imprimés et stockés dans le fichier caché .sagify_llm_infra.json . Vous pouvez également y accéder depuis la console Web AWS SageMaker.
Une fois que vous avez configuré votre plate-forme backend, vous pouvez déployer localement la passerelle Fastapi LLM.
En cas d'utilisation de la plate-forme AWS SageMaker, vous devez définir les variables Env suivantes avant de démarrer le serveur LLM Gateway:
AWS_ACCESS_KEY_ID : Ce peut être le même que vous utilisez localement pour Sagify. Il devrait avoir accès à Sagemaker et S3. Exemple: export AWS_ACCESS_KEY_ID=...AWS_SECRET_ACCESS_KEY : Ce peut être le même que vous utilisez localement pour Sagify. Il devrait avoir accès à Sagemaker et S3. Exemple: export AWS_ACCESS_KEY_ID=...AWS_REGION_NAME : région AWS où les services backend LLM (points de terminaison SageMaker) sont déployés.S3_BUCKET_NAME : Nom du seau S3 où les images créées par le service backend de création d'image sont stockées.IMAGE_URL_TTL_IN_SECONDS : ttl en secondes de l'URL temporaire aux images créées. Valeur par défaut: 3600.SM_CHAT_COMPLETIONS_MODEL : le nom de point de terminaison SageMaker où le modèle de complétion de chat est déployé.SM_EMBEDDINGS_MODEL : Le nom de point de terminaison SageMaker où le modèle Embeddings est déployé.SM_IMAGE_CREATION_MODEL : Le nom de point de terminaison SageMaker où le modèle de création d'image est déployé.En cas d'utilisation de la plate-forme OpenAI, vous devez définir les variables Env suivantes avant de démarrer le serveur de passerelle LLM:
OPENAI_API_KEY : Votre clé API OpenAI. Exemple: export OPENAI_API_KEY=...OPENAI_CHAT_COMPLETIONS_MODEL : il devrait avoir une des valeurs ici ou ici.OPENAI_EMBEDDINGS_MODEL : il devrait avoir une des valeurs ici.OPENAI_IMAGE_CREATION_MODEL : il devrait avoir une des valeurs ici. Maintenant, vous pouvez exécuter la commande sagify llm gateway --image sagify-llm-gateway:v0.1.0 --start-local pour démarrer la passerelle LLM localement. Vous pouvez modifier le nom de l'image via l'argument --image .
Cette commande sortira l'ID de conteneur Docker. Vous pouvez arrêter le conteneur en exécutant docker stop <CONTAINER_ID> .
Exemples
( N'oubliez pas d'exporter d'abord toutes les variables d'environnement dont vous avez besoin )
Dans le cas, vous souhaitez créer une image Docker, puis l'exécuter
sagify llm gateway --image sagify-llm-gateway:v0.1.0 --start-local
Si vous souhaitez utiliser simplement, construisez l'image
sagify llm gateway --image sagify-llm-gateway:v0.1.0
Si vous souhaitez prendre en charge les deux plates-formes (OpenAI et AWS SageMaker), passez toutes les variables Env pour les deux plates-formes.
Si vous souhaitez déployer la passerelle LLM vers AWS Fargate, vous pouvez suivre ces étapes générales:
Voici un exemple de modèle CloudFormation pour déployer un service Fastapi sur AWS Fargate avec 5 variables d'environnement:
Resources :
MyFargateTaskDefinition :
Type : AWS::ECS::TaskDefinition
Properties :
Family : my-fargate-task
ContainerDefinitions :
- Name : fastapi-container
Image : <YOUR_ECR_REPOSITORY_URI>
Memory : 512
PortMappings :
- ContainerPort : 80
Environment :
- Name : AWS_ACCESS_KEY_ID
Value : " value1 "
- Name : AWS_SECRET_ACCESS_KEY
Value : " value2 "
- Name : AWS_REGION_NAME
Value : " value3 "
- Name : S3_BUCKET_NAME
Value : " value4 "
- Name : IMAGE_URL_TTL_IN_SECONDS
Value : " value5 "
- Name : SM_CHAT_COMPLETIONS_MODEL
Value : " value6 "
- Name : SM_EMBEDDINGS_MODEL
Value : " value7 "
- Name : SM_IMAGE_CREATION_MODEL
Value : " value8 "
- Name : OPENAI_CHAT_COMPLETIONS_MODEL
Value : " value9 "
- Name : OPENAI_EMBEDDINGS_MODEL
Value : " value10 "
- Name : OPENAI_IMAGE_CREATION_MODEL
Value : " value11 "
MyFargateService :
Type : AWS::ECS::Service
Properties :
Cluster : default
TaskDefinition : !Ref MyFargateTaskDefinition
DesiredCount : 2
LaunchType : FARGATE
NetworkConfiguration :
AwsvpcConfiguration :
Subnets :
- <YOUR_SUBNET_ID>
SecurityGroups :
- <YOUR_SECURITY_GROUP_ID> Une fois la passerelle LLM déployée, vous pouvez y accéder sur HOST_NAME/docs .
curl --location --request POST ' /v1/chat/completions '
--header ' Content-Type: application/json '
--data-raw ' {
"provider": "sagemaker",
"messages": [
{
"role": "system",
"content": "you are a cook"
},
{
"role": "user",
"content": "what is the recipe of mayonnaise"
}
],
"temperature": 0,
"max_tokens": 600,
"top_p": 0.9,
"seed": 32
} 'Exemples de réponses
200 réponse
{
"id" : " chatcmpl-8167b99c-f22b-4e04-8e26-4ca06d58dc86 " ,
"object" : " chat.completion " ,
"created" : 1708765682 ,
"provider" : " sagemaker " ,
"model" : " meta-textgeneration-llama-2-7b-f-2024-02-24-08-49-32-123 " ,
"choices" : [
{
"index" : 0 ,
"message" : {
"role" : " assistant " ,
"content": " Ah, a fellow foodie! Mayonnaise is a classic condiment that's easy to make and can elevate any dish. Here's my trusty recipe for homemade mayonnaise:nnIngredients:nn* 2 egg yolksn* 1/2 cup (120 ml) neutral-tasting oil, such as canola or grapeseedn* 1 tablespoon lemon juice or vinegarn* Salt and pepper to tastennInstructions:nn1. In a small bowl, whisk together the egg yolks and lemon juice or vinegar until well combined.n2. Slowly pour in the oil while continuously whisking the mixture. You can do this by hand with a whisk or use an electric mixer on low speed.n3. Continue whisking until the mixture thickens and emulsifies, which should take about 5-7 minutes. You'll know it's ready when it reaches a thick, creamy consistency.n4. Taste and adjust the seasoning as needed. You can add more salt, pepper, or lemon juice to taste.n5. Transfer the mayonnaise to a jar or airtight container and store it in the fridge for up to 1 week.nnThat's it! Homemade mayonnaise is a great way to control the ingredients and flavor, and it's also a fun kitchen experiment. Enjoy!"
}
}
]
}curl --location --request POST ' /v1/embeddings '
--header ' Content-Type: application/json '
--data-raw ' {
"provider": "sagemaker",
"input": [
"The mayonnaise was delicious"
]
} 'Exemples de réponses
200 réponse
{
"data" : [
{
"object" : " embedding " ,
"embedding" : [
-0.04274585098028183 ,
0.021814687177538872 ,
-0.004705613013356924 ,
...
-0.07548460364341736 ,
0.036427777260541916 ,
0.016453085467219353 ,
0.004641987383365631 ,
-0.0072729517705738544 ,
0.02343473769724369 ,
-0.002924458822235465 ,
0.0339619480073452 ,
0.005262510851025581 ,
-0.06709178537130356 ,
-0.015170316211879253 ,
-0.04612169787287712 ,
-0.012380547821521759 ,
-0.006663458421826363 ,
-0.0573800653219223 ,
0.007938326336443424 ,
0.03486081212759018 ,
0.021514462307095528
],
"index" : 0
}
],
"provider" : " sagemaker " ,
"model" : " hf-sentencesimilarity-gte-small-2024-02-24-09-24-27-341 " ,
"object" : " list "
}curl --location --request POST ' /v1/images/generations '
--header ' Content-Type: application/json '
--data-raw ' {
"provider": "sagemaker",
"prompt":
"A baby sea otter"
,
"n": 1,
"width": 512,
"height": 512,
"seed": 32,
"response_format": "url"
} 'Exemples de réponses
200 réponse
{
"provider" : " sagemaker " ,
"model" : " stable-diffusion-v2-1-base-2024-02-24-11-43-32-177 " ,
"created" : 1708775601 ,
"data" : [
{
"url" : " https://your-bucket.s3.amazonaws.com/31cedd17-ccd7-4cba-8dea-cb7e8b915782.png?AWSAccessKeyId=AKIAUKEQBDHITP26MLXH&Signature=%2Fd1J%2FUjOWbRnP5cwtkSzYUVoEoo%3D&Expires=1708779204 "
}
]
}Courriel: [email protected]
Nous avons réalisé qu'il n'y a pas un seul LLM pour les gouverner tous!