zl程序教程

您现在的位置是:首页 >  其他

当前栏目

使用启科QuPot+Runtime+QuSaaS进行量子应用开发及部署-调用AWS Braket计算后端

AWS应用计算部署开发 使用 进行 调用
2023-06-13 09:15:37 时间

点击上方↑↑↑“量子发烧友”关注我

概述

使用启科QuTrunk开发的量子应用可以通过QuSaaS 部署到启科QuPot云环境中对用户提供服务。本文将介绍如何使用QuTrunk进行AWS云上应用程序的开发和如何通过QuSaaS将量子应用部署到QuPot平台,并且QuTrunk计算后端调用AWS Braket服务。具体展示之前,先和大家简要介绍下启科的量子计算相关软件: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.开发环境准备

使用AWS资源进行QuTrunk程序开发和使用QuSaaS部署到QuPot云端整体的流程有如下几个步骤:

2.1 开发环境准备

2.1.1 AWS EC2创建

1、登录AWS的管理控制台,点击右上角Region下拉菜单切换到需要创建的资源的Region,本示例使用亚太新加坡站点的资源。

2、创建EC2访问密钥对。

依次点击服务->计算->EC2打开EC2的主页面。首先创建好秘钥对便于后面登录到EC2,依次点击左侧导航栏的网络与安全->密钥对->创建密钥对。

完成创建后自动下载秘钥,保存好秘钥文件备用。

3、创建实例

我们在AWS上创建好1个实例用于QuTrunk量子程序开发环境。点击右侧导航栏实例,然后点击实例打开实例创建页面,选择启动新实例。

打开创建实例的界面,确定实例名称,选项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的路径到环境变量。命令如下:

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

安装检查:

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 创建AWS访问秘钥

AWS Braket的访问需要使用访问秘钥AK/SK信息,用户在注册好aws账号后登录到console,点击账号下拉菜单,选择我的安全凭证,创建访问秘钥,创建成功后自动下载秘钥csv文件到本地,保存好备用。

2.2 QuSaaS注册应用

2.2.1 注册QuSaaS账号

登录QuSasS网站:http://developer.queco.cn/ 点击右上角注册按钮,完成注册

2.2.2 购买QuTrunk云服务接口

登录账号后,点击API服务->QuTrunk云接口->价格套餐->免费使用->立即购买,新注册用户提供一定2000次的调用额度。

点击右上角个人用户名,选择个人中心,打开个人中心页面

选择我的API,可以查询当前账号下的API信息,点击QuTrunk云接口前面的加号可以展开此接口的详细信息。如下:

3.QuTrunk量子计算程序编写

3.1 创建qutrunk_app项目

3.1.1 创建项目空白目录

登录到AWS开发环境服务器,创建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初始化项目的描述文件

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
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"]
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等,修改后信息如下

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"]
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 项目文件结构

创建好项目的目录结构,目录创建的结构如下:

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主程序如下:

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程序为:

def bar():
    # I don't do much except print
    print("bar method in foo package and dep module")

3.2.3 程序打包及安装测试

程序调试无问题之后,就可以将程序进行打包发布。具体操作方法如下:

1、执行程序打包

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、执行本地安装及功能测试

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模块实施自动化部署。

具体的操作流程如下:

4.1、登录QuSaaS

打开QuSaaS主页:启科开发者平台 (queco.cn),点击右上角的个人账号,从下拉菜单选择部署应用,打开应用部署页面。

4.2、上传应用

点击上传应用,打开上传界面,填写应用名,然后选择从aws开发环境上下载的whl包上传,最后点击确定完成上传。

上传后的应用将以列表的形式如下图所示展示,显示的属性包括应用名,创建时间,最右侧是操作按钮,有部署管理,应用下载及删除。

4.3、应用部署

4.3.1 环境创建

点击部署管理,打开设置页面,点击创建环境进行部署参数设置,设置参数包括:python版本(3.6~3.10,目前最低要求是3.8)、芯片架构有AMD64和ARM64两种、CPU核心数(1~4)、内存大小(50-300M)、还有运行后端(当前支持3种后端QuSprout,AWS Braket及local),按如下参数选择后然后点击确定

创建完成后显示如下:

4.3.2 创建AWS IAM

1、点击右上角登录账号名选择下拉菜单里面的我的应用,打开我的应用页面

2、然后选择AWS IAM按钮打开AWS IAM管理页面。

3、点击创建AWS IAM,补充AK/SK,默认Region信息。

4、将创建的秘钥状态设置为启用,启用点击后有提示:如果有多个秘钥启用这个秘钥其他的秘钥将同时被设置为禁用。

4.3.3 调用QuPot Runtime自动部署量子应用

进入部署管理页面,选择已经上传的应用右侧的操作栏下面的部署,然后点击确定,开始应用部署。

提交成功后,部署的状态将显示为初始化,如下图所示:

部署成功后,此状态将刷新成成功

点击获取输出,可以查询部署的输出和程序运行日志,显示如下:

从上面可以看到程序运行成功,后端使用了AWS Braket[SV1]。

5.总结

本文详细介绍了使用启科QuPot+Runtime+QuSaaS+AWS Braket进行量子应用开发及部署的过程,通过示例开发者可以清楚的掌握量子应用程序开发的及云上部署的方法和如何利用AWS Braket后端进行量子计算。

启科量子是一家专注于量子通信设备制造与量子计算机全栈式开发,国内首家兼具量子计算、量子通信核心技术储备与产品研发能力的科技创新型企业。本演示示例程序较为简单,有兴趣的读者可以按此文展示的方法开发和发布方法进行更复杂一些量子应用。启科量子欢迎开发者使用和试用我们的开源量子计算软件产品QuTrunk,QuBranch及QuSprout等软件产品,共同打造量子软件生态。

更多的信息请点击QuSaaS:启科开发者平台 (queco.cn)

— 完 —