Efficient! QuSprout integrates with AWS HPC
Published: 2022-11-29 11:20:36

**KY1, Bertran Shao2, Adam Sun3**

1.Amazon HERO; 2.Developer ecology leader; 3.Solutions Architect

On November 17, 2022, QuDoor officially open sourced QuSprout, a quantum circuit simulator which developed by its own team. It can work with QuTrunk, the quantum programming framework of QuDoor, and developers can implement quantum programming based on this quantum computing platform. As we all know, AWS is a world-renowned cloud computing service provider and provides a rich hardware platform. Therefore, how to integrate QuSprout and AWS high-performance services will be very meaningful. Today we will deploy QuSprout on the AWS High Performance Computing (HPC) platform, and analyze the computing result of QuSprout on both CPU and GPU platforms.

## **1. Introduction to QuSprout**
QuSprout is a free and open source quantum computing simulation backend. The quantum circuits will be generated by QuTrunk and then it will connect to the QuSprout backend to perform the simulation.


![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/dlu2cylvc1pgneufrs85.png)

QuSprout supports task management of multiple quantum circuits and MPI multi-process parallel computing. It currently supports Kylin, Ubuntu, and CentOS operating systems, and supports compiling and deploying both on x86 and arm64 architecture systems. (KylinV10, Ubuntu22.04, and CentOS7.9 are recommended) 

QuSprout and QuTrunk connect via RPC.  It uses C++ as the development language, and it has implemented more than 40 quantum gates, including H, CH, P, CP, R, CR, Rx, Ry, Rz, etc. It provides higher performance and greater flexibility for quantum circuits computation.

QuSprout has already supported both CPU and GPU platforms. The current open sourced version is for the CPU, and the GPU version is still in testing, and I believe it will be published soon.


## **2. About the AWS HPC platform**

**P3 instance:**
Amazon EC2 P3 instances are based on NVIDIA Tesla V100 Tensor Core GPUs and support up to 8 GPUs. They provide users with a high-performance computing platform and support CUDA-based programs. They are usually used in scenarios such as HPC programs and machine learning.


![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/6xtmvo7pwzgszbz9iu54.png)

In this article, I will use the p3.2xlarge instance as the GPU platform for QuSprout. It is a single-GPU instance based on NVIDIA Tesla V100-SXM2. It has 640 Tensor Cores and 5120 CUDA Cores. Its computing performance can reach up to 7TFLOPS for FP64, and up to 14TFLOPS for FP32. The detailed parameters of the instance are shown in the following table:


![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/ld4lvp1i09mbbaqznkrg.png)

**M5 instance:**
M5 instances offer a balance of compute, memory, and networking resources for a broad range of workloads. This includes web and application servers,, cluster computing, gaming servers, etc.. It provides
Intel Xeon Platinum 8000 and AMD EPYC 7000 series CPUs


![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/is7qanul8ztq6gifdxs0.png)

In this article, the m5.8xlarge type instance will be used as CPU platform for QuSprout. Its CPU type is Intel(R) Xeon(R) Platinum 8259CL CPU @ 2.50GHz. The detailed parameters of the specific instance are shown in the following table:


![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/bpswnvahjdnm0jafi1l2.png)

## **3. Deployment**
First, apply to create m5.8xlarge and p3.2xlarge instances in AWS. After the instances are successfully initialized, you can connect to the EC2 instances via SSH remotely.

Then pull the latest QuSprout (https://github.com/qudoor/qusprout) code from Github, install the QuSprout following the document. The whole process of compiling and installing is executed by script. It is really simple and convenient.

Finally, install QuTrunk. It’s used to write quantum circuit programs. You need to pull the latest QuTrunk ([https://github.com/qudoor/qutrunk](https://github.com/qudoor/qutrunk)) code from Github, and install it following the document. 

Note: In this test, in order to avoid the impact of network bandwidth, I chose to deploy QuTrunk and QuSprout on the same EC2 instance. You just need to configure the IP and port of QuSprout service, then the two can communicate with each other.

## **4. Test QuSprout**
Now, you can develop quantum programs. Here we take the grover search algorithm as an example. I will increase the number of qubits gradually, and save the records of QuSprout computing on both platforms: m5.8xlarge (CPU) and p3.2xlarge (GPU). The specific code and result are as follows:

**4.1 Grover’s code:**

```
1.	"""Grover's search algorithm."""  
2.	  
3.	import math  
4.	import random  
5.	  
6.	from numpy import pi  
7.	  
8.	from qutrunk.circuit import QCircuit  
9.	from qutrunk.circuit.gates import Measure, All  
10.	from qutrunk.circuit.ops import PLUS, QAA  
11.	  
12.	  
13.	def run_grover(qubits=10, backend=None):  
14.	    # Quantum qubits  
15.	    num_qubits = qubits  
16.	  
17.	    # Number of amplitudes  
18.	    num_elems = 2**num_qubits  
19.	  
20.	    # Count of iteration  
21.	    num_reps = math.ceil(pi / 4 * math.sqrt(num_elems))  
22.	    print("num_qubits:", num_qubits, "num_elems:", num_elems, "num_reps:", num_reps)  
23.	  
24.	    # Choose target state randomly  
25.	    sol_elem = random.randint(0, num_elems - 1)  
26.	    print(f"target state: |{str(sol_elem)}>")  
27.	  
28.	    # Create quantum circuit with local python simulator  
29.	    circuit = QCircuit(backend=backend, resource=True)  
30.	  
31.	    # Allocate quantum qubits  
32.	    qureg = circuit.allocate(num_qubits)  
33.	  
34.	    # Set inital amplitudes to plus state  
35.	    PLUS * qureg  
36.	  
37.	    # Apply quantum operator(gates)  
38.	    QAA(num_reps, sol_elem) * qureg  
39.	  
40.	    # Measure for all qubits  
41.	    All(Measure) * qureg  
42.	  
43.	    # Run circuit in local simulator  
44.	    res = circuit.run()  
45.	  
46.	    # Get measure result and print as int  
47.	    out = res.get_outcome()  
48.	    print("measure result: " + str(int(out, base=2)))  
49.	  
50.	    # Print quantum circuit resource information  
51.	    circuit.show_resource()  
52.	  
53.	    # Print quantum circuit execution information  
54.	    print(res.excute_info())  
55.	  
56.	    return circuit  
57.	  
58.	  
59.	if __name__ == "__main__":  
60.	    # Run locally  
61.	    circuit = run_grover()  
```

**4.2 Result：**

Table_1  CPU:(Intel(R) Xeon(R) Platinum 8259CL CPU @ 2.50GHz
![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/nnhike7j5yqwlmyzxsjo.png)

Tabel_2  GPU: (NVIDIA Tesla V100-SXM2):

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/270idesy5rofsp46xg2a.png)


Extracting the time and qubits from Table 1 and Table 2, and draw the following figure:



![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/2gsz2azg4xn7vku2d2k2.png)

It can be seen from the chart that the computing on the GPU platform is 6-8 times faster than that on the CPU platform. Of course, the prices of different instances are also different. So in order to make full use of resources,  developers should choose the appropriate instance type according to the task requirements.

## **4. One-click deployment**
An Amazon Machine Image (AMI) is a supported and maintained image provided by AWS that provides the information required to launch an instance. You must specify an AMI when you launch an instance. You can launch multiple instances from a single AMI when you require multiple instances with the same configuration. 


After you create and register an AMI, you can use it to launch new instances. You can copy an AMI within the same AWS Region or to different AWS Regions. When you no longer require an AMI, you can deregister it.


![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/s1pj511wd0ose8wxz5kx.png)

In the future, QuSprout and other related tools can be made into AMI and put into the Marketplace, so that quantum developers can deploy QuDoor’s Quantum computing development environment more conveniently and quickly on AWS.  It can provide developers with a more friendly development experience, and make the quantum programming more practical.

**About the Authors：**


![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/qhtrbk6r5w42sd30c1er.png)
Keith Yan（丘秉宜）The First Community Hero of China


![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/6x1afxl7v0544bmxt0hu.png)
Bertran Shao（邵伟），Quantum Developer Relations Leader, the initiator of the first open source quantum computing community in China


![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/enkf24k14o0jlm514450.jpg)
Adam Sun（孙海洋），QuDoor Quantum Solution Architect, Project Leader of GPU Quantum Circuit Simulation