使用启科 QuTrunk 开发的量子应用可以通过 QuSaaS 部署到启科 QuPot 云环境中对用户提供服务。本文将介绍如何使用 QuTrunk 进行亚马逊云上应用程序的开发和如何通过 QuSaaS 将量子应用部署到 QuPot 平台,并且 QuTrunk 计算后端调用 [Amazon Braket](https://aws.amazon.com/cn/braket/?trk=cndc-detail) 服务。具体展示之前,先和大家简要介绍下启科的量子计算相关软件:QuPot 和 QuSaaS 和 Runtime。
## 1、QuPot、QuSaaS 和 Runtime 简介
### 1.1 QuPot
QuPot 是启科量子的私有云云管控平台,该云管控平台主要对启科量子的模拟量子计算、量子计算应用集成与解耦部署等进行管理。它是基于量子计算产业的快速发展,为满足客户对量子计算私有化部署的需求而诞生的。
QuPot 作为启科量子软硬件项目的管理平台,集成了启科量子现有和未来规划的量子计算软硬件服务。它不仅可以根据客户的个性化需求设定相应的云环境,还提供丰富易用的量子计算软硬件服务。
此外,QuPot 还具有维护灵活、操作便捷、运行稳定及用户隐私级别高等优势。启科量子私有云 QuPot 在国产操作系统上运行稳定,产品达到通用兼容性要求,可满足用户的关键性应用需求,获颁麒麟软件 NeoCertify 认证。
### 1.2 QuSaaS
QuSaaS 是启科自主研发当前已经发布上线的一个量子计算软件开发者社区平台,QuSaaS 提供 SaaS 服务功能,集成各量子或者量子模拟服务的 API,是启科量子软件开发者生态平台,同时也提供云部署的功能,用户使用启科量子软件开发框架 qutrunk 开发的量子应用可以通过 QuSaaS 自动化部署到云端。
QuSaaS 同时也提供量子计算相关的技术知识文档供开发者学习和交流。QuSaaS 当前已经全线支持 PC 端和移动端访问。
### 1.3 Runtime
Runtime 是启科量子自主研发的一款免费、开源的提供运行环境的工具,可以快速实现量子算法、GPU、随机数卡等环境部署。支持算法公共库整合,一键安装所需算法组件; 支持软硬件结合、提供硬件底层库驱动。
QuPot 调用 Runtime 可以实现应用的自动化配置和部署。QuPot 中 Runtime 是作为一个功能模块来呈现,同时 Runtime 也支持独立部署,本文中利用 QuPot 的 Runtime 模块自动化部署量子应用。
## 2、开发环境准备
使用亚马逊云科技资源进行 QuTrunk 程序开发和使用 QuSaaS 部署到 QuPot 云端整体的流程有如下几个步骤:
![image.png](https://dev-media.amazoncloud.cn/3f1c50c7781944e79173b3b6483b491d_image.png "image.png")
### 2.1 开发环境准备
本示例中我们使用亚马逊云科技的 EC2 资源作为开发环境,用户需首先注册好亚马逊云科技的账号,此文不再赘述如何注册。
#### 2.1.1 Amazon EC2创建
1、登录亚马逊云科技的管理控制台,点击右上角 Region 下拉菜单切换到需要创建的资源的 Region,本示例使用亚太新加坡站点的资源。
2、创建 EC2 访问密钥对。
依次点击服务->计算->EC2 打开 EC2 的主页面。首先创建好秘钥对便于后面登录到 EC2,依次点击左侧导航栏的网络与安全->密钥对->创建密钥对。
![image.png](https://dev-media.amazoncloud.cn/365b4f0116f444c1a54f616fb27a85fa_image.png "image.png")
完成创建后自动下载秘钥,保存好秘钥文件备用。
3、创建实例
我们在亚马逊云科技上创建好1个实例用于 QuTrunk 量子程序开发环境。点击右侧导航栏实例,然后点击实例打开实例创建页面,选择启动新实例。
![image.png](https://dev-media.amazoncloud.cn/b1daeeee6fae44f5a4e712019a9627b2_image.png "image.png")
打开创建实例的界面,确定实例名称,选项 Ubuntu2004 镜像,创建新的安全组添加本地计算机访问的网段,flavor 选择 t2.medium,并选择都启用公网 IP,完成创建。
#### 2.1.2 QuTrunk 安装及打包工具安装
使用秘钥登录到服务器,安装好 python3、pip3 和 poetry,Ubunutu22.04 默认已经安装好 python3,通过如何命令检查 Python3 版本
`ubuntu@node1:~\$ python3 --version
Python 3.8.10`
然后安装 pip3,并设置国内镜像源和升级到最新版本
```
sudo apt install python3-pip
pip3 config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple
python3 -m pip install --upgrade pip
```
根据安装完成的提示添加 pip3 的路径到环境变量。命令如下:
```python
ubuntu@node1:~\$ pip3 config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple
Writing to /home/ubuntu/.config/pip/pip.conf
ubuntu@node1:~\$ python3 -m pip install --upgrade pip
Looking in indexes: https://pypi.tuna.tsinghua.edu.cn/simple
Collecting pip
Downloading https://pypi.tuna.tsinghua.edu.cn/packages/09/bd/2410905c76ee14c62baf69e3f4aa780226c1bbfc9485731ad018e35b0cb5/pip-22.3.1-py3-none-any.whl (2.1 MB)
|████████████████████████████████| 2.1 MB 687 kB/s
Installing collected packages: pip
WARNING: The scripts pip, pip3, pip3.10 and pip3.8 are installed in '/home/ubuntu/.local/bin' which is not on PATH.
Consider adding this directory to PATH or, if you prefer to suppress this warning, use --no-warn-script-location.
Successfully installed pip-22.3.1
ubuntu@node1:~\$ vim .bashrc
ubuntu@node1:~\$ source .bashrc
```
最后,安装 qutrunk 和打包工具 poetry
```
pip3 install qutrunk
pip3 install poetry
```
安装检查:
```python
ubuntu@node1:~\$ pip3 show qutrunk
Name: qutrunk
Version: 0.2.0
Summary: qutrunk is an open source library for quantum computing.
Home-page: http://www.qudoor.com/
Author: qudoorzh2022
Author-email: qudoorzh2022@163.com
License: Apache-2.0
Location: /home/ubuntu/.local/lib/python3.8/site-packages
Requires: networkx, numpy, ply, pyyaml, requests, retworkx, thrift
Required-by:
ubuntu@node1:~\$ poetry --version
Poetry (version 1.3.1)
ubuntu@node1:~\$
```
#### 2.1.3 创建亚马逊云科技访问秘钥
[Amazon Braket](https://aws.amazon.com/cn/braket/?trk=cndc-detail) 的访问需要使用访问秘钥 AK/SK 信息,用户在注册好亚马逊云科技账号后登录到 console,点击账号下拉菜单,选择我的安全凭证,创建访问秘钥,创建成功后自动下载秘钥 csv 文件到本地,保存好备用。
![image.png](https://dev-media.amazoncloud.cn/b30c4cd57162465098215b59a73225ce_image.png "image.png")
### 2.2 QuSaaS 注册应用
#### 2.2.1 注册 QuSaaS 账号
登录 QuSasS 网站:http://developer.queco.cn/ 点击右上角注册按钮,完成注册
![image.png](https://dev-media.amazoncloud.cn/ba83eae60084418bb940164e7abddea3_image.png "image.png")
#### 2.2.2 购买 QuTrunk 云服务接口
登录账号后,点击 API 服务->QuTrunk 云接口->价格套餐->免费使用->立即购买,新注册用户提供一定2000次的调用额度。
![image.png](https://dev-media.amazoncloud.cn/07215ff5cddb49f9b2a1a55b7890f5d3_image.png "image.png")
点击右上角个人用户名,选择个人中心,打开个人中心页面
![image.png](https://dev-media.amazoncloud.cn/c0f09c2827894617b76f0bd390d9fed3_image.png "image.png")
选择我的 API,可以查询当前账号下的 API 信息,点击 QuTrunk 云接口前面的加号可以展开此接口的详细信息。如下:
![image.png](https://dev-media.amazoncloud.cn/11612bf20a594b158f387167714ea2c6_image.png "image.png")
## 3、QuTrunk 量子计算程序编写
### 3.1 创建 qutrunk_app 项目
#### 3.1.1 创建项目空白目录
登录到亚马逊云科技开发环境服务器,创建 qutrunk_app 文件夹,并进入项目文件夹
```
ubuntu@node1:~\$ mkdir qutrunk_app
ubuntu@node1:~\$ ls
qutrunk_app
ubuntu@node1:~\$ cd qutrunk_app/
ubuntu@node1:~/qutrunk_app\$
```
#### 3.1.2 项目初始化
使用 poetry 初始化项目的描述文件
```python
ubuntu@node1:~/qutrunk_app\$ poetry init
This command will guide you through creating your pyproject.toml config.
Package name [qutrunk_app]: #使用默认值
Version [0.1.0]:#使用默认值
Description []: #使用默认值
Author [None, n to skip]: huangwen <huangwen@qudoor.cn>
License []:#使用默认值
Compatible Python versions [^3.8]: >=3.8, <3.11
Would you like to define your main dependencies interactively? (yes/no) [yes] no #后续定义
Would you like to define your development dependencies interactively? (yes/no) [yes] no #后续定义
Generated file
[tool.poetry]
name = "qutrunk-app"
version = "0.1.0"
description = ""
authors = ["huangwen <huangwen@qudoor.cn>"]
readme = "README.md"
packages = [{include = "qutrunk_app"}]
[tool.poetry.dependencies]
python = ">=3.8, <3.11"
[build-system]
requires = ["poetry-core"]
build-backend = "poetry.core.masonry.api"
Do you confirm generation? (yes/no) [yes] yes
```
修改项目描述文件,添加依赖 qutrunk 等,修改后信息如下
```python
ubuntu@node1:~/qutrunk_app\$ cat pyproject.toml
[tool.poetry]
name = "qutrunk-app"
version = "0.1.0"
description = "demo project, build and upload to QuSaas to execute"
authors = ["huangwen <huangwen@qudoor.cn>"]
readme = "README.md"
packages = [{include = "qutrunk_app"}]
[tool.poetry.dependencies]
python = ">=3.8, <3.11"
qutrunk = "0.2.0"
requests = "^2.28.1"
[build-system]
requires = ["poetry-core"]
build-backend = "poetry.core.masonry.api"
```
然后在项目根目录下创建 README.md 文件。
### 3.2 Demo 程序编写
#### 3.2.1 项目文件结构
创建好项目的目录结构,目录创建的结构如下:
```python
ubuntu@node1:~/qutrunk_app\$ tree
.
├── README.md
├── pyproject.toml
└── qutrunk_app
├── __main__.py
└── foo
├── __init__.py
└── dep.py
2 directories, 5 files
```
其中 main.py 程序是此示例的主要实现程序。foo 目录为程序子模块。开发者可以按以上的程序目录架构来完成应用开发。
#### 3.2.2 Demo程序实现
本示例程序同样采用bell_pair这个简单程序示例来展示,__main_.py 主程序如下:
```python
import requests
from qutrunk.circuit import QCircuit
from qutrunk.circuit.gates import H, CNOT, Measure
from qutrunk_app.foo import dep
# pypi dependency
quSaas_url = "http://developer.queco.cn/"
res = requests.get(quSaas_url)
print("response code from QuSaas", res.status_code)
# module in project
dep.bar()
# bell pair example
qc = QCircuit()
# Allocate quantum qubits
qr = qc.allocate(2)
# Apply quantum gates
H * qr[0]
CNOT * (qr[0], qr[1])
Measure * qr[0]
Measure * qr[1]
# Print quantum circuit
qc.print()
# Run quantum circuit with 100 times
res = qc.run(shots=100)
# Print result like:
print(res.get_counts())
# Print quantum circuit execution information
print(res.running_info())
```
foo 子模块本 demo 程序中并未真正实现功能,只是展示一种使用开发程序的方法,示例 dep.py 程序为:
```python
def bar():
# I don't do much except print
print("bar method in foo package and dep module")
```
#### 3.2.3 程序打包及安装测试
程序调试无问题之后,就可以将程序进行打包发布。具体操作方法如下:
1、执行程序打包
```python
ubuntu@node1:~\$ cd qutrunk_app/
ubuntu@node1:~/qutrunk_app\$ ls
README.md pyproject.toml qutrunk_app
ubuntu@node1:~/qutrunk_app\$ poetry check
All set!
ubuntu@node1:~/qutrunk_app\$ poetry build
Building qutrunk-app (0.1.0)
- Building sdist
- Built qutrunk_app-0.1.0.tar.gz
- Building wheel
- Built qutrunk_app-0.1.0-py3-none-any.whl
```
2、执行本地安装及功能测试
```python
ubuntu@node1:~/qutrunk_app\$ cd dist/
ubuntu@node1:~/qutrunk_app/dist\$ ls
qutrunk_app-0.1.0-py3-none-any.whl qutrunk_app-0.1.0.tar.gz
ubuntu@node1:~/qutrunk_app/dist\$
ubuntu@node1:~/qutrunk_app/dist\$ pip3 install qutrunk_app-0.1.0-py3-none-any.whl
Defaulting to user installation because normal site-packages is not writeable
Looking in indexes: https://pypi.tuna.tsinghua.edu.cn/simple
Processing ./qutrunk_app-0.1.0-py3-none-any.whl
Requirement already satisfied: requests<3.0.0,>=2.28.1 in /home/ubuntu/.local/lib/python3.8/site-packages (from qutrunk-app==0.1.0) (2.28.1)
Requirement already satisfied: qutrunk==0.2.0 in /home/ubuntu/.local/lib/python3.8/site-packages (from qutrunk-app==0.1.0) (0.2.0)
Requirement already satisfied: numpy<2.0.0,>=1.21.6 in /home/ubuntu/.local/lib/python3.8/site-packages (from qutrunk==0.2.0->qutrunk-app==0.1.0) (1.24.1)
Requirement already satisfied: thrift<0.16.0,>=0.15.0 in /home/ubuntu/.local/lib/python3.8/site-packages (from qutrunk==0.2.0->qutrunk-app==0.1.0) (0.15.0)
Requirement already satisfied: networkx<3.0,>=2.8 in /home/ubuntu/.local/lib/python3.8/site-packages (from qutrunk==0.2.0->qutrunk-app==0.1.0) (2.8.8)
Requirement already satisfied: retworkx<0.12.0,>=0.11.0 in /home/ubuntu/.local/lib/python3.8/site-packages (from qutrunk==0.2.0->qutrunk-app==0.1.0) (0.11.0)
Requirement already satisfied: ply<4.0,>=3.11 in /home/ubuntu/.local/lib/python3.8/site-packages (from qutrunk==0.2.0->qutrunk-app==0.1.0) (3.11)
Requirement already satisfied: pyyaml<7.0,>=6.0 in /home/ubuntu/.local/lib/python3.8/site-packages (from qutrunk==0.2.0->qutrunk-app==0.1.0) (6.0)
Requirement already satisfied: idna<4,>=2.5 in /usr/lib/python3/dist-packages (from requests<3.0.0,>=2.28.1->qutrunk-app==0.1.0) (2.8)
Requirement already satisfied: charset-normalizer<3,>=2 in /home/ubuntu/.local/lib/python3.8/site-packages (from requests<3.0.0,>=2.28.1->qutrunk-app==0.1.0) (2.1.1)
Requirement already satisfied: certifi>=2017.4.17 in /usr/lib/python3/dist-packages (from requests<3.0.0,>=2.28.1->qutrunk-app==0.1.0) (2019.11.28)
Requirement already satisfied: urllib3<1.27,>=1.21.1 in /home/ubuntu/.local/lib/python3.8/site-packages (from requests<3.0.0,>=2.28.1->qutrunk-app==0.1.0) (1.26.13)
Requirement already satisfied: six>=1.7.2 in /usr/lib/python3/dist-packages (from thrift<0.16.0,>=0.15.0->qutrunk==0.2.0->qutrunk-app==0.1.0) (1.14.0)
Installing collected packages: qutrunk-app
Successfully installed qutrunk-app-0.1.0
ubuntu@node1:~/qutrunk_app/dist\$ python3 -m qutrunk_app
response code from QuSaas 200
bar method in foo package and dep module
qreg q[2]
creg c[2]
H * q[0]
MCX(1) * (q[0], q[1])
Measure * q[0]
Measure * q[1]
[{"0b00": 52}, {"0b11": 48}]
{"backend": "BackendLocal", "task_id": "ba5b3e5269e0452685ceae7033cb66b1", "status": "success", "arguments": {"shots": 100}}
```
程序测试成功,将安装包下载到本地备用。可以使用 WinSCP 工具连接 EC2 服务器,将 dist 文件夹下的安装包 qutrunk_app-0.1.0-py3-none-any.whl 下载到本地 PC 电脑上。
## 4、使用 QuSaaS 调用 QuPot Runtime 模块自动部署量子应用
启科 QuSaaS 量子应用部署实现方案如下图所示:开发者通过 QuSaaS 操作调用 QuPotRuntime 模块实施自动化部署。
![image.png](https://dev-media.amazoncloud.cn/c5feed63348e4775964a25b1158ac9c8_image.png "image.png")
具体的操作流程如下:
![image.png](https://dev-media.amazoncloud.cn/a256ca6a57b946d297fe3c3e7df77d4c_image.png "image.png")
### 4.1、登录 QuSaaS
打开 QuSaaS 主页:启科开发者平台 (queco.cn),点击右上角的个人账号,从下拉菜单选择部署应用,打开应用部署页面。
![image.png](https://dev-media.amazoncloud.cn/e98a3c3f270447aaa7d4b01fcff1b2f5_image.png "image.png")
### 4.2、上传应用
点击上传应用,打开上传界面,填写应用名,然后选择从亚马逊云科技开发环境上下载的 whl 包上传,最后点击确定完成上传。
![image.png](https://dev-media.amazoncloud.cn/88eae57c0e624d81a96149c84ad7ef97_image.png "image.png")
上传后的应用将以列表的形式如下图所示展示,显示的属性包括应用名,创建时间,最右侧是操作按钮,有部署管理,应用下载及删除。
![image.png](https://dev-media.amazoncloud.cn/3c9ff7568bac4d89995862b033344d07_image.png "image.png")
### 4.3、应用部署
#### 4.3.1 环境创建
点击部署管理,打开设置页面,点击创建环境进行部署参数设置,设置参数包括:python版本(3.6-3.10,目前最低要求是3.8)、芯片架构有 AMD64 和 ARM64 两种、CPU 核心数(1-4)、内存大小(50-300M)、还有运行后端(当前支持3种后端 QuSprout,[Amazon Braket](https://aws.amazon.com/cn/braket/?trk=cndc-detail) 及 local),按如下参数选择后然后点击确定
![image.png](https://dev-media.amazoncloud.cn/6d1afbb1764c43309fa3cc5692ac299e_image.png "image.png")
创建完成后显示如下:
![image.png](https://dev-media.amazoncloud.cn/972f9c0244014854b4526012fb1131a2_image.png "image.png")
#### 4.3.2 创建 Amazon IAM
1、点击右上角登录账号名选择下拉菜单里面的我的应用,打开我的应用页面
![image.png](https://dev-media.amazoncloud.cn/455228834d114d069db40cba7cb0be3b_image.png "image.png")
2、然后选择 Amazon IAM 按钮打开 Amazon IAM 管理页面。
3、点击创建 Amazon IAM,补充 AK/SK,默认 Region 信息。
![image.png](https://dev-media.amazoncloud.cn/b491e18f2d574907be3c2abf07640f32_image.png "image.png")
4、将创建的秘钥状态设置为启用,启用点击后有提示:如果有多个秘钥启用这个秘钥其他的秘钥将同时被设置为禁用。
![image.png](https://dev-media.amazoncloud.cn/92d7ea2be17544069473760c57bb3438_image.png "image.png")
#### 4.3.3 调用 QuPot Runtime 自动部署量子应用
进入部署管理页面,选择已经上传的应用右侧的操作栏下面的部署,然后点击确定,开始应用部署。
![image.png](https://dev-media.amazoncloud.cn/8225795454d8495ba8ef9cef3898cb4c_image.png "image.png")
提交成功后,部署的状态将显示为初始化,如下图所示:
![image.png](https://dev-media.amazoncloud.cn/2f33021547eb429899d823880fac142b_image.png "image.png")
部署成功后,此状态将刷新成成功
![image.png](https://dev-media.amazoncloud.cn/861c64dc9a204e6c86159266a6d405de_image.png "image.png")
点击获取输出,可以查询部署的输出和程序运行日志,显示如下:
![image.png](https://dev-media.amazoncloud.cn/dbb5ac2e997446948529bc2f135bc290_image.png "image.png")
从上面可以看到程序运行成功,后端使用了 [Amazon Braket](https://aws.amazon.com/cn/braket/?trk=cndc-detail)[SV1]。
## 5、总结
本文详细介绍了使用启科 QuPot+Runtime+QuSaaS+[Amazon Braket](https://aws.amazon.com/cn/braket/?trk=cndc-detail) 进行量子应用开发及部署的过程,通过示例开发者可以清楚的掌握量子应用程序开发的及云上部署的方法和如何利用 [Amazon Braket](https://aws.amazon.com/cn/braket/?trk=cndc-detail) 后端进行量子计算。
启科量子是一家专注于量子通信设备制造与量子计算机全栈式开发,国内首家兼具量子计算、量子通信核心技术储备与产品研发能力的科技创新型企业。本演示示例程序较为简单,有兴趣的读者可以按此文展示的方法开发和发布方法进行更复杂一些量子应用。启科量子欢迎开发者使用和试用我们的开源量子计算软件产品 QuTrunk,QuBranch 及 QuSprout 等软件产品,共同打造量子软件生态。更多的信息请点击 QuSaaS:[启科开发者平台](http://developer.queco.cn)
> 作者:
>
> Keith Yan(丘秉宜)中国首位亚马逊云科技 Community Hero。
>
>![图片2.png](https://dev-media.amazoncloud.cn/5d260720a18a466f8952b92adc56c988_%E5%9B%BE%E7%89%872.png "图片2.png")
>
> Bertran Shao(邵伟),启科量子开发者关系负责人,国内首个开源量子计算社区发起者
>
> ![图片3.png](https://dev-media.amazoncloud.cn/16b279f6e60140f9b0091adf406220d5_%E5%9B%BE%E7%89%873.png "图片3.png")
>
> 黄文,启科量子DEVOPS工程师
>
> ![图片4.png](https://dev-media.amazoncloud.cn/7b6dd06691b44ac8af69d1ee957f64e6_%E5%9B%BE%E7%89%874.png "图片4.png")
>
> Marz Kuo(郭梦杰),启科量子资深研发工程师,量子计算开源框架维护人
>
> ![图片1.png](https://dev-media.amazoncloud.cn/871d9eb7969f47928516893e6e585d61_%E5%9B%BE%E7%89%871.png "图片1.png")