Elastic Container Service (ECS)#

RAPIDS 可以使用 Dask 的 dask-cloudprovider 管理工具部署到多节点 ECS 集群上。有关更多详细信息,请参阅我们的关于在 ECS 上部署的博客文章。

在 AWS 内部运行#

以下步骤假定您在同一 AWS VPC 内部运行。确保这一点的一种方法是使用 AWS EC2 单实例 作为您的开发环境。

设置 AWS 凭据#

首先,您需要 AWS 凭据才能与 AWS CLI 交互。如果其他人管理您的 AWS 账户,您将需要从他们那里获取这些密钥。

您可以通过多种方式向 dask-cloudprovider 提供这些凭据,但最简单的方法是使用 AWS 命令行工具设置您的本地环境

$ pip install awscli
$ aws configure

安装 dask-cloudprovider#

要安装,您需要运行以下命令

$ pip install dask-cloudprovider[aws]

创建 ECS 集群#

在 AWS 控制台中,访问 ECS 控制面板,然后在左侧单击“集群”,然后单击 创建集群

给集群命名,例如rapids-cluster

对于网络设置,选择默认 VPC 和该 VPC 中所有可用的子网

对于基础设施类型,选择“Amazon EC2 实例”并配置您的设置

  • 操作系统:必须是基于 Linux 的架构

  • EC2 实例类型:必须支持兼容 RAPIDS 的 GPU(请参阅 RAPIDS 文档

  • 期望容量:要启动的最大实例数(默认最大值 5)

  • SSH 密钥对

查看您的设置,然后单击“创建”按钮并等待集群创建完成。

创建 Dask 集群#

获取您刚刚创建的集群的 Amazon Resource Name (ARN)。

AWS_REGION 环境变量设置为您的默认区域,例如 us-east-1

AWS_REGION=[REGION]

在您的 Python 会话中创建 ECSCluster 对象

from dask_cloudprovider.aws import ECSCluster

cluster = ECSCluster(
    cluster_arn= "<cluster arn>",
    n_workers=<num_workers>,
    worker_gpu=<num_gpus>,
    skip_cleaup=True,
    scheduler_timeout="20 minutes",
)

注意

当您第一次调用此命令时,ECSCluster() 将自动创建一个与您上面创建的 ECS 集群同名的安全组。。

但是,如果 Dask 集群创建失败或您想在后续运行 ECSCluster() 时重用相同的 ECS 集群,则需要提供此安全组值。

security_groups=["sg-0fde781be42651"]

[cluster_arn] = 用于启动任务的现有 ECS 集群的 ARN

[num_workers] = 在创建集群时启动的工作器数量

[num_gpus] = 要暴露给工作器的 GPU 数量,此数量必须小于或等于您为 ECS 集群选择的实例类型中的 GPU 数量(例如 p3.2xlarge1)。

[skip_cleanup] = 如果为 True,则当集群关闭时,Dask 工作器不会自动终止

[execution_role_arn] = 允许 Dask 集群创建和管理 ECS 资源的 IAM 角色的 ARN

[task_role_arn] = Dask 工作器运行时承担的 IAM 角色的 ARN

[scheduler_timeout] = 调度器等待工作器连接到集群的最长时间

测试 RAPIDS#

为我们的集群创建一个分布式客户端

from dask.distributed import Client

client = Client(cluster)

加载示例数据并测试集群!

import dask, cudf, dask_cudf

ddf = dask.datasets.timeseries()
gdf = ddf.map_partitions(cudf.from_pandas)
gdf.groupby("name").id.count().compute().head()
Out[34]:
Xavier 99495
Oliver 100251
Charlie 99354
Zelda 99709
Alice 100106
Name: id, dtype: int64

清理#

您可以缩减或删除 Dask 集群,但 ECS 集群将继续运行(并产生费用!),直到您也缩减或完全关闭它。

如果您计划很快再次使用此 ECS 集群,最好将其节点数量减少到零。