1. Giới thiệu

Lần cập nhật gần đây nhất: ngày 5 tháng 5 năm 2021
Sản phẩm bạn sẽ tạo ra
Trong lớp học lập trình này, bạn sẽ triển khai một cụm Điện toán hiệu năng cao (HPC) tự động cấp tài nguyên bổ sung trên Google Cloud bằng trình lập lịch công việc Slurm. Bạn sẽ sử dụng một ví dụ về việc triển khai Terraform để triển khai cụm này với WRF® được cài đặt thông qua Spack. Sau đó, bạn sẽ sử dụng cơ sở hạ tầng này để chạy điểm chuẩn CONUS 2,5 km hoặc điểm chuẩn CONUS 12 km.
Kiến thức bạn sẽ học được
- Cách định cấu hình các chính sách Quản lý danh tính và quyền truy cập (IAM) để vận hành một cụm HPC trên Google Cloud Platform
- Cách triển khai một cụm HPC gốc trên đám mây bằng trình lập lịch công việc Slurm
- Cách chạy WRF® song song trên Google Cloud bằng cách sử dụng một lô công việc Slurm
Những gì bạn cần
- Tài khoản Gmail có khoá SSH được đính kèm, hoặc Google Workspace, Cloud Identity
- Dự án trên Google Cloud Platform có tính năng thanh toán
- Vai trò chủ sở hữu dự án trên Dự án GCP
- Đủ hạn mức Compute Engine (480 vCPU c2 và 500 GB Ổ đĩa chuẩn PD)
2. Cấu hình
Bật các API của Google Cloud
Để tạo và sử dụng các API tài nguyên của Google Cloud, bạn phải bật các API này.
gcloud services enable compute.googleapis.com
Thiết lập chính sách IAM
Trong HPC, có sự phân biệt rõ ràng giữa quản trị viên hệ thống và người dùng hệ thống. Quản trị viên hệ thống thường có "quyền truy cập gốc", cho phép họ quản lý và vận hành các tài nguyên điện toán. Người dùng hệ thống thường là các nhà nghiên cứu, nhà khoa học và kỹ sư ứng dụng, những người chỉ cần sử dụng các tài nguyên để thực thi các công việc.
Trên Google Cloud, API đăng nhập vào hệ điều hành cung cấp thông tin người dùng POSIX từ các tài khoản Google Workspace, Cloud Identity và Gmail. Ngoài ra, tính năng Đăng nhập bằng hệ điều hành còn tích hợp với hệ thống Quản lý danh tính và quyền truy cập (IAM) của GCP để xác định xem người dùng có được phép tăng đặc quyền trên hệ thống Linux hay không.
Trong hướng dẫn này, chúng tôi giả định rằng bạn đang đảm nhận vai trò quản trị viên hệ thống và quản trị viên Compute Engine. Chúng ta sẽ định cấu hình các chính sách IAM để cấp cho bạn đủ quyền thực hiện các nhiệm vụ sau
- Tạo/Xoá các phiên bản máy ảo Google Compute Engine (GCE)
- Kết nối SSH vào các phiên bản máy ảo GCE

Để cấp cho chính mình các vai trò IAM cần thiết để hoàn tất hướng dẫn này, hãy làm như sau trong Google Cloud Console:
- Chuyển đến mục IAM & Admin > IAM trong trình đơn Sản phẩm và dịch vụ.
- Nhấp vào "+Thêm" ở gần đầu trang.
- Nhập tài khoản Google Workspace, tài khoản Cloud Identity hoặc tài khoản Gmail của bạn trong mục "Thành viên mới"
- Thêm các vai trò sau : Quản trị viên điện toán, Đăng nhập hệ điều hành điện toán và Người dùng tài khoản dịch vụ
- Nhấp vào Lưu
Giờ đây, thông tin đăng nhập của bạn đã có các quyền cần thiết để bắt đầu tạo cụm HPC.
Để xác minh rằng bạn đã chỉ định đúng vai trò, hãy mở Cloud Shell rồi chạy lệnh sau, thay thế YOUR_PROJECT và EMAIL_ADDRESS bằng dự án và địa chỉ email của bạn.
$ gcloud projects get-iam-policy YOUR_PROJECT --flatten="bindings[].members" --format='table(bindings.role)' --filter="bindings.members=user:EMAIL_ADDRESS"
Lệnh này sẽ cho ra kết quả:
ROLE roles/compute.osLogin roles/iam.serviceAccountUser roles/compute.admin
3. Hạn mức thấp: Triển khai một cụm HPC tự động cấp tài nguyên bổ sung bằng Terraform
Trong phần này, bạn sẽ triển khai một cụm HPC tự động cấp tài nguyên bổ sung, bao gồm cả trình lập lịch công việc Slurm. Tuỳ chọn này giống với tuỳ chọn Hạn mức cao, ngoại trừ việc loại máy được dùng có kích thước nhỏ hơn và số lượng vCPU được dùng cũng nhỏ hơn.
- Mở Cloud Shell trên GCP.
- Sao chép kho lưu trữ FluidNumerics/slurm-gcp
cd ~ git clone https://github.com/FluidNumerics/slurm-gcp.git
- Thay đổi thành thư mục WRF:
cd ~/slurm-gcp/tf/examples/wrf
- Tạo và xem xét kế hoạch terraform. Đặt các biến môi trường
WRF_NAME,WRF_PROJECTvàWRF_ZONEđể chỉ định tên của cụm, dự án GCP và vùng mà bạn muốn triển khai.
export WRF_PROJECT=<PROJECT ID> export WRF_ZONE=<ZONE> export WRF_NAME="wrf-small"
- Trong lần đầu tiên chạy Terraform, bạn phải chạy lệnh
init:
terraform init
- Tạo kế hoạch bằng lệnh make, lệnh này sẽ chạy
terraform
make plan
- Triển khai cụm. Quá trình cài đặt và thiết lập có thể mất đến 2 giờ. Trong quá trình triển khai, WRF và tất cả các phần phụ thuộc của nó sẽ được cài đặt.
make apply
- SSH đến nút login được tạo ở bước trước. Bạn có thể thấy nút này ở bước trước (có thể có tên là wrf-small-login0). Bạn có thể thực hiện việc này bằng cách nhấp vào nút SSH bên cạnh danh sách các thực thể máy ảo trong mục trong trình đơn Compute Engine -> Phiên bản máy ảo của bảng điều khiển.
Lựa chọn: Cặp lệnh gcloud này sẽ xác định tên nút đăng nhập và truy cập vào nút đó qua SSH:
export CLUSTER_LOGIN_NODE=$(gcloud compute instances list --zones ${WRF_ZONE} --filter="name ~ .*login" --format="value(name)" | head -n1)
gcloud compute ssh ${CLUSTER_LOGIN_NODE} --zone ${WRF_ZONE}
- Sau khi kết nối với nút đăng nhập, để xác minh chế độ thiết lập cụm, hãy kiểm tra để đảm bảo rằng mô-đun wrf có sẵn.
$ module load gcc && module load openmpi && module avail -------------------------------------- /apps/spack/share/spack/lmod/linux-centos7-x86_64/openmpi/4.0.5-eagetxh/gcc/9.2.0 -------------------------------------- hdf5/1.10.7 netcdf-c/4.7.4 netcdf-fortran/4.5.3 parallel-netcdf/1.12.1 wrf/4.2 ------------------------------------------------- /apps/spack/share/spack/lmod/linux-centos7-x86_64/gcc/9.2.0 ------------------------------------------------- hwloc/2.2.0 libiconv/1.16 libpng/1.6.37 nasm/2.15.05 openmpi/4.0.5 (L,D) time/1.9 zlib/1.2.11 jasper/2.0.16 libjpeg-turbo/2.0.4 libtirpc/1.2.6 ncurses/5.9.20130511 perl/5.16.3 util-macros/1.19.1 krb5/1.15.1 libpciaccess/0.16 libxml2/2.9.10 numactl/2.0.14 tcsh/6.22.02 xz/5.2.2 --------------------------------------------------- /apps/spack/share/spack/lmod/linux-centos7-x86_64/Core ---------------------------------------------------- gcc/9.2.0 (L) ---------------------------------------------------------------------- /apps/modulefiles ---------------------------------------------------------------------- openmpi/v4.1.x
- Xác minh rằng
/apps/share/conus-12kmcó nội dung được liệt kê bên dưới.
$ ls -1 /apps/share/conus-12km/ FILE:2018-06-17_00 FILE:2018-06-17_03 FILE:2018-06-17_06 FILE:2018-06-17_09 FILE:2018-06-17_12 geo_em.d01.nc geogrid.log met_em.d01.2018-06-17_00:00:00.nc met_em.d01.2018-06-17_03:00:00.nc met_em.d01.2018-06-17_06:00:00.nc met_em.d01.2018-06-17_09:00:00.nc met_em.d01.2018-06-17_12:00:00.nc metgrid.log namelist.input namelist.wps ungrib.log wrfbdy_d01 wrfinput_d01
4. Chạy phép đo điểm chuẩn 12 km ở lục địa Hoa Kỳ
Để chạy phép đo điểm chuẩn CONUS 12km, bạn sẽ gửi một tác vụ hàng loạt Slurm. Các bộ dữ liệu đầu vào cho phép đo điểm chuẩn này có trong hình ảnh máy ảo wrf-gcp trong /apps/share/benchmarks/conus-12km.
Đối với phần này, bạn phải kết nối SSH với nút login của cụm
- Sao chép tệp hàng loạt wrf-conus.sh mẫu từ /apps/share
cp /apps/share/wrf-conus12.sh ~/
- Mở wrf-conus.sh trong trình chỉnh sửa văn bản để xác minh rằng
--partitionvà--ntasksđược đặt đúng cách. Số lượng tác vụ phải được đặt thành số lượng cấp MPI mà bạn muốn dùng để chạy công việc. Trong bản minh hoạ này, số lượng tác vụ tương đương với số lượng vCPU được dùng cho công việc và không được vượt quá hạn mức hiện có của bạn.
#!/bin/bash
#SBATCH --partition=wrf
#SBATCH --ntasks=24
#SBATCH --ntasks-per-node=8
#SBATCH --mem-per-cpu=2g
#SBATCH --cpus-per-task=1
#SBATCH --account=default
#
# /////////////////////////////////////////////// #
WORK_PATH=${HOME}/wrf-benchmark/
SRUN_FLAGS="-n $SLURM_NTASKS --cpu-bind=threads"
. /apps/share/spack.sh
module load gcc/9.2.0
module load openmpi
module load hdf5 netcdf-c netcdf-fortran wrf
mkdir -p ${WORK_PATH}
cd ${WORK_PATH}
ln -s ${INSTALL_ROOT}/share/conus-12km/* .
ln -s $(spack location -i wrf)/run/* .
srun $MPI_FLAGS ./wrf.exe
- Gửi lệnh hàng loạt bằng sbatch.
sbatch wrf-conus12.sh
- Chờ cho đến khi công việc hoàn tất. Điểm chuẩn này được định cấu hình để chạy dự báo trong 6 giờ, mất khoảng 3 giờ để hoàn tất với 24 thứ hạng. Bạn có thể theo dõi trạng thái của lệnh này bằng
squeue. - Khi công việc hoàn tất, hãy kiểm tra nội dung của rsl.out.0000 để xác minh rằng bạn thấy câu lệnh "wrf: SUCCESS COMPLETE WRF". Hậu tố bằng số sẽ khác nếu bạn đã chạy tác vụ nhiều lần, ví dụ: bạn đã thiết lập sai cấu hình và phải chạy lại.
$ tail -n1 ${HOME}/wrf-benchmark/rsl.out.0000
d01 2018-06-17_06:00:00 wrf: SUCCESS COMPLETE WRF
5. Hạn mức cao: Triển khai một cụm HPC tự động cấp tài nguyên bổ sung bằng Terraform
Trong phần này, bạn sẽ triển khai một cụm HPC tự động cấp tài nguyên bổ sung, bao gồm cả trình lập lịch công việc Slurm trong GCP.
- Mở Cloud Shell trên GCP.
- Sao chép kho lưu trữ FluidNumerics/slurm-gcp
cd ~ git clone https://github.com/FluidNumerics/slurm-gcp.git
- Thay đổi thành thư mục WRF:
cd ~/slurm-gcp/tf/examples/wrf
- Tạo và xem xét kế hoạch terraform. Đặt các biến môi trường
WRF_NAME,WRF_PROJECT,WRF_ZONE,WRF_MAX_NODEvàWRF_MACHINE_TYPEđể chỉ định tên của cụm, dự án GCP, vùng mà bạn muốn triển khai, số lượng nút tối đa và loại máy. Đối với điểm chuẩn 2,5 km CONUS, bạn nên sử dụng các phiên bản c2-standard-60 có ít nhất 8 nút để chạy các công việc với 480 cấp MPI.
export WRF_PROJECT=<PROJECT ID> export WRF_ZONE=<ZONE> export WRF_NAME=wrf-large export WRF_MAX_NODE=5 export WRF_MACHINE_TYPE="c2-standard-60"
- Nếu chưa thực hiện bước này, bạn phải chạy
terraform initđể khởi động terraform:
terraform init
- Tạo kế hoạch bằng lệnh make.
make plan
- Triển khai cụm. Quá trình cài đặt và thiết lập có thể mất đến 2 giờ. Trong quá trình triển khai, WRF và tất cả các phần phụ thuộc của nó sẽ được cài đặt.
make apply
- SSH đến nút login được tạo ở bước trước. Bạn có thể thấy nút này ở bước trước (có thể có tên là wrf-large-login0). Bạn có thể thực hiện việc này bằng cách nhấp vào nút SSH bên cạnh danh sách các thực thể máy ảo trong mục trong trình đơn Compute Engine -> Phiên bản máy ảo của bảng điều khiển.
Lựa chọn: Cặp lệnh gcloud này sẽ xác định tên nút đăng nhập và truy cập vào nút đó qua SSH:
export CLUSTER_LOGIN_NODE=$(gcloud compute instances list --zones ${WRF_ZONE} --filter="name ~ .*login" --format="value(name)" | head -n1)
gcloud compute ssh ${CLUSTER_LOGIN_NODE} --zone ${WRF_ZONE}
Lệnh thứ hai sẽ giúp bạn kết nối với nút Đăng nhập Slurm.
- Sau khi kết nối với nút đăng nhập, để xác minh chế độ thiết lập cụm, hãy kiểm tra để đảm bảo rằng mô-đun wrf có sẵn.
$ module load gcc && module load openmpi && module avail -------------------------------------- /apps/spack/share/spack/lmod/linux-centos7-x86_64/openmpi/4.0.5-eagetxh/gcc/9.2.0 -------------------------------------- hdf5/1.10.7 netcdf-c/4.7.4 netcdf-fortran/4.5.3 parallel-netcdf/1.12.1 wrf/4.2 ------------------------------------------------- /apps/spack/share/spack/lmod/linux-centos7-x86_64/gcc/9.2.0 ------------------------------------------------- hwloc/2.2.0 libiconv/1.16 libpng/1.6.37 nasm/2.15.05 openmpi/4.0.5 (L,D) time/1.9 zlib/1.2.11 jasper/2.0.16 libjpeg-turbo/2.0.4 libtirpc/1.2.6 ncurses/5.9.20130511 perl/5.16.3 util-macros/1.19.1 krb5/1.15.1 libpciaccess/0.16 libxml2/2.9.10 numactl/2.0.14 tcsh/6.22.02 xz/5.2.2 --------------------------------------------------- /apps/spack/share/spack/lmod/linux-centos7-x86_64/Core ---------------------------------------------------- gcc/9.2.0 (L) ---------------------------------------------------------------------- /apps/modulefiles ---------------------------------------------------------------------- openmpi/v4.1.x
- Xác minh rằng
/apps/share/conus-2.5kmcó nội dung được liệt kê bên dưới.
$ ls -1 /apps/share/conus-2.5km FILE:2018-06-17_00 FILE:2018-06-17_03 FILE:2018-06-17_06 FILE:2018-06-17_09 FILE:2018-06-17_12 geo_em.d01.nc geogrid.log gfs.0p25.2018061700.f000.grib2 gfs.0p25.2018061700.f003.grib2 gfs.0p25.2018061700.f006.grib2 gfs.0p25.2018061700.f009.grib2 gfs.0p25.2018061700.f012.grib2 met_em.d01.2018-06-17_00:00:00.nc met_em.d01.2018-06-17_03:00:00.nc met_em.d01.2018-06-17_06:00:00.nc met_em.d01.2018-06-17_09:00:00.nc met_em.d01.2018-06-17_12:00:00.nc metgrid.log namelist.input namelist.wps ungrib.log wrfbdy_d01 wrfinput_d01
6. Chạy phép đo điểm chuẩn 2,5 km CONUS
Để chạy phép đo điểm chuẩn 2,5 km CONUS, bạn sẽ gửi một batch job Slurm. Các bộ bài đầu vào cho điểm chuẩn này có trong hình ảnh VM wrf-gcp trong /apps/share/benchmarks/conus-2.5km.
Đối với phần này, bạn phải kết nối SSH với nút login của cụm
- Sao chép tệp hàng loạt wrf-conus.sh mẫu từ /apps/share
cp /apps/share/wrf-conus2p5.sh ~/
- Mở wrf-conus.sh trong trình chỉnh sửa văn bản để xác minh rằng
--partitionvà--ntasksđược đặt đúng cách. Bạn phải đặt phân vùng thành c2-60. Số lượng tác vụ phải được đặt thành số lượng cấp MPI mà bạn muốn dùng để chạy công việc. Trong bản minh hoạ này, số lượng tác vụ tương đương với số lượng vCPU được dùng cho công việc và không được vượt quá hạn mức hiện có của bạn.
#!/bin/bash
#SBATCH --partition=c2-60
#SBATCH --ntasks=480
#SBATCH --ntasks-per-node=60
#SBATCH --mem-per-cpu=2g
#SBATCH --cpus-per-task=1
#SBATCH --account=default
#
# /////////////////////////////////////////////// #
WORK_PATH=${HOME}/wrf-benchmark/
SRUN_FLAGS="-n $SLURM_NTASKS --cpu-bind=threads"
. /apps/share/spack.sh
module load gcc/9.2.0
module load openmpi
module load hdf5 netcdf-c netcdf-fortran wrf
mkdir -p ${WORK_PATH}
cd ${WORK_PATH}
ln -s ${INSTALL_ROOT}/share/conus-2.5km/* .
ln -s $(spack location -i wrf)/run/* .
srun $MPI_FLAGS ./wrf.exe
- Gửi lệnh hàng loạt bằng sbatch.
sbatch wrf-conus2p5.sh
- Chờ cho đến khi công việc hoàn tất. Điểm chuẩn này được định cấu hình để chạy dự báo 6 giờ, mất khoảng 1 giờ để hoàn thành với 480 thứ hạng. Bạn có thể theo dõi trạng thái của lệnh này bằng
squeue. - Khi công việc hoàn tất, hãy kiểm tra nội dung của rsl.out.0000 để xác minh rằng bạn thấy câu lệnh "wrf: SUCCESS COMPLETE WRF". Hậu tố bằng số sẽ khác nếu bạn đã chạy tác vụ nhiều lần, ví dụ: bạn đã thiết lập sai cấu hình và phải chạy lại.
$ tail -n1 ${HOME}/wrf-benchmark/rsl.out.0000
d01 2018-06-17_06:00:00 wrf: SUCCESS COMPLETE WRF
7. Xin chúc mừng
Trong lớp học lập trình này, bạn đã tạo một cụm HPC tự động cấp tài nguyên bổ sung, dựa trên đám mây và chạy một mô phỏng WRF® song song trên Google Cloud Platform!
Dọn dẹp
Để tránh bị tính phí vào tài khoản Google Cloud Platform cho các tài nguyên được dùng trong lớp học lập trình này, hãy làm như sau:
Xoá dự án
Cách dễ nhất để không bị tính phí là xoá dự án mà bạn đã tạo cho lớp học lập trình này.
Thận trọng: Việc xoá một dự án sẽ gây ra những tác động sau:
- Mọi nội dung trong dự án sẽ bị xoá. Nếu đã dùng một dự án hiện có cho lớp học lập trình này, thì khi xoá dự án đó, bạn cũng sẽ xoá mọi công việc khác mà bạn đã thực hiện trong dự án.
- Mã dự án tuỳ chỉnh sẽ bị mất. Khi tạo dự án này, có thể bạn đã tạo một mã dự án tuỳ chỉnh mà bạn muốn sử dụng trong tương lai. Để giữ lại những URL sử dụng mã dự án, chẳng hạn như URL appspot.com, hãy xoá các tài nguyên đã chọn trong dự án thay vì xoá toàn bộ dự án.
Nếu bạn dự định khám phá nhiều lớp học lập trình và hướng dẫn bắt đầu nhanh, thì việc sử dụng lại các dự án có thể giúp bạn tránh vượt quá hạn mức dự án.
- Trong Cloud Console, hãy chuyển đến trang Quản lý tài nguyên. Chuyển đến trang Quản lý tài nguyên
- Trong danh sách dự án, hãy chọn dự án mà bạn muốn xoá rồi nhấp vào biểu tượng Xoá
. - Trong hộp thoại, hãy nhập mã dự án rồi nhấp vào Tắt để xoá dự án.
Xoá từng tài nguyên
- Mở Cloud Shell rồi chuyển đến thư mục ví dụ wrf
cd ~/slurm-gcp/tf/examples/wrf
- Chạy lệnh make destroy để xoá tất cả tài nguyên.
make destroy