Ray项目中使用自定义Docker镜像部署Serve应用指南

Ray项目中使用自定义Docker镜像部署Serve应用指南

ray ray-project/ray: 是一个分布式计算框架,它没有使用数据库。适合用于大规模数据处理和机器学习任务的开发和实现,特别是对于需要使用分布式计算框架的场景。特点是分布式计算框架、无数据库。 ray 项目地址: https://gitcode.com/gh_mirrors/ra/ray

前言

在分布式计算框架Ray中部署Serve应用时,使用Docker镜像是一种高效且可靠的方式。本文将详细介绍如何基于Ray官方镜像构建自定义Docker镜像,并将Serve应用打包其中,最终在Kubernetes环境中通过KubeRay进行部署。

准备工作

在开始前,请确保已安装:

  1. Docker Desktop
  2. 拥有Dockerhub账号用于托管自定义镜像

示例应用介绍

我们以一个生成假邮箱地址的Serve应用为例,该应用依赖Faker包:

from ray import serve
from faker import Faker

@serve.deployment
class EmailDeployment:
    def __init__(self):
        self.fake = Faker()

    async def __call__(self):
        return self.fake.email()

app = EmailDeployment.bind()

本地测试时可安装Faker包并运行:

pip install Faker==18.13.0
serve run fake:app

构建自定义Docker镜像

1. 扩展官方Ray镜像

Ray官方提供了基础Docker镜像(rayproject/ray),我们可以基于此添加额外依赖:

FROM rayproject/ray:2.9.0
RUN pip install Faker==18.13.0

2. 添加Serve应用代码

将应用代码直接打包进镜像比使用runtime_env更稳定:

FROM rayproject/ray:2.9.0
RUN pip install Faker==18.13.0

WORKDIR /serve_app
COPY fake.py /serve_app/fake.py

关键点:

  • WORKDIR设置容器工作目录
  • COPY将本地代码复制到镜像中

3. 构建并推送镜像

docker build . -t your_dockerhub_username/custom_image_name:latest
docker push your_dockerhub_username/custom_image_name:latest

在KubeRay中使用自定义镜像

在RayService配置中需做以下调整:

  1. 确保rayVersion与镜像中的Ray版本一致
  2. 设置head和worker节点的image字段为自定义镜像
  3. 移除serveConfigV2中已在镜像包含的runtime_env依赖

示例配置:

apiVersion: ray.io/v1alpha1
kind: RayService
metadata:
  name: fake-email-app
spec:
  serveConfigV2: |
    applications:
      - name: app
        route_prefix: /
        import_path: fake:app
  rayClusterConfig:
    rayVersion: '2.9.0'
    headGroupSpec:
      template:
        spec:
          containers:
            - name: ray-head
              image: shrekrisanyscale/serve-fake-email-example
    workerGroupSpecs:
      - replicas: 1
        template:
          spec:
            containers:
              - name: ray-worker
                image: shrekrisanyscale/serve-fake-email-example

最佳实践建议

  1. 版本控制:为镜像使用语义化版本号而非仅依赖latest标签
  2. 镜像优化
    • 使用多阶段构建减小镜像体积
    • 合理安排Dockerfile指令顺序以利用缓存
  3. 安全考虑
    • 使用非root用户运行容器
    • 定期更新基础镜像和安全补丁
  4. 生产环境建议
    • 使用私有镜像仓库存储业务镜像
    • 实施镜像扫描和安全策略

总结

通过将Serve应用及其依赖打包到自定义Docker镜像中,可以获得更稳定可靠的部署体验。这种方法避免了运行时的依赖下载,提高了集群启动速度,特别适合生产环境使用。KubeRay与自定义Docker镜像的结合为Ray Serve应用提供了强大的部署能力。

ray ray-project/ray: 是一个分布式计算框架,它没有使用数据库。适合用于大规模数据处理和机器学习任务的开发和实现,特别是对于需要使用分布式计算框架的场景。特点是分布式计算框架、无数据库。 ray 项目地址: https://gitcode.com/gh_mirrors/ra/ray

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

岑晔含Dora

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值