传递多个对象以使用ray.serve并行执行



我在射线文档中遵循本教程

具体到这部分:

client = serve.start()
config = {"num_replicas": 3}
client.create_backend("tf:v1", TFMnistModel, TRAINED_MODEL_PATH,config=config)
client.create_endpoint("tf_classifier", backend="tf:v1", route="/mnist")

下面的代码将一个示例发送到后端

sample_data= np.random.randn(28 * 28).tolist()
resp = requests.get(
"http://localhost:8000/mnist",
json={"array": sample_data})

我如何在同一时间发送多个样本,以便它们利用所有核心并行执行?例如,使用以下

创建100个MNIST样本
# 100 MNIST sample 28x28
sample_data = np.random.randn(100 * 28 * 28).reshape((100, 28, 28))

requests.get()调用是阻塞的,所以你是对的,我们不应该在for循环中调用它100次。

要通过HTTP并行发送多个示例,您需要有多个连接。以下使用asyncioaiohttp的代码示例显示了实现此目的的一种方法:https://gist.github.com/architkulkarni/0bd0a92c3195c58ec460a5a0e5eb0e88#file-benchmark-py(您需要编辑url并将JSON输入添加到session.get()以匹配您的示例)

另一种方法是跳过HTTP,直接在Python中使用Ray Serve的ServeHandle API。

handle = client.get_handle("tf_classifier")
futures = [handle.remote({"array": np.random.randn(28 * 28)}) for i in range(100)]
results = ray.get(futures)

最新更新