将 boto3.client 与 FastAPI 结合使用的正确方法

问题描述 投票:0回答:1

当您构建一个 API 来执行 sagemaker 调用以对 FastAPI 应用程序上收到的每个请求进行推理时,正确的方法是什么?

我应该为 boto3 创建一个客户端还是每次调用创建一个客户端?我的应用程序将处理大约 400 rps,现在我正在做:

import ujson
import boto3

client = boto3.client("sagemaker-runtime", region_name="us-east-1")

def inference(payload):

    response = client.invoke_endpoint(
        EndpointName=endpoint,
        Body=payload,
        ContentType='application/json'
    )

    response_body = response["Body"].read().decode("utf-8")

    response_body = ujson.loads(response_body)

    return response_body

我试图弄清楚为什么我的 sagemaker 集成使我的应用程序变慢,不知道应该如何使用它

在调用 inference() 之前我有很多异步代码,我觉得这段代码中的某些东西......看起来像是有东西正在占用我的线程

python python-3.x boto3
1个回答
0
投票

混合同步和异步代码会给你带来不好的时光,因为同步代码基本上会停止其他一切。更糟糕的是,对 sagemaker 的调用自然比其他 API 调用慢,因为您正在执行奇特的 AI 魔法。

考虑使用像 aioboto3 这样的库,它将同步转换为异步。如果您的 API 调用需要很长时间,您可能需要考虑其他架构选择,例如使用队列完全独立于 API 层处理您的请求,或者直接在 EC2/ECS/Fargate 上托管您的模型并使用简单的访问它异步 HTTP 库。

© www.soinside.com 2019 - 2024. All rights reserved.