Sagify proporciona una interfaz simplificada para administrar los flujos de trabajo de aprendizaje automático en AWS Sagemaker, lo que le ayuda a concentrarse en construir modelos ML en lugar de infraestructura. Su arquitectura modular incluye un módulo de puerta de enlace LLM para proporcionar una interfaz unificada para aprovechar los modelos de código abierto y propietarios de lenguas grandes. La puerta de enlace LLM da acceso a varios LLM a través de una API simple, lo que los permite incorporar fácilmente a sus flujos de trabajo.
Para una referencia detallada a Sagify, vaya a: Lea los documentos
Sagify requiere lo siguiente:
En la línea de comando:
pip install sagify
Asegúrese de configurar su cuenta de AWS siguiendo las instrucciones en la sección Configurar la cuenta AWS
Finalmente, ejecute el siguiente comando:
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-devPuede cambiar los valores para el tipo EC2 (-E), la región AWS y el perfil de AWS con los preferidos.
Una vez que se implementa el modelo de difusión estable, puede usar el fragmento de código generado para consultarlo. ¡Disfrutar!
Se ofrecen los siguientes modelos para completar el chat:
| Nombre del modelo | 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 |
Para la creación de imágenes, puede confiar en los siguientes modelos:
| Nombre del modelo | Url |
|---|---|
| Dall-E-3 | https://platform.openai.com/docs/models/dall-e |
| Dall-E-2 | https://platform.openai.com/docs/models/dall-e |
Y para incrustaciones:
| Nombre del modelo | Url |
|---|---|
| texto incrustado-3-larga | https://platform.openai.com/docs/models/embeddings |
| Texto incrustado-3-Small | https://platform.openai.com/docs/models/embeddings |
| Texto incrustado-ADA-002 | https://platform.openai.com/docs/models/embeddings |
Todas estas listas de modelos compatibles en OpenAI se pueden recuperar ejecutando el comando sagify llm models --all --provider openai . Si desea concentrarse solo en los modelos de finalización de chat, ejecute sagify llm models --chat-completions --provider openai . Para las creaciones e incrustaciones de imágenes, sagify llm models --image-creations --provider openai y sagify llm models --embeddings --provider openai , respectivamente.
Se ofrecen los siguientes modelos de código abierto para completar el chat:
| Nombre del modelo | Url |
|---|---|
| LLAMA-2-7B | https://huggingface.co/meta-llama/llama-2-7b |
| Llama-2-13b | https://huggingface.co/meta-llama/llama-2-13b |
| Llama-2-70B | https://huggingface.co/meta-llama/llama-2-70b |
Para la creación de imágenes, puede confiar en los siguientes modelos de código abierto:
| Nombre del modelo | Url |
|---|---|
| estabilidadi-estable-difusión-v2 | https://huggingface.co/stabilityai/stable-diffusion-2 |
| estabilidadi-estable-difusión-v2-1-base | https://huggingface.co/stabilityai/stable-diffusion-2-1-base |
| stabilityi-stable-diffusion-v2-fp16 | https://huggingface.co/stabilityai/stable-diffusion-2/tree/fp16 |
Y para incrustaciones:
| Nombre del modelo | Url |
|---|---|
| BGE-LARGE-EN | https://huggingface.co/baai/bge-large-en |
| BGE-BASE | https://huggingface.co/baai/bge-base-en |
| Larga de Gte | https://huggingface.co/thenlper/gte-large |
| base de 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 |
| multilingüe-e5-grande | https://huggingface.co/intfloat/multilingual-e5-large |
| E5-grande | https://huggingface.co/intfloat/e5-large |
| gte-small | https://huggingface.co/thenlper/gte-small |
| base de E5 | https://huggingface.co/intfloat/e5-base |
| E5-Small-V2 | https://huggingface.co/intfloat/e5-small-v2 |
| multilingüe-e5-base | https://huggingface.co/intfloat/multilingual-e5-base |
| All-Minilm-L6-V2 | https://huggingface.co/sentence-transformers/all-minilm-l6-v2 |
Todas estas listas de modelos de código abierto compatibles son compatibles con AWS SageMaker y se pueden recuperar ejecutando el comando sagify llm models --all --provider sagemaker . Si desea centrarse solo en los modelos de finalización de chat, ejecute sagify llm models --chat-completions --provider sagemaker . Para las creaciones e incrustaciones de imágenes, sagify llm models --image-creations --provider sagemaker y sagify llm models --embeddings --provider sagemaker , respectivamente.
Debe definir las siguientes variables ENV antes de iniciar el servidor de puerta de enlace LLM:
OPENAI_API_KEY : su tecla API OpenAI. Ejemplo: export OPENAI_API_KEY=...OPENAI_CHAT_COMPLETIONS_MODEL : debe tener uno de valores aquí o aquí.OPENAI_EMBEDDINGS_MODEL : debe tener uno de valores aquí.OPENAI_IMAGE_CREATION_MODEL : debe tener uno de valores aquí. El primer paso es implementar los modelos LLM. Puede optar por implementar todos los servicios de backend (finalizaciones de chat, creaciones de imágenes, integridades) o algunos de ellos.
Si desea implementarlos todos, ejecute sagify llm start --all . Este comando implementará todos los servicios de back -end (finalizaciones de chat, creaciones de imágenes, incrustaciones) con la siguiente configuración:
{
"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 ,
},
} Puede cambiar esta configuración suplicando su propio archivo de configuración, luego puede ejecutar sagify llm start -all --config YOUR_CONFIG_FILE.json .
Se necesitan de 15 a 30 minutos para implementar todos los servicios de backend como puntos finales de Sagemaker.
Los nombres de modelos implementados, que son los nombres de punto final de Sagemaker, se imprimen y almacenan en el archivo oculto .sagify_llm_infra.json . También puede acceder a ellos desde la consola web de AWS Sagemaker.
Una vez que haya configurado su plataforma de backend, puede implementar la puerta de enlace de Fastapi LLM localmente.
En caso de usar la plataforma AWS Sagemaker, debe definir las siguientes variables ENV antes de iniciar el servidor de puerta de enlace LLM:
AWS_ACCESS_KEY_ID : puede ser el mismo que usa localmente para Sagify. Debería tener acceso a Sagemaker y S3. Ejemplo: export AWS_ACCESS_KEY_ID=...AWS_SECRET_ACCESS_KEY : puede ser el mismo que usa localmente para Sagify. Debería tener acceso a Sagemaker y S3. Ejemplo: export AWS_ACCESS_KEY_ID=...AWS_REGION_NAME : AWS Region donde se implementan los Servicios de Backend de LLM (puntos finales de Sagemaker).S3_BUCKET_NAME : Nombre del cubo S3 donde se almacenan las imágenes creadas por el servicio de backend de creación de imágenes.IMAGE_URL_TTL_IN_SECONDS : TTL en segundos de la URL temporal a las imágenes creadas. Valor predeterminado: 3600.SM_CHAT_COMPLETIONS_MODEL : el nombre de punto final de Sagemaker donde se implementa el modelo de finalización de chat.SM_EMBEDDINGS_MODEL : el nombre de punto final de Sagemaker donde se implementa el modelo de incrustación.SM_IMAGE_CREATION_MODEL : el nombre de punto final de Sagemaker donde se implementa el modelo de creación de imágenes.En el caso de usar la plataforma OpenAI, debe definir las siguientes variables ENV antes de iniciar el servidor LLM Gateway:
OPENAI_API_KEY : su tecla API OpenAI. Ejemplo: export OPENAI_API_KEY=...OPENAI_CHAT_COMPLETIONS_MODEL : debe tener uno de valores aquí o aquí.OPENAI_EMBEDDINGS_MODEL : debe tener uno de valores aquí.OPENAI_IMAGE_CREATION_MODEL : debe tener uno de valores aquí. Ahora, puede ejecutar el comando sagify llm gateway --image sagify-llm-gateway:v0.1.0 --start-local para iniciar la puerta de enlace LLM localmente. Puede cambiar el nombre de la imagen a través del argumento --image .
Este comando emitirá la ID de contenedor Docker. Puede detener el contenedor ejecutando docker stop <CONTAINER_ID> .
Ejemplos
( Recuerde exportar primero todas las variables de entorno que necesita )
En el caso, desea crear una imagen de Docker y luego ejecutarla
sagify llm gateway --image sagify-llm-gateway:v0.1.0 --start-local
Si quieres usar, solo construya la imagen
sagify llm gateway --image sagify-llm-gateway:v0.1.0
Si desea admitir ambas plataformas (OpenAI y AWS SageMaker), pase todas las variables Env para ambas plataformas.
En caso de que desee implementar la puerta de enlace LLM a AWS Fargate, puede seguir estos pasos generales:
Aquí hay un ejemplo de plantilla de CloudFormation para implementar un servicio FASTAPI a AWS Fargate con 5 variables de entorno:
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> Una vez que se implementa la puerta de enlace LLM, puede acceder a ella en 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
} 'Respuestas de ejemplo
200 respuesta
{
"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"
]
} 'Respuestas de ejemplo
200 respuesta
{
"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"
} 'Respuestas de ejemplo
200 respuesta
{
"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 "
}
]
}Correo electrónico: [email protected]
¡Nos dimos cuenta de que no hay una sola LLM para gobernarlos a todos!