Sagifyは、AWS Sagemakerの機械学習ワークフローを管理するための簡素化されたインターフェイスを提供し、インフラストラクチャではなくMLモデルの構築に集中するのに役立ちます。そのモジュラーアーキテクチャには、オープンソースと独自の大規模な言語モデルの両方を活用するための統一されたインターフェイスを提供するLLMゲートウェイモジュールが含まれています。 LLMゲートウェイは、単純なAPIを介してさまざまなLLMにアクセスできるため、ワークフローに簡単に組み込むことができます。
Sagifyを詳細に参照するには、ご覧ください:ドキュメントをお読みください
Sagifyには以下が必要です。
コマンドラインで:
pip install sagify
セクションConfigure 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-devEC2タイプ(-E)、AWS領域、およびAWSプロファイルの値をお好みのプロファイルを変更できます。
安定した拡散モデルが展開されたら、生成されたコードスニペットを使用して照会できます。楽しむ!
チャットの完了のために、次のモデルが提供されています。
| モデル名 | 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-ターボ | https://platform.openai.com/docs/models/gpt-4-and-gpt-4-turbo |
画像作成については、次のモデルに頼ることができます。
| モデル名 | 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-rembedding-3-large | https://platform.openai.com/docs/models/embeddings |
| Text-embedding-3-Small | https://platform.openai.com/docs/models/embeddings |
| Text-rembedding-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/stability/stable-diffusion-2 |
| stabilityai-stable-diffusion-v2-1-base | https://huggingface.co/stability/stable-diffusion-2-1-base |
| stabilityai-stable-diffusion-v2-fp16 | https://huggingface.co/stability/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ベース | 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ベース-V2 | https://huggingface.co/intfloat/e5-base-v2 |
| 多言語-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ベース | https://huggingface.co/intfloat/e5-base |
| E5-SMALL-V2 | https://huggingface.co/intfloat/e5-small-v2 |
| 多言語-E5ベース | https://huggingface.co/intfloat/multilingual-e5-base |
| オールミニルム-L6-V2 | https://huggingface.co/sentence-transformers/all-minilm-l6-v2 |
サポートされているオープンソースモデルのこれらすべてのリストは、AWS Sagemakerでサポートされており、Command sagify llm models --all --provider sagemaker実行することで取得できます。チャット完了モデルのみに焦点を合わせたい場合は、 sagify llm models --chat-completions --provider sagemaker実行します。画像の作成と埋め込みについては、 sagify llm models --image-creations --provider sagemaker and sagify llm models --embeddings --provider sagemakerそれぞれsagifyします。
LLMゲートウェイサーバーを開始する前に、次のENV変数を定義する必要があります。
OPENAI_API_KEY :OpenAI APIキー。例: export OPENAI_API_KEY=... 。OPENAI_CHAT_COMPLETIONS_MODEL :ここまたはここに値の1つが必要です。OPENAI_EMBEDDINGS_MODEL :ここには値の1つが必要です。OPENAI_IMAGE_CREATION_MODEL :ここには値の1つが必要です。 最初のステップは、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を実行できます。
すべてのバックエンドサービスをセージメーカーのエンドポイントとして展開するのに15〜30分かかります。
Sagemaker Endpoint名である展開されたモデル名は、印刷され、非表示ファイル.sagify_llm_infra.jsonに保存されます。また、AWS Sagemaker Webコンソールからアクセスすることもできます。
バックエンドプラットフォームをセットアップしたら、FastApi LLMゲートウェイをローカルに展開できます。
AWS Sagemakerプラットフォームを使用した場合、LLMゲートウェイサーバーを開始する前に、次のENV変数を定義する必要があります。
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 :チャット完了モデルが展開されるセージメーカーエンドポイント名。SM_EMBEDDINGS_MODEL :埋め込みモデルが展開されるセージメーカーエンドポイント名。SM_IMAGE_CREATION_MODEL :画像作成モデルが展開されるSageMakerエンドポイント名。OpenAIプラットフォームを使用した場合、LLMゲートウェイサーバーを開始する前に、次のENV変数を定義する必要があります。
OPENAI_API_KEY :OpenAI APIキー。例: export OPENAI_API_KEY=... 。OPENAI_CHAT_COMPLETIONS_MODEL :ここまたはここに値の1つが必要です。OPENAI_EMBEDDINGS_MODEL :ここには値の1つが必要です。OPENAI_IMAGE_CREATION_MODEL :ここには値の1つが必要です。これで、LLMゲートウェイをローカルに開始するために、コマンドsagify llm gateway --image sagify-llm-gateway:v0.1.0 --start-localを実行できます。 --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)の両方をサポートする場合は、両方のプラットフォームのすべてのENV変数を渡します。
LLMゲートウェイをAWS Fargateに展開する場合は、次の手順に従うことができます。
これは、5つの環境変数を使用してAWS FargateにFastAPIサービスを展開するためのクラウド形成テンプレートの例です。
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ゲートウェイが展開されたら、 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
} '応答の例
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": " 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"
]
} '応答の例
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":
"A baby sea otter"
,
"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 "
}
]
}私たちは、それらすべてを支配するための単一のLLMがないことに気付きました!