使用 QuTrunk+Amazon ParallelCluster3 進行平行計算

亞馬遜雲開發者發表於2022-12-27

1.丘秉宜;2.邵偉;3.黃文;4.郭夢傑;5.劉利;6.劉波

1.亞馬遜雲科技 Hero;2.啟科開發者生態負責人;3.啟科 DEVOPS 工程師;4.啟科量子資深研發工程師;5和;6.C++高階開發工程師

1、概述

QuTrunk 是啟科量子自主研發的一款免費、開源、跨平臺的量子計算程式設計框架,包括量子程式設計 API、量子命令轉譯、量子計算後端介面等。它提供多種量子計算體驗,提供本地量子計算 Python 計算後端,提供 OMP 多執行緒、MPI 多節點並行、GPU 加速等計算模式。本文將介紹如何使用 QuTrunk 的 MPI 平行計算模式利用亞馬遜雲科技的 ParallelCluster3 進行平行計算。在展示之前先和大家簡要介紹所使用的到的相關技術的幾個概念。

1.1 MPI 及 SLURM 叢集簡介

首先我們看下什麼是 MPI?在程式中,不同的程式需要相互的資料交換,特別是在科學計算中,需要大規模的計算與資料交換,叢集可以很好解決單節點計算力不足的問題,但在叢集中大規模的資料交換是很耗費時間的,因此需要一種在多節點的情況下能快速進行資料交流的標準,這就是 MPI。MPI 是一組用於多節點資料通訊的標準,而非一種語言或者介面。具體的使用方法需要依賴它的具體實現 (mpich or openmpi 等)。

我們通常透過 SLURM 叢集來處理 MPI 高效能運算,Slurm (Simple Linux Utility for Resource Management, http://slurm.schedmd.com/ ) 是一個開源、容錯、高度可擴充套件的叢集管理和作業排程系統,適用於大型和小型Linux叢集。Slurm不需要對其操作進行核心修改,並且相對獨立。作為叢集工作負載管理器,Slurm有三個關鍵功能。首先,它為使用者分配一段時間內對資源(計算節點)的獨佔和/或非獨佔訪問,以便他們可以執行工作。第二,它提供了一個框架,用於啟動、執行和監視所分配節點集上的工作(通常是並行作業)。最後,它透過管理待定工作佇列來仲裁資源爭用。

Slurm 的結構圖如下所示,它採用 slurmctld 服務(守護程式)作為中心管理器用於監測資源和作業,為了提高可用性,還可以配置另一個備份冗餘管理器。各計算節點需啟動 slurmd 守護程式,以便被用於作為遠端 shell 使用:等待作業、執行作業、返回狀態、再等待更多作業。slurmdbd(Slurm DataBase Daemon) 資料庫守護程式(非必需,建議採用,也可以記錄到純文字中等),可以將多個slurm管理的叢集的記賬資訊記錄在同一個資料庫中。還可以啟用 slurmrestd(Slurm REST API Daemon) 服務(非必需),該服務可以透過 REST API 與 Slurm 進行互動,所有功能都對應的 API。使用者工具包含 srun 執行作業、 scancel 終止排隊中或執行中的作業、 sinfo 檢視系統狀態、 squeue 檢視作業狀態、 sacct 檢視執行中或結束了的作業及作業步資訊等命令。 sview 命令可以圖形化顯示系統和作業狀態(可含有網路拓撲)。 scontrol 作為管理工具,可以監控、修改叢集的配置和狀態資訊等。用於管理資料庫的命令是 sacctmgr ,可認證叢集、有效使用者、有效記賬賬戶等。

如下圖所示,Slurm 守護程式管理的實體包括節點、Slurm 中的計算資源、將節點分組為邏輯(可能重疊)集合的分割槽、作業或在指定時間內分配給使用者的資源分配,以及作業步驟,這些步驟是作業中的一組(可能並行)任務。分割槽可以被視為作業佇列,每個佇列都有各種約束,例如作業大小限制、作業時間限制、允許使用它的使用者等。優先順序排序的作業被分配給分割槽內的節點,直到該分割槽內的資源(節點、處理器、記憶體等)耗盡。一旦作業被分配了一組節點,使用者就可以在分配中的任何配置中以作業步驟的形式啟動並行工作。例如,可以啟動單個作業步驟,該步驟利用分配給該作業的所有節點,或者多個作業步驟可以獨立地使用分配的一部分。

1.2 Amazon ParallelCluster3 介紹

Amazon ParallelCluster 是亞馬遜雲科技支援的開源叢集管理工具,可幫助您在亞馬遜雲中部署和管理高效能運算(HPC)叢集。Amazon ParallelCluster 基於流行的開源 CfnCluster 專案構建,並透過 Python 包索引(PyPI)釋出。ParallelCluster 的原始碼託管在 GitHub 上的 Amazon Web Services 儲存庫中。Amazon ParallelCluster 免費提供,您只需支付執行應用程式所需的亞馬遜雲科技資源。

藉助 ParallelCluster 工具使用者能夠在亞馬遜雲科技中快速構建 HPC 計算環境。它自動設定所需的計算資源和共享檔案系統。使用者可以將 Amazon ParallelCluster 與批處理排程器一起使用,例如 Amazon batch 和 Slurm。Amazon ParallelCluster 有助於快速啟動概念驗證部署和生產部署。也可以在 Amazon ParallelCluster 基礎之上構建更高階別的工作流程,例如 CFD 高效能運算。

使用 ParallelCluster 的工作流程如下:1、設計叢集;2、啟動叢集;3、登入叢集;4、提交作業

下面章節將詳細介紹透過如何透過 Amazon ParallelCluster 建立 HPC 叢集環境,然後透過 qutrunk 編寫程式在 Amazon HPC 環境下執行平行計算。

2、Amazon ParallelCluster 安裝部署

2.1 安裝準備

2.1.1 本地 Python 環境準備

Amazon ParallelCluster 作為 Python 包分發,並使用 Python pip 包管理器安裝,Amazon ParallelCluster 需要 Python 3.7 或更高版本。

如果沒有安裝需要先進行安裝。本文不介紹如何安裝,使用者可以從 Python 官網下載安裝,查詢 Python 版本命令如下

elven@pc-elvenhuang:~$ python3 --version
Python 3.10.6

2.1.2 亞馬遜雲科技賬號註冊

登入亞馬遜雲科技的官網,點選建立亞馬遜雲科技賬號進行註冊,Amazon Console - Signup (amazon.com),註冊好根賬號後,登入到 Amazon Console,然後點選右上角賬號名下拉,選擇安全憑證,開啟安裝憑證設定頁面。

在這裡可以設定 MFA,還有訪問秘鑰,我們建立一個訪問秘鑰,並下載這個秘鑰 rootkey.csv 儲存備用。

2.1.3 建立秘鑰對

為後面建立的 EC2 伺服器登入準備,需要先建立好金鑰對,金鑰對與 EC2 資源相關,EC2 有 Region 屬性,不同 Region 下的 EC2 需要建立不同的秘鑰對,本實驗中預設將使用新加坡資源,所以在此 Region 環境下的 EC2 服務下的金鑰對建立一個金鑰對備用。

開啟 EC2 服務首頁,控制皮膚 | EC2 Management Console (amazon.com) 選擇 Region 為 ap-southeast-1,然後選擇左側導航欄下的網路與安全,選擇金鑰對。

點選建立金鑰對,開啟建立金鑰對的介面,選擇 RSA 加密,秘鑰格式選擇與 openssh 共用,完成建立,並下載好備用。

2.2 安裝 ParallelCluster

Amazon ParallelCluster 有兩種安裝方法:

  1. 在虛擬化環境中部署 ParallelCluster(推薦方式)
  2. 在非虛擬化環境部署 ParallelCluster

本文采用虛擬化環境下部署的方式安裝 ParallelCluster。

2.2.1 安裝虛擬化環境

$ python3 -m pip install --upgrade pip
$ python3 -m pip install --user --upgrade virtualenv

2.2.2 建立虛擬化環境並啟用

$ python3 -m virtualenv ~/apc-ve
$ source ~/apc-ve/bin/activate

2.2.3 虛擬化環境下安裝 Amazon ParallelCluster

(apc-ve)elven@pc-elvenhuang:~$ python3 -m pip install --upgrade "aws-parallelcluster"

安裝完之後,然後安裝 npm,npm 的安裝需要用到 github 資源,國內網路環境訪問較慢,我們這裡採用加速方式下載,在 github 的 url 前新增加速:https://ghproxy.com/ 命令列如下:

(apc-ve)elven@pc-elvenhuang:~$ curl -o- https://ghproxy.com/https://raw.githubusercontent.com/nvm-sh/nvm/v0.38.0/install.sh | bash
(apc-ve)elven@pc-elvenhuang:~$ chmod ug+x ~/.nvm/nvm.sh
(apc-ve)elven@pc-elvenhuang:~$ source ~/.nvm/nvm.sh
(apc-ve)elven@pc-elvenhuang:~$ nvm install --lts
(apc-ve)elven@pc-elvenhuang:~$ node --version

安裝完成後,查詢 ParallelCluster 安裝版本

(apc-ve)elven@pc-elvenhuang:~$ pcluster version

安裝的是最新的版本3.4.

2.2.4 安裝 Amazon CLI 工具

Amazon CLI 工具需要在 root 許可權下安裝,首先下載安裝包,然後解壓後進行 sudo 安裝。

(apc-ve)elven@pc-elvenhuang:~$ curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip"
(apc-ve)elven@pc-elvenhuang:~$ unzip awscliv2.zip
(apc-ve)elven@pc-elvenhuang:~$ sudo ./aws/install
(apc-ve)elven@pc-elvenhuang:~$ /usr/local/bin/aws --version

安裝完成後查詢安裝的版本

2.2.5 執行 Amazon Configure

開啟前面準備階段生成的 rootkey.csv 檔案,Amazon Configure 需要使用到 ak 和 sk,執行如下命令:

(apc-ve) elven@pc-elvenhuang:~$ aws configure

根據提示分別輸入 CLI 訪問亞馬遜雲科技的 rootkey.csv 中的 ak 和 sk,預設的 Region 根據個人需求設定,本示例中設定為 ap-southeast-1,預設的輸出格式設定為 json 格式。

2.2.6 規劃叢集配置

安裝好 Amazon CLI 工具之後,我們開始進行叢集規劃配置,資源分割槽我們選擇亞太新加坡站點:ap-southeast-1,登入 ec2 的金鑰對選擇提取建立好的金鑰對:qutrunk-asia,排程器使用 slurm,作業系統選擇 ubunutu20.04 系統,選擇建立 vpc,Headnode 節點配置公網 IP。

HeadNode 節點的規格選擇 t2.medium,computenode 的規格預設為 t2.micro。命令列執行如下:

(apc-ve) elven@pc-elvenhuang:~$ pcluster configure --config cluster-config.yaml
INFO: Configuration file cluster-config.yaml will be written.
Press CTRL-C to interrupt the procedure.


Allowed values for AWS Region ID:
1. ap-northeast-1
2. ap-northeast-2
3. ap-south-1
4. ap-southeast-1
5. ap-southeast-2
6. ca-central-1
7. eu-central-1
8. eu-north-1
9. eu-west-1
10. eu-west-2
11. eu-west-3
12. sa-east-1
13. us-east-1
14. us-east-2
15. us-west-1
16. us-west-2
AWS Region ID [ap-southeast-1]: 4
Allowed values for EC2 Key Pair Name:
1. qutrunk-asia  #需要提前建立好的keypair
EC2 Key Pair Name [qutrunk-asia]: 1
Allowed values for Scheduler:
1. slurm
2. awsbatch
Scheduler [slurm]: 1
Allowed values for Operating System:
1. alinux2
2. centos7
3. ubuntu1804
4. ubuntu2004
Operating System [alinux2]: 4
Head node instance type [t2.micro]: t2.medium
Number of queues [1]:
Name of queue 1 [queue1]:
Number of compute resources for queue1 [1]:
Compute instance type for compute resource 1 in queue1 [t2.micro]:
Maximum instance count [10]:
Automate VPC creation? (y/n) [n]: y
Allowed values for Availability Zone:
1. ap-southeast-1a
2. ap-southeast-1b
3. ap-southeast-1c
Availability Zone [ap-southeast-1a]:
Allowed values for Network Configuration:
1. Head node in a public subnet and compute fleet in a private subnet
2. Head node and compute fleet in the same public subnet
Network Configuration [Head node in a public subnet and compute fleet in a private subnet]: 1
Beginning VPC creation. Please do not leave the terminal until the creation is finalized
Creating CloudFormation stack...
Do not leave the terminal until the process has finished.

An exception occurred while creating the CloudFormation stack: parallelclusternetworking-pubpriv-20221226053603. For details please check log file: /home/elven/.parallelcluster/pcluster-cli.log]:

編輯叢集規劃檔案 config-cluster.ymal,設定叢集最小數量為2(預設為0),修改後如下

2.2.7 建立叢集

透過 Amazon configure 產生的叢集配置檔案進行叢集建立,執行命令列如下,執行完成後console將顯示叢集建立資訊,狀態顯示為:CREATE_IN_PROGRESS

(apc-ve) elven@pc-elvenhuang:~$ pcluster create-cluster --cluster-name qutrunk-cluster --cluster-configuration cluster-config.yaml --region ap-southeast-1
{
  "cluster": {
    "clusterName": "qutrunk-cluster",
    "cloudformationStackStatus": "CREATE_IN_PROGRESS",
    "cloudformationStackArn": "arn:aws:cloudformation:ap-southeast-1:138711566698:stack/qutrunk-cluster/b4a90040-84f2-11ed-9e8e-0a6144b019d4",
    "region": "ap-southeast-1",
    "version": "3.4.0",
    "clusterStatus": "CREATE_IN_PROGRESS",
    "scheduler": {
      "type": "slurm"
    }
  }
}

叢集建立需要時間,等待幾分鐘後,建立完成叢集就可查詢叢集的資訊:

(apc-ve) elven@pc-elvenhuang:~$ pcluster describe-cluster --cluster-name qusprout-cluster

2.2.8 登入叢集,安裝 qutrunk

查詢 HeadNode 節點的公網 IP,在 EC2 服務首頁上,查詢賬號下建立好的叢集資源,如下圖,公網 IP 為18:141.186.170

(apc-ve) elven@pc-elvenhuang:~$ pcluster ssh --cluster-name qutrunk-cluster -i qutrunk-asia.pem

Welcome to Ubuntu 20.04.5 LTS (GNU/Linux 5.15.0-1026-aws x86_64)

 * Documentation:  https://help.ubuntu.com
 * Management:     https://landscape.canonical.com
 * Support:        https://ubuntu.com/advantage

  System information as of Mon Dec 26 08:17:40 UTC 2022

  System load:  0.0                Processes:             167
  Usage of /:   48.3% of 33.74GB   Users logged in:       0
  Memory usage: 14%                IPv4 address for eth0: 10.0.0.156
  Swap usage:   0%

 * Ubuntu Pro delivers the most comprehensive open source security and
   compliance features.

   https://ubuntu.com/aws/pro

0 updates can be applied immediately.

New release '22.04.1 LTS' available.
Run 'do-release-upgrade' to upgrade to it.


Last login: Mon Dec 26 08:07:38 2022 from 116.30.100.20
To run a command as administrator (user "root"), use "sudo <command>".
See "man sudo_root" for details.

在叢集部署上 qutrunk,我們採用 pip 線上安裝:

(apc-ve) elven@pc-elvenhuang:~$ pip3 install --user qutrunk -i https://mirrors.aliyun.com/pypi/simple/

2.2.9 編寫 slurm 任務指令碼及 grover 量子計算程式

啟用虛擬化環境,然後登入叢集

elven@pc-elvenhuang:~$ source ~/apc-ve/bin/activate
(apc-ve) elven@pc-elvenhuang:~$ pcluster ssh --cluster-name qusprout-cluster -i /root/qusprout.pem

建立任務檔案:

ubuntu@ip-10-0-0-156:~$ vi sleep.jab 
#!/bin/bash 
#SBATCH -J sleep 
#SBATCH -N 2 
#SBATCH -n 2 
#SBATCH -o %j.sleep 
#SBATCH -e %j.sleep 
module load openmpi/4.1.4 
srun --mpi=pmix python3 /home/ubuntu/grover_distribute.py

建立 QuTrunk 編寫的 grover 程式:

ubuntu@ip-10-0-0-156:~$ vi grover_distribute.py
"""Grover's search algorithm."""

import math
import random
import time

from numpy import pi

from qutrunk.circuit import QCircuit
from qutrunk.circuit.gates import Measure, All
from qutrunk.circuit.ops import PLUS, QAA
from qutrunk.backends import BackendLocal


def run_grover(qubits=10, backend=None):
    # Quantum qubits
    num_qubits = qubits

    # Number of amplitudes
    num_elems = 2**num_qubits

    # Count of iteration
    num_reps = math.ceil(pi / 4 * math.sqrt(num_elems))
    print("num_qubits:", num_qubits, "num_elems:", num_elems, "num_reps:", num_reps)

    # Choose target state randomly
    random.seed(int(time.time()))
    sol_elem = random.randint(0, num_elems - 1)
    print(f"target state: |{str(sol_elem)}>")

    # Create quantum circuit with local python simulator
    circuit = QCircuit(backend=backend, resource=True)

    # Allocate quantum qubits
    qureg = circuit.allocate(num_qubits)

    # Set inital amplitudes to plus state
    PLUS * qureg

    # Apply quantum operator(gates)
    QAA(num_reps, sol_elem) * qureg

    # Measure for all qubits
    All(Measure) * qureg

    # Run circuit in local simulator
    res = circuit.run()

    # Get measure result and print as int
    outlist = res.get_bitstrs()
    for out in outlist:
        print("measure result: " + str(int(out, base=2)))

    # Print quantum circuit resource information
    circuit.show_resource()

    # Print quantum circuit execution information
    print(res.running_info())

    return circuit

if __name__ == "__main__":
    # Run locally
circuit = run_grover(backend=BackendLocal(run_mode='mpi'))

2.2.10 Amazon HPC 叢集上執行 QuTrunk 編寫的 grover 演算法程式

使用 sbatch 提交作業,根據 job 任務指令碼,生成的日誌檔案為 jobid.sleep,執行完成後列印出 jobid,透過 jobid.sleep 查詢執行結果

ubuntu@ip-10-0-0-156:~$ sbatch -N 2 sleep.jab
Submitted batch job 15
ubuntu@ip-10-0-0-156:~$ ls
1.sleep   14.sleep  2.sleep  4.sleep  8.sleep               grover_mpi.py                    qutrunk-0.1.16-py3-none-any.whl
13.sleep  15.sleep  3.sleep  5.sleep  grover_distribute.py  qutrunk-0.1.15-py3-none-any.whl  sleep.jab
ubuntu@ip-10-0-0-156:~$ cat 15.sleep
num_qubits: 10 num_elems: 1024 num_reps: 26
target state: |49>
prob of state |49> = 0.008766189217567406
prob of state |49> = 0.02422384859551111
prob of state |49> = 0.047108250571214524
prob of state |49> = 0.07706217555206976
prob of state |49> = 0.1136180505208738
prob of state |49> = 0.15620524772962407
prob of state |49> = 0.2041589920509928
prob of state |49> = 0.2567307379460278
prob of state |49> = 0.31309985406630053
prob of state |49> = 0.37238643309688396
prob of state |49> = 0.43366502688182906
prob of state |49> = 0.4959790924303827
prob of state |49> = 0.5583559233055302
prob of state |49> = 0.6198218333197522
prob of state |49> = 0.6794173555244317
prob of state |49> = 0.7362122192406237
prob of state |49> = 0.7893198713436073
prob of state |49> = 0.8379113151277344
prob of state |49> = 0.8812280507304697
prob of state |49> = 0.9185939151189513
prob of state |49> = 0.949425636819952
prob of state |49> = 0.9732419406366319
prob of state |49> = 0.9896710602298116
num_qubits: 10 num_elems: 1024 num_reps: 26
target state: |49>
prob of state |49> = 0.008766189217567406
prob of state |49> = 0.02422384859551111
prob of state |49> = 0.047108250571214524
prob of state |49> = 0.07706217555206976
prob of state |49> = 0.1136180505208738
prob of state |49> = 0.15620524772962407
prob of state |49> = 0.2041589920509928
prob of state |49> = 0.2567307379460278
prob of state |49> = 0.31309985406630053
prob of state |49> = 0.37238643309688396
prob of state |49> = 0.43366502688182906
prob of state |49> = 0.4959790924303827
prob of state |49> = 0.5583559233055302
prob of state |49> = 0.6198218333197522
prob of state |49> = 0.6794173555244317
prob of state |49> = 0.7362122192406237
prob of state |49> = 0.7893198713436073
prob of state |49> = 0.8379113151277344
prob of state |49> = 0.8812280507304697
prob of state |49> = 0.9185939151189513
prob of state |49> = 0.949425636819952
prob of state |49> = 0.9732419406366319
prob of state |49> = 0.9896710602298116
prob of state |49> = 0.9984565412943175
prob of state |49> = 0.9994612447443189
prob of state |49> = 0.9926694874189682
measure result: 49
==================Counter==================
Counter(quit=10)
qubits = 10
quantum_gates = 1476
total_time = 0.2812964916229248
qutrunk_time = 0.00911855697631836
backend_time = 0.27217793464660645
{"backend": "BackendLocal", "task_id": "5f58421b395946b5920569d89eecf6c9", "status": "success", "arguments": {"shots": 1}}
prob of state |49> = 0.9984565412943175
prob of state |49> = 0.9994612447443189
prob of state |49> = 0.9926694874189682
measure result: 49
==================Counter==================
Counter(quit=10)
qubits = 10
quantum_gates = 1476
total_time = 0.2712569236755371
qutrunk_time = 0.008275508880615234
backend_time = 0.2629814147949219
{"backend": "BackendLocal", "task_id": "777271ab058a416f8c58d00be819e9fa", "status": "success", "arguments": {"shots": 1}}

透過執行日誌結果可以看到,並行2個節點執行,執行時間總體月0.27s,執行成功。

我們再看看單節點執行情況下,即對指令碼直接執行,執行命令如下:

ubuntu@ip-10-0-0-156:~$ python3 grover_distribute.py
num_qubits: 10 num_elems: 1024 num_reps: 26
target state: |601>
prob of state |601> = 0.008766189217567406
prob of state |601> = 0.02422384859551111
prob of state |601> = 0.047108250571214524
prob of state |601> = 0.07706217555206976
prob of state |601> = 0.1136180505208738
prob of state |601> = 0.15620524772962407
prob of state |601> = 0.2041589920509928
prob of state |601> = 0.2567307379460278
prob of state |601> = 0.31309985406630053
prob of state |601> = 0.37238643309688396
prob of state |601> = 0.43366502688182906
prob of state |601> = 0.4959790924303827
prob of state |601> = 0.5583559233055302
prob of state |601> = 0.6198218333197522
prob of state |601> = 0.6794173555244317
prob of state |601> = 0.7362122192406237
prob of state |601> = 0.7893198713436073
prob of state |601> = 0.8379113151277344
prob of state |601> = 0.8812280507304697
prob of state |601> = 0.9185939151189513
prob of state |601> = 0.949425636819952
prob of state |601> = 0.9732419406366319
prob of state |601> = 0.9896710602298116
prob of state |601> = 0.9984565412943175
prob of state |601> = 0.9994612447443189
prob of state |601> = 0.9926694874189682
measure result: 601
==================Counter==================
Counter(quit=10)
qubits = 10
quantum_gates = 1372
total_time = 0.32742834091186523
qutrunk_time = 0.010069131851196289
backend_time = 0.31735920906066895
{"backend": "BackendLocal", "task_id": "927411ab557341c79ebc3abaaa2ef420", "status": "success", "arguments": {"shots": 1}}

從結果可以看到單節點執行下執行結果是總體執行時間為0.32s,對比並行下的0.27s,使用 hpc 對 QuTrunk 量子程式計算進行了加速。

我們程式預設設定的是10個量子位元,透過增加 grover 演算法程式中的量子位元,例如增加量子位元到20,並行執行下的程式將比單節點直接執行時間提升將是非常明顯的,有興趣的讀者可以嘗試下。本文就不再測試。只是展示一種利用 Amazon Parallel 叢集進行平行計算的方法供讀者參考。

2.2.11 資源釋放

1、刪除叢集

elven@pc-elvenhuang:~$ cd apc-ve/ 
elven@pc-elvenhuang:~/apc-ve$ source bin/activate 
(apc-ve) elven@pc-elvenhuang:~/apc-ve$ cd 
(apc-ve) elven@pc-elvenhuang:~$ pcluster delete-cluster --region ap-southeast-1 --cluster-name qutrunk-cluster

2、刪除 parallelclusternetworking

(apc-ve) elven@pc-elvenhuang:~$ aws --region ap-southeast-1 cloudformation list-stacks --stack-status-filter "CREATE_COMPLETE" --query "StackSummaries[].StackName" | grep -e "parallelclusternetworking-"
    "parallelclusternetworking-pubpriv-20221226074428"
ubuntu@ip-10-0-0-156:~$ aws --region ap-southeast-1 cloudformation delete-stack --stack-name parallelclusternetworking-pubpriv-20221226074428

3、刪除安全組及 VPC

除預設的安全組和 vpc 外,其他建立的資源逐個刪除

3、總結

以上透過 Amazon ParallelCluster 工具建立 Amazon HPC 叢集環境,然後在此環境上安裝 QuTrunk 程式設計框架,透過 QuTrunk 量子計算程式 grover 演算法示例,然後使用 mpi 執行模式在 Amazon HPC 叢集下執行平行計算,加速了量子計算程式的執行。QuTrunk 最新版本已經支援 hpc 叢集下的 mpi 計算,本次示例也是 QuTrunk 與亞馬遜雲科技技術結合的一個小小嚐試,QuTrunk 未來還會推出分散式量子計算的模式,也將與亞馬遜雲科技結合推動量子應用的在各行業的廣泛應用。

本篇作者

Keith Yan(丘秉宜)中國首位亞馬遜雲科技 Community Hero。

Bertran Shao(邵偉),啟科量子開發者關係負責人,國內首個開源量子計算社群發起者。

黃文,啟科 DEVOPS工程師。

Marz Kuo(郭夢傑),啟科量子資深研發工程師,量子計算開源框架維護人。

劉利,C++ 高階開發工程師,經歷多個專案開發,C++ 後端經驗豐富,熟悉專案敏捷開發。

劉波,C++ 高階開發工程師,多年高併發分散式後臺程式設計經驗,愛好追求各種技術。

相關文章