问题标签 [ray]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
python - 如何修复 ray 不断增长的内存使用量?
我开始使用 ray 进行分布式机器学习,但我已经遇到了一些问题。内存使用量只是在增长,直到程序崩溃。尽管我不断清除列表,但内存不知何故泄漏。知道为什么吗?
我的规格:操作系统平台和发行版:Ubuntu 16.04 Ray 安装自:二进制 Ray 版本:0.6.5 Python 版本:3.6.8
我已经尝试使用实验队列而不是 DataServer 类,但问题仍然相同。
运行一段时间后,我收到此错误消息:
python - 如何在 ray.tune.run_experiments 中指定检查点目录
ray.tune.run_experiments 在“/ray_results/test/DDPG_VAV-v0_0_2019-04-17_21-43-43ak0121vf/”之类的路径上检查模型,太长了,如何更改此检查点路径
我希望我可以将它设置为“~/ray_results/test/DDPG_2019-04-17/”
python - After using @ray decorator can't add data to dictionary
I've wrote a function which get some data from API and return to dictionary. When i executed it works ok. The problem is when I am trying to execute this function twice in "the same time" using ray library. Data are getting from api correctly but they are not added to the dictionary.
when i execute this code bellow working ok
In this case data are not added to the dictionary, do you know how to fix it? I've tried to add separately dictionaries for all call_items function but it is also don't work correctly as i expected.
ray - Ray获取头节点Redis地址
我想在具有多个节点的集群上运行 ray。我只能将非交互式作业提交到集群,所以我不确定如何在作业运行时以编程方式获取 redis 地址。
我相当确定在多个节点上启动 ray 的方式是这样的:
但我需要知道头节点的redis地址。当您启动头节点时,它会打印:
我正计划捕获输出ray start --head &> tee redis_port.txt
,然后grep
输入redis_address.txt
以查找redis地址,但似乎输出的那部分没有被捕获redis_address.txt
,我查看了由射线会话创建的临时目录中的所有.out
和文件,但没有.err
其中也有。
必须有一些更好的方法来做到这一点。查找头节点的redis端口的预期方法是什么?
python-3.x - 在 EC2 主节点上初始化 Ray 时出错
我正在使用 Ray 在 AWS EC2 上的 Ubuntu 14.04 集群上运行并行循环。以下 Python 3 脚本在我的本地机器上运行良好,只有 4 个工作人员(导入和本地初始化省略):-
这里不寻常的是,simulation.run 在运行时必须从外部文本文件中读取不同的测试编号。循环的所有迭代的文件名相同,但测试编号不同。
我使用 Ray 启动了一个 EC2 集群,可用的 CPU 数量等于 n(我相信 Ray 不会默认使用多线程)。然后我不得不使用 rsync 将文件列表(包括 Python 脚本)从本地机器复制到主节点,因为我无法从配置中执行此操作(请参阅最近的问题:“Ray 未在 EC2 上启动工作人员” )。然后 ssh 进入该节点,并运行脚本。结果是文件查找错误:-
然后问题似乎对所有其他工人重复并最终放弃:-
我怀疑我没有正确初始化 Ray。我尝试使用 ray.init(redis_address="172.31.50.149:6379") - 这是集群形成时给出的 redis 地址,但错误或多或少相同。我还尝试在 master 上启动 Ray(以防它需要启动):-
....ETC。
python - Ray Cluster 如何访问所有节点资源
我可以访问节点集群,我的理解是,一旦我在具有相同 redis 地址的每个节点上启动 ray,头节点就可以访问所有节点的所有资源。
主脚本:
setup_node.sh
是
和
test_multi_node.py
是
Ray 似乎在所有节点上成功启动,python 脚本打印出与我有节点一样多的 IP 地址(它们是正确的)。但是,在打印资源时,它只有一个节点的资源。
如何让 ray 可以访问所有节点的所有资源?我一定有一个根本的误解,因为我认为在其他节点上设置 ray 的目的是让它访问他们的所有资源。
根据这条光线应该自动检测新节点上的资源,所以我不知道这里发生了什么。
python-3.x - 如何使用 Python Ray 在不耗尽内存的情况下并行处理大量数据?
我正在考虑使用 Ray 来简单地实现数据的并行处理:
- 有大量需要处理的数据项可以通过流/迭代器获得。每件物品的尺寸都很大
- 应该在每个项目上运行一个函数,并将产生一个很大的结果
- 处理后的数据应该在流中传递或存储在某种接收器中,该接收器只能在一段时间内接受一定数量的数据
我想知道这是否可以在 Ray 中完成。
目前我有以下基于pythons多处理库的简单实现:
- 一个进程读取流并将项目传递给队列,该队列将在 k 个项目后阻塞(这样队列所需的内存不会超过某个限制)
- 有几个工作进程将从输入队列中读取并处理项目。已处理的项目被传递到结果队列,该队列的大小再次受到限制
- 另一个进程读取结果队列以传递项目
这样一来,一旦工作人员无法处理更多项目,队列就会阻塞,并且不会尝试将更多工作传递给工作人员。如果 sink 进程无法存储更多的项目,结果队列将阻塞,这反过来又会阻塞 worker,而 worker 又会阻塞输入队列,直到 writer 进程可以再次写入更多结果。
那么Ray 有抽象来做这样的事情吗?我如何确保只能将一定数量的工作传递给工作人员,我如何才能拥有像单进程输出函数这样的东西,并确保工作人员不能用如此多的结果淹没该函数,以至于内存/存储已用完?
deep-learning - Ray Tune:调度程序和搜索算法如何交互?
在我看来,将超频带与贝叶斯优化搜索相结合的自然方法是让搜索算法确定每个括号并让超频带调度程序运行该括号。也就是说,贝叶斯优化搜索每个括号只运行一次。查看Tune的源代码,我不清楚 Tune 库是否应用了这种策略。
特别是,我想知道 Tune 库如何处理搜索算法和试验调度程序之间的传递。例如,如果我将 SkOptSearch 和 AsyncHyperBandScheduler(或 HyperBandScheduler)一起调用如下:
根据上面链接的源代码和此处的源代码,在我看来,sk_search
一次最多返回 4 个试验组,但超带应该一次查询sk_search
算法以进行N_sizeofbracket
试验。
amazon-ec2 - Ray EC2 集群上的工作节点状态:更新失败
我现在有一个在 EC2(Ubuntu 16.04)上工作的 Ray 集群,它有一个 c4.8xlarge 主节点和一个相同的工作节点。我想检查是否使用了多线程,所以我运行测试以增加相同 9 秒任务的数字 (n)。由于该实例有 18 个 CPU,我预计该作业需要大约 9 秒,最多 n<=35(假设一个 CPU 用于集群管理),然后出现故障,或者在切换到 36 个 vCPU 时增加到大约 18 秒每个节点。
相反,集群只并行处理了 14 个任务,然后执行时间跃升至 40 秒,并随着 n 的增加而继续增加。当我尝试使用 c4xlarge 主机(4 个 CPU)时,时间与 n 成正比,即它们是串行运行的。所以我推测master实际上需要4个系统CPU,而worker节点根本没有被使用。但是,如果我添加第二个工人,n>14 的时间比没有它的时间少约 40 秒。我还尝试了 target_utilization_factor 小于 1.0 的值,但这没有任何区别。
没有报告错误,但我确实注意到 EC2 实例控制台中工作人员的 ray-node-status 是“更新失败”。这很重要吗?谁能告诉我这种行为?
python - 与 python 多处理相比,Python ray 代码的工作速度较慢
我想并行发出 http 请求,这是我的代码(骨架)在使用 ray 时的样子:
与以下相比,它的运行速度要慢得多:
这台机器有两个核心,似乎 ray 只启动了两个进程来处理 500 个请求。有人可以告诉我如何告诉 ray 每个请求启动 1 个工作人员/进程吗?