亚马逊AWS官方博客

SOCA 帮助半导体企业快速启动 EDA 云上部署

Original URL: https://amazonaws-china.com/blogs/industries/scaling-eda-workloads-using-scale-out-computing-on-aws/

 

简介

使用电子设计自动化 (EDA) 应用程序的半导体和电子产品公司可以通过利用 AWS 上近乎无限的计算、存储和其他可用资源,大大加快其产品开发生命周期和上市时间。在这篇工作负载支持的博客文章中,我将提供架构和系统级指导,以构建能够将 EDA 应用程序扩展到 30000 个或以上核心的环境。

EDA 工作负载通常需要一个计算集群、一个将作业分发编排到计算节点的进程计划程序和一个高性能共享文件系统。通常需要共享文件系统来维持从 500MB/秒到 10GB/秒不等的吞吐量需求,具体取决于 EDA 工作负载使用案例、设计大小和核心总数。EDA 基础设施堆栈的其他重要组件包括许可证管理、远程桌面和可视化,以及包括身份和访问控制、预算编制和监控在内的用户管理。

服务和解决方案概述

为帮助在 AWS 上快速启动 EDA 环境,我使用正式的 AWS 解决方案 Scale-Out Computing on AWS。此解决方案利用很多 AWS 服务,包括 Amazon Elastic Compute Cloud(EC2 Spot 和 EC2 按需实例)、Amazon Simple Storage Service (S3)、Amazon Elastic File System (EFS) 和 Amazon FSx for Lustre

Scale-Out Computing on AWS
Scale-Out Computing on AWS是一项正式的 AWS 解决方案,可帮助客户更加轻松地部署和运营一个多用户环境,以执行计算密集型工作流。该解决方案部署集群、提供自动化集群预置编排,并且具有大量计算资源可供选择,包括快速的网络主干;近乎无限的存储空间;以及直接与 AWS 集成的预算和成本管理。

Amazon Elastic Compute Cloud (Amazon EC2)
Amazon EC2 是一项在云中提供安全、可调整大小的计算能力的 Web 服务。Amazon EC2 提供最广泛且最深入的实例选择,这些实例均构建在最新的计算、存储和网络技术之上,并为高性能和安全性而设计。运行容错型 EDA 工作负载时,Amazon EC2 Spot 实例可让您利用 AWS 云中未使用的 EC2 容量。与按需实例价格相比,Spot 实例最多可提供 90% 的折扣。AWS 还提供 Amazon EC2 预留实例Savings Plans,与按需实例价格相比,它们可提供大幅折扣,但需要 1 年或 3 年的使用承诺。

Amazon Simple Storage Service (Amazon S3)
对于持久数据,如库、工具和设计规范,EDA 工作流可以利用 Amazon S3。Amazon S3 是一种对象存储服务,可提供行业领先的可扩展性、数据可用性、安全性和性能。Amazon S3 的设计持久性为 99.999999999%(11 个 9),可为来自世界各地的公司的数百万个应用程序存储数据。Amazon EC2 与 Amazon S3 之间的流量最多可以利用 25 Gbps 的带宽,并且可以使用跨区域复制和数据分层(有关更多信息,请参阅 Amazon S3 功能Amazon S3 常见问题)。

Amazon Elastic File System (Amazon EFS)
Amazon EFS 提供一个简单、可扩展、完全托管的弹性 NFS 文件系统,可与 AWS 云服务和本地资源结合使用。Amazon EFS 是文件系统,在 AWS 上构建环境时,该系统可用于主目录和自动化脚本。它可以按需扩展到 PB 级容量,而不会中断应用程序,并随着文件的添加和移除自动增长和缩减,无需您预置和管理容量来适应增长。

 

Amazon FSx for Lustre (Amazon FSx for Lustre)
如果您的 EDA 工具需要一个高性能共享文件系统,可以使用 FSx for Lustre,它是一个完全托管的高性能文件系统,针对高性能计算 (HPC) 和 EDA 工作负载进行了优化。FSx for Lustre 提供与 Amazon S3 的无缝集成,从而可以轻松且经济高效地将数据永久存储在 Amazon S3 中,并且可以用高性能的 POSIX 文件系统展示数据,POSIX 文件系统可以挂载在计算实例上进行数据处理,它具有亚毫秒级的延迟、最高达每秒数百 GB 的吞吐量和数百万个 IOPS。

解决方案部署

我通过下面的步骤进行步骤:

  1. 使用 Scale-Out Computing on AWS 启动并配置支持 EDA 的基础设施堆栈
  2. 自定义 Amazon 系统映像 (AMI)
  3. 使用设置多个许可证服务器的选项设置许可证服务器
  4. 创建 Amazon S3 存储桶以上传测试案例和设置共享文件系统
  5. 连接到 NICE DCV 远程桌面会话
  6. 安装 EDA 应用程序

步骤 1:使用 Scale-Out Computing on AWS 启动并配置基础设施
可以使用一键式安装程序从 AWS 解决方案页面 <a href=”https://amazonaws-china.com
/solutions/scale-out-computing-on-aws”>https://aws.amazon.com/solutions/scale-out-computing-on-aws 中部署 Scale-Out Computing on AWS,从而开始在 AWS CloudFormation 中的部署。该解决方案高度可定制,核心功能與调度器通过 EC2 实例上运行,利用 AWS CloudFormationAmazon EC2 Auto Scaling 通过 NICE DCV 自动预置执行横向扩展计算作业和远程可视化会话等用户任务的资源。

在 AWS CloudFormation 参数屏幕上,您需要提供以下项目:

CloudFormation 堆栈将需要大约 20 分钟完成部署,然后调度器节点再需要 20 分钟来完成配置。当配置完成后,您应该能够使用 CloudFormation Stack(CloudFormation 堆栈)-> Outputs(输出)-> WebUserInterface(Web 用户界面)下的 HTTPS 链接访问 Scale-Out Computing on AWS Web 界面。

有关部署 Scale-Out Computing on AWS 解决方案的详细说明及屏幕截图,请访问: https://awslabs.github.io/scale-out-computing-on-aws/install-soca-cluster/

 

步骤 2:自定义 Amazon 系统映像 (AMI)

对于大型集群,建议从 AWS Marketplace 提供的操作系统开始,然后根据应用程序要求对其进行自定义。在本示例中,我从 CentOS 7.7 基础 AMI 开始,然后通过安装 Scale-Out Computing on AWS 解决方案所需的系统软件包对其进行自定义,以减少计算节点启动时间。有关为此解决方案自定义 AMI 的步骤的详细说明,请参见此处:https://awslabs.github.io/scale-out-computing-on-aws/tutorials/reduce-compute-node-launch-time-with-custom-ami/

然而,创建自定义 AMI 之前,我还需要安装 EDA 应用程序所需的系统软件包。下面是特定工作负载所需的软件包示例:

# yum install -y \
	vim vim-X11 xterm compat-db47 glibc glibc.i686 openssl098e \
	compat-expat1.i686 dstat epel-release motif libXp\
	libXaw libICE.i686 libpng.i686 libXau.i686 libuuid.i686 libSM.i686 \
	libxcb.i686 plotutils libXext.i686 libXt.i686 libXmu.i686 \
	libXp.i686 libXrender.i686 bzip2-libs.i686 freetype.i686 \
	fontconfig.i686 libXft.i686 libjpeg-turbo.i686 motif.i686 \
	apr.i686 libdb libdb.i686 libdb-utils apr-util.i686 libXp.i686 \
	qt apr-util gnuplot

 

检查应用程序所需的所有系统库是否都已预安装在 AMI 上。您可以到应用程序的二进制文件目录发布此命令来进行检查:

# ldd <application_path>/linux64/bin/<binary_name> | grep 'not found'

命令应返回未在操作系统库路径中找到的任何库依赖项列表。然后您可以使用此命令识别提供缺失库的软件包名称,并安装该软件包:

# yum whatprovides */libname.*

# yum install -y packagename

接下来,我需要通过编辑 /etc/selinux/config和将 SELINUX=enforcing更改为 SELINUX=disabled 来关闭 SELinux。

接下来还建议提高系统限制,特别是当应用程序要处理大量文件时,而这是很多 EDA 应用程序的常见操作。可以通过编辑下面的文件和添加后续条目来完成此操作:

/etc/sysctl.conf:
	net.core.somaxconn=65535
	net.ipv4.tcp_max_syn_backlog=163840
	net.core.rmem_default=31457280
	net.core.rmem_max=67108864
	net.core.wmem_default = 31457280
	net.core.wmem_max = 67108864
	fs.file-max=1048576
	fs.nr_open=1048576

/etc/security/limits.conf:
	*		hard 	memlock 	unlimited
	*		soft 	memlock 	unlimited
	*		soft 	maxproc 	3061780
	*		hard 	maxproc 	3061780
	*		soft	maxsignal	3061780
	*		hard	maxsignal	3061780
	*		soft	nofile		1048576
	*		hard	nofile		1048576

/opt/pbs/lib/init.d/limits.pbs_mom:
	ulimit -l unlimited
	ulimit -u 3061780
	ulimit -i 3061780
	ulimit -n 1048576

 

 

接下来,我在基础映像中安装 Amazon FSx for Lustre client。对于 CentOS 7.7,您可以遵照 https://docs.aws.amazon.com/fsx/latest/LustreGuide/install-lustre-client.html 中的步骤。由于在本部分的第一个步骤中,我们在安装 Scale-Out Computing on AWS 所需的系统软件包以减少计算节点启动时间时更新了内核并重启了实例,我们不需要限制 aws-fsx.repo 停留在版本 7.7。

 

现在,我已经完成所有的 AMI 自定义操作,我可以创建将在启动实例时使用的新 AMI。为完成此操作,我将转到 Amazon EC2 控制台,选择我已经自定义的实例,点击 Actions(操作)-> Image(映像)-> Create Image(创建映像)并记下 AMI ID。

 

最后,我编辑了 /apps/soca/<CLUSTER_ID>/cluster_manager/settings/queue_mapping.yml ,按下面所述更新 AMI ID。这样一来,可以使我的计算集群将此映像用于所有的计算和桌面节点。

queue_type:
  compute:
    queues: ["high", "normal", "low"] 
    instance_ami: "<YOUR_AMI_ID>" # <- Add your new AMI ID
    base_os: "centos7"
    root_size: "10" 		 # <- Add the size corresponding to your AMI 
    instance_type: ...
...
  desktop:
    queues: ["desktop"] 
    instance_ami: "<YOUR_AMI_ID>" # <- Add your new AMI ID
    base_os: "centos7"
	root_size: "10" 		 # <- Add the size corresponding to your AMI    
	instance_type: ...

 

步骤 3:设置许可证服务器,并可以选择设置多个

在 AWS 中运行 EDA 工作负载时,可以使用本地许可证服务器,但这需要本地网络与 Amazon VPC 之间有一个稳定的网络连接。可以使用 AWS Site-to-Site VPN 连接或通过使用 AWS Direct Connect 建立专用的网络连接来建立此连接。然而,对于大规模测试,计算节点与许可证服务器之间的延迟越小越好。因此,我决定在我的 Amazon VPC 中部署一个许可证服务器。

对于许可证服务器,我在私有子网中预置了一个运行 CentOS 7.7 的 c5.2xlarge 实例,该私有子网对应于 Scale-Out Computing on AWS 解决方案调度器实例部署的相同可用区。

您应该咨询 EDA 供应商,了解他们在 AWS 上设置许可证服务器的具体要求。撰写本博客时,我了解 EDA 供应商有两个不同的要求,因此我同时满足了这两个要求。

EDA 供应商可能要求您使用附加到 EC2 实例的弹性网络接口 (ENI) 来生成许可证文件。您必须在相同子网中创建网络接口,然后将其附加到 EC2 实例中。有关创建和附加弹性网络接口的逐步详细信息,请访问:https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/using-eni.html#working-with-enis

或者,EDA 供应商可能会要求您基于虚拟机通用唯一标识符 (VM UUID)(该标识符已转化为 EC2 实例 ID,且格式为 VM_UUID=<AWS EC2 实例 ID>,例如VM_UUID=i-0af01c0123456789a)请求许可证文件。您可能想要复查基于 VM UUID 支持许可证生成的许可证守护程序所需的最低版本。

 

在这两种情况下,都建议将 Scale-Out Computing on AWS 创建名为 ComputeNodeSecurityGroup 的安全组附加到许可证 EC2 实例,因为它开放了已附加相同安全组的实例之间的所有 TCP 流量。

 

现在,我登录我的许可证服务器实例,并配置和启动许可软件。必须将下面的系统软件包安装在许可证服务器上,因为 FlexLM 需要它们:

# yum install -y \
	vim glibc.i686 \
	glibc-devel.i686 \
	redhat-lsb

 

接下来,我需要通过编辑 /etc/selinux/config 和将 SELINUX=enforcing更改为 SELINUX=disabled 来关闭 SELinux。

接下来,我需要安装 EDA 供应商提供的许可证应用程序,并遵照说明来识别主机 ID,以生成许可证。

收到许可证文件后,我编辑了 /etc/rc.local 来启用许可证守护程序,从而在我通过添加下面的行启动许可证服务器实例时自动启动:

/etc/rc.local:
	su centos -c "/vendor/version/linux64/bin/lmgrd -c /vendor/license/license.lic
	-l /vendor/logs/license.log - reuseaddr"

然后,调用这些命令以禁用防火墙守护程序,并在实例重启时启用 /etc/rc.local 的执行:

systemctl stop firewalld
systemctl disable firewalld
chmod +x /etc/rc.d/rc.local
systemctl enable rc-local
systemctl start rc-local

 

接下来,我增加了一些系统限制,特别是因为我计划使用 30000 多个核心进行一次大规模活动,这需要额外的文件处理和网络连接。可以通过编辑下面的文件和添加后续条目来完成此操作:

/etc/sysctl.conf:
	net.core.somaxconn=65535
	net.ipv4.tcp_max_syn_backlog=163840
	net.ipv4.tcp_keepalive_time=300
	net.ipv4.tcp_keepalive_intvl=60 
	net.ipv4.tcp_keepalive_probes=5
	net.ipv4.tcp_retries2=3
	net.core.rmem_default=10485760
	net.core.rmem_max=10485760
	fs.file-max=1048576
	fs.nr_open=1048576


/etc/security/limits.conf:
	*		soft	nofile		1048576
	*		hard	nofile		1048576

 

 

最后,我重启许可证服务器实例,以便启用所有的更改。

注:如果许可证服务器将提供超过 10000 个许可证功能,EDA 供应商建议在更多的许可证服务器上分割许可证,因此您可能需要通过在另一个 EC2 实例上重复步骤 3 的部分来部署另一个许可证服务器。

步骤 4:创建 Amazon S3 存储桶以上传测试案例和设置共享文件系统

我创建 S3 存储桶以用作永久存储,然后再将 EDA 应用程序软件和所需的测试案例文件上传到存储桶中。从这里开始,我执行设置 FSx for Lustre 文件系统的步骤。尽管超出了本博客文章的范围,还可以通过其他文件系统选项在 AWS 运行 EDA 工具。有关更多的信息,请联系您的解决方案架构师。

创建 S3 存储桶之前,您必须安装 AWS CLI。要安装 AWS CLI,请遵照下面显示的步骤:安装 AWS CLI

接下来,通过提供凭证让您创建 S3 存储桶和将数据上传到存储桶来配置 AWS CLI。

$ aws configure
AWS Access Key ID [None]: 
AWS Secret Access Key [None]: 
Default region name [None]: 
Default output format [None]: 

 

步骤 4.1:创建 S3 存储桶

接下来,通过创建 S3 存储桶来验证 AWS CLI 工作正常:

$ aws s3 mb s3://app-testcases-<unique_id>make_bucket: app-testcases-<unique_id>

注:作为示例,我创建了名为 app-testcases-<unique_id> 的 S3 存储桶。需要 <unique id> 来确保 S3 存储桶名称是全局唯一的。

接下来,假设您使用的是 AWS 以外的笔记本电脑或服务器,且它们已经有了 EDA 应用程序安装文件和所需的测试案例,那么您可以像下面这样轻松地将它们上传到 S3 存储桶:

$ aws s3 cp Installer.bin s3://app-testcases-<unique_id>/
$ aws s3 cp App-version-common.ext s3://app-testcases-<unique_id>/
$ aws s3 cp App-version-linux64.ext s3://app-testcases-<unique_id>/
$ aws s3 cp design-testcases.tar.gz s3://app-testcases-<unique_id>/

 

注:我将 .bin 和 .ext 用作供应商安装文件的通用文件扩展。

如果您使用的机器没有接入公共互联网,您可以在 AWS 中创建一个 EC2 实例,然后用它从供应商的 FTP 服务器下载软件。

步骤 4.2:创建 Amazon FSx for Lustre 文件系统

创建 Amazon FSx for Lustre 文件系统之前,您必须了解几个注意事项。FSx for Lustre 文件系统的吞吐量容量取决于存储容量。在此部署中,我将使用“Scratch 2” Amazon FSx 部署类型文件系统,该系统将驱动 200MB/秒/TiB,且我的测试案例需要 1.5GB/秒的总吞吐量,因此我需要创建一个 9.6TiB 或更大的文件系统。如果您不确定测试案例总吞吐量要求,建议先使用适度大的 FSx for Lustre 文件系统,然后用初始数量的 EC2 实例进行试验,收集总吞吐量要求,并根据所需的完整实例数量,为文件系统选择适当的大小。要支持具有高元数据操作的工作负载,建议采用更大的文件系统。

使用 AWS 管理控制台,在 Services(服务)下,转到 Amazon FSx -> Create File System(创建文件系统)。然后,选择“Amazon FSx for Lustre”,在下一个屏幕中,提供文件系统的名称,选择 Scratch, SSD,对于存储容量,键入 45.6,吞吐量容量将计算为 8906MB/s。

在 Network & security(网络和安全)部分中,

  • 在 VPC 下,选择 soca-<stack name>-VPC
  • 在 VPC Security Groups(VPC 安全组)下,选择与 soca-<stack-name>-ComputeNodeSG 对应的安全组,
  • 在 Subnet(子网)下,选择与 soca-<stack-name>-Private1 对应的子网

在 Data repository integration(数据存储库集成)部分中,将数据存储库类型更改为 Amazon S3,并在 Import Bucket(导入存储库)下键入 s3://app-testcases-<unique_id>,然后在 Export prefix(导出前缀)下选择 “The same prefix that you imported from (replace existing objects with updated ones)”(您从中进行导入的相同前缀 [将现有对象替换为更新对象])。您可以提供任何标签,点击 Next(下一步)以查看设置,然后点击 “Create file system”(创建文件系统)。

 

文件系统应在 5 分钟内准备好,AWS 管理控制台将在文件系统创建好并准备好使用后指示状态。

 

最后,登录调度器实例(如果尚未登录),编辑 /apps/soca/<CLUSTER_ID>/cluster_manager/settings/queue_mapping.yml 并在计算和桌面队列设置下使用 fsx_lustre选项以包含 Amazon FSx for Lustre DNSName:

fsx_lustre: "fs-xxxxxxxxxxxxxxxxx.fsx.<region>.amazonaws.com"


queue_type:
  compute:
    queues: ["queue1", "queue2", "queue3"] 
    fsx_lustre: "fs-xxxxxxxxxxxxxxxxx.fsx.<region>.amazonaws.com" # <- Add your Amazon FSx for Lustre DNSName 

  desktop:
    queues: ["desktop"]
    fsx_lustre: "fs-xxxxxxxxxxxxxxxxx.fsx.<region>.amazonaws.com" # <- Add your Amazon FSx for Lustre DNSName

 

 

步骤 5:使用 NICE DCV 连接远程桌面会话
使用步骤 1 中的用户名/密码登录 Scale-Out Computing on AWS Web 用户界面,点击左侧边栏上的 “Graphical Access”(图形访问)。在 Your Session #1(您的会话 1)下,您可以选择会话有效性和虚拟机的 CPU 和内存大小,然后点击 “Launch my Session #1”(启动我的会话 1)。新的“桌面”作业将发送到队列,从而基于特定要求创建新实例。

 

您将看到一条信息型消息,要求您等待 20 分钟后才能访问您的远程桌面。您可以通过点击左侧边栏上的 “My Job Queue”(我的作业队列)来检查桌面作业的状态。当会话准备好后,“Graphical Access”(图形访问)->“Your session #1”(您的会话 1)上的信息消息将更新使用连接信息。

 

您可以直接从浏览器访问会话,或者为 Mac / Linux / Windows 下载 NICE DCV 本机客户端,并通过本机客户端访问您的会话。

有关图形访问的更多详细信息,请访问 https://awslabs.github.io/scale-out-computing-on-aws/access-soca-cluster/#graphical-access-using-dcv

 

步骤 6:安装 EDA 应用程序
当您登录到远程桌面会话后,您应该能够查看您上传到 Amazon S3 存储桶中的文件自动显示在 FSx for Lustre 文件系统(安装在 /fsx 下面)上。

 

$ cd /fsx

$ ls

Installer.bin App-version-common.ext App-version-linux64.ext design-testcases.tar.gz

 

下一步将是设置 EDA 供应商安装应用程序:

 

$ chmod 755 Installer.bin

$ ./Installer.bin

当提示输入安装目录时,键入 /fsx/<vendor_name>/安装程序,然后等到安装完成。

 

下一步是使用供应商安装应用程序安装 EDA 应用程序:

$ /fsx/<vendor_name>/installer/installer

 

安装程序将提示输入包含下载的 EFT 文件的源目录的路径,请输入包含 App-version-*.ext  的 /fsx。然后,安装程序将提示输入我们希望在其中安装 EDA 供应商应用程序的完整路径,因此我们将键入 /fsx/<vendor_name>。安装程序将验证 *.ext 文件的完整性并继续进行安装。

 

安装完成后,我编辑了 ~/.bash_profile 以添加下列内容:

 

export EDATOOL_HOME=/fsx/<vendor_name>/<app_name>/<version>
source $EDATOOL_HOME/setup.sh
export LM_LICENSE_FILE=27020@ip-a-b-c-d 	# <- Modify to point to the license   
                                              # sever(s) created in step 3

 

结论
在此篇博客文章中,我使用了 Scale-Out Computing on AWS 设置能够运行整个半导体设计工作流的 EDA 环境。在即将发布的博文中,我将使用此基础设施将示例 EDA 工作负载扩展到超过 30000 个核心。敬请随时关注!

本篇作者

Ahmed Elzeftawi

Ahmed Elzeftawi 是 Amazon Web Services 的一位半导体和 EDA 合作伙伴解决方案架构师。在加入 AWS 之前,他曾任 Cadence Design Systems 的云产品管理总监,他在该公司为 AWS 上的 Cadence EDA 工作负载架构并部署了多个计算集群。他拥有超过 18 年的电子设计自动化、芯片设计和高性能计算集群经验。Ahmed 拥有开罗大学电子与通信工程学士学位和圣塔克拉拉大学工商管理硕士学位。

本篇译者

黄振维

半導體行業解決方案架構師, 目前專注於以AWS well-architected 策略協助客戶在雲上建構安全且高可靠系統滿足需求.

丁杰

AWS 解决方案架构师,8年以上大型移动互联网研发及技术管理经验,资深云计算行业从业者。对EDA行业上云以及针对云上架构进行优化设计有深入理解。了解云计算及半导体行业技术发展变革方向,能针对云服务特点在行业解决方案上有前瞻性布局。