轻松完成LLM和机器学习。
sagify
Sagify提供了一个简化的接口来管理AWS SageMaker上的机器学习工作流,帮助您专注于构建ML模型而不是基础设施。其模块化架构包括一个LLM网关模块,提供一个统一的接口来利用开源和专有的大型语言模型。LLM网关通过简单的API访问各种LLM,让您轻松将它们整合到您的工作流中。
有关Sagify的详细参考,请访问:Read the Docs
安装
先决条件
sagify的要求如下:
安装sagify
在命令行中输入:
pip install sagify
快速入门 - 无代码LLM部署
-
请确保按照章节配置AWS帐户中的说明配置您的AWS帐户
-
最后,运行以下命令:
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-dev
您可以将ec2类型(-e)、aws区域和aws配置文件的值更改为您的首选值。
一旦Stable Diffusion模型部署完成,您可以使用生成的代码片段查询它。享受吧!
后端平台
OpenAI
以下模型提供聊天完成服务:
对于图像创建,您可以依赖以下模型:
模型名称 | URL |
---|---|
dall-e-3 | https://platform.openai.com/docs/models/dall-e |
dall-e-2 | https://platform.openai.com/docs/models/dall-e |
而对于嵌入:
模型名称 | URL |
---|---|
text-embedding-3-large | https://platform.openai.com/docs/models/embeddings |
text-embedding-3-small | https://platform.openai.com/docs/models/embeddings |
text-embedding-ada-002 | https://platform.openai.com/docs/models/embeddings |
所有这些在OpenAI上支持的模型列表可以通过运行命令sagify llm models --all --provider openai
获取。如果您只想专注于聊天完成模型,请运行sagify llm models --chat-completions --provider openai
。对于图像创建和嵌入,请分别运行sagify llm models --image-creations --provider openai
和sagify llm models --embeddings --provider openai
。
开源
以下开源模型提供聊天完成服务:
模型名称 | 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 |
对于图像创建,您可以依赖以下开源模型:
模型名称 | URL |
---|---|
stabilityai-stable-diffusion-v2 | https://huggingface.co/stabilityai/stable-diffusion-2 |
stabilityai-stable-diffusion-v2-1-base | https://huggingface.co/stabilityai/stable-diffusion-2-1-base |
stabilityai-stable-diffusion-v2-fp16 | https://huggingface.co/stabilityai/stable-diffusion-2/tree/fp16 |
而对于嵌入:
模型名称 | URL |
---|---|
bge-large-en | https://huggingface.co/BAAI/bge-large-en |
bge-base-en | https://huggingface.co/BAAI/bge-base-en |
gte-large | https://huggingface.co/thenlper/gte-large |
gte-base | 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 |
multilingual-e5-large | https://huggingface.co/intfloat/multilingual-e5-large |
e5-large | https://huggingface.co/intfloat/e5-large |
gte-small | https://huggingface.co/thenlper/gte-small |
e5-base | https://huggingface.co/intfloat/e5-base |
e5-small-v2 | https://huggingface.co/intfloat/e5-small-v2 |
multilingual-e5-base | https://huggingface.co/intfloat/multilingual-e5-base |
all-MiniLM-L6-v2 | https://huggingface.co/sentence-transformers/all-MiniLM-L6-v2 |
所有这些在AWS Sagemaker上支持的开源模型可以通过运行命令sagify llm models --all --provider sagemaker
获取。如果您只想专注于聊天完成模型,请运行sagify llm models --chat-completions --provider sagemaker
。对于图像创建和嵌入,请分别运行sagify llm models --image-creations --provider sagemaker
和sagify llm models --embeddings --provider sagemaker
。
设置OpenAI
在启动LLM网关服务器之前,您需要定义以下环境变量:
OPENAI_API_KEY
:您的OpenAI API密钥。示例:export OPENAI_API_KEY=...
。OPENAI_CHAT_COMPLETIONS_MODEL
:应为这里或这里中的任意一个值。OPENAI_EMBEDDINGS_MODEL
:应为这里中的任意一个值。OPENAI_IMAGE_CREATION_MODEL
:应为这里中的任意一个值。
设置开源LLMs
第一步是部署LLM模型。您可以选择部署所有后端服务(聊天完成、图像创建、嵌入)或其中的某些服务。
如果您想部署所有服务,则运行sagify llm start --all
。此命令将使用以下配置部署所有后端服务(聊天完成、图像创建、嵌入):
{
"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,
},
}
您可以通过提供您自己的配置文件更改此配置,然后可以运行sagify llm start -all --config YOUR_CONFIG_FILE.json
。
部署所有后端服务为Sagemaker端点需要15到30分钟。
部署的模型名称,也就是Sagemaker端点名称,会打印出来并存储在隐藏文件.sagify_llm_infra.json
中。您也可以从AWS Sagemaker web控制台访问它们。
部署FastAPI LLM网关 - Docker
一旦您设置了后端平台,您可以在本地部署FastAPI LLM网关。
如果使用AWS Sagemaker平台,在启动LLM网关服务器之前,您需要定义以下环境变量:
AWS_ACCESS_KEY_ID
:这可以与您在本地用于Sagify的相同。它应有权访问Sagemaker和S3。示例:export AWS_ACCESS_KEY_ID=...
。AWS_SECRET_ACCESS_KEY
:这可以与您在本地用于Sagify的相同。它应有权访问Sagemaker和S3。示例:export AWS_ACCESS_KEY_ID=...
。AWS_REGION_NAME
:LLM后端服务(Sagemaker端点)部署的AWS区域。S3_BUCKET_NAME
:图像创建后端服务创建的图像存储的S3桶名称。IMAGE_URL_TTL_IN_SECONDS
:创建图像的临时URL的TTL(以秒为单位)。默认值:3600。SM_CHAT_COMPLETIONS_MODEL
:部署聊天完成模型的Sagemaker端点名称。SM_EMBEDDINGS_MODEL
:部署嵌入模型的Sagemaker端点名称。SM_IMAGE_CREATION_MODEL
:部署图像创建模型的Sagemaker端点名称。
如果使用OpenAI平台,在启动LLM网关服务器之前,您需要定义以下环境变量:
OPENAI_API_KEY
:您的OpenAI API密钥。示例:export OPENAI_API_KEY=...
。OPENAI_CHAT_COMPLETIONS_MODEL
:应为这里或这里中的任意一个值。OPENAI_EMBEDDINGS_MODEL
:应为这里中的任意一个值。OPENAI_IMAGE_CREATION_MODEL
:应为这里中的任意一个值。
现在,您可以运行命令sagify llm gateway --image sagify-llm-gateway:v0.1.0 --start-local
本地启动LLM网关。您可以通过--image
参数更改镜像名称。
此命令将输出Docker容器ID。您可以通过执行docker stop <CONTAINER_ID>
停止容器。
示例
(请记住首先导出您需要的所有环境变量)
如果您想创建一个docker镜像然后运行它
sagify llm gateway --image sagify-llm-gateway:v0.1.0 --start-local
如果您只想构建镜像
sagify llm gateway --image sagify-llm-gateway:v0.1.0
如果您想支持两个平台(OpenAI和AWS Sagemaker),请为两个平台传递所有环境变量。
部署FastAPI LLM网关 - AWS Fargate
如果您想将LLM网关部署到AWS Fargate,则可以遵循这些一般步骤:
- 容器化FastAPI LLM网关:参见前一部分。
- 将Docker镜像推送到Amazon ECR。
- 定义任务定义:定义描述如何在Fargate上运行容器化的FastAPI应用程序的任务定义。指定Docker镜像、容器端口、CPU和内存需求以及环境变量。
- 创建ECS服务:使用任务定义创建Fargate服务。配置所需任务数、网络选项、负载均衡和自动扩展设置。
- 设置环境变量:确保您的FastAPI应用程序在运行时正确获取环境变量。
这是一个示例CloudFormation模板,用于将FastAPI服务部署到AWS Fargate,并包含5个环境变量:
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>
LLM 网关 API
一旦 LLM 网关部署完毕,您可以在 HOST_NAME/docs
上访问它。
完成请求
curl --location --request POST '/v1/chat/completions' \
--header 'Content-Type: application/json' \
--data-raw '{
"provider": "sagemaker",
"messages": [
{
"role": "system",
"content": "你是位厨师"
},
{
"role": "user",
"content": "蛋黄酱的食谱是什么"
}
],
"temperature": 0,
"max_tokens": 600,
"top_p": 0.9,
"seed": 32
}'
示例响应
200 响应
{
"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": " 哦,一位美食爱好者!蛋黄酱是一种经典的调味品,做起来很简单,而且可以提升任何菜肴的味道。以下是我自制蛋黄酱的可靠食谱:\n\n配料:\n\n* 2 个蛋黄\n* 1/2 杯(120 毫升)中性味的油,如菜籽油或葡萄籽油\n* 1 勺柠檬汁或醋\n* 根据口味添加盐和胡椒\n\n做法:\n\n1. 在一个小碗中,将蛋黄和柠檬汁或醋搅拌在一起,直到完全混合。\n2. 一边不停地搅拌混合物,一边慢慢倒入油。你可以用手动打蛋器搅拌,也可以用低速的电动搅拌器搅拌。\n3. 继续搅拌,直到混合物变稠并乳化,大约需要5-7分钟。当它达到浓稠、奶油状的一致性时,你就知道它已经做好了。\n4. 尝尝味道,根据需要调整调料。可以根据口味添加更多的盐、胡椒或柠檬汁。\n5. 将蛋黄酱转移到一个罐子或密封容器中,放在冰箱中冷藏最多一周。\n\n就是这样!自制蛋黄酱是控制配料和味道的好方法,同时也是一个有趣的厨房实验。享受吧!"
}
}
]
}
嵌入请求
curl --location --request POST '/v1/embeddings' \
--header 'Content-Type: application/json' \
--data-raw '{
"provider": "sagemaker",
"input": [
"蛋黄酱很好吃"
]
}'
示例响应
200 响应
{
"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":
"一只海獭宝宝"
,
"n": 1,
"width": 512,
"height": 512,
"seed": 32,
"response_format": "url"
}'
示例响应
200 响应
{
"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"
}
]
}
与团队交流
电子邮件: pavlos@sagify.ai
我们为什么建立这个
我们意识到没有一个通用的LLM能够适应所有场景!