暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

使用启科 QuPot+Runtime+QuSaaS 进行量子应用开发及部署

213

点击上方【凌云驭势 重塑未来】

一起共赴年度科技盛宴!

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



QuPot、QuSaaS 和 Runtime 简介


· QuPot·


QuPot 是启科量子的私有云云管控平台,该云管控平台主要对启科量子的模拟量子计算、量子计算应用集成与解耦部署等进行管理。它是基于量子计算产业的快速发展,为满足客户对量子计算私有化部署的需求而诞生的。


QuPot 作为启科量子软硬件项目的管理平台,集成了启科量子现有和未来规划的量子计算软硬件服务。它不仅可以根据客户的个性化需求设定相应的云环境,还提供丰富易用的量子计算软硬件服务。


此外,QuPot 还具有维护灵活、操作便捷、运行稳定及用户隐私级别高等优势。启科量子私有云 QuPot 在国产操作系统上运行稳定,产品达到通用兼容性要求,可满足用户的关键性应用需求,获颁麒麟软件 NeoCertify 认证。



· QuSaaS ·


QuSaaS 是启科自主研发的、当前已经发布上线的一个量子计算软件开发者社区平台,QuSaaS 提供 SaaS 服务功能,集成各量子或者量子模拟服务的 API,是启科量子软件开发者生态平台,同时也提供云部署的功能,用户使用启科量子软件开发框架 qutrunk 开发的量子应用可以通过 QuSaaS 自动化部署到云端。


QuSaaS 同时也提供量子计算相关的技术知识文档供开发者学习和交流。QuSaaS 当前已经全线支持 PC 端和移动端访问。



·Runtime ·


Runtime 是启科量子自主研发的一款免费、开源的提供运行环境的工具,可以快速实现量子算法、GPU、随机数卡等环境部署。支持算法公共库整合,一键安装所需算法组件;支持软硬件结合、提供硬件底层库驱动。


QuPot 调用 Runtime 可以实现应用的自动化配置和部署。QuPot 中 Runtime 是作为一个功能模块来呈现的,同时 Runtime 也支持独立部署,本文中利用 QuPot 的 Runtime 模块自动化部署量子应用。



开发环境准备

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



· 开发环境准备·


本示例中我们使用 Amazon EC2 资源作为开发环境,用户需首先注册好 Amazon 的账号,此文不再赘述如何注册。



Amazon EC2 创建

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


2、创建 EC2 访问密钥对。

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


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


3、创建实例。

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


打开创建实例的界面,确定实例名称,选择 Ubuntu2004 镜像,创建新的安全组添加本地计算机访问的网段,flavor 选择 t2.medium,并选择都启用公网 IP,完成创建。



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:~$

          左滑查看更多



          创建 Amazon 访问秘钥

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



          · QuSaaS 注册应用 ·



          注册 QuSaaS 账号

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



          购买 QuTrunk 云服务接口

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


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


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



          QuTrunk 量子计算程序编写


          · 创建 qutrunk_app 项目 ·



          创建项目空白目录

          登录到亚马逊云科技开发环境服务器,创建 qutrunk_app 文件夹,并进入项目文件夹。

            ubuntu@node1:~$ mkdir qutrunk_app
            ubuntu@node1:~$ ls
            qutrunk_app
            ubuntu@node1:~$ cd qutrunk_app/
            ubuntu@node1:~/qutrunk_app$



            项目初始化

            使用 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 <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 等,修改后信息如下:

                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 文件。



                · Demo 程序编写 ·



                项目文件结构

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

                  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 目录为程序子模块。开发者可以按以上的程序目录架构来完成应用开发。



                  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")

                      左滑查看更多



                      程序打包及安装测试

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


                      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 电脑上。



                          使用 QuSaaS 调用 QuPot Runtime 模块

                          自动部署量子应用

                          启科 QuSaaS 量子应用部署实现方案如下图所示:开发者通过 QuSaaS 操作调用 QuPot Runtime 模块实施自动化部署。


                          具体的操作流程如下:



                          · 登录QuSaaS ·


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



                          · 上传应用 ·


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


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



                          · 应用部署 ·



                          环境创建

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


                          创建完成后显示如下:



                          创建 Amazon IAM

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


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


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


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



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

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


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


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


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

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



                          总结

                          本文详细介绍了使用启科

                          QuPot+Runtime+QuSaaS+Amazon Braket 进行量子应用开发及部署的过程,通过示例开发者可以清楚地掌握量子应用程序开发及云上部署的方法和如何利用 Amazon Braket 后端进行量子计算。


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


                          启科开发者平台:

                          http://developer.queco.cn/


                          本篇作者


                          Keith Yan (丘秉宜)

                          Keith Yan (丘秉宜) ,中国首位亚马逊云科技 Community Hero。




                          Bertran Shao (邵伟)

                          Bertran Shao (邵伟),启科量子开发者关系负责人,国内首个开源量子计算社区发起者。



                          黄文

                          黄文,启科量子 DEVOPS 工程师。



                          Marz Kuo (郭梦杰)

                          Marz Kuo (郭梦杰),启科量子资深研发工程师,量子计算开源框架维护人。



                          2022亚马逊云科技 re:Invent 全球大会

                          精彩视频现已上线!

                          👇👇👇点击下方图片立即观看👇👇👇


                          听说,点完下面4个按钮

                          就不会碰到bug了!

                          文章转载自亚马逊云开发者,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

                          评论