QuTrunk 是启科量子自主研发的一款免费、开源、跨平台的量子计算编程框架,包括量子编程 API、量子命令转译、量子计算后端接口等。它提供多种量子计算体验,提供本地量子计算 Python 计算后端,提供 OMP 多线程、MPI 多节点并行、GPU 加速等计算模式。
使用 QuTrunk 进行量子计算程序的开发可以使用过本地 PC 机搭建开发环境,也可以使用亚马逊云上的资源作为开发环境。本文将向用户介绍如何利用亚马逊云上资源使用 QuTrunk+Runtime+QuSaaS+亚马逊云科技进行量子程序编程。下面先简要介绍 Runtime 工具。
## **1、Runtime 介绍**
用户使用启科量子计算相关软件进行开发,首先需要提取准备好量子编程环境,能不能快速的构建编程环境是吸引开发者进行开发的首要考虑的因素,所以环境部署非常重要,为了简化开发环境部署,降低开发者入门的门槛,启科推出的一款免费、开源的提供运行环境的工具 Runtime。通过 Runtime 可以快速实现启科量子开发相关软件的部署,例如 QuTrunk 量子编程框架,QuSprout 量子模拟后端,另外也支持第三方量子算法、GPU、随机数卡等环境部署。支持算法公共库整合,一键安装所需算法组件; 支持软硬件结合、提供硬件底层库驱动。Runtime 的整体架构如下:
![1.png](https://dev-media.amazoncloud.cn/3ad147ea8ae046b2bf0419c94ceb9943_1.png "1.png")
## **2、亚马逊云科技开发环境准备**
使用亚马逊云科技资源进行 QuTrunk 程序开发的整体的流程有如下几个步骤:
![image.png](https://dev-media.amazoncloud.cn/0b6169db503c4ecdac895b5f9e0b989a_image.png "image.png")
### **2.1 亚马逊云科技开发环境准备**
1、登录亚马逊云科技的管理控制台
点击右上角 Region下拉菜单切换到需要创建的资源的 Region,本示例使用亚太新加坡站点的资源。
2、创建 EC2 访问密钥对
依次点击服务->计算->EC2 打开 EC2 的主页面。首先创建好秘钥对便于后面登录到 EC2,依次点击左侧导航栏的网络与安全->密钥对->创建密钥对。
![3.png](https://dev-media.amazoncloud.cn/d7e4fa2ff547484fac494ef5c65f8474_3.png "3.png")
完成创建后自动下载秘钥,保存好秘钥文件备用。
3、创建实例
我们在亚马逊云科技上创建好2个测试示例,一个用于 runtime 工具部署,一个用于 QuTrunk 量子程序开发环境。EC2 dashboard 点击右侧导航栏实例,然后点击实例打开实例创建页面,选择启动新实例。
![4.png](https://dev-media.amazoncloud.cn/f1e9a31632d142168992e4034e8ca3b7_4.png "4.png")
打开创建实例的界面,确定实例名称,选项 Ubuntu20.04 镜像,创建新的安全组添加本地计算机访问的网段,flavor 选择 t2.medium,并选择都启用公网 IP。分别创建出 Runtime 主机和 QuTrunk 主机。
![5.png](https://dev-media.amazoncloud.cn/25679b6d035443e2acd8c8e1918aad88_5.png "5.png")
### **2.2 Runtime 安装**
1、使用秘钥文件登录到 Runtime 安装主机选中 runtime 主机,右键选择链接,选择 ssh 客户端
复制访问命令:`ssh -i "qutrunk-demo.pem" ubuntu@ec2-18-141-236-126.ap-southeast-1.compute.amazonaws.com`
2、从 Runtime 官网下载链接下载安装包,然后解压,进入解压目录下执行 INSTALL.sh 安装,安装完成后检查 runtime 安装结果
```
#下载安装包
wget -c http://nexus.queco.cn/repository/qudoor-raw/runtime/0.0.1/runtime_v0.0.1_1223_amd64.tar.gz
# 解压安装包
tar zxvf runtime_release_v0.0.1_amd64.tar.gz
cd runtime_release_v0.0.1_amd64
#运行安装脚本
/bin/bash INSTALL.sh
#待安装完成后,检查Runtime运行状态
rtctl status
```
显示状态为 healthy 即为安装成功。
![7.png](https://dev-media.amazoncloud.cn/d6f00affa0294b1ebdbcebede6798a47_7.png "7.png")
### **2.3 使用 Runtime 自动化部署 QuTrunk**
QuTrunk 的部署安装有一些前置条件,不同 OS 下配置和安装这些前置条件比较繁琐,Runtime 自动化工具可以解决这些问题,可以将 QuTrunk 部署所需要依赖的相关软件一起部署上,例如 python3 环境,python3-pip 等,方便用户更快的搭建好 dev 环境。具体的自动化部署部署如下:
1、环境信息配置
首先将需部署 QuTrunk 的主机信息天填写到 runtime 的配置文件:/opt/runtime/conf/hosts.hostname.ini。vim 编辑此文件,修改目标 runtime 环境安装主机的 ip、访问端口、密码以及执行机的 nexus 访问地址,node1 是最终 runtime 主机将 QuTrunk 主机修改的主机名,可以直接填写为 [Amazon EC2 ](https://aws.amazon.com/cn/ec2/?trk=cndc-detail)的主机名,也可以自定义为其他名称。`ansible_ssh_host` 是需要安装 QuTrunk 主机的 IP,`ansible_ssh_pass` 为登录的账号的密码,`Registry_hostname` 是 Runtime 主机。配置文件类似如下:
2、列出可以执行的安装软件
`rtctl list`
![9.png](https://dev-media.amazoncloud.cn/99713b7486014bedbcaf5b07cb926341_9.png "9.png")
3、选择 Qurunk 的安装的 playbook,执行自动化安装,命令如下:
`rtctl run --playbook 02-qutrunk`
4、QuTrunk 安装验证
登录到安装了 QuTrunk 的亚马逊云科技主机,执行 QuTrunk 安装后的检查,如下:
![10.png](https://dev-media.amazoncloud.cn/9d0b3d50929843b993553962e9c26cf0_10.png "10.png")
### **2.4 QuSaaS 注册应用**
#### **2.4.1 注册 QuSaaS 账号**
登录 QuSasS 网站:http://developer.queco.cn/ 点击右上角注册按钮,完成注册
![11.png](https://dev-media.amazoncloud.cn/30eb2c49dedd46bf9e0e5bc9ce7e0296_11.png "11.png")
#### **2.4.2 购买 QuTrunk 云服务接口**
登录账号后,点击 API 服务->QuTrunk 云接口->价格套餐->免费使用->立即购买,新注册用户提供一些调用额度。
![12.png](https://dev-media.amazoncloud.cn/d20145bcfa194d6c8ea70e6e978467e9_12.png "12.png")
点击右上角个人用户名,选择个人中心,打开个人中心页面
![13.png](https://dev-media.amazoncloud.cn/23b38339b41c4a15b22ca0a92d240c5d_13.png "13.png")
选择我的 API,可以查询当前账号下的 API 信息,点击 QuTrunk 云接口前面的加号可以展开此接口的详细信息。如下:
![14.png](https://dev-media.amazoncloud.cn/dc05baaec05747bd961c37ba872142c9_14.png "14.png")
#### **2.4.3 创建应用,或者 API 访问 AK/SK**
点击右上角登录账号打开下拉菜单,选择我的应用,然后点击创建应用,填写应用名称和应用描述,最后点击确定完成应用创建
![15.png](https://dev-media.amazoncloud.cn/f9582d85e83a4735ad4613206fd23968_15.png "15.png")
应用创建后,将以列表的形式展示在我的应用页面,通过此页面可以查询应用的 AK/SK 信息,展示信息如下:
![16.png](https://dev-media.amazoncloud.cn/0f1fbde62f4f46e297f0a281a7992d90_16.png "16.png")
使用 QuTrunk 编程使用 QuSaaS 后端调用 [Amazon Braket](https://aws.amazon.com/cn/braket/?trk=cndc-detail) 资源需要使用到此 AK/SK 认证授权。
## **3、Demo 程序开发**
demo 程序选用经典的 bell_pair算法,程序命名为 qutrunk-qusaas-demo.py。
首先导入 qutrunk 程序开发使用到的模块,demo 程序中使用 QuSaaS 后端,代码如下
```
from qutrunk.backends import BackendQuSaas
from qutrunk.circuit import QCircuit
from qutrunk.circuit.gates import CNOT, H, Measure
然后,设置QuSaaS访问AK和SK。
ak = "QuSaaS上创建应用生成的Api key"
sk = "QuSaaS上创建应用生成的Api Secret"
# use BackendQuSaas
be = BackendQuSaas(ak, sk)
```
创建 bell 电路,并执行门操作和测量,并打印状态向量
```
circuit = QCircuit(be)
qr = circuit.allocate(2)
# apply gate
H * qr[0]
CNOT * (qr[0], qr[1])
circuit.print()
circuit.draw(line_length=300)
print(circuit.get_prob(0))
print(circuit.get_probs())
print(circuit.get_statevector())
Measure * qr[0]
Measure * qr[1]
```
最后运行电路,并打印结果
```
res = circuit.run(shots=100)
print(res.get_counts())
print(res.running_info())
```
输出结果如下:
```
\$ python3 qutrunk-qusaas_demo.py
qreg q[2]
creg c[2]
H * q[0]
MCX(1) * (q[0], q[1])
┌───┐
q[0]: ┤ H ├──■───
└───┘┌─┴──┐
q[1]: ─────┤ CX ├
└────┘
c: 2/═══════════
0.4999999999999999
[{'idx': 0, 'prob': 0.4999999999999999}, {'idx': 1, 'prob': 0.0}, {'idx': 2, 'prob': 0.0}, {'idx': 3, 'prob': 0.4999999999999999}]
[0.70710678+0.j 0. +0.j 0. +0.j 0.70710678+0.j]
[{"0b00": 52}, {"0b11": 48}]
{"backend": "BackendQuSaas", "task_id": "dde06445761e43258589f041b745f428", "status": "success", "arguments": {"shots": 100}}
```
## **4、总结**
本文从 Runtime 的安装到利用 Runtime 自动化安装 QuTrunk,以及在亚马逊云科技环境上如何利用 QuTrunk 开发量子计算程序,并且使用 QuSaaS 后端,从全流程上向读者展示了整个实战过程。该 Demo 程序利用了亚马逊云上的资源便利性,也充分展示了启科量子计算软件的灵活扩展性。开发者不仅能方便在本地环境开发,也可以在云上快速通过启科提供的自动化工具 Runtime 快速部署开发环境,还可以使用多种计算后端,帮助开发者快速的开发出自己的量子计算程序。本文只是通过一个 bell_pair 示例程序出发进行讲解整个开发过程和开发方法,希望能给开发者带来一定的启发。后续还会从其他的维度来展示启科 QuTrunk 及相关的编程实战指导和技巧。
**作者:**
![丘秉宜.png](https://dev-media.amazoncloud.cn/728069bb74d74110a4181ee40c2afc33_%E4%B8%98%E7%A7%89%E5%AE%9C.png "丘秉宜.png")
Keith Yan(丘秉宜)中国首位亚马逊云科技 Community Hero。
![邵伟.png](https://dev-media.amazoncloud.cn/6afac7991d954f418c5b6e3441adc44d_%E9%82%B5%E4%BC%9F.png "邵伟.png")
Bertran Shao(邵伟),启科量子开发者关系负责人,国内首个开源量子计算社区发起者
![黄文.png](https://dev-media.amazoncloud.cn/e2b6301af0464a5faba19b939d07a4f1_%E9%BB%84%E6%96%87.png "黄文.png")
黄文,启科量子DEVOPS工程师
![郭梦杰.png](https://dev-media.amazoncloud.cn/ad7cf8f5401f4db5a47a96d7852bb691_%E9%83%AD%E6%A2%A6%E6%9D%B0.png "郭梦杰.png")
Marz Kuo(郭梦杰),启科量子资深研发工程师,量子计算开源框架维护人