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.2xlarge
为 1
)。
[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 集群,最好将其节点数量减少到零。