dask - 集群之间的 Dask 切换或更改集群上下文
问题描述
我是 Dask 的新手,如果这个问题对你来说很愚蠢,请原谅我。在 Dask 中,我正在使用大约 50GB 数据的 Dask 数据框。该数据是字符串数据,我需要在将其提供给机器学习算法(使用线程快速)之前对其进行预处理(使用过程快速)。现在的问题是,当我针对进程设计集群时,数据帧操作很快,但在线程方面却很慢(但线程在机器学习方面很快)。因此,我正在寻找一种可以从进程切换到线程环境的解决方案。
目前,我正在使用进程集群保存预处理数据,然后将其关闭并启动一个具有线程环境的新集群以应用机器学习。
有没有办法解决这个问题?
请在这方面帮助我。
解决方案
可以从命令行启动异构工作者:
# this runs in one shell process
dask-scheduler --scheduler-file scheduler.json
# this runs in another shell process/window
dask-worker --scheduler-file scheduler.json --name multi_proc --nprocs 5 --nthreads 1
# this runs in yet another shell process/window
dask-worker --scheduler-file scheduler.json --name multi_thread --nprocs 1 --nthreads 5
然后在您的脚本/笔记本中,您将连接到调度程序,client = Client('scheduler.json')
并在提交时指定任务的适当工作人员的名称,例如
# submit for completion only by the multi_thread worker
results_multi_thread = [client.submit(process_multi_thread, task, workers='multi_thread') for task in task_list]
# submit for completion only by the multi_process worker
results_multi_proc = [client.submit(process_multi_proc, task, workers='multi_proc') for task in task_list]
对于多个工作人员,您必须指定唯一的名称(例如multi_proc_1
,multi_proc_2
等),但正如您所见,这是一个相当复杂的过程,所以除非您的案例的具体情况是所有事情都必须一次性发生,否则我会坚持使用您正在使用的解决方案(两个单独的集群),因为它更容易编码/维护,并且希望在某些时候会支持异构工作人员。
推荐阅读
- javascript - 如何仅接受来自我自己的应用程序的请求?
- ios - View 中的手势识别器并使用 View Controller 作为目标,我的设计错了吗?
- docker - 如何从 dotnet core 2.2 和 powershell core 创建一个 docker 镜像?
- c# - 如何修复:NullReferenceException:不要创建自己的模块实例,从 ParticleSystem 实例中获取它们
- python - 尝试以块的形式读取文本并将其加载到列表中但出现错误
- python - 如何使用最多请求限制(compute.instances.listReferrers)修复谷歌控制台界面计算引擎删除操作
- javascript - 发出 GET 请求时出错“加载资源失败:net::ERR_CONNECTION_REFUSED”
- python - scrapy 从网站下载 excel
- mysql - 在 mysqli 8.0.5 配置时应用配置错误:写入配置 | 无效的模板
- go - Go Logging 未出现