专栏名称: 51CTO技术栈
有趣 | 有料 | 有内涵,为您提供最优质的内容,愿我们一起悦享技术,成就人生。
目录
相关文章推荐
51好读  ›  专栏  ›  51CTO技术栈

小白终于也能玩上真正的量子计算了!

51CTO技术栈  · 公众号  · 程序员  · 2020-10-22 18:05

正文

请到「今天看啥」查看全文


2019 年底云计算江湖来了一波量子计算的小高潮,先是 11 月 4 日微软发布了 Azure Quantum 服务,12 月 AWS 又在 ReInvent 2019 上发布 Amazon Braket,让码农们各种激动。


图片来自 Pexels

我还写了一篇文章:AWS 每年的大招又来了,第一个就介绍了 AWS 这个量子计算的新产品。只可惜那个时候都是预览版,小白是无法直接上手使用的。


直到一年以后的 8 月,AWS 终于官宣了这个产品的 GA,可以在美东(北弗吉尼亚)和美西(北加州和俄勒冈)三个区域使用,真是千呼万唤始出来。


相比于隔壁的 Azure Quantaum 一直需要申请早鸟使用,也是快了那么一点点。

量子计算扫盲篇


Braket 这个名字还是很有讲究的,来自于著名的量子物理学家保罗·狄拉克(Paul Adrien Maurice Dirac,1902 年 8 月 8 日-1984 年 10 月 20 日)1939 年提出的“bra-ket”符号,也叫狄拉克(Dirac)符号。


他把括号 Bracket 这个词一分为二,左边是 bra,右边是 ket,分别表示左矢和右矢,是一种简单地表示量子状态的方法。

再往下的数学物理我就基本上搞不懂了,翻翻 20 年前的大学物理课本好像也看不懂啥,当然量子物理不是我今天要谈的内容,关键是量子计算!


量子计算(Quantum Computing)主要是利用量子力学的原理来处理信息,这和我们经典计算机是不一样的。


经典计算机使用的是硅材料芯片,而量子计算机使用的是原子、离子、光子或电子等材料。


要搞明白量子计算,有几个关键的概念是必须理解的:

  • 叠加(Superposition)

  • 量子测量(Quantum measurement)

  • 纠缠(Entanglement)

  • 量子比特(Qubits)


一个中年大叔,在健身房里锻炼身体,要么向左转,要么向右转。用计算机的语言来说,我的状态要么是 0,要么是 1,不能同时向左或向右,即同时是 0 又是 1。


但是如果我是一个量子粒子,我就可以以一定的概率向左转,又有一定的概率向右转,我是无数个介于 0 或者 1 状态的线性组合,直到美女教练来看我,才能知道我的状态到底是 0 还是 1。我这种介于 0 或者 1 的状态,就是 叠加


美女教练来看我的时候,我要么向左,要么向右,而不是同时在左或者右的状态,就叫做 量子测量 。我因为教练的美貌,崩塌(collapsed)成了某个确定的状态。


如果美女教练看上了我,她选择跟我的状态保持一致或者相反,如果我的状态是 0,那么她的状态就是 0 或 1,无论天涯海角,无论海枯石烂,不管多少光年之外,只要我坍塌了,她同时也坍塌,这种关系就叫做 量子纠缠

对量子计算机软件设计而言,最重要的基础是 量子比特 (qubit),对应的就是经典计算机里的 bit。


经典计算机里的 bit 是 0 或者 1,而处于叠加态的 qubit 则是有一定概率是 0,有一定概率是 1。


比如说我们可以设置 70/30 的概率,也就意味着这个叠加态的 qubit 有 70% 的概率是 0,30% 的概率是 1,这种概率的状态对计算产生了巨大的优势。


对于处于叠加态的 2 个 qubits 而言,每个 qubits 可以是 0,1 或者同时,也就意味着可以同时表示 4 个值,即 00,01,10,11,而不像经典计算机里同时只能表示一个值,这对计算的速度和效率会产生巨大的优势。


例如下面将会提到的拥有 2048 个量子位的 D-Wave 量子计算机,同时可以表示 2^2048 个值,大约是 3.23E+616,也就是 3 后面跟着 616 个零,这个恐怖的数字超出了人类的想象。


👇 扫码回复【 AWS 】入群 👇

了解最新动态、获取技术资料


写到这里,我想起了得到上老喻的《人生算法》课上的内容,其实我们的人生说到底,无非是各种不同的概率组合而已,量子计算,也是在玩概率的游戏。 量子计算机是不是未来可以真正地模拟人生呢?

Amazon Braket 的样子


Amazon Braket 定义了一个新的概念叫做 QPU(Quantum Processing Unit),抽象了量子计算的处理单元,提供了三种不同的量子硬件,包括:


①D-Wave, 运行着 2048 个量子比特(qubits)的量子退火处理器。


量子退火使用一个物理过程来寻找一个低能量配置,编码一个优化问题的解决方案。这个和下面基于门的量子比特技术是完全不同的技术。


下图是 Amazon 的提供的 D-Wave 2000Q 的真实样子:

②IonQ, 提供了基于门的 11 个量子比特的离子阱计算机。


单个离子通过周围电极产生的电磁阱保持在真空中,使用激光脉冲来执行栅极操作。具有相对较长的相干时间和良好的连通性。


这是 IonQ 的样子:

③Rigetti, 提供基于超导量子位的通用门计算机。用 30 个在低温下工作的超导量子比特。


超导量子比特具有易耦合,电子控制和快速门等优点。Rigeti 16Q Aspen-4 看上去是下面这样的。

好吧,我承认对于上面几个关于量子计算机硬件的介绍,我还是不是特别明白,看图片感觉上反正是各种高大上的样子,具体的物理过程其实我也不需要懂,还是赶紧去看看 AWS Braket 到底是什么样子的吧。


登陆到 AWS 的 Console 上,可以看到 Braket 已经可以直接申请了。完成之后,就能看到刚才介绍的三种不同的硬件和 AWS 提供的模拟器 SV1。


我们可以通过创建虚拟机,跑 Python Notebook 的实例,在模拟器 SV1 或者是真实的环境上运行量子算法。

Amazon 提供了开源的 Braket Python 的 SDK(https://github.com/aws/amazon-braket-sdk-python),可以用于编写量子计算的代码。


我个人觉得最简单的还是在 Console 里直接创建 Notebook 的虚拟机,免去了配置环境的麻烦。


这个虚拟机自动部署了 Anaconda 3.0 的环境和 Braket Python SDK,并提供了一些 Braket 的算法示例,用于测试和学习。

下面我们来看一段最简单的 Python 代码,用来模拟两个量子位之间的最大纠缠贝尔态,在 AWS 的 Braket 里可以随意切换模拟器或者使用 Rigetti/IonQ 的硬件执行。


贝尔态是爱尔兰物理学家约翰·斯图尔特·贝尔提出的描述两个量子比特四种最大的纠缠态,即 00,01,10,11。


具体的物理我就不说了,反正我也不是专家,不能不懂装懂。结论很简单,就是在最大纠缠的状态下,两个量子比特的测量结果“一定相同”或者“一定不同”。


下面的代码构建了如下图所示的一个回路,实现了贝尔态:

首先是导入相关的库:

# general imports
import boto3
import numpy as np
import matplotlib.pyplot as plt
# magic word for producing visualizations in notebook
%matplotlib inline
import string
import time

# AWS imports: Import Braket SDK modules
from braket.circuits import Circuit, Gate, Instruction, circuit, Observable
from braket.devices import LocalSimulator
from braket.aws import AwsDevice, AwsQuantumTask

接下来定义相应的账号和 S3 的存储桶信息,然后定义相应的阿达马门(Hadamard Gate)和量子非门(CNOT Gate):
aws_account_id = boto3.client("sts").get_caller_identity()["Account"]
my_bucket = f"amazon-braket-{aws_account_id}" # the name of the bucket
my_prefix = "simulation-output" # the name of the folder in the bucket
s3_folder = (my_bucket, my_prefix)
# define circuit
bell = Circuit().h(0).cnot(0, 1)
# print circuit
print(bell)

T  : |0|1|



q0 : -H-C-

       |


q1 : ---X-



T  : |0|1|

先在本地模拟器上测试:
# set up device: Local Simulator
device = LocalSimulator()
# run circuit (execute single TASK)
result = device.run(bell, shots=1000).result()
# get measurement shots
counts = result.measurement_counts
# print counts
print(counts)

Counter({'00': 515, '11': 485})

这个输出表示 1000 个测量里,有 515 个是 00 状态,485 个是 11 状态。我们也可以画个图来显示一下:
# plot using Counter
plt.bar(counts.keys(), counts.values());
plt.xlabel('bitstrings');
plt.ylabel('counts');

接下来我们修改一点代码,让代码在云上的模拟器上运行,也就是 SV1,他拥有 34 个量子位。修改很简单,改一句话就好了。

# set up the managed simulator




    

device = AwsDevice("arn:aws:braket:::device/quantum-simulator/amazon/sv1")

结果也是类似的,运行完了以后,在 Console 的 Task 里就会出现刚才执行的任务情况。

在 S3 的 Bucket 里面也会出现刚才运行的结果,这是个 result.json 文件,记录了 1000 次量子测量的结果,并记录纠缠的结果。

接下来就是激动人心的真实硬件运行了。其实这些硬件资源还是特别紧张的,在我测试的时候,除了 D-Wave 可以用以外,IonQ 要 1 天以后才有资源,Rigetti 也要 10 小时以后。


不过我们可以通过代码的方式,创建任务,等机器空出来了,就可以执行获得结果了。
# set up device
ionq = AwsDevice("arn:aws:braket:::device/qpu/ionq/ionQdevice")

# run circuit with a polling time of 5 days
ionq_task = ionq.run(bell, s3_folder, shots=1000, poll_timeout_seconds=5*24*60*60)

# get id and status of submitted task
ionq_task_id = ionq_task.id
ionq_status = ionq_task.state()
# print('ID of task:', ionq_task_id)
print('Status of task:', ionq_status)

这里我们设置了 5 天的超时,任务会在 5 天内执行完成,否则就不执行了,当然可以预期结果也是比较类似的。


在真实的量子计算机上出现了四种状态,即 00,01,10,00,这在经典的模拟计算机上是没有的, 结果如下:

量子纠缠也是量子计算里非常有趣的特性,任何关于量子计算的教材里都会提到。


比如 Azure Quantum 的教程里也有类似的内容,只是微软用的是 Q#(qdk)来实现的:
https://docs.microsoft.com/en-us/quantum/tutorials/explore-entanglement

同样可以在 Jupyter 或者 Visual Studio Code 里运行,也是实现了 H 门和 CNOT 门。

总结


AWS 并不是第一个提供量子云服务的厂商,但是是我能摸到的第一个。IBM 在 2016 年就推出了 22 个量子位的量子计算服务,之前我也说了微软在 AWS 之前推出了 Azure Quantum,只是我辈小白不能用而已。


微软的服务也有 IonQ 的硬件,还有 Honeywell 和 Quantum Circuits(QCI)的硬件,Honeywell 最近推出的硬件包含 64 个量子位。


事实上到今天为止量子计算还是实验性质的,传统计算机能做所有量子计算机能做的事情,只是可能在特定领域慢一点而已。


前天又有一条新闻说 Google 继去年实现量子优越性以后,对化学反应进行了模拟,在 Science 上又发表了一篇新文章《超导量子比特量子计算机的 Hartree-Fock 近似模拟》(Hartree-Fock on a Superconducting Qubit Quantum Computer),又解锁了量子计算的新技能。


相信要不了多久,量子计算将会进入我们的日常生活,新一代的码农或许又有了更多改变世界的机会。

作者:hotcan
来源:热罐小角(ID:hotcancorner)公众号


入 群 福 利

PS:AWS 云计算社群成立啦!在群里可以快速了解 AWS 云计算 最新动态 、获取相关 技术资料 哦!


👇想要进群的小伙伴请 扫码回复【AWS】 ,24h 内审核进群 👇









请到「今天看啥」查看全文