在急流容器内时出现 hdbscan 错误

Posted

技术标签:

【中文标题】在急流容器内时出现 hdbscan 错误【英文标题】:hdbscan error when inside rapids container 【发布时间】:2021-03-12 21:38:20 【问题描述】:

我在 rapidsai docker 容器中结合使用 rapids UMAP 和 HDBSCAN:rapidsai/rapidsai-core:0.18-cuda11.0-runtime-ubuntu18.04-py3.7

import cudf
import cupy
from cuml.manifold import UMAP
import hdbscan 
from sklearn.datasets import make_blobs
from cuml.experimental.preprocessing import StandardScaler

blobs, labels = make_blobs(n_samples=100000, n_features=10)
df_gpu=cudf.DataFrame(blobs)

scaler= StandardScaler()
cupy_scaled=scaler.fit_transform(df_gpu.values)


projector= UMAP(n_components=3, n_neighbors=2000)
cupy_projected=projector.fit_transform(cupy_scaled)


numpy_projected=cupy.asnumpy(cupy_projected)
clusterer= hdbscan.HDBSCAN(min_cluster_size=1000, prediction_data=True, gen_min_span_tree=True)#, core_dist_n_jobs=1) 
clusterer.fit(numpy_projected)

如果我使用core_dist_n_jobs=1 会得到一个已修复的错误,但会使代码变慢:

----------------------------------- ---------------------------- TerminatedWorkerError Traceback(最近一次调用 最后)在 1 clusterer= hdbscan.HDBSCAN(min_cluster_size=1000, prediction_data=True, gen_min_span_tree=True) ----> 2 clusterer.fit(numpy_projected)

/opt/conda/envs/rapids/lib/python3.7/site-packages/hdbscan/hdbscan_.py 适合(自我,X,y) 第917章 第918章 --> 919 self._min_spanning_tree) = hdbscan(X, **kwargs) 920 第921章

/opt/conda/envs/rapids/lib/python3.7/site-packages/hdbscan/hdbscan_.py 在 hdbscan(X, min_cluster_size, min_samples, alpha, cluster_selection_epsilon,度量,p,leaf_size,算法,内存, approx_min_span_tree, gen_min_span_tree, core_dist_n_jobs, cluster_selection_method,allow_single_cluster, match_reference_implementation, **kwargs) 第613章 第614章 --> 615 core_dist_n_jobs, **kwargs) 616 else: # Metric 是一个有效的 BallTree 指标 617 # TO DO: 需要启发式来决定何时去 boruvka;

/opt/conda/envs/rapids/lib/python3.7/site-packages/joblib/memory.py 在 调用(self, *args, **kwargs) 350 351 def 调用(自我,*args,**kwargs): --> 352 返回 self.func(*args, **kwargs) 353 354 def call_and_shelve(self, *args, **kwargs)

/opt/conda/envs/rapids/lib/python3.7/site-packages/hdbscan/hdbscan_.py 在 _hdbscan_boruvka_kdtree(X, min_samples, alpha, metric, p, 叶大小,大约最小跨度树,根最小跨度树,核心距离n_jobs, **kwargs) 第276章//3 第277章 --> 278 n_jobs=core_dist_n_jobs, **kwargs) 第279章 280 # 按权重对min_spanning_tree的边进行排序

hdbscan/_hdbscan_boruvka.pyx 在 hdbscan._hdbscan_boruvka.KDTreeBoruvkaAlgorithm.init()

hdbscan/_hdbscan_boruvka.pyx 在 hdbscan._hdbscan_boruvka.KDTreeBoruvkaAlgorithm._compute_bounds()

/opt/conda/envs/rapids/lib/python3.7/site-packages/joblib/parallel.py 在 call(self, iterable) 1052 1053 with self._backend.retrieval_context(): -> 1054 self.retrieve() 1055 # 确保我们收到最后一条消息,告诉我们完成了 1056 elapsed_time = time.time() - self._start_time

/opt/conda/envs/rapids/lib/python3.7/site-packages/joblib/parallel.py 在检索(自我) 931尝试: 932 如果 getattr(self._backend, 'supports_timeout', False): --> 933 self._output.extend(job.get(timeout=self.timeout)) 934 其他: 第935章

/opt/conda/envs/rapids/lib/python3.7/site-packages/joblib/_parallel_backends.py 在 wrap_future_result(未来,超时) 540 AsyncResults.get 从多处理。""" 541尝试: --> 542 返回future.result(timeout=timeout) 543 除了 CfTimeoutError 作为 e: 第544章

/opt/conda/envs/rapids/lib/python3.7/concurrent/futures/_base.py 结果(自我,超时) 第433章 第434章 --> 435 返回 self.__get_result() 436 其他: 第437章

/opt/conda/envs/rapids/lib/python3.7/concurrent/futures/_base.py __get_result(自我) 第382章 383 如果 self._exception: --> 384 引发 self._exception 385 其他: 第386章

TerminatedWorkerError: 执行者管理的工作进程是 意外终止。这可能是由分段错误引起的 在调用函数时或由于过多的内存使用导致 杀死工作人员的操作系统。

worker 的退出代码是 EXIT(1)

有没有办法解决这个问题,但仍然保持 HDBSCAN 速度快?

【问题讨论】:

【参考方案1】:

尝试将min_samples 设置为一个值

在 https://github.com/scikit-learn-contrib/hdbscan/issues/345#issuecomment-628749332 中,lmcinnes 说您“如果您的 min_cluster_size 很大并且您的 min_samples 未设置,您可能会遇到问题。您可以尝试将 min_samples 设置为较小的值,看看是否有帮助。”我注意到您的代码中没有设置min_samples

【讨论】:

其实我把它设置为 700,但是因为我认为不相关而忽略了它,但我猜 700 并不小 实际上尝试将值从 700 降低到 10,但错误仍然存​​在 嗯....我的建议是在该 github 存储库上创建一个问题。开发人员应该回复你,尤其是这个最低可重复性。您还可以在 RAPIDS cuML repo 上为 HDBSCAN 创建一个功能请求,这样您就可以在 GPU 上完成整个工作流程。 RAPIDS 开发人员反应迅速且乐于助人。 是的,我在rapids上请求过hdbscan,得到的回复是正在进行中,但我想同时使用CPU版本

以上是关于在急流容器内时出现 hdbscan 错误的主要内容,如果未能解决你的问题,请参考以下文章

运行 py.test 时出现错误 ImportMismatchError

Docker 容器在运行 php 应用程序时出现 503 错误

当 Spring Boot 容器尝试连接 kafka 容器时出现“Broker 可能不可用”错误

当我尝试在 Android 11 中读取文件时出现电容器文件系统错误

访问 postgres docker 容器时出现连接错误

Ionic 4 在 iOS 设备上运行应用程序时出现电容器错误