我想为机器学习推理系统(使用 kubernetes)设计一个分布式队列。问题如下:
每个请求还包含执行请求时应使用的 model_id(有很多模型)。因此,当消费者收到队列消息时,它必须从 blob 存储下载模型文件(可能在本地缓存)并将其放入 GPU 上,然后使用给定的数据点(也在请求中给出)执行它。
此下载和 GPU 加载需要一些时间。因此,如果工作线程获取的下一个队列元素也包含具有相同且已加载的 model_id 的请求,那将非常有益。
任何现有的队列系统(例如rabbitmq或redis)都可以实现这一点吗?
此外,最好有某种平等的机会获得每个 model_id 的请求,而与每个 model_id 的请求数量无关。
我尝试用 Redis 构建这个,但我没有看到任何机制来告诉队列过滤消息,并给我一个具有指定 model_id 的消息(如果存在)或任何其他随机 model_id。
这里你指的是分布式队列?听起来您需要为队列拥有多个消费者(工作人员),并希望确保每个消费者(工作人员)获取相同 model_id 的消息。
这可以在 Kafka 中实现,其中队列(主题)被分区分配给多个消费者(工作人员)。具有相同密钥的消息最终位于同一分区中,因此由同一消费者处理。在您的情况下,消息密钥将是 model_id