我在Docker容器中有一个flask应用程序。我需要执行CPU/GPU密集型工作,所以我创建了一个Kubernedes集群,其中包含Ray head和Ray worker节点。我的flask应用程序不是这个Kubernedes集群的一部分,而是在一个不同的EC2示例上。从理论上讲,从flask应用程序调用ray.init(“Ray头节点的IP地址”)和ray.remote函数会很好,但我目前无法连接到集群。现在我正在为我的flask应用程序使用Docker容器,并在集群节点组中使用默认的Ray Docker图像rayproject/ray-ml:2.0.0和rayproject/ray-ml:2.0.0-gpu。我看到了几个选择:
1.我们应该继续为Web应用程序使用单独的Docker镜像,而不是kubernedes节点,我们应该继续在kubernedes集群之外托管flask应用程序。这是一个理想的场景,因为它是现状,问题是我似乎无法通过ray. init连接到集群。我已经尝试使用具有Ray Head节点的EC2示例的公共IP地址,并尝试在kubernedes YAML配置中创建类型为“LoadBalancer”的“Service”并使用ray.init(“ray://URL.elb.amazonaws.com:6379”),但两者都无法连接。我很确定我的安全小组应该允许进入。
1.我们应该继续为Web应用程序使用单独的Docker镜像,而不是kubernedes节点并将flask应用程序放入kubernedes集群。
有人能指导我哪一个是正确的选择,并给出该选项如何让它工作鉴于我看到的错误?
以下是我所做的一些假设,如果这影响了我的问题的答案:
1.最佳做法是为ray节点和flask应用程序设置一个单独的docker容器。
- ray.remote函数代码不需要在ray worker或head节点的docker镜像中,但必须在flask应用的docker镜像中。这段代码通过Ray通过网络从flask应用程序传递到Ray节点(不是每次调用函数时都会传递,而是以更有效的方式传递)。
- ray.remote函数所依赖的pip依赖项必须在rayworker节点的docker镜像中。ray.remote函数所依赖的pip依赖关系不需要出现在Rayhead节点或flask应用的docker映像中。因此,如果我们使用默认的Ray docker镜像(“rayproject/ray-ml:2.0.0”,“rayproject/ray-ml:2.0.0-gpu”)中没有包含的需求,我们必须使用默认的Ray docker镜像作为基础镜像创建一个新的docker镜像,并添加额外的依赖项。
1条答案
按热度按时间jv2fixgn1#
我修好了很明显,当你用“善良”:在YAML文件中添加“RayCluster”时,它会自动创建一个服务。然后您可以通过ray.init(“ray://raycluster-project-head-svc:10001”)连接到该服务(无论服务名称是什么)。由于我不知道这个服务,我试图创建自己的服务或直接连接到射线头IP和它没有连接。