我正在使用 AWS CDK(适用于 Python)创建 CloudFormation 堆栈,其主要组件之一是批处理计算环境,它应该运行 GPU 密集型作业。
批处理作业根本无法使用 GPU,除非我在手动创建批处理计算环境时手动设置
EC2 configuration
下的 Additional configuration
选项(参见下图)。
现在,我不想手动执行此操作,我希望能够在我的 CDK 堆栈中定义它。现在,我有这样的事情:
ecs_machine_image = batch.EcsMachineImage(
# image="ami-0d625ab7e92ab3a43",
image_type=batch.EcsMachineImageType.ECS_AL2_NVIDIA
)
compute_env_1 = batch.ManagedEc2EcsComputeEnvironment(
scope=self,
id=f"{stack_id}-compute-env",
vpc=vpc,
instance_types=[
ec2.InstanceType("g4dn.2xlarge"),
],
images=[ecs_machine_image],
maxv_cpus=32,
minv_cpus=0,
security_groups=[security_group],
service_role=batch_service_role,
instance_role=ecs_instance_role,
)
评论
# image="ami-0d625ab7e92ab3a43"
是为了说明我认为可以将AMI图像ID直接传递给batch.EcsMachineImage
,但事实并非如此。
总而言之,我的问题是:使用 AWS CDK 配置,如何定义供批处理计算环境中运行的所有作业使用的特定 AMI 映像?
image
属性接受IMachineImage接口类型。 EC2 MachineImage 类有一个静态方法 generic_linux,它接受按区域划分的 AMI 映射并返回预期的 IMachineImage
:
image=ec2.MachineImage.generic_linux({'us-east-1': 'ami-12345678'})