DOCKER部署RAY

使用说明
.                     // docker目录
├── ray               // ray测试代码目录
│   ├── brown.py      // 测试代码
├── .dockerignore
├── compose.yaml      // 容器创建文件
├── Dockerfile        // 镜像创建文件
└── README.md
 class="hljs-button signin active" data-title="登录复制" data-report-click="{"spm":"1001.2101.3001.4334"}">
Dockerfile

Dockerfile规定了镜像image的环境构成规则与镜像生成中的操作

ARG BASE_IMAGE
ARG FULL_BASE_IMAGE=rayproject/ray:"$BASE_IMAGE"
FROM $FULL_BASE_IMAGE

WORKDIR /ray
# 将ray目录复制到镜像/ray目录下
COPY ./ray .

# 安装matplotlib可能需要的系统依赖(根据需要选择安装)并清理APT缓存
RUN apt-get update && apt-get install -y \
    libfreetype6-dev \
    libpng-dev \
    libx11-dev \
    && rm -rf /var/lib/apt/lists/*

# 安装Python依赖
RUN pip install numpy matplotlib pandas psutil requests
 class="hljs-button signin active" data-title="登录复制" data-report-click="{"spm":"1001.2101.3001.4334"}"> class="hide-preCode-box">
docker-compose

docker-compose定义了多个容器如何协作,这里即多个容器如何形成ray集群

# Desc: docker-compose的配置文件
# docker-compose是一个用于定义和运行多容器Docker应用程序的工具
# 通过compose.yaml文件,可以配置应用程序的服务、网络、卷等
# 通过docker-compose命令,可以从compose.yaml文件中读取配置,然后创建并启动服务
# compose.yaml文件的版本格式
version: '3.8'

# 服务定义
services:
  # 服务名
  ray-head:
    # 镜像名
    image: rayproject/ray:latest
    # 容器名
    container_name: ray-head
    # 命令
    command: >
      ray start --head --port=6379 --dashboard-host=0.0.0.0
    # 端口映射
    ports:
      # ray头节点端口
      - "6379:6379"
      # dashboard端口
      - "8265:8265"
    # 挂载卷
    volumes:
      - ./ray:/ray
    # 环境变量
    environment:
      - RAY_ADDRESS=ray://ray-head:10001
  ray-worker-1:
    image: rayproject/ray:latest
    container_name: ray-worker-1
    command: >
      ray start --address=ray-head:6379
    volumes:
      - ./ray:/ray
    depends_on:
      - ray-head
 class="hljs-button signin active" data-title="登录复制" data-report-click="{"spm":"1001.2101.3001.4334"}"> class="hide-preCode-box">

性能测试

性能指标

分布式计算任务的性能指标主要有以下几种:

benchmark

综合考虑对性能的全面分析需求和测试的实践方法,我们主要测试吞吐量、任务完成时间、资源利用率,同时也关注到特定条件下负载分布、任务调度耗时和任务失败情况。

单机部署

单机部署性能表如下。结点数为2,性能优化主要通过调整批处理任务量来实现。根据未使用ray、无优化、优化后,以及不同任务量来记录运行时间,单位为秒。

class="table-box">
任务量10000*10100000*101000000*10
未使用Ray0.201.8018.90
无优化56.14--
有优化5.143.033.79

分析表中结果,可知在任务量较小时ray由于节点间调度耗费大量时间,性能无提升;在任务量较大时有明显提升。同时,优化前后也有明显提升(约为992%),并且在任务量较大时无优化的ray架构中划分过于细粒度导致超过负载,无法完成计算任务。

接下来再展示一些DashBoard和时序分布图:

dash1

这是10000*10节点资源利用情况。CPU和内存占用都很均匀,负载情况良好。

times1
times2

这是10000*10任务量下时序分布图,上图为优化前,下图为优化后。优化后明显时间片分布更加均匀。

优化分析

本任务的优化策略主要集中在调整批处理任务量上。批处理任务量太小时,总任务批次太多,难以调度,可能运行失败;批处理任务量太大时,单个节点内存负载大。因此,针对1000000*10的计算任务,调整不同的批处理任务量,进行了多次测试,结果如下:

数据汇总处理后,发现批处理任务量为10000和200000时性能较好,前者平均用时为3.99s,后者为3.79s。

Docker部署

Docker部署双结点测试结果如下:

docker1

经过分析,发现运行过程中内存占用率过高,明显限制了运行速度。增大Docker内存分配后,可以发现性能有明显提高:

docker2

docker3

综合比较Docker部署Ray的性能与单机部署的各种情况,可以发现单机优化后的性能最优,Docker部署的性能次之,单机无优化和不实用Ray的性能较差。这可能是结点间通信开销导致的。

结论

在适宜的环境下,通过针对性的优化,Ray架构可以明显提高分布式运算任务的性能

data-report-view="{"mod":"1585297308_001","spm":"1001.2101.3001.6548","dest":"https://blog.csdn.net/m0_73504303/article/details/140096955","extend1":"pc","ab":"new"}">>
注:本文转载自blog.csdn.net的什么.折子戏的文章"https://blog.csdn.net/m0_73504303/article/details/140096955"。版权归原作者所有,此博客不拥有其著作权,亦不承担相应法律责任。如有侵权,请联系我们删除。
复制链接

评论记录:

未查询到任何数据!