栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

Ray 部署及性能测试

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Ray 部署及性能测试

分布式计算框架 Ray 的部署及性能测试
Lab4 实验报告
QvQ

文章目录
    • Ray 简介
    • 部署过程
    • 性能指标
    • 性能测试
    • 调参改进
    • Docker 部署及测试
    • 总结收获
    • 参考资料

Ray 简介

Ray 是一个分布式学习框架,主要用于满足高性能计算的需求。

具体地,针对 Pandas/Numpy 矩阵运算的分布式、异步调用支持进行优化,通过 remote function 自动向集群添加节点、调度任务。

部署过程

首先安装 Ray 初级版本:

pip install -U ray
pip install ‘ray[default]’

查看版本 ray --version 的结果如下说明安装成功:

ray, version 1.13.0

(默认 python 环境已搭建完成)编写 test.py 测试文件:

通过 ray.init() 启动系统
把远程函数用 remote 标识(远程函数是无副作用的)
通过 ray.get() 获得函数返回结果

运行时,首先执行以下指令生成 head 节点:

ray start --head

这时会自动分配 head 节点 IP 端口,接下来,直接运行测试文件:

python3 test.py

计算任务仍是在本机运行的,只不过是以分布式的形式。

在执行过程中,Ray 提供了可视化硬件资源的 API,按照提示打开链接,可以在浏览器中看到资源占用情况:

上图显示了各节点对 RAM,CPU,Disk 等资源的利用率,能粗略估计系统压力。

性能指标

由于 Ray 主要用于执行计算任务,我们提出的性能评估标准主要用于衡量运算效率。

  • 系统响应时间:衡量 Ray 分布式节点的响应速度,由 T r e m o t e   f u n c t i o n   s t a r t − T t e s t   p r o g r a m   s t a r t T_{remote function start}-T_{test program start} Tremote function start​−Ttest program start​ 得到
    • 优点:能准确体现出 Ray 分配任务、启动节点时间效率
    • 缺点:仅包含了初始化过程,忽略了节点执行计算任务的时间开销
  • 平均计算时间:各节点进行计算任务的用时的平均值
    • 优点:净运行时间,综合体现了 Ray 分布式运算的调度性能
    • 缺点:与硬件相关性较大,需要控制处理器核心数
  • 延迟时间:Ray 完成整个计算任务所用的时间,由 T t e s t   p r o g r a m   e n d − T t e s t   p r o g r a m   s t a r t T_{test program end}-T_{test program start} Ttest program end​−Ttest program start​ 得到
    • 充分体现了 Ray 分配任务、执行运算的整体效率,与未进行分布式部署的本地朴素计算对比可以获得 Ray 的相对优化效率
  • 计算时间标准差:提取各节点计算时间 T 1 ∼ T n T_1 sim T_n T1​∼Tn​,统计此数列标准差
    • 优点:如果分布式系统调度合理,各节点运行时间应该是大致相等的,如果标准差过大,说明 Ray 鲁棒性不强,任务分配不平衡,运行效率容易出现波动
    • 缺点:难以生成合适的测试数据来完成对任务分配的考核
  • 效率提升系数:每增加一个核(或 gpu)任务执行效率提升的百分比
    • 优点:能反映出 Ray 在不同硬件条件下的计算能力,可以用于优化硬件配置
    • 缺点:在个人电脑(虚拟机)上很难控制核数、gpu数等硬件条件用于实验,系数不易测量

综合考虑本机性能是否支持、评价体系是否完善、测试数据是否朴实等问题,我们选择了系统响应时间和平均计算时间作为此次实验 Ray 性能测试的标准。

性能测试

由于 Ray 未提供性能测试工具,且考虑到其主要用于完成分布式训练的计算任务,我们选择矩阵乘法(朴素矩阵乘法,时间复杂度 O ( N 3 ) O(N^3) O(N3),空间复杂度 O ( N 2 ) O(N^2) O(N2))作为测试程序。

进行单机部署测试,通过 python time 包获得关键时间,统计得出的数据如下:

测试指标节点1节点2节点3节点4平均数值
平均计算时间1.11042.13832.99293.78062.5056
系统响应时间0.57411.02511.51602.07941.2986

可以发现:

  • 发生时间递增,节点1 至 节点4 按照先后顺序分别分配任务
  • 系统响应时间做差,可以得到 Ray 启动每个节点的时间大致为 0.502
  • 平均计算时间做差,可以得到 Ray 节点执行每个任务大概耗时 0.891

尽管数据量的增大会增大计算时间的资源占比,启动节点、分配任务的消耗还是不可忽视的。

调参改进

这一部分的任务是通过简单调参优化上述测试指标(优化效率不小于 20 % 20% 20%)。

浏览相关资料可知,@ray.remote 可以添加不同的参数,比如用 num_return_vals 确定函数返回值个数等。

我们选择改变 num_gpus 参数(设置为 2),控制函数节点可以使用的 gpu 数量,用于加速计算过程,效果如下:

测试指标节点1节点2节点3节点4平均数值
平均计算时间0.88161.52342.23282.66651.8261
系统响应时间0.45970.86001.29001.73801.0869

与我们的预估效果相同:响应时间未有明显改进,计算时间有较大幅度的优化。

综合效率提升: 2.5056 − 1.8261 2.5056 = 27.12 % frac{2.5056-1.8261}{2.5056}=27.12% 2.50562.5056−1.8261​=27.12%

Docker 部署及测试

Docker 可以让开发者打包应用以及依赖包到一个轻量级、可移植的容器中,实现虚拟化。

在这一任务中,我们通过 docker 获得一致的镜像(ubuntu),在不同容器构成的节点中安装 pip3,python3,Ray,配置运行环境。

由于相较于本机裸跑环境下更长、更不稳定的响应时间,在 docker 测试中我们主要关注于不同节点间任务分配的平衡性。

首先,下载 Ubuntu 镜像:

docker pull ubuntu

在测试文件夹下,打开两个终端,作为以后容器(节点)的操作界面。

在两个终端中分别执行如下指令,生成 docker 容器(也是即将使用的节点),命名为 ubuntu-01,ubuntu-02:

docker run -it --name ubuntu-01 ubuntu bash
docker run -it --name ubuntu-02 ubuntu bash

新打开一个终端,查看两个容器的 IP 地址:

docker inspect -f “{{ .NetworkSettings.IPAddress }}” ubuntu-01
docker inspect -f “{{ .NetworkSettings.IPAddress }}” ubuntu-02

可以看到,地址分别为 172.17.0.2,172.17.0.3。

在两个容器内分别配置环境:安装 python,ray 的依赖:

apt update && apt install python3
apt install python3-pip
pip3 install ray

之后和单机操作相同,不过注意启动 ray 时要绑定 IP 地址,比如将 ubuntu-01 作为 head 节点:

ray start --head --node-ip-address 172.17.0.2

另一个节点作为 worker 节点:

ray start --address=‘172.17.0.2:6379’ --redis-password=‘5241590000000000’

之后运行相同的程序,不过注意,ray.init() 参数需要改变,应该绑定到合适的端口,与上文中 head 节点相同:

ray.init(address=‘172.17.0.2:6379’, _redis_password=‘5241590000000000’)

在容器中新建测试文件是比较麻烦的:

  • 用 echo 输入文本到文件中
  • apt 安装 vim,之后再进行编辑

所以,我们选择将原有的本地文件拷贝到容器中。

先获得容器长 ID:

sudo docker inspect -f ‘{{.ID}}’ ubuntu-01

进行测试文件拷贝:

sudo docker cp /home/jiuguaiwf/lab4/test.py eec0fcfaf3e83929783e31c5eb1b51bf5e44fb40367914135fc627a24ea36aa9:/test.py

运行测试程序与之前相同:

python3 text.py

docker 部署测试结果如下(系统响应时间在测试时波动过大,略去):

测试指标节点1节点2节点3节点4平均数值
平均计算时间1.59792.47473.97344.72213.1920

可以看到,docker 容器内的运行效率是有明显降低的,速度降低了 3.1920 − 2.5056 2.5056 = 27.39 % frac{3.1920-2.5056}{2.5056}=27.39% 2.50563.1920−2.5056​=27.39%。

总结收获

通过完成 Lab4 ,我们收获良多:

  • 动手实现了分布式系统的部署,为以后利用高性能框架打下基础
  • 简单学习了 docker 等工具的使用,工程操作更加熟练
  • 感受了限制系统性能的因素,对硬件资源、结构算法的协调有了进一步认识
  • 通过手动调参优化了系统性能,加深了对课程内容的理解
  • 查阅了大量资料,锻炼了学习能力
参考资料

使用docker搭建Ray集群
Ray分布式计算框架详解
分布式执行框架——Ray简单使用
使用Ray集群简单创建Python分布式应用程序

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/1001008.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号