2022 年 2 月 22 日,Quantinuum 宣布与 IBM 达成协议,与剑桥量子计算有限公司(Cambridge Quantum Computing Limited)一起扩展 IBM 量子中心,为客户提供更多访问 IBM 量子计算系统的机会,以推动和开发量子生态系统。IBM 对 Quantinuum 的投资得到了 IBM Ventures 的推动。
Quantinuum 公司简介
2021 年 11 月 30 日,霍尼韦尔量子解决方案公司(HQS)与剑桥量子公司(CQC)合并成立了新公司—— Quantinuum,它是目前全球最大的独立集成量子计算公司。这两家公司,霍尼韦尔基于离子阱捕获技术打造了最高性能的量子硬件;剑桥量子公司则是量子软件、操作系统和网络安全领域的先驱,所以它们一同成立的新公司可谓实力雄厚。
Quantinuum 的理念是在科学的引领和企业的推动下,加速量子计算的发展。并旨在以与平台无关的方式加速量子计算发展以及量子技术的创新,为经典计算机无法解决的一些最棘手的问题提供现实世界的量子解决方案。Quantinuum 希望通过一流的量子软件与最高性能的硬件结合,借助集成的全栈技术,将真正的量子计算产品和解决方案带入大型高增长市场。此外,Quantinuum 还希望能够利用其力量,在制药、医疗保健、材料科学、网络安全、能源转型和技术方面取得突破,以帮助缓解气候变化。
Quantinuum 项目简介
硬件:H1 量子计算机
Quantinuum H1 代量子计算机,全称为 Quantinuum H1 陷落离子量子计算机,由霍尼韦尔提供支持。凭借高保真、完全连接的量子比特以及中间电路测量和量子比特重用等功能,Quantinuum 的系统使量子开发人员能够更深入的设计电路,这也能加速在研究方向上的发展。
Quantinuum H1 一代目前由两台计算机 H1-1 和 H1-2 组成,可通过云完全访问,并与各种软件框架兼容,而 H1 代量子计算机在发展速度上可以说非常迅速。2021 年 7 月,H1-1 型号的量子计算机率先实现了 1024 的实测量子体积(量子体积是 IBM 推出的一个度量标准,用于衡量量子计算系统的整体能力和性能,是目前较为权威的指标),在当时也属于业内的较高水准。
在 2021 年 12 月 31 日,H1-2 型号的离子阱量子计算机实现了 2048 量子体积,达成第一台通过 2048 基准测试的量子计算机的里程碑。短短四个月后,Quantinuum 就将系统模型 H1-2 的性能翻了一番,成为第一台实现 4096 量子体积的商用量子计算机。
就在 2022 年 6 月 14 日,Quantinuum 宣布对其系统模型 H1 技术进行重大升级,新升级的 H1-1 量子计算机已经过广泛的测试,这些改进大大提高了其计算能力,能够在不牺牲性能的情况下运行比以前更复杂的计算。升级的内容包括将量子位由 12 个扩展到 20 个完全连接的量子位,保真度保持在 99.7%-99.8%之间,同时保留其较低的双量子比特门误差和关键功能,如中电路测量、量子比特重用、量子条件逻辑和全对全链接等操作;此外,Quantinuum 还将栅极区的数量从三个增加到五个,使 H1-1 能够同时完成更多的量子操作,并增加可以并行完成的量子操作的数量等等。而 H1 量子计算机的第二个版本 H1-2 将会在今年晚些时候进行类似的升级。目前来看,Quantinuum 对于 H1 代量子计算机功能和性能不断地迭代升级,兑现了 Quantinuum 的前身 —— 霍尼韦尔在2020年3月做出的承诺:在未来五年内,每年都将其俘获离子技术的性能提高一个数量级。
软件:TEKT
TKET 是 Quantinumm 开发的软件开发工具包,用于创建和执行基于门的量子计算机的程序,可以解决化学、材料科学、金融和优化方面的重要问题。它具有很不错的平台兼容性,其电路优化例程允许用户从当今任何嘈杂中型量子(NISQ)设备中优化量子电路和操作。TEKT 是开源的,可以通过 PyTKET Python 软件包访问,它的扩展模块提供了与许多量子计算机、经典模拟器和流行的量子软件库等等设备的兼容性。
从量子技术的发展历史上看,因为受限于量子计算机的硬件需求,开发人员主要通过在经典计算机上模拟和评估量子算法,并验证和确认在量子计算机上运行生成的数据和结果。而量子计算机容易受到噪声影响和干扰,经典模拟器很难解释这种噪声,因为它们无法模仿真实量子设备的物理操作,这就限制了他们预测量子电路在实际量子硬件上表现的准确性,使得事先识别和修复错误的问题变得更加困难。
所以在 TEKT 中,可以自动处理 NISQ 设备的许多特性,从而降低了使用量子计算机的障碍。它使用户能够构建电路而不必担心设备架构,并能够提供更大且更具表现力的门环。除了减小电路尺寸外,TEKT 还提供了降低 NISQ 器件噪声和提高整体性能的工具,能够产生更真实的数据,更好地了解量子电路如何执行。同时 TEKT 提供的拓展模块可以使其适配众多流行的量子软件包,包括 Qiskit、Cirq、Pennylane 和 pyQuil 等等。
Quantinuum H1 项目实例
Quantinuum 的通用量子计算机使用的是可移动的离子作为陷落离子量子耦合器中的量子比特。系统模型 H1-1 由霍尼韦尔公司提供,它的门组包括单量子位的 RX、RY、RZ 和双量子位的 ZZ 门。CX 门可以很容易地通过单量子位操作的组合来实现与一个 ZZ 的结合。此外,该系统还有一个高度精确的复位门操作可供用户使用。
为了探究和了解 H1 代量子计算机的实际性能,这里我们可以选用 TEKT 提供的拓展模块来调用 Quantinuum H1 的后端接口pytket-quantinuum,模拟在这台量子计算机上的一些操作。
比如最有代表性的量子电路创建:首先使用以下命令安装:
pip install pytket-quantinuum
我们可以直接使用在 pytket 中内置的本地量子电路接口,来进行电路的创建:
from pytket import Circuit
c = Circuit(2,2) # define a circuit with 2 qubits and 2 bits
c.H(0) # add a Hadamard gate to qubit 0
c.Rz(0.25, 0) # add an Rz gate of angle 0.25*pi to qubit 0
c.CX(1,0) # add a CX gate with control qubit 1 and target qubit 0
c.measure_all() # measure qubits 0 and 1, recording the results in bits 0 and 1
我们此次安装pytket-quantinuum拓展模块可使用以下方法:
from quantinuum import QuantumCircuit
qc = QuantumCircuit()
# ...
from pytket.extensions.quantinuum import quantinuum_to_tk
c = quantinuum_to_tk(qc)
顺便一提,如果有其他需求,除了可以接入pytket-quantinuum模块,还可以尝试嵌入其他框架代码语言,比如 Qisket、Cirq 等等:
from pytket.qasm import circuit_from_qasm
c = circuit_from_qasm("my_qasm_file.qasm")
拓展模块安装完毕,我们可以运行一个 Quantinuum 进行中电路测量的示例,运行代码如下:
from pytket.circuit import Circuit, Qubit, Bit, OpType, reg_eq
from pytket.circuit.display import render_circuit_jupyter
# Set up Repetition Code with mid-circuit measurement and corrections
# 2 1 0 = data: data qubits
# *----*----*
# ZZ ZZ
# 1 0 = syndromes
# 0 0 = ancillas
# Set up circuit object
circuit = Circuit(name="Repetition Code")
# Reserve registries
# Add qubit register, the data qubits
data = circuit.add_q_register("data", 3)
# Add qubit register, the ancilla qubit
ancilla = circuit.add_q_register("anc", 1)
# Add classical registers for the syndromes
syndrome = circuit.add_c_register("syndrome", 2)
# Add classical registers for the output
output = circuit.add_c_register("output", 3)
# Prepare the logical state
# Qubits always start in |0> and logical |0> == |000>.
# So we already start in logical |0>.
# Syndrome Extraction
circuit.add_gate(OpType.Reset, ancilla)
circuit.CX(data[0], ancilla[0])
circuit.CX(data[1], ancilla[0])
circuit.Measure(ancilla[0], syndrome[0])
# Syndrome Extraction
circuit.add_gate(OpType.Reset, ancilla)
circuit.CX(data[1], ancilla[0])
circuit.CX(data[2], ancilla[0])
circuit.Measure(ancilla[0], syndrome[1])
# Correction
# # if(syndromes==1) -> 01 -> check 0 bad -> X on qubit 0
circuit.X(data[0], condition=reg_eq(syndrome, 1))
# # if(syndromes==2) -> 10 -> check 1 bad -> X on qubit 2
circuit.X(data[2], condition=reg_eq(syndrome, 2))
# # if(syndromes==3) -> 11 -> check 1 and 2 bad -> X on qubit 1
circuit.X(data[1], condition=reg_eq(syndrome, 3))
# Measure out data qubits
circuit.Measure(data[0], output[0])
circuit.Measure(data[1], output[1])
circuit.Measure(data[2], output[2])
render_circuit_jupyter(circuit)
需要注意的是,为了获取 Quantinuum API,我们需要登录注册的账号,验证设备状态:
from pytket.extensions.quantinuum import QuantinuumBackend
machine = 'H1-1E'
QuantinuumBackend.login()
backend = QuantinuumBackend(device_name=machine)
print(machine, "status:", backend.device_state(device_name=machine))
在 pyket 包含许多优化电路的功能,比如在有需求的情况下,尽可能地减少门的数量,并为量子计算机的原始门集重新合成电路。这里电路由get_compiled_circuit编译,包含优化门处理,并将电路重新合成为 Quantinuum 的本地门组,利用optimisation_level设置了编译过程中的优化级别。
compiled_circuit = backend.get_compiled_circuit(circuit, optimisation_level=1)
render_circuit_jupyter(compiled_circuit)
在以上步骤调试好后,我们可以进行量子电路设置并运行了:
n_shots = 100
handle = backend.process_circuit(compiled_circuit,
n_shots=n_shots)
print(handle)
输出结果为:
('97611b5f87ab4e559d885ac77189a5fb', 'null')
后端调用:
status = backend.circuit_status(handle)
print(status)
输出结果:
CircuitStatus(status=<StatusEnum.COMPLETED: 'Circuit has completed. Results are ready.'>,
message="{'name': 'Repetition Code', 'submit-date': '2022-04-07T20:46:37.217088',
'result-date': '2022-04-07T20:47:17.522960', 'queue-position': None, 'cost': '7.04', 'error': None}",
error_detail=None, completed_time=None, queued_time=None,
submitted_time=None, running_time=None, cancelled_time=None,
error_time=None, queue_position=None)
最后生成 json 文件:
import json
result = backend.get_result(handle)
with open('pytket_mcmr_example.json', 'w') as file:
json.dump(result.to_dict(), file)
对于运行结果,我们需要进行分析处理。一般我们会对原始结果应用投票来决定我们得到 0 和 1 的次数。首先,定义一个多数投票函数:
def majority(result):
""" Returns whether the output should be considered a 0 or 1. """
if result.count(0) > result.count(1):
return 0
elif result.count(0) < result.count(1):
return 1
else:
raise Exception('count(0) should not equal count(1)')
接着处理输出:
result_output_cnts = result.get_counts([output[i] for i in range(output.size)])
result_output_cnts
输出结果为:
Counter({(0, 0, 0): 96, (0, 0, 1): 2, (0, 1, 0): 1, (1, 0, 0): 1})
对结果进行数据统计:
zeros = 0 # Counts the shots with majority zeros
ones = 0 # Counts the shots with majority ones
for out in result_output_cnts:
m = majority(out)
if m == 0:
zeros += result_output_cnts[out]
else:
ones += result_output_cnts[out]
一个逻辑零被初始化,所以我们的错误率应该是
p = ones / n_shots
print(f'The error-rate is: p = {p}')
最终我们可以得到这次试验中的错误率统计:
The error-rate is: p = 0.0
IBM 与 Quantinuum 合作如本文开头所说,最近 IBM 投资了 Quantinuum。对于 Quantinuum 来说,能够扩大对 IBM Quantum 硬件和软件方面的支持,包括 IBM 最近宣布的 127 量子位处理器“Eagle”,以及 IBM 的量子专业知识和 开发者工具包 Qiskit,同时也能让 IBM 为 H1 代量子计算机进行更好的优化,,为客户提供更多访问 IBM 量子计算机的机会。这两家公司的合作,势必会为量子行业的系统生态带来积极的促进作用,加速量子计算的发展和量子技术的创新,为经典计算机无法解决的一些棘手问题提供现实世界的量子解决方案。
参考链接:
1. Quantinuum |产品|H1 https://www.quantinuum.com/products/h1
2. IBM 投资 Quantinuum https://cambridgequantum.com/quantinuum-and-ibm/
3. pytket 1.3.0 文档 https://cqcl.github.io/tket/pytket/api/getting_started.html