我在 p3.2xlarge 上部署了一个 pytorch 模型,连接到 lambda 和 API 网关。
当向其发送多个请求时,根据日志,它会顺序接受它们。 没有并发性,但是端点不应该能够同时处理 200 个调用吗?
我们需要设置一些东西吗?
请告诉我。
这是并发调用示例:
import threading
import requests
def send_request():
data = {"image": encoded_image}
response = requests.post("https://idr263lxri.something", json=data)
print(response.text)
threads = []
for _ in range(8):
thread = threading.Thread(target=send_request)
thread.start()
threads.append(thread)
for thread in threads:
thread.join()
我尝试了各种并发调用,它们是按顺序处理的。
我使用了各种并发调用。
简短的答案是肯定的,他们绝对会/应该这样做,所以这应该更多地是找出过程中哪些地方配置错误的问题......
我们先检查一些外部因素:
print()
ing before requests.post()
检查过,此测试设置实际上同时启动 API 请求,对吗?sleep()
来停止 Lambda SageMaker 调用,以检查其行为是否符合预期。如果这些都被消除了,并且您的 SageMaker 端点本身肯定正在序列化请求,那么是时候进行更深入的挖掘了。要重新配置端点的服务堆栈,您可能需要知道它正在使用什么:
如果您第一次部署自定义 PyTorch 模型,您可能正在使用 AWS DLC for SageMaker PyTorch Inference,它基于 TorchServe。如果您使用的是 SageMaker Hugging Face 绑定,它可能是 Hugging Face DLC,其中至少有几个版本基于 AWS MMS 服务器(对于最新版本不能 100% 确定)。如果您从 SageMaker JumpStart 调整/部署模型或执行其他一些自定义操作,它甚至可能是 Triton Inference Server 或 DJL Serving。
如果您不确定,请尝试追踪模型的容器图像 URI 以找出哪个:在
SageMaker > Inference > Models console中找到您的
Model
,您应该能够看到它。如果您不知道它是哪个 Model
,可以先浏览 SageMaker > 推理 > 端点,然后沿着从端点到端点配置到模型的路径进行操作。
一旦确定了服务堆栈,相关问题可能包括:
p3.2xlarge
是一台单GPU机器,我看到TorchServe默认配置到每个模型的nGPUs
工作人员 - 所以也许这就是你的问题,添加(比如说)2的TS_DEFAULT_WORKERS_PER_MODEL
环境变量可能会解决它?但我相信这会将模型的额外副本加载到 GPU 内存中...所以配置推理批处理可能会更好?
所以,长话短说,它应该可以工作,但如果您的 SageMaker 端点本身有什么东西阻碍了它 - 那么可能需要更深入地挖掘您正在使用的(主要是开源的)容器化服务基础设施?
您可能会在以下 AWS ML 博客中找到更多帮助: