anasys hpc集群_这可能是最简单的并行方案,如何基于 AWS ParallelCluster 运行 ANSYS Fluent...
使用 HPC(高性能計算)應對計算流體動力學 (CFD) 的挑戰已成為慣例。隨著近一二十年間,HPC 工作站向超級計算機的發展變緩,計算集群正不斷地取代單獨的大型 SMP(共享內存處理)超級計算機的地位,并且已成為“新常態”。另外,一項更加新的創新——云技術,同樣也大幅提升了總的計算吞吐量。
這一篇博文將向您介紹在數分鐘內于運行 ANSYS Fluent(一款市售的計算流體動力學軟件包)的 AWS 上完成 HPC 集群設置的最佳優良實踐。此外您還能看到一些安裝 ANSYS Fluent 并運行您的首個作業的示例腳本。“最佳指南”是一種相對稱呼,在云技術中更是如此,因為存在能以不同方式組合達成相同目的的諸多可能性(亦稱為服務)。僅在需要使用特定的應用程序特性或應用程序功能的情況下,才能判定某種選擇是否優于另一種。舉例來說,“高性能并行文件系統 (Amazon FSx) 優于 NFS 共享”這一判斷在絕大部分 HPC 工作負載中是成立的,但在另一些情形中(例如 !I/O 密集型應用程序,或者創建小型 HPC 集群來運行少量和 / 或小型作業)NFS 共享已經綽綽有余,并且此種方式更加廉價,設置簡單。在此篇博文中我們將分享我們視作最佳優良實踐的方法,以及其他一些您在實踐中可能會考慮的可用替代選擇。
我們將會使用的主要集群組件是以下的 AWS 服務:
AWS ParallelCluster,這是一種 AWS 支持的開源集群管理工具,可用于在 AWS 云中部署并管理 HPC 集群。
新的 AWS C5n 實例最多可使用 100 Gbps 的網絡帶寬。
Amazon FSx for Lustre,這是一種高度并行文件系統,支持對 PB 級別的文件系統進行亞毫秒級別的訪問,可為每 1TiB 的預置容量以 10,000 IOPS 的速度提供 200 MB/s 的聚合吞吐量。
Nice DCV 用作遠程可視化協議。
注:我們在 re:Invent 2018 上發布了 Elastic Fabric Adapter (EFA),最近又在多個 AWS 區域中推出了該服務。EFA 這種網絡設備可掛載到您的 Amazon EC2 實例以加速 HPC 應用程序的運行,降低延遲并使其更均勻,帶來比基于云的 HPC 系統通常使用的 TCP 傳輸方式更高的吞吐量。其提升了對于擴展 HPC 應用程序至關重要的實例間通信的性能,并為在現有 AWS 網絡基礎設施上運行做了優化。ANSYS Fluent 尚不適合與 EFA 共用,因此本篇博文中不會全面介紹這一具體的網絡設備。
注意:ANSYS Fluent 是一款需要許可證的市售軟件包。本文假定您已獲得在 AWS 上使用(或通過 AWS 訪問)ANSYS Fluent 的許可證。此外,下文的安裝腳本還需要您擁有 ANSYS 安裝包。您可以在“下載 – 當前發行版本”下方下載當前發行版本的 ANSYS。
1. 創建一個自定義 AMI
為了加速集群的創建,更重要的是,為了縮短計算節點的啟動時間,良好做法是創建一個部分軟件包已預安裝并且設置已完成配置的自定義 AMI。
以已有 AMI 為基礎開始工作,記下您計劃部署集群區域的適用 AMI ID,詳情請見我們的 AMI 區域列表。例如,我們在弗吉尼亞州 (us-east-1) 使用 CentOS7 開始工作,則 AMI ID 為 ami-0a4d7e08ea5178c02。
打開 AWS 控制臺并在偏好區域(即選擇 AMI 的區域)中啟動一個實例,按前述方式使用 AMI ID。
確保您的實例可以從互聯網訪問,并且具有公共 IP 地址。
為實例分配一個允許其從 S3(或從特定的 S3 存儲桶)下載文件的 IAM 角色。
可選擇標記實例(即 Name = Fluent-AMI-v1)。
配置安全組以允許端口 22 上的入站連接。
如果您需要為 AWS ParallelCluster 創建自定義 AMI 方法的額外細節,請參閱官方文檔 Building a custom AWS ParallelCluster AMI。
實例就緒后,通過 SSH 進行連接并以 root 身份運行以下命令:
yum -y update
yum install -y dkms zlib-devel libXext-devel libGLU-devel libXt-devel libXrender-devel libXinerama-devel libpng-devel libXrandr-devel libXi-devel libXft-devel libjpeg-turbo-devel libXcursor-devel readline-devel ncurses-devel Python Python-devel cmake QT-devel QT-assistant mpfr-devel gmp-devel htop wget screen vim xorg-x11-drv-dummy xorg-x11-server-utils libXp.x86_64 xorg-x11-fonts-cyrillic.noarch xterm.x86_64 openmotif.x86_64 compat-libstdc++-33.x86_64 libstdc++.x86_64 libstdc++.i686 gcc-c++.x86_64 compat-libstdc++-33.i686 libstdc++-devel.x86_64 libstdc++-devel.i686 compat-gcc-34.x86_64 gtk2.i686 libXxf86vm.i686 libSM.i686 libXt.i686 xorg-x11-fonts-ISO8859-1-75dpi.no xorg-x11-fonts-iso8859-1-75dpi.no libXext gdm gnome-session gnome-classic-session gnome-session-xsession xorg-x11-server-Xorg xorg-x11-drv-dummy xorg-x11-fonts-Type1 xorg-x11-utils gnome-terminal gnu-free-fonts-common gnu-free-mono-fonts gnu-free-sans-fonts gnu-free-serif-fonts alsa-plugins-pulseaudio alsa-utils
yum -y groupinstall "GNOME Desktop"
yum -y erase initial-setup gnome-initial-setup initial-setup-gui
#a reboot here may be helpful in case the kernel has been updated
#this will disable the ssh host key checking
#usually this may not be needed, but with some specific configuration Fluent may require this setting.
cat <> /etc/ssh/ssh_config
StrictHostKeyChecking no
UserKnownHostsFile /dev/null
EOF
#set higher limits, usefull when running Fluent (and in general HPC applications) on multiple nodes via MPI
cat <> /etc/security/limits.conf
* hard memlock unlimited
* soft memlock unlimited
* hard stack 1024000
* soft stack 1024000
* hard nofile 1024000
* soft nofile 1024000
EOF
#stop and disable the firewall
systemctl disable firewalld
systemctl stop firewalld
#install the latest ENA driver, ATM 2.1.1
cd /tmp
wget https://github.com/amzn/amzn-drivers/archive/ena_Linux_2.1.1.tar.gz
tar zxvf ena_Linux_2.1.1.tar.gz
mv amzn-drivers-ena_Linux_2.1.1 /usr/src/ena-2.1.1
cat < /usr/src/ena-2.1.1/dkms.conf
PACKAGE_NAME="ena"
PACKAGE_VERSION="2.1.1"
AUTOINSTALL="yes"
REMAKE_INITRD="yes"
BUILT_MODULE_LOCATION[0]="kernel/Linux/ena"
BUILT_MODULE_NAME[0]="ena"
DEST_MODULE_LOCATION[0]="/updates"
DEST_MODULE_NAME[0]="ena"
CLEAN="cd kernel/Linux/ena; make clean"
MAKE="cd kernel/Linux/ena; make BUILD_KERNEL=\${kernelver}"
EOF
dkms add -m ena -v 2.1.1
dkms build -m ena -v 2.1.1
dkms install -m ena -v 2.1.1
dracut -f —add-drivers ena
#reboot again, and make sure that after the reboot the ena driver is up to date (run modinfo ena to check)
#install the latest version of NICE DCV (at the moment it is 2017.4)
cd /tmp
wget https://d1uj6qtbmh3dt5.cloudfront.net/server/nice-dcv-2017.4-6898-el7.tgz
tar xzvf nice-dcv-2017.4-6898-el7.tgz
cd nice-dcv-2017.4-6898-el7
yum install -y nice-dcv-server-2017.4.6898-1.el7.x86_64.rpm nice-dcv-gltest-2017.4.216-1.el7.x86_64.rpm nice-xdcv-2017.4.210-1.el7.x86_64.rpm
#install this additional package only in case you are running on an instance equipped with GPU
yum install -y nice-dcv-gl-2017.4.490-1.el7.i686.rpm nice-dcv-gl-2017.4.490-1.el7.x86_64.rpm
# Add the line "blacklist = /usr/bin/Xorg" to section [gl] of /etc/dcv/dcv-gl.conf
# to fix an incompatibility introduced with the latest versions of Xorg and Nvidia driver
sed -i 's|\[gl\]|&\nblacklist = /usr/bin/Xorg|' /etc/dcv/dcv-gl.conf
#Clean up the instance before creating the AMI.
/usr/local/sbin/ami_cleanup.sh
#shutdown the instance
shutdown -h now
現在您可以通過 AWS CLI(或 AWS Web 控制臺)創建您的 AMI 了:
AWS ec2 create-image --instance-id i-1234567890abcdef0 --name "Fluent-AMI-v1" --description "This is my first ANSYS Fluent AMI"
輸出將如下所示:
{"ImageId": "ami-1a2b3c4d5e6f7g"}
記住 AMI id。稍后 AWS ParallelCluster 配置文件中將會用到。
2. 創建 / 復用 VPC、子網以及安全組
下一步,創建或復用已有 VPC。注意 vpc-ID 和 subnet-ID。有關為 AWS ParallelCluster 創建并配置 VPC 方法的更多信息,可參閱網絡配置。
您可以使用單個子網同時用于主實例和計算實例,或者使用兩個子網:一個公共子網上為主實例,一個私有子網上為計算實例。
下方的配置文件展示了在單個子網上運行集群的方法,如此架構圖所示:
使用 AWS ParallelCluster 運行 ANSYS Fluent 的最佳實踐
還要創建一個開啟 8443 端口的臨時安全組。這將用于允許與使用 NICE DCV 作為遠程桌面流協議的主節點建立入站連接。
3. 創建集群配置文件和后安裝腳本
現在您可以開始編寫配置文件了。在您本地 PC 上打開一個文本文件,并將下方代碼粘貼進去。(此處為示例,您可能要依照偏好修改其中一些參數。您還要將占位符 替換為您自己的設置。)
[AWS]
AWS_region_name =
[global]
sanity_check = true
cluster_template = Fluent_cluster_test1
update_check = true
[vpc vpc-us-east-1]
vpc_id = vpc-
master_subnet_id = subnet-
additional_sg=sg-
[cluster Fluent_cluster]
key_name =
vpc_settings = vpc-us-east-1
compute_instance_type=c5n.18xlarge
master_instance_type=g3.4xlarge
initial_queue_size = 0
max_queue_size = 10
maintain_initial_size = true
scheduler=sge
cluster_type = ondemand
s3_read_write_resource=arn:AWS:s3:::*
post_install = s3:///Fluent-post-install.sh
placement_group = DYNAMIC
placement = compute
master_root_volume_size = 64
compute_root_volume_size = 20
base_os = centos7
extra_json = {"cluster" : {"cfn_scheduler_slots" : "cores"} }
tags = {"Name" : "Fluent_cluster_test1"}
fsx_settings = parallel-fs
custom_ami = ami-
[fsx parallel-fs]
shared_dir = /fsx
storage_capacity = 3600
import_path = s3://
imported_file_chunk_size = 1024
export_path = s3:///export
讓我們來詳細研究一下該配置中的某些設置:
AWS_region_name = 選擇正確的 AWS 區域對于您遠程桌面會話的可用性至關重要:您與所選區域的地理距離越近,網絡延遲就越低,可用性和交互性也就越好。如果您不清楚距您最近的 AWS 區域,可使用簡單的 CloudPing 服務來確定哪個區域的延遲最低。
initial_queue_size=0。此設置用于定義集群的初始大小。在此示例中其值為 0(您可以根據自己的需要任意修改)。0 意味著當您首次提交作業時,您的作業在隊列中將處于待處理狀態。當在集群中添加節點時,作業將轉變為運行狀態。AWS ParallelCluster 默認情況下會每 5 分鐘檢視一次計劃程序隊列,并根據運行待處理作業所需的槽數添加(或刪除)節點。
compute_instance_type = c5n.18xlarge。此設置用于定義集群計算節點的實例類型。此配置文件顯示為 c5n.18xlarge。這是(在撰文時)最適合緊密耦合工作負載的實例。C5n.18xlarge 具有最佳的價格 / 性能比,及最佳的內存 / 核心比,還有一點很重要的是,它可用于 EFA。其他適用的實例是(最新的)c5.24xlarge 和 c4.8xlarge,兩者價格都與 C4n.18xlarge 相近,但不支持 EFA。如果您想要構建自己的網格,并且需要更高的內存 / 核心比,m5.24xlarge 或 r5.24xlarge 是不錯的選擇,但其價格存在差異。最后,由于使用了定制的 Intel? Xeon? 可擴展處理器(可維持最高為 4.0 GHz 的全核頻率),z1d.12xlarge 實例可以發揮出最大的效能,是所有云實例中速度最快的。不管實例類型為何,我們的建議是始終為所有實例類型選擇最大大小。一般而言,緊密耦合工作負載的可擴展性受限于網絡帶寬(及延遲),因此為您的實例選擇最大大小,可以通過每一個單獨實例使用盡可能多的核心來減少跨節點通信。
master_instance_type = g3.4xlarge。此設置用于定義集群主節點(或登錄節點)的實例類型。在此示例中,我們選擇配有 GPU (Nvidia M60) 的實例,因為我們還想要在作業完成之后進行數據后處理。后處理應用通常需要一個 GPU 來渲染復雜的 3D 圖像。如果您不想執行任何后處理(或者您的后處理不需要 GPU),則可以選擇與計算節點相同的實例類型(可能只是大小略小),或者您可以選擇適合構建網格的實例類型(m5.24xlarge 或 r5.24xlarge)。
placement_group = DYNAMIC 和 placement = compute 兩者用于告知 AWS 我們想要使用集群置放組,以及只有計算節點需要位于相同的置放組中,主節點不需要。在啟用 NFS 共享,計算節點與主節點之間的延遲需要盡可能低時,將主節點也放置于相同的置放組中是一種良好做法。在我們示例中,我們不使用 NFS 共享,而是使用 FSx。
extra_json = {“cluster”:{“cfn_scheduler_slots”:“cores”} } 此語句連同下方后安裝腳本開頭的 for 循環一起用于禁用超線程。絕大部分的 HPC 應用程序無法從超線程中獲益。但是,如果禁用超線程而不使用此行語句,SGE 將無法正確地將槽映射到核。
custom_ami = ami- 該設置將告知 AWS ParallelCluster 使用您先前創建的 AMI。
[fsx parallel-fs] 該部分包含定義您的基于 FSx 的并行高性能文件系統的設置。
post_install = s3:///Fluent-post-install.sh. 該設置定義在所有實例創建之后,在實例上運行的腳本的位置。下方是一個針對此處案例調整過的腳本示例;您可以原樣使用,也可以根據需要進行修改:
#!/bin/bash
#source the AWS ParallelCluster profile
. /etc/parallelcluster/cfnconfig
#disable hyper-threading
for cpunum in $(cat /sys/devices/system/cpu/cpu*/topology/thread_siblings_list | cut -s -d, -f2- | tr ',' '\n' | sort -un); do
echo 0 > /sys/devices/system/cpu/cpu$cpunum/online
done
case "${cfn_node_type}" in
MasterServer)
#save the instance type
instanceType=$(curl http://169.254.169.254/latest/meta-data/instance-type)
if [[$instanceType == *"g3"*]]; then
# configure Xorg to use the Nvidia GPU with the right driver
nvidia-xconfig -preserve-busid -enable-all-gpus
#Configure the GPU settings to be persistent
nvidia-persistenced
#Disable the autoboost feature for all GPUs on the instance
nvidia-smi -auto-boost-default=0
#Set all GPU clock speeds to their maximum frequency.
nvidia-smi -ac 2505,1177
else
cd /etc/X11/
#download a dummy xorg.conf,
#This is used by instances without GPU
wget -q https://xpra.org/xorg.conf
fi
#set the system to run the graphical mode (init 5)
systemctl set-default graphical.target
#and start GDM
systemctl enable gdm.service
systemctl start gdm.service
sleep 2
#enable and start also DCV
systemctl enable dcvserver.service
systemctl start dcvserver.service
sleep 2
#create a NICE DCV session
dcv create-session --owner centos --user centos test1
echo "centos:" | chpasswd
;;
ComputeFleet)
#nothing here, for now
;;
esac
注:將占位符 替換為您自己的密碼。該密碼將僅用于通過 NICE DCV 執行連接。要通過 SSH 進行連接,您仍然需要使用配置文件中定義的私有密鑰。
請您登錄后閱讀全文, 登錄?或者?注冊
總結
以上是生活随笔為你收集整理的anasys hpc集群_这可能是最简单的并行方案,如何基于 AWS ParallelCluster 运行 ANSYS Fluent...的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: decimal是( )数据类型_SQL
- 下一篇: 学银在线python课程_Python