问题标签 [joblib]

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.

0 投票
2 回答
16671 浏览

python - 编写并行循环

我正在尝试在一个简单的示例上运行并行循环。
我究竟做错了什么?

代码的问题在于,当在 Python 3 中的 Windows 环境下执行时,它会打开num_corespython 实例来执行并行作业,但只有一个处于活动状态。这不应该是这种情况,因为处理器的活动应该是 100% 而不是 14%(在 i7 - 8 个逻辑内核下)。

为什么额外的实例没有做任何事情?

0 投票
1 回答
446 浏览

python-2.7 - 当需要(但不使用)cv2 时,Nonetype 不能从 joblib 调用

这个错误很奇怪,每当我在单元测试中使用 n_jobs > 1 的 sklearn 的 Kmeans 并且使用 setuptools 需要 cv2 时,会导致 joblib 调用 None 。

一个最小的失败示例:

设置.py

测试/some_test.py

测试/__init__.py是空的。

然后每当我运行时python2.7 setup.py test,我都会得到以下输出:

我不确定这是一个 opencv2、sklearn 还是 numpy 错误,这就是我去这里的原因。有人知道这里发生了什么吗?

一些特点:

  • "cv2"从删除install_requires删除两个错误
  • 不跑步的同上Kmeans
  • 没有提供 n_jobs 的 Kmeans 同上。
  • 打印时atexit.registerdelete_folder并且pool_folder就在错误之前,它们都不是None.

当您无法重现错误时也请发表评论:)

0 投票
1 回答
960 浏览

python - scikit-learn ExtraTreesClassifier - 为什么泡菜文件这么大?(几 GB)

使用 python + scikit-learn,我将“极端随机树”分类器 (ExtraTreesClassifier) 拟合到 100 个特征的约 900K 样本数组(实值 float64)。然后我试着腌制它。

我用以下方法实例化了分类器:

cls = ExtraTreesClassifier(n_estimators=10, random_state=0, n_jobs=-1)

拟合后,我尝试了两种保存方式:

并且,使用 joblib:

在普通的泡菜中,它占用了 4+ GB 的空间!在 joblib 版本中,它占用大约 1.5 GB 的空间。

它是否固有地存储了一些适合或预测的原始输入数据?

0 投票
1 回答
781 浏览

python - Scikit-Learn:多个 X-Vals 并行?

我想为我的数据尝试几种不同的模型并交叉验证它们,因此结果有些可靠。

对于我的交叉验证,我调用:

它并行执行了我的 10 倍交叉验证。由于我正在运行的机器有 40 个内核和足够的内存,我想并行尝试四个不同的“模型”值,每个值都进行 10 倍交叉验证。

但是,当我尝试以下列方式使用 joblib 时,出现错误:

其中crossVal是我定义的一个方法,主要是调用cross_val_score。

有没有一种优雅的方法可以在不手动启动几个不同的 python 文件的情况下做到这一点?

0 投票
2 回答
2370 浏览

python - 使用 python joblib 访问和更改全局数组

我正在尝试在 python 中使用 joblib 来加速一些数据处理,但我在尝试解决如何将输出分配为所需格式时遇到了问题。我试图生成一个可能过于简单的代码来显示我遇到的问题:

其输出如下所示:

从 Google 和 StackOverflow 搜索功能看来,使用 joblib 时,全局数组不会在每个子进程之间共享。我不确定这是否是 joblib 的限制,或者是否有办法解决这个问题?

实际上,我的脚本被其他代码位包围,这些代码依赖于这个全局数组的最终输出,格式为 (4, x , x ),其中x是可变的(但通常范围在 100 到数千之间)。这是我目前查看并行处理的原因,因为对于x = 2400,整个过程可能需要长达 2 小时。

没有必要使用 joblib(但我喜欢命名法和简单性),因此请随意提出简单的替代方法,最好记住最终数组的要求。我正在使用 python 2.7.3 和 joblib 0.7.1。

0 投票
0 回答
1439 浏览

python - Django parallel for loop joblib 警告:“多处理支持的并行循环不能嵌套在线程下,设置 n_jobs=1”

在 django 视图中调用func2会引发以下警告:

“多处理支持的并行循环不能嵌套在线程下,设置 n_jobs=1”

有一个相关的问题,但这里的解决方法是将线程名称重命名为“MainThread”,这似乎很奇怪,在我的情况下不起作用。

是否可以使用 joblib 在 django 视图中并行化 for 循环?有一个更好的方法吗?

0 投票
3 回答
467 浏览

python - 函数能否知道它们是否已经在 Python 中进行了多处理(joblib)

我有一个使用多处理(特别是 joblib)的函数来加速使用多个内核的慢例程。效果很好;没有问题。

我有一个使用多处理的测试套件(目前只是 multiprocessing.Pool() 系统,但可以将其更改为 joblib)来独立运行每个模块的测试功能。效果很好;没有问题。

问题是我现在已经将多处理功能集成到模块的测试套件中,以便池进程运行多处理功能。我想让它让内部函数知道它已经被多处理并且不会启动更多自己的分支。目前内部进程有时会挂起,但即使没有,显然在已经并行的例程中进行多处理也没有任何好处。

我可以想到几种方法(使用锁定文件,设置某种全局变量等)来确定我们所处的状态,但我想知道是否有一些标准的方法来解决这个问题(在 PY 多处理中)或在joblib中)。如果它只适用于 PY3,那很好,但显然也适用于 2.7 或更低版本的解决方案会更好。谢谢!

0 投票
0 回答
1948 浏览

python-2.7 - 使用 joblib.Parallel 进行多处理 - 并行化自写算法时出错

我有一个名为 ftrl_proximal() 的类,它适合数据模型。它是一个自行编写的分类器(不是 sklearn 的)。
当我只使用一个 CPU 运行时,该算法运行良好,但是一旦我尝试在多处理(交叉验证)中执行它,我就会收到如下所述的错误。代码是:

错误:

0 投票
1 回答
1878 浏览

scikit-learn - joblib.Load() 不起作用

我曾经joblib.dump保存我的文件并且它工作正常。现在我想使用访问我的.pkl文件,joblib.load()但收到以下错误:

我无法弄清楚为什么会这样。

0 投票
0 回答
1098 浏览

python - 加快将数百个 3D numpy 数组写入 hdf5 文件的速度

我正在开发的应用程序将包含多个图像(视野)、平面 (Z) 和荧光通道的专有 tiff 文件格式(Nikon nd2 文件)转换为 numpy 数组,然后保存在 HDF5 文件中。通常一个典型的数据集有 50 个视野(fov),每个视野有 5 个通道,每个通道有 40 个 z 平面)。整个文件大约 6 Gb。

这是我写的代码:

脚步:

0) 导入所有需要的库

1) 运行nd2文件转换的函数。转换为 numpy 数组是使用 nd2reader 一个 python 程序完成的,而且速度很快。为了减少循环次数并使用列表理解,我制作了一个元组列表,每个元组都包含通道和 fov 示例:[('DAPI', 0), ('DAPI', 1)] 其中 DAPI 是通道,fov 是号码。

注意:实验通道列表是一个包含字典的文件,该文件将通道(键)与感兴趣的基因(值)匹配。

2) 将图像组合成 3D 数组的功能,然后将其写入 HDF5 文件。我使用 h5py。我在生成后立即将每个 3D numpy 数组写入磁盘。

3) 脚本主体和joblib 调用并行处理目录中的所有文件。

运行时间

转换两个 5.9 Gb 文件的总时间
[Parallel(n_jobs=2)]: Done 1 out of 2 | 已用时间:7.4 分钟剩余时间:7.4 分钟
[并行(n_jobs=2)]:完成 2 出 2 | 经过:7.4 分钟完成
444.8717038631439 秒完成

问题:

我只是想知道是否有更好的方法来处理 io 到 hdf5 文件以加快转换速度,考虑到如果我想扩大流程,我将无法将所有 3D numpy 数组(fov ) 然后在处理完每个通道后写入它们。谢谢!