问题标签 [dask-kubernetes]
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 - What causes Dask futures to get stuck in 'pending' state?
I created my own very slightly modified Dockerfile
based on the dask-docker
Dockerfile
that installs adlfs
and copies one of my custom libraries into the container in order to make it available to all worker nodes. I deployed my container to my Kubernetes cluster and have connected to it from a REPL on my local machine, creating a client and a function locally:
But when I run client.submit
, I'm getting either distributed.protocol.pickle
"Failed to deserialize b'...'" error messages or Futures stuck in a 'pending' state:
It seems like the pickle protocol error will occur only once when I submit the first job, then afterward, everything is just stuck in pending
.
From kubectl
, I see that I have:
- one
LoadBalancer
service nameddask-scheduler
, - two deployments: 1x
dask-scheduler
and 3xdask-worker
, - and the corresponding one
dask-scheduler-...
and threedask-worker-...
pods
What would cause this, and how can I debug? I opened up the web interface to my Dask scheduler, and it shows that I have an instance of add1
that has erred, but it gives no details.
For what it's worth, the only changes I made to the Dockerfile
were:
Edit: I'll note that if I deploy the Dask image (image: "daskdev/dask:2.11.0"
in my K8s manifest), things work just fine. So in trying to create a customized Docker image, something seems to get misconfigured with Dask. I commented out my changes to the Dockerfile
, ran docker rmi
on my local and ACR images, tore down my deployed service and deployments, then rebuilt a container, pushed it, and made the deployment, but it still fails.
python - 是否可以在 Dask 中为特定任务选择工人?
我有一个使用 Dask 在我的 Kubernetes 集群上运行的进程,该进程由两个 map-reduce 阶段组成,但是跨节点的两个映射都可能将大量大文件下载到每个工作人员。为了避免让两台不同的机器在两个不同的地图步骤上处理相同的文件子集,是否可以确定性地选择哪些工作人员为相同的工作获取哪些参数?从概念上讲,我想要的可能是这样的:
这样的事情可以让我将相同文件的不同计算步骤定向到相同的节点,从而无需对文件进行第二次缓存。
python - 为什么我的 Dask Futures 卡在“待处理”状态并且永远不会完成?
我有一些长时间运行的代码(大约 5-10 分钟的处理),我正试图作为 Dask 运行Future
。这是一系列的几个离散步骤,我可以作为一个函数运行:
或者我可以分成中间步骤:
如果我在本地运行它(例如,result = my_function(arg1, arg2)
),它就完成了。如果我将它提交给 Dask,我会立即得到Future
回复 - 正如预期的那样 - 但这项工作永远不会完成。此外,如果我将result.key
用作跟踪作业状态的一种方式,然后将未来重构为result = Future(key)
,它的状态始终为pending
。
我想首先让它按原样运行,以便我可以将我的处理卸载到我的 Dask 工作人员而不是处理请求的 API,然后我希望能够开始跨节点拆分工作,以便我可以改进表现。但为什么我的工作就这么消失了?查看我的 Dask 调度程序 Web 界面,作业似乎都没有出现。但我知道 Dask 正在工作,因为我可以从我的 Jupyter 笔记本向它提交代码。
我client.submit
从 Flask 服务器调用,并返回密钥以便以后使用。大致:
当我的应用程序部署到 Kubernetes 时,我的/submit
路由会返回一个 Future 密钥,但我的 Dask 状态页面没有显示任何处理任务。如果我在本地运行 Flask,我确实会看到一个任务出现,并且我的作业的输出确实会在预期的延迟后出现;但是,当我使用从 返回的 Future 键到达自己的/status/<key>
路径时/submit
,它始终显示状态为pending。
python - 为 DASK 工作人员使用新的 python 环境
我在 hpc 上运行我的 DASK 服务器,在那里我拥有运行 dask 所需的所有基本模块,并且我在 jupyter notebook 中加载该模块。我想使用 dask 和在 dask 的基本环境中不可用的模块运行一些处理任务。为此,我使用 conda 创建了我的自定义环境。在运行我的任务之前,有没有一种简单的方法可以将这个新的公寓环境链接到 dask 客户端。
我试过使用
我也尝试过使用
client.run(os.system,'conda install -c conda-forge package -y')
,但仍然收到类似模块未找到的消息。
我正在使我的问题更清楚,以便我可以弄清楚是否有任何其他替代方案来处理此类问题。
在上面的示例中,我在 hpc 环境中运行了 dask 模块,我没有任何控制权,只是我可以加载该模块。我的用户配置文件中有自己的公寓环境,我必须使用 dask 工作人员使用skilearn(和其他模块)运行一些进程。解决此类问题的替代方法是什么?
dask - 如何为调度程序以外的另一个区域中的 dask-workers 配置 GCP 集群
我在我们启动 dask-scheduler 的区域 us-east1 中有一个 kubernetes 集群,我想在我们想运行 dask-workers 的区域 us-west1 启动另一个集群。据我了解调度程序和工作人员之间的连接是双向的,所以我不能使用外部 IP 公开调度程序,我也必须公开工作人员。也许有一些方法可以避免这个问题并且不暴露每个工作人员或者以某种方式可以为不同区域的两个集群配置网络并能够在它们之间进行通信
kubernetes - 在 GKE 上使用 Dask Kubernetes 的工作器超时
我正在尝试让 dask-kubernetes 使用我的 GKE 帐户。令人抓狂的是它奏效了。但现在没有了。我设置了一个集群。节点也可以很好地创建。它们运行 60 秒,然后超时并显示以下消息(如 所示kubectl logs podname
):
我认为这意味着工作人员无法连接到在我的笔记本电脑上运行的调度程序?但是我不明白为什么。端口似乎是开放的。
worker-spec-2.yml 包含以下内容:
同样,这个或类似的东西对我有用。我可能已经更改了 worker-spec.yml 中的某些内容,但仅此而已。
我的问题是 - 我该如何诊断?无论如何,我都不是 Kubernetes 专家。
azure - dask kubernetes aks (azure) 虚拟节点
使用下面的代码,可以在 azure aks 中创建一个 dask kubernetes 集群。
它使用远程调度程序 ( dask.config.set({"kubernetes.scheduler-service-type": "LoadBalancer"})
) 并且运行良好。
要使用虚拟节点,请取消注释该行extra_pod_config=virtual_config
(遵循此官方示例)。
它不起作用,出现以下错误:
ACI does not support providing args without specifying the command. Please supply both command and args to the pod spec.
这与传球有关containers: args: [dask-scheduler]
我应该提供哪个containers: command:
来解决这个问题?
谢谢
dask - 重启 Dask Kubernetes 集群的正确方法是什么?
我有一个使用dask-kubernetes集群的 Web 服务。Web 服务是长期存在的,为了安全起见,我想每n天循环一次 Dask kubernetes 集群。
有两种可能性可以做到这一点。
- 使用
dask.distributed.Client.restart()
. - 使用
KubeCluster.close()
,然后重新初始化 KubeCluster。
正确的方法是什么?
kubernetes - 为什么在五个工人之后我的 Dask 工作的表现会变差?
我在一个八节点 Kubernetes 集群上运行 Dask,我的清单指定了一个调度程序副本和八个工作副本。我的代码正在处理 80 个大小差不多的文件,我想看看性能如何从一个工作人员扩展到八个工作人员。我正在做大致这样的事情:
结果的简化摘要是:
- 一个节点最慢(不足为奇)
- 五个节点最快(一个节点大约占 25%)
- 六个节点峰值(比五个节点长约 80%,仅比一个节点的一半时间好)
- 七个或更多节点非常平坦 - 没有太多的增量性能增益。但是,它并没有恢复到五个节点的性能。
我原以为八个 - 每个物理节点一个工人 - 将是最佳的,但事实并非如此。我什至用不同大小的不同输入数据集对此进行了测试;五个节点总是最好的,在六个节点上有很大的跳跃。
什么可能导致这种情况,我怎样才能避免这种性能下降?据我所知,每个都worker_ip
代表一个物理节点,因此工作应该在选定的工作人员子集之间统一共享。
dask - dask-gateway (helm 部署):如何配置自定义身份验证器?
我目前正在阅读Dask Gateway 安装文档。我注意到可以指定自定义身份验证器,但没有关于其接口是什么或如何部署它的文档。
我正在运行 keycloak 提供的 openid 服务器。我希望dask要么将身份验证转发给keycloak(最好),要么接受令牌并使用keycloak验证它们。是否有一些关于 openid 连接设置的示例?或部署自定义身份验证的一般说明/要求?