Nota
Esta página foi gerada, a partir do tutorials/simulators/2_device_noise_simulation.ipynb.
Execute interativamente no IBM Quantum lab.
Simulações do modelo de ruído de serviço do dispositivo¶
Introdução¶
Este notebook mostra como utilizar o módulo noise
do Qiskit Aer para gerar, automaticamente, um modelo de ruído básico para um dispositivo de hardware IBMQ, e como utilizar este modelo para fazer simulações ruidosas de QuantumCircuits
para estudar os efeitos de erros, que ocorrem em dispositivos reais.
Observe que estes modelos automáticos são, apenas, uma aproximação dos erros reais, que ocorrem em dispositivos reais, devido ao fato de que eles devem ser construídos, a partir de um conjunto limitado de parâmetros de entrada relacionados a taxas de erro médias nas portas. O estudo de erros quânticos em dispositivos reais é uma área ativa de pesquisa e discutimos as ferramentas do Qiskit Aer para a configuração de modelos de ruído mais detalhados em outro notebook.
[1]:
%matplotlib inline
from qiskit import IBMQ, transpile
from qiskit import QuantumCircuit
from qiskit.providers.aer import AerSimulator
from qiskit.tools.visualization import plot_histogram
Modelo de Ruído de serviço do Dispositivo¶
O modelo de ruído de dispositivo do Qiskit Aer gera, automaticamente, um modelo de ruído simplificado para um dispositivo real. Este modelo é gerado usando as informações de calibração relatadas no BackendProperties
de um dispositivo e leva em conta
A probabilidade de gate_error (erro da porta) de cada porta base em cada qubit.
O gate_length (comprimento da porta) de cada porta base em cada qubit.
As constantes de tempo de relaxamento \(T_1\), \(T_2\) de cada qubit.
A probabilidade de erro de leitura de cada qubit.
Serviços Terra simulados¶
Utilizaremos dados reais de ruído para um dispositivo IBM Quantum usando os dados armazenados no Qiskit Terra. Especificamente, neste tutorial, o dispositivo é o ibmq_vigo
.
[2]:
from qiskit.test.mock import FakeVigo
device_backend = FakeVigo()
Circuito de teste para comparação de dispositivo e simulação¶
Agora, construiremos um circuito de teste para comparar a saída do dispositivo real com a saída com ruído simulada no Qiskit Aer AerSimulator
. Vamos considerar um estado GHZ de 3 qubits \(\frac{1}{2}(|0,0,0\rangle + |1,1,1\rangle)\) nos qubits 0, 1 e 2. Antes de executar com ruído ou no dispositivo, mostraremos a saída ideal esperada sem ruído.
[3]:
# Construct quantum circuit
circ = QuantumCircuit(3, 3)
circ.h(0)
circ.cx(0, 1)
circ.cx(1, 2)
circ.measure([0, 1, 2], [0, 1, 2])
sim_ideal = AerSimulator()
# Execute and get counts
result = sim_ideal.run(transpile(circ, sim_ideal)).result()
counts = result.get_counts(0)
plot_histogram(counts, title='Ideal counts for 3-qubit GHZ state')
[3]:

Gerando um simulador que imita um dispositivo¶
Chamamos from_backend
para criar um simulador para o ibmq_vigo
:
[4]:
sim_vigo = AerSimulator.from_backend(device_backend)
Ao armazenar as propriedades do dispositivo em vigo_simulator
, garantimos que as portas base apropriadas e o mapa de acoplamento sejam utilizados ao compilar circuitos para simulação, imitando, assim, mais proximamente as portas que serão executadas em um dispositivo real. Além disso, o vigo_simulator
contém um modelo de ruído aproximado que consiste de:
Erros de portas de um único qubit consistindo de um erro de despolarização de um único qubit, seguido de um erro de relaxação térmica de um único qubit.
Erros de portas de dois qubits consistindo de um erro de despolarização de dois qubits, seguido de um erro de relaxação térmica de um único qubit, em ambos os qubits na porta.
Erros de leitura de um único qubit sobre o valor clássico do bit obtido, a partir de medições em qubits individuais.
Para os erros de porta, o parâmetro de erro dos erros de relaxação térmica é derivado usando a função thermal_relaxation_error
, do módulo aer.noise.errors
, juntamente com os parâmetros de qubit individual \(T_1\) e \(T_2\), e o parâmetro gate_time
das propriedades do backend do dispositivo. A probabilidade do erro de despolarização é, então, configurada de modo que a infidelidade média de porta combinada do erro de despolarização seguido do relaxamento térmico, seja igual ao valor gate_error
das propriedades do backend.
Para os erros de leitura, a probabilidade de que o valor do bit clássico gravado será o inverso do resultado verdadeiro, após uma medição, é dada pelo readout_errors
do qubit.
Executar uma simulação de ruído¶
Uma vez criado um serviço simulador de ruído baseado em um dispositivo real, podemos usá-lo para executar simulações com ruídos.
Importante: Quando se executa simulações com ruído é essencial transpilar``o circuito para o serviço, ou seja, o circuito deve ser ``transpilado
para a porta base de ruído correta, configurando-a no serviço.
[5]:
# Transpile the circuit for the noisy basis gates
tcirc = transpile(circ, sim_vigo)
# Execute noisy simulation and get counts
result_noise = sim_vigo.run(tcirc).result()
counts_noise = result_noise.get_counts(0)
plot_histogram(counts_noise,
title="Counts for 3-qubit GHZ state with device noise model")
[5]:

Se a transpilação for ignorada, o modelo de ruído do dispositivo não será aplicado mesmo nas portas que são suportadas pelo simulador, pois as mesmas não são suportadas pelo serviço imitado (adaptado).
[6]:
import qiskit.tools.jupyter
%qiskit_version_table
%qiskit_copyright
Version Information
Qiskit Software | Version |
---|---|
Qiskit | 0.25.0 |
Terra | 0.17.0 |
Aer | 0.8.0 |
Ignis | 0.6.0 |
Aqua | 0.9.0 |
IBM Q Provider | 0.12.2 |
System information | |
Python | 3.7.7 (default, May 6 2020, 04:59:01) [Clang 4.0.1 (tags/RELEASE_401/final)] |
OS | Darwin |
CPUs | 6 |
Memory (Gb) | 32.0 |
Fri Apr 02 12:01:10 2021 EDT |
This code is a part of Qiskit
© Copyright IBM 2017, 2021.
This code is licensed under the Apache License, Version 2.0. You may
obtain a copy of this license in the LICENSE.txt file in the root directory
of this source tree or at http://www.apache.org/licenses/LICENSE-2.0.
Any modifications or derivative works of this code must retain this
copyright notice, and modified files need to carry a notice indicating
that they have been altered from the originals.
[ ]: