MindSpore Quantum 0.8版本全新发布
经过社区开发者们的不断努力,量子计算MindSpore Quantum最新的0.8版本正式面世。
新版本中我们推出了更强劲的自研量子模拟器mqvector ,新发布GPU模拟器mqvector_gpu。此外新版本支持更多的量子门,方便用户开发更多新的量子算法。下面就带大家快速浏览0.8版本的关键特性。
01 全新量子模拟器,性能更强劲
新版本中我们推出了全新的量子模拟器mqvector,支持全振幅量子模拟,且可自适应控制量子模拟时调用的运算资源,性能表现更好。
【VQE求解化学分子基态能量】
VQE求解化学分子基态能量-CPU、GPU(12量子比特 H6),MindSpore Quantum与主流软件Qiskit、TensorFlow-Quantum对比效果如下面两图所示, CPU性能提高12倍以上,GPU性能提高7倍以上。
图1 量子模拟器 VQE(CPU)性能对比图
图2 量子模拟器 VQE(GPU)性能对比图
【QAOA求解Max-Cut问题模拟】
QAOA求解Max-Cut问题(16量子比特),MindSpore Quantum与主流软件Qiskit、Qulacs对比效果如下图所示,性能提高2倍以上。
图3 量子模拟器 QAOA性能对比图
【随机线路演化模拟】
随机线路演化CPU-20量子比特,GPU-22量子比特,MindSpore Quantum与主流软件Qiskit、Quest对比效果如下面两图所示,CPU性能提高2倍以上,GPU性能提高5倍以上。
图4 量子模拟器 CPU性能对比图
图5 量子模拟器 GPU性能对比图
新版本MindSpore Quantum可以通过如下指令来升级:
pip install mindquantum==0.8.0
使用方式如下:
from mindquantum.algorithm.library import qft
from mindquantum.simulator import Simulator
circ = qft(range(3))
sim = Simulator('mqvector', circ.n_qubits)
sim.apply_circuit(circ)
其他会使用到量子模拟器的地方也可使用,例如:
from mindquantum.algorithm.library import qft
qft(range(3)).matrix(backend='mqvector')
此外,我们还推出了基于GPU的量子模拟器mqvector_gpu,具体使用方式与mqvector类似。注意:该模拟器仍处于beta试用阶段,具体调用方式后续可能会持续优化。GPU版本的MindSpore Quantum 0.8请扫下方二维码下载,下个版本将可以直接使用pip指令来安装。下载后删除名称中的"_gpu",然后使用pip指令来安装下载的安装包。
GPU MindSpore Quantum 0.8
02 支持更多量子门,使用更灵活
新版本中我们支持了FSim门和U3门,跟现有参数化量子门不同,此类量子门支持多个独立的变量。
2.1 FSim门
FSim支持费米子算符模拟门,可在变分量子算法中可以有效的运行。它包含两个自由变量,定义如下:
2.2 U3门
单比特的任何量子门U3将会以一个单独的量子门存在,而不是一段量子线路。且U3门在变分量子算法中可以有效的运行。U3门包含三个自由变量,定义如下:
from mindquantum.core.gates import FSim
FSim('a', 'b').on([0, 1])
我们将得到:
FSim(𝜃=a, 𝜑=b|0 1)
2.3 自定义量子门
在0.8中,我们自定义量子门的性能也进行了提升。在新版本中,我们利用numba对自定义量子门进行编译,模拟器会读取编译出的机器码来进行量子门模拟,这极大的提高了自定义量子门的模拟速度,且编译后的自定义量子门可以在模拟器后端的多线程场景中运行。
import numpy as np
from mindquantum.core.circuit import Circuit
from mindquantum.core.gates import gene_univ_parameterized_gate
def matrix(theta):
return np.array([[np.exp(1j * theta), 0],
[0, np.exp(-1j * theta)]])
def diff_matrix(theta):
return 1j*np.array([[np.exp(1j * theta), 0],
[0, -np.exp(-1j * theta)]])
TestGate = gene_univ_parameterized_gate('Test', matrix, diff_matrix)
circ = Circuit().h(0)
circ += TestGate('a').on(0)
2.4 BarrierGate
在新版本中,我们可以只对特定的比特添加屏障门,请看示例:
import mindquantum.core.gates as G
from mindquantum.core.circuit import Circuit, UN
circ = Circuit() + UN(G.H, 3) + UN(G.BarrierGate(), [0, 2]) + UN(G.H, 3)
2.5 KrausChannel
我们还新增了KrausChannel接口,用户可以根据自己的需求来自定义噪声信道,进行含噪线路模拟。
from mindquantum.core.gates import KrausChannel
from mindquantum.core.circuit import Circuit
from math import sqrt
gamma = 0.01
kmat0 = [[1, 0], [0, sqrt(1 - gamma)]]
kmat1 = [[0, 0], [0, sqrt(gamma)]]
phase_damping = KrausChannel('phase-damping', [kmat0, kmat1])
circ = Circuit().h(0).x(1)
circ += phase_damping.on(0)
circ += phase_damping.on(1)
03
可自定义量子线路宽度,展示更友好
对于一个较长的量子线路,旧版本会直接绘制一个宽度很长的 svg 图,无法直接在论文中展示。因此,在新版本中,我们可以在量子线路的svg方法中传入一个width参数来调整量子线路的展示宽度,使得线路可以在一个页面里完美展示。
from mindquantum.utils import random_circuit
random_circuit(3, 50, seed=42).svg(width=1500).to_file('nice_circuit.svg')
旧版本量子线路打印能力有限,需要通过滚动条查看某一段量子线路。
新版本优化后,量子线路可在同一幅图中较好的展示。