故障排除

本文档包含常见故障排除问题。

无法连接到调度器

最常见的问题是集群构建完成后无法连接到集群。

每个集群管理器都会构建一个 Dask 调度器,并默认通过一个公共 IP 地址暴露它。您必须能够从您的 Python 会话连接到该地址的端口 87868787

如果您无法连接到此地址,可能是您的网络配置有问题,例如您的账户上可能存在实施额外防火墙规则的公司策略。

为了降低发生这种情况的可能性,最简单的方法通常是在您正在使用的云环境中运行 Dask Cloudprovider,并仅配置私有网络。有关详细信息,请参阅您特定集群管理器的文档。

无效的 CPU 或内存配置

使用 FargateClusterECSCluster 时,CPU 和内存参数只能取固定组合集中的值。

因此,例如,以下代码会导致错误:

from dask_cloudprovider.aws import FargateCluster
cluster = FargateCluster(
    image="daskdev/dask:latest",
    worker_cpu=256,
    worker_mem=30720,
    n_workers=2,
    fargate_use_private_ip=False,
    scheduler_timeout="15 minutes"
)
client = Client(cluster)
cluster

# botocore.errorfactory.ClientException:
# An error occurred (ClientException) when calling the RegisterTaskDefinition operation:
# No Fargate configuration exists for given values.

这是因为 CPU 为 256 的 ECS 和 Fargate 任务定义无法拥有该代码请求的那么多内存。

AWS 接受的组合集记录在 https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task-cpu-memory-error.html

请求的 CPU 配置超出限制

创建 FargateClusterECSCluster,或添加更多 worker 时,您可能会收到错误响应:“请求的 CPU 配置超出您的限制”。这意味着请求的调度器和 worker 以及您在该区域运行的任何其他 EC2 资源使用的 vCPU 超过了您的当前服务配额 vCPU 限制

您可以使用 scheduler_cpuworker_cpu 参数来调整调度器和/或 worker 的 CPU。有关详细信息,请参阅本文档中的“无效的 CPU 或内存配置”部分。

但是,要获得所需的集群配置,您需要申请提高服务限制配额。

前往 https://<region>.aws.amazon.com/servicequotas/home/services/ec2/quotas申请提高 “Running On-Demand Standard (A, C, D, H, I, M, R, T, Z) 实例”的配额。

拉取私有 Docker 镜像

对于像 EC2ClusterAzureVMClusterGCPCluster 这样的集群管理器,Docker 镜像将被拉取到您选择的云上创建的虚拟机 (VM) 中。

如果您需要拉取需要身份验证的私有 Docker 镜像,每个虚拟机都需要配置凭据。这些集群管理器接受一个 extra_bootstrap 参数,您可以在其中提供启动时运行的额外 bash 命令。这是一个登录到您的 Docker 仓库的好地方。

from dask_cloudprovider.azure import AzureVMCluster
cluster = AzureVMCluster(...
                         docker_image="my_private_image:latest",
                         extra_bootstrap=["docker login -u 'username' -p 'password'"])

如果您需要在 GCP 中访问 Artifact/Container Registry,一种方法是使用 gcloud 凭据助手 对 Docker 进行身份验证,方法是添加类似于下面的额外 bootstrap 参数:

from dask_cloudprovider.gcp import GCPCluster
cluster = GCPCluster(...
                         docker_image=f"{region}-docker.pkg.dev/{project}/{repo}/{image}:{tag}",
                         extra_bootstrap=[f"gcloud auth configure-docker {region}-docker.pkg.dev"])