如何使用 Dask.array 高效地将大型 numpy 数组发送到集群

2023-12-12

我的本地计算机上有一个大型 NumPy 数组,我想将其与集群上的 Dask.array 并行化

import numpy as np
x = np.random.random((1000, 1000, 1000))

然而,当我使用 dask.array 时,我发现我的调度程序开始占用大量 RAM。为什么是这样?这些数据不应该交给工人吗?

import dask.array as da
x = da.from_array(x, chunks=(100, 100, 100))

from dask.distributed import Client
client = Client(...)
x = x.persist()

每当你persist or compute一个 Dask 集合,数据发送到调度程序,然后从调度程序发送到工作人员。如果您想绕过在调度程序上存储数据,那么您将必须学习如何移动数据 with scatter.

您有三个选择:

  1. 不要在客户端计算机上加载数据
  2. 先分散再分块
  3. 分块然后分散

不要在客户端计算机上加载数据

最好的方法是将加载数据作为计算的一部分,而不是在本地进行。

Before
x = load_array_from_file(fn)  # load into a local numpy array
x = da.from_array(x, chunks=(100, 100, 100))  # split with dask
x = x.persist()
After
x = dask.delayed(load_array_from_file)(fn)
x = da.from_delayed(x, shape=(1000, 1000, 1000), dtype=float)
x = x.rechunk((100, 100, 100))
x = x.persist()

有关创建 dask 数组的更多信息如下:http://dask.pydata.org/en/latest/array-creation.html

先分散再分块

您可以将 numpy 数组直接分散给工作人员

future = client.scatter(x)
x = da.from_delayed(future, shape=x.shape, dtype=x.dtype)
x = x.rechunk((100, 100, 100))
x = x.persist()

这会将您的数据直接移动到工作人员,然后从那里分块。这很好,因为它绕过了调度程序。但是,如果您的工作人员开始出现故障,您现在将面临数据丢失的风险。仅当您处于大规模并行系统中时这才重要。

这也有点低效,因为所有数据都集中在一个工作人员上,而不是分散开来。你可能会打电话client.rebalance或继续阅读。

成块然后分散

您可以使用本地调度程序在本地对数据进行分块,然后分散到集群中。

x = da.from_array(x, chunks=(100, 100, 100))
x = x.persist(get=dask.threaded.get)  # chunk locally
futures = client.scatter(dict(x.dask))  # scatter chunks
x.dask = x  # re-attach scattered futures as task graph

留在当地

或者,您可以继续在本地使用 dask,无论是使用线程调度程序,还是仅使用本地进程的分布式调度程序。

client = Client(processes=False)

这将停止本地进程、调度程序和工作线程之间不必要的数据复制。它们现在都在您的同一个本地进程中。

也可以看看:如何在分布式Dask中高效提交带有大参数的任务?对于这个答案的基于任务的版本

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何使用 Dask.array 高效地将大型 numpy 数组发送到集群 的相关文章

  • 有一些 numpy.map 吗?

    我可能在这里遗漏了一些明显的东西 但我遗漏了一个功能numpy map 这与 Python 的相同map函数 但将输出收集在numpy大批 例如 我可以有一个图像生成器genImage i 生成 2D 图像 大小 m n 基于单个输入 我想
  • Pandas 用单位插值数据

    大家好 几年来我一直在寻找 Stackoverflow 它对我帮助很大 以至于我以前不需要注册 但今天我遇到了一个使用 Python 与 Pandas 和 Quantities 也可能是 unum 或 pint 的问题 我尽力发表清晰的帖子
  • 内存高效的随机数迭代器,无需替换

    我觉得这应该很容易 但经过多次搜索和尝试后我找不到答案 基本上 我有大量的物品 我想以随机顺序进行采样 而不需要更换 在本例中 它们是二维数组中的单元 我用于较小数组的解决方案不会转换 因为它需要对内存数组进行改组 如果我必须采样的数量很小
  • 使用自定义颜色渐变填充两条线之间的区域

    我正在做一项几乎已经完成的作业 但我想对其添加一些小改动 尝试使用基于温度的颜色图而不是简单的颜色来填充两条线之间的区域 绘制线条的方式本质上使它们成为独立的实体 所以我知道我可能需要两个彼此相遇或重叠的颜色图来完成此任务 但我不太确定如何
  • 如何在 ndarray 内创建一个球体? [复制]

    这个问题在这里已经有答案了 我有一个 ndarray 大小32x32x32 我想在数组内创建一个球体 其中心位于 x y 半径为 4 像素 球体的值为 1 而数组的值为 0 这如何在 python 中完成 这是生成数组的代码 import
  • 绘制到图像对象

    我可以保存一个图imshow 因为它返回一个图像对象 如下所示 image plt imshow list interpolation None 后来我想创建其中许多图像的动画 将其保存在列表中并将其渲染为视频 如果这种方法很愚蠢 请告诉我
  • 计算矩阵乘法的子集

    当我有两个非稀疏矩阵时A and B 有没有一种方法可以有效地计算C A T dot B 当我只想要元素的子集时C 我有所需的指数C以指定的CSC格式存储here http docs scipy org doc scipy referenc
  • Numpy 优化

    我有一个根据条件分配值的函数 我的数据集大小通常在 30 50k 范围内 我不确定这是否是使用 numpy 的正确方法 但是当数字超过 5k 时 它会变得非常慢 有没有更好的方法让它更快 import numpy as np N 5000
  • 如何将 PIL 图像转换为 NumPy 数组?

    如何转换 PILImage来回转换为 NumPy 数组 这样我就可以比 PIL 进行更快的像素级转换PixelAccess允许 我可以通过以下方式将其转换为 NumPy 数组 pic Image open foo jpg pix numpy
  • 从“dask.DataFrame”中切出几行

    通常 当与大型企业合作时dask DataFrame 仅获取几行来测试所有后续操作会很有用 目前 根据对 Dask 数据框进行切片 https stackoverflow com questions 44475492 slicing a d
  • Python:有类似matlab的反斜杠运算符吗?

    Matlab 和 Julia 有反斜杠运算符来求解线性系统 我真的不知道 Matlab 是做什么的 但是 Julia 不计算逆函数 但它计算逆函数对给定向量的影响 这在计算上更容易 我有一个 numpy 稀疏矩阵 我想将其伪逆应用于向量 P
  • 熊猫:什么是视图?

    请帮助我理解 什么是view在熊猫中 我知道如果我们改变一些东西view我们总是对原始对象进行更改 但物体的视图和原始物体有不同id s例如 这是否意味着view是另一个对象引用原始对象吗 机制是什么 我尝试过但找不到解释 import p
  • 从 SQL 数据库导入表并按日期过滤行时,将 Pandas 列解析为日期时间

    我有一个DataFrame列名为date 我们如何将 日期 列转换 解析为DateTime object 我使用 Postgresql 数据库加载日期列sql read frame 的一个例子date列是2013 04 04 我想做的是选择
  • 从嵌套列表创建数组时抑制 Numpy 中的科学记数法

    我有一个嵌套的 Python 列表 如下所示 my list 3 74 5162 13683628846 64 12783387559 86 1 81 9 55 116 189688622 37 260332262 0 1 97 2 2 7
  • 将二进制图像划分为像素数据“块”

    我使用 Python 和 PIL 作为在二进制图像中嵌入数据的工作的一部分 并且需要分析像素组以确定要操作的适当像素 以便嵌入数据 图像需要被分割成相等的像素数据 块 以供分析 但我正在努力想出一种适当的方法来做到这一点 我尝试过使用 Py
  • 从 numpy 数组中删除连续的 RGB 值

    我最初根据灰度图像的初始数组创建了一个子数组 从 numpy 数组中删除连续数字 https stackoverflow com questions 50743769 deleting consecutive numbers from a
  • 在 Python 中绘制正弦曲线的傅里叶变换

    以下 python 程序绘制正弦曲线 import matplotlib pyplot as plt import numpy as np Canvas plt style use ggplot Frequency Oscillations
  • 在 Cython 中访问 NumPy 记录数组列

    我是一位相对经验丰富的 Python 程序员 但很长一段时间没有编写任何 C 语言 并且正在尝试理解 Cython 我正在尝试编写一个 Cython 函数 该函数将在 NumPy 记录的列上进行操作 到目前为止我的代码如下 recarray
  • Python 时间序列聚合

    我有一个像这样的数据框 df project ID country prj start prj end revenue profit 2131 USA 201603 201703 100000 30000 5124 UK 201502 20
  • 如何调用 Numpy 数组中的元素?

    这看起来是一个非常简单的问题 但我找不到答案 如何调用 Numpy 数组中的元素 import numpy as np arr np array 1 2 3 4 5 6 7 8 9 10 print arr 0 0 上面的代码不起作用 只需

随机推荐

  • sed 或 awk 打印单词之间的行

    如何打印之间的所有行 B 部分 到行中开始的下一个 部分 单词 A 节 B 节 C 部分 sed n section B n section B d q p yourfile 上述 sed 脚本的说明 分步骤 虽然线路没有 从 开始sect
  • 通过改变 ID 或文件名关闭资源管理器窗口

    我已经在这些论坛上搜索了几个小时 试图找到一种方法来编写我认为比这简单得多的代码 所以这就是我想做的 我的任务计划程序每两天运行一个脚本 该脚本打开一个explorer exe文件夹的路径 然后删除该文件夹中的所有文件 调度程序在我不在办公
  • 错误:调用线程无法访问此对象,因为另一个线程拥有它

    我收到这个错误 这是代码 Image image BitmapImage BmpImg MemoryStream ms public void Convert ms new MemoryStream image Save ms ImageF
  • 为什么在使用初始化器、构造函数和方法调用时打印语句按此顺序执行?

    这是我正在运行的代码 该代码的输出是 4 2 1 3 有人可以解释一下为什么结果是按这个顺序打印的 public class goFuncTest goFuncTest System out print 1 System out print
  • asp.net MVC webmatrixmembershipprovider 启动

    从 mvc2 mvc3 迁移后有一些小问题 我在调用 Membership GetAllUsers 时遇到以下问题 似乎不是 System Web Security SqlMembershipProvider WebMatrix WebDa
  • 使用 json_encode() 时删除数组索引引用

    我使用 jQuery 制作了一个小应用程序datepicker 我从 JSON 文件中设置不可用的日期 如下所示 dates 2013 12 11 2013 12 10 2013 12 07 2013 12 04 我想检查给定的日期是否已在
  • 如何在给定 XSD 的情况下在 C# 中进行多态反序列化?

    我给出以下内容 1 XML 架构 XSD 文件 使用 XSD EXE 工具编译为 C 类 2 RabbitMQ 消息队列 包含 XML 格式中定义的任何类型的格式良好的消息 以下是不同消息的两个片段
  • Haskell:基础阅读 Int

    目标是用 Haskell 编写 Nim 游戏作为学校作业 我是 Haskell 新手 当我尝试读取输入时会出现奇怪的行为 目标是读取两个整数 它不是打印第一条消息 然后提示 然后继续第二条消息 而是只打印两条消息 而我无法提供正确的输入 这
  • 从单独的线程类获取数据时不显示进度对话框

    我正在使用单独的线程从 url 获取 json 对象 但问题是我想在获得结果时显示进度对话框 我创建了一个进度对话框 并在线程执行之前和之后调用显示和关闭 但未显示进度对话框 这是我调用线程的方式 private void getRecor
  • 如何使用 web3js 发送 ERC20 令牌

    我目前使用的是 0 2x x 版本的 Web3 JavaScript API 我通过在 Solidity 中创建智能合约 在 REMIX IDE 上 来部署自定义 ERC20 代币 我安装了 MetaMask 并进行了测试https wal
  • 在引导 Angular2 应用程序之前发出 AJAX 请求 [重复]

    这个问题在这里已经有答案了 在我的 Angular2 应用程序中 我需要根据此调用的结果从 AuthenticationService 和引导应用程序调用某些函数 问题是 AuthenticationService 依赖于来自 Angula
  • 在 MATLAB 中计算实际频率值与 FFT 绘图索引之间的关系时出现混乱

    我知道有很多类似的问题 但我仍然无法找出答案 假设 MATLAB 中有时间信号 t 0 1 44100 1 和频率为 500Hz 的余弦信号 x cos 2 pi 500 t 现在 我正在尝试绘制使用以下方法获得的幅度谱fft信号 x 上的
  • 点击事件触发两次

    我试图在单击标签文本时运行某些函数 但单击事件触发了两次 HTML
  • 排除/覆盖 npm 提供的类型

    我有一个 npm 包 里面写得不好 打字也过时了 我已经编写了自己的类型 现在我想知道是否可以以某种方式从 npm 包中排除原始类型 它不是一个简单的接口扩展 原来的在这一点上基本上是垃圾 当然 使用 tsconfig json 中的排除列
  • 非常基本的 dcg prolog 语法

    我试图理解序言和定语从句语法 但我很难理解它们 我真的很想了解如何使用 dcg 语法 这里我举两个例子 第一个实际上是来自该论坛上另一个问题的代码 但还有一个附加问题 代码如下 s gt first operator second firs
  • Android studio:如何使用 ViewPager 添加选项卡

    我想在片段中添加带有 pagerview 可滚动 的选项卡 public class MyFragment extends Fragment private FragmentTabHost tabHost Override public V
  • Symfony2 无法正确保存会话

    我在 Symfony 在每个页面加载时创建一个新会话而不是跨请求携带数据时遇到问题 config yml 中会话部分的 auto start 设置为 false 常规 php 会话工作正常 只有在 symfony 中运行时我才会遇到问题 例
  • 最大值可以以两位数精度(2位精度)存储在Java浮点数中吗?

    我如何找到可以存储在 float 中的最大两位小数精度值 根据我的理解 在 32 位浮点数中 我们有 24 23 1 来存储不包括指数的数字 2 24 是我们可以存储的最大值 提前致谢 斯里拉曼 2 24 是您可以准确存储的最大整数 您可以
  • 单击时标签改变颜色

    我有一个 VBA Excel 用户单击标签 Active X 文本标签 来执行一些操作 标签属性为 BackStyle 透明 但当用户单击时 标签保持不透明 如白色或设置 BackColor 属性的任何内容 当用户点击标签时如何保持透明 不
  • 如何使用 Dask.array 高效地将大型 numpy 数组发送到集群

    我的本地计算机上有一个大型 NumPy 数组 我想将其与集群上的 Dask array 并行化 import numpy as np x np random random 1000 1000 1000 然而 当我使用 dask array