你好,七种量子语言中的许多世界(2021年)

2022-02-17 14:42:31

量子计算给工业带来革命性变革、解决人类最复杂问题的惊人前景,正日益成为学术界、商业界和政府的共识。但同样重要的是,我们对我们今天所处的位置和我们希望明天所处的位置之间的距离的欣赏。

要跨越这段距离,我们有一个选择:围绕尖端量子计算机资源建造护城河和围墙,或者建造桥梁,在人们所在的地方与他们见面,将量子计算改变世界的潜力带给尽可能多的人。在IonQ,我们坚信,要确保所有想要在我们新兴领域提升最先进水平的人都有能力使用最适合自己需求的工具,访问优秀的硬件。我们相信,打破范式的quantum应用程序很可能来自车库里的一个孩子,就像来自企业研究园一样。

就在几年前,量子计算机只有两三个量子位,而这些机器的程序是由物理学研究生在一所大学大楼地下室的实验室里精心编制的。编程这些设备的唯一工具是拼凑起来的代码,由一个研究生传给另一个研究生,这些代码仍然把这些设备更多地视为物理实验,而不是计算工具。

但今天,随着数十个量子比特的量子计算机的建造,数百甚至数千个量子比特的系统即将问世,量子计算机编程的复杂性需要一种更结构化的方法。这导致了大量量子编程框架和语言的诞生,从微软的Q#等成熟的编程语言,到IBM的Qiskit等Python框架,再到QASM等基本汇编语言。

任何人都可以使用这些软件包在自己的计算机上运行模拟,但真正的价值在于使用这些语言在实际的量子硬件上运行量子程序。

为此,我们很高兴地宣布,随着ProjectQ加入到我们支持的库中,您现在可以使用每个主要的quantum框架和语言访问IonQ硬件。为了庆祝,这里有一个基本的量子程序——量子版的“Hello World”程序——“Hello Many Worlds”,如果你愿意的话——在七个平台上实现了IonQ quantum计算机上的远程执行。

利用量子计算的力量,无论你使用什么云、语言或SDK。

开始阅读文档

我们要写的基本量子程序很简单。它在两个量子位之间产生一个完全纠缠态,然后测量这个态。这种状态有时被称为钟态,或钟对,以物理学家约翰·斯图尔特·贝尔的名字命名。

这个程序的测量结果应该给出两个量子位的0或两个量子位的1,数量相等。当运行这些时,我们将能够分辨出我们是在真正的硬件上运行的,因为这并不总是我们得到的!这些错误是目前限制量子计算机的因素,但通过量子错误校正克服这一问题的第一步已经开始。

IBM的Qiskit是最早的量子计算机编程框架之一。它提供了用python编写量子程序的强大工具,以及用于使用量子硬件、运行通用算法等的各种附加包。Qiskit有大量学习量子计算的教材,包括一整本教科书,这是量子初学者开始学习这个领域的好地方。

使用我们最近宣布的与Google Cloud Marketplace的集成,Qiskit可以用来运行针对IonQ被困离子量子计算机的量子程序。如果您尚未注册,这些说明将引导您完成该过程,本指南将帮助您获得访问IonQ服务以运行quantum程序的API密钥。下面我们将此API密钥称为API_密钥——如果您按照本指南进行操作,请确保使用真正的密钥替换它,否则程序将无法运行!

首先,让我们创建一个量子电路,创建一个纠缠钟形对,并在Qiskit中测量它——在开始之前,您需要安装Qiskit和Qiskit_ionq python包。

从qiskit import QuantumCircuit#创建一个基本的钟形状态。qc=量子电路(2,2)#2个量子位,2个比特SQC。h(0)qc。cx(0,1)#测量并将结果放入两位。qc。测量([0,1],[0,1])#显示电路。打印(qc)

┌───┐ ┌─┐ 问题0:┤ H├──■──┤M├─── └───┘┌─┴─┐└╥┘┌─┐问题1:─────┤ 十、├─╫─┤M├ └───┘ ║ └╥┘c:2/═══════════╩══╩═ 0 1

要在IonQ Quantum处理单元(简称QPU)上运行此电路,首先需要从IonQ提供程序获取QPU后端:

然后,发送作业以在量子位上运行,并等待作业从IonQ服务上的作业队列中运行。

来自qiskit。提供者。jobstatus导入jobstatus导入时间#提交作业以供执行。qpu_job=qpu。运行(qc,放炮次数=1000)#检查工作是否完成。而qpu_工作。status()不是JobStatus。完成:打印(";作业状态为";,qpu#u Job.status())时间。睡觉(60)#喝杯咖啡!这可能需要几分钟的时间。打印(";作业状态为";,qpu#u Job.status())打印(qpu#u Job.get#u counts())

Job status就是JobStatus。QUEUEDJob状态是JobStatus。QUEUEDJob状态是JobStatus。完成{';00';:513,';01';:6,';10';:4,';11';:477}

我们的理想结果是00:512,11:512。我们得到的结果基本上是正确的,但正如我们之前所说的,由于在真实硬件上运行时产生的计算噪音,它们并不都是正确的。

微软在编写自己的编程语言方面有着悠久的历史,他们在quantum上延续了这段历史。他们提供的运行量子计算的服务是一种完整的语言,称为Q#。

使用Q#,任何在微软云服务Azure Quantum上拥有帐户的人都可以与IonQ的Quantum计算机竞争。有关Azure Quantum的入门信息,请参阅以下说明。在本例中,我们假设您已经设置了Azure Quantum帐户和Quantum工作区。

首先,让我们编写实际的量子程序。Q#是用类似C的方言写的,任何写C#或类似语言的人都应该很熟悉:

名称空间Bell{open Microsoft.Quantum.infrant;open Microsoft.Quantum.Measurement;operation MeasureEntanglement():结果[]{use qubits=Qubit[2];H(qubits[0]);CNOT(qubits[0],qubits[1]);return multi(qubits);}

将其保存在名为Operation的文件中。qs,然后在同一个目录中,创建一个Python文件来运行这个程序。您也可以使用Azure的az命令行界面来实现这一点——有关更多详细信息,请参阅上面的链接指南——但我们发现,出于演示目的,使用python更容易设置。

导入qsharp导入qsharp。Azure来自Bell import MeasureEntanglementqsharp。蔚蓝色的连接(resourceId=";量子资源的名称";,位置=";美国东部";)qsharp。蔚蓝色的目标(";ionq.qpu";)结果=qsharp。蔚蓝色的执行(MeasureEntanglement,shots=1000,jobName=";Bell";)打印(结果)

{‘[0, 0]’: 0.50, ‘[1, 1]’: 0.48, ‘[0, 1]’: 0.02}

请注意,与前一个示例不同,它们是作为测量概率直方图返回的;每一个州的1000次注射中的百分比。这是另一种常见的表示量子电路输出的方式。

Braket是亚马逊的量子计算服务,包括一个基于python的SDK,用于创建和提交量子程序。要在Braket上运行作业,您需要在上安装AWS帐户,并已安装Amazon Braket sdk。此外,您还需要设置一个s3存储桶来存储结果。在我们完整的Braket指南中有更多的Braket设置细节。

它打印出了我们同样友好的小量子电路——尽管这里的格式不同,但电路是一样的!

现在,让我们获取ionq设备并设置S3存储桶信息:

设备=AwsDevice(";arn:aws:braket:::设备/qpu/ionq/ionQdevice";)#输入您之前创建的S3 bucket的名称my_bucket=";亚马逊braket你的桶名";#bucketmy_前缀的名称=";你的文件夹名";#buckets3_文件夹中文件夹的名称=(my_bucket,my_前缀)

Cirq是一个开源Python框架,由谷歌的一个团队开发,用于量子编程。使用我们最近宣布的与Google Cloud Marketplace的集成,Cirq可以用来运行针对IonQ被困离子量子计算机的量子程序。由于Cirq是由谷歌开发的,这当然是在GCM上运行的最具协同性的方式。

您可以使用这些说明开始使用GCM,本指南将帮助您获取访问IonQ服务的API密钥。同样,我们在下面将此API密钥称为API_密钥,但如果您遵循本指南,请务必用真正的密钥替换它!

再一次,我们';我首先为我们的钟对创建电路并打印它,这会生成另一个漂亮的ascii图:

0: ───H───@───M(';b';)─── │ │1: ───────十、───M────────

要在IonQ硬件上运行,请创建一个IonQ。服务对象,使用API密钥进行身份验证,并针对服务运行:

进口cirq。ionq as ionq#创建一个ionq。服务对象。服务=ionq。服务(api_key=api_key)#针对该服务运行程序。结果=服务。运行(电路=质量控制,重复次数=1000,目标=';qpu';)#ru的返回对象是cirq。结果对象从这个对象可以得到结果的直方图。直方图=结果。直方图(键=';b';)打印(f';直方图:{Histogram}';)

这里我们看到了量子语言和SDK中另一种常见的输出模式:我们的位字符串以整数格式表示,其中11表示为3,10表示为2,依此类推。

Pennylane与之前的框架有些不同,因为它主要关注量子机器学习,而不仅仅是基本的电路合成。尽管如此,我们仍然可以使用它来创建一个钟形对,就像前面的例子一样。

首先,使用终端创建一个名为IONQ_API_KEY的环境变量,并使用您的API密钥——如果您正在浏览,Cirq和Qiskit示例将更详细地解释如何获取密钥。

一旦我们在环境中设置了api密钥,下面的代码片段将创建并运行我们的Bell对。

导入集合将pennylane作为qmlfrom pennylane_ionq import optsdev=qml导入。设备(";ionq.qpu";,连线=2,放炮=1000)@qml。qnode(dev)def circuit():qml。阿达玛(导线=0)qml。CNOT(连线=[0,1])返回qml。probs(wires=[0,1])results=集合。计数器(dict)枚举(circuit()。打印(结果)

ProjectQ是一个开源量子编程框架,由苏黎世ETH开发。这个框架有一个很酷的地方,那就是它有许多对仿真有用的优化:也就是说,在模拟量子系统时模仿大型预言机的动作,而不需要将它们编译成低级门。更多关于ProjectQ和IonQ入门的详细信息可以在这里找到。

像我们的其他SDK一样,我们也可以使用它来创建和测量钟形对。

首先,我们需要创建一个引擎,使用api密钥在IonQ硬件上执行电路:

导入项目Q。设置。从projectq导入主引擎从projectq导入。后端导入IonQBackend#设置你的IonQ API tokentoken=API#密钥#创建和IonQ后端以及相应的编译器:device=';ionq_qpu和#39;backend=IonQBackend(verbose=True,token=token,device=device,num_runs=1000,)compilers=projectq。设置。ionq。获取引擎列表(令牌=令牌,设备=设备,)#创建主引擎:引擎=主引擎(后端,引擎列表=编译器)

现在,让我们创建一对钟。ProjectQ使用管道操作符“|”将门应用于量子位。

来自projectq。ops import All,H,CNOT,Measure#定义一个函数,使用ProjectQ enginedef bell_state(eng)应用一个bell状态:#分配两个量子位circuit=eng.Allocate_qreg(2)q0,q1=circuit#创建一个bell对并测量它。H | q0 CNOT |(q0,q1)All(Measure)| circuit#flushing将电路提交给IonQ';s API eng.flush()#现在,返回作业结果return eng.backend。获取_概率(电路)#将钟形状态电路应用于我们的引擎probs=钟形状态(引擎)打印(probs)

Pytket是剑桥量子计算公司(Cambridge quantum Computing)开发的用于量子编程的python工具包,是其更大的tket工具链的扩展。

一旦我们的电路建成,所有这些';左边是创建一个后端,为后端编译电路,然后运行它。

最后但并非最不重要的一点是,XACC是一个混合量子/经典体系结构的框架。XACC由橡树岭国家实验室的一个团队生产,并支持大量编译器、模拟器和量子硬件。让我们用它来创建我们现在熟悉的钟对。

导入xaccionq=xacc。getAccelerator(';ionq:qpu';)编译器=xacc。getCompiler(";xasm";)ir=编译器。编译(r";";";#qpu__;void hellobell(qbit q){H(q[0]);CX(q[0],q[1]);度量(q[0]);度量(q[1])""", ionq)buffer=xacc。qalloc(2)r=ionq。执行(buffer,ir.getComposite(";hellobell";)结果=缓冲区。getMeasurementCounts()打印(结果)

这就是七个量子SDK(和三个云提供商)的七种“你好,许多世界”的方式!

我们很自豪能够提供对所有这些工具的硬件访问——无论你想使用什么工具来实现量子计算的下一个重大突破,你都可以将它们与IonQ硬件一起使用。

如果你';如果您对使用自己的工具与API进行交互感兴趣,完整的API参考资料将详细介绍HTTP谓词和端点、预期的响应格式,以及本指南中未涉及的其他功能。如果您遇到任何问题,我们也很乐意提供帮助——使用我们的联系方式、twitter或支持中心联系我们。

此外,如果你正在建设工具和工作的一部分,在学术机构,考虑申请自由时间在我们的系统通过我们的研究信贷计划。

我们还有一个完整的文档和指南页面,其中包含一步一步的快速入门指南,详细介绍了如何使用上述语言和SDK进行设置,还有一个最佳实践页面提供了充分利用我们的离子系统的详细说明,我们的支持中心随时可以帮助您解决任何可能遇到的问题。

利用量子计算的力量,无论你使用什么云、语言或SDK。

开始阅读文档