当您构建一个 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() 之前我有很多异步代码,我觉得这段代码中的某些东西......看起来像是有东西正在占用我的线程
混合同步和异步代码会给你带来不好的时光,因为同步代码基本上会停止其他一切。更糟糕的是,对 sagemaker 的调用自然比其他 API 调用慢,因为您正在执行奇特的 AI 魔法。
考虑使用像 aioboto3 这样的库,它将同步转换为异步。如果您的 API 调用需要很长时间,您可能需要考虑其他架构选择,例如使用队列完全独立于 API 层处理您的请求,或者直接在 EC2/ECS/Fargate 上托管您的模型并使用简单的访问它异步 HTTP 库。