Ver detalhes do backend
O código nesta página foi desenvolvido utilizando os seguintes requisitos. Recomendamos usar essas versões ou mais recentes.
qiskit-ibm-runtime~=0.47.0
Esta página explica como encontrar informações sobre seus back-ends disponíveis.
Listar ou filtrar backends
Lista de back-ends disponíveis para você
Você pode usar o Qiskit ou IBM Quantum Platform para visualizar uma lista de backends disponíveis ou para pesquisar um backend específico.
As QPUs hospedadas em IBM Cloud® têm nomes que começam com ibm_*. Todas as QPUs recebem o nome de uma cidade - por exemplo, ibm_kingston. Este nome não indica onde o QPU real está hospedado.
Use o QiskitRuntimeService.backends() método, conforme mostrado no próximo bloco de código. Este método retorna uma lista de IBMBackend instâncias.
Para executar o código a seguir, certifique-se de que você já tenha se autenticado no serviço. Consulte Configurar sua conta do IBM Cloud para obter mais detalhes.
# Initialize your account
from qiskit_ibm_runtime import QiskitRuntimeService
service = QiskitRuntimeService()
service.backends()Output:
[<IBMBackend('ibm_pittsburgh')>,
<IBMBackend('ibm_boston')>,
<IBMBackend('ibm_fez')>,
<IBMBackend('ibm_miami')>,
<IBMBackend('ibm_marrakesh')>,
<IBMBackend('ibm_kingston')>]
Para procurar um backend específico, use o QiskitRuntimeService.backend() método (observe que este é singular: backend ), que recebe o nome do backend como parâmetro de entrada e retorna uma IBMBackend instância representando esse backend específico:
service.backend("ibm_fez")Output:
<IBMBackend('ibm_fez')>
Para visualizar os back-ends aos quais você tem acesso, navegue até a lista de back-ends na página Recursos de computação (observe que a região selecionada pode afetar as QPUs listadas). Clique no ícone do filtro e escolha “Todas as minhas instâncias” ou um nome de instância específico para ver as QPUs disponíveis.
Se você estiver conectado a uma instância ou região específica, ou se tiver inicializado o serviço com uma instância ou região específica usando QiskitRuntimeService(), apenas os back-ends disponíveis para você nessa instância ou região serão retornados.
Back-ends de filtro
Você pode filtrar os backends disponíveis por sua configuração ou status. Para filtros mais gerais, defina o filters argumento como uma função que aceite um objeto backend e retorne True se ele atender aos seus critérios. Consulte a documentação da API para obter mais detalhes.
O código a seguir retorna apenas back-ends que atendem a esses critérios e estão disponíveis para você na instância selecionada atualmente :
- São dispositivos quânticos reais (
simulator=False) - Estão atualmente em funcionamento (
operational=True) - Tenha pelo menos cem qubits (
min_num_qubits=100)
# Optionally pass in an instance, region, or both, to
# further filter the backends.
service = QiskitRuntimeService()
service.backends(simulator=False, operational=True, min_num_qubits=100)Output:
[<IBMBackend('ibm_pittsburgh')>,
<IBMBackend('ibm_boston')>,
<IBMBackend('ibm_fez')>,
<IBMBackend('ibm_miami')>,
<IBMBackend('ibm_marrakesh')>,
<IBMBackend('ibm_kingston')>]
Um método semelhante é QiskitRuntimeService.least_busy(), que utiliza os mesmos filtros que, backends() mas retorna o backend que corresponde aos filtros e tem o menor número de tarefas pendentes na fila:
service.least_busy(operational=True, min_num_qubits=100)Output:
<IBMBackend('ibm_marrakesh')>
Para visualizar os back-ends aos quais você tem acesso, consulte a tabela na página Recursos de computação. Clique no ícone do filtro para ver as opções de filtro. Você pode filtrar por tipo e status do processador. Observe também que você pode classificar a tabela por qualquer coluna passando o mouse sobre o título da coluna e clicando nas setas que aparecem.
Informações estáticas do backend
Algumas informações sobre um backend não mudam regularmente, como seu nome, versão, número de qubits, tipo de processador (o nome da família de pássaros, que indica a topologia e a contagem aproximada de qubits) e os tipos de recursos que ele suporta. Essas informações estão disponíveis como atributos do objeto backend . Para obter uma lista completa de atributos, consulte a IBMBackend documentação da API. Encontre mais informações sobre controle de versão na seção Controle de versão do QPU abaixo.
A região de um backend (a localização do centro de dados onde seus dados e experimentos serão hospedados e processados) está listada em seu cartão de informações detalhadas na página Recursos de computação em IBM Quantum Platform.
backend = service.backend("ibm_fez")
print(
f"Name: {backend.name}\n"
f"Version: {backend.backend_version}\n"
f"No. of programmable qubits: {backend.num_qubits}\n"
f"Processor type: {backend.processor_type}\n"
)Output:
Name: ibm_fez
Version: 1.3.37
No. of programmable qubits: 156
Processor type: {'family': 'Heron', 'revision': '2'}
Navegue até a página Recursos de computação para visualizar uma tabela com todas as QPUs e clique no nome de qualquer QPU para abrir seu cartão de informações detalhadas. Encontre informações de back-end na seção Detalhes do cartão.
Versões da QPU
Cada QPU possui um número de versão no formato X.Y.Z ( major.minor.revision ). Um circuito compilado para um determinado número de versão tem garantia de execução nessa QPU. Se o número da revisão mudar, o circuito continuará a funcionar. Se o número principal ou secundário mudar, não há garantia de que o circuito funcione, embora possa funcionar.
O número da versão de revisão será incrementado para correções que não afetem o circuito compilado existente.
O exemplo de código apresentado anteriormente nesta seção demonstra como encontrar a versão de um backend. Em IBM Quantum Platform, você pode visualizar a versão no cartão de informações detalhadas de uma QPU (clique no nome da QPU na tabela Recursos de computação para abrir o cartão).
As condições sob as quais um número de versão ou revisão pode ser alterado estão listadas na tabela a seguir.
Versão principal | Versão secundária | Versão revisada |
|---|---|---|
| Alterações na amostra | Ciclos de aquecimento/desaquecimento | Atualizações de software da QPU |
| Grandes mudanças na eletrônica de controle | Trocar alguns componentes eletrônicos, se a substituição afetar significativamente o funcionamento | Calibrações manuais para melhorar a fidelidade |
| Mudança da QPU para um novo local, se houver mudanças significativas no comportamento | Desativar um portão por algum tempo devido a problemas de calibração, e as correções não podem ser feitas facilmente no software | Pequenas alterações eletrônicas que não afetam o funcionamento |
| Alterando a direção de uma porta CNOT |
Instruções suportadas
Cada família de processadores suporta nativamente um conjunto limitado de instruções. Este conjunto inclui portas de um e dois qubits, bem como operações não unitárias, tais como medição e reinicialização. Cada porta do circuito deve ser traduzida (pelo transpiler) para os elementos do conjunto de instruções suportadas por uma QPU antes de poder ser executada na QPU.
Você pode visualizar os conjuntos de instruções suportados para uma QPU com o Qiskit. A página Recursos de computação do IBM Quantum Platform lista apenas os portões unitários (portões básicos) suportados por uma QPU.
from qiskit_ibm_runtime import QiskitRuntimeService
service = QiskitRuntimeService()
backend = service.backend("ibm_kingston")
print(f"Backend: {backend.name}")
print(f" Processor type: {backend.processor_type}")
print(f" Supported instructions: {backend.supported_instructions}")Output:
Backend: ibm_kingston
Processor type: {'family': 'Heron', 'revision': '2'}
Supported instructions: ['cz', 'id', 'delay', 'measure', 'measure_2', 'reset', 'rz', 'sx', 'x', 'if_else', 'store']
Navegue até a página Recursos de computação para visualizar uma tabela com todas as QPUs e clique no nome de qualquer QPU para abrir seu cartão de informações detalhadas. Os portões básicos para essa QPU estão listados na seção Detalhes.
Tabela de instruções suportadas
Categoria de operação | Nome |
|---|---|
| Portas de qubit único | RZ, SX, X, ID, delay |
| Portas de dois qubits | CZ, ECR |
| Portas fracionárias | RX (qubit único), RZZ (dois qubits) |
| Instruções não unitárias | measure, reset, measure_*, delay |
| Fluxo de Controle | if_else (alimentação direta clássica) |
Informações dinâmicas do backend
Os backends também possuem propriedades que mudam sempre que o backend é calibrado, como a vida útil do qubit e as taxas de erro de operação. As propriedades do backend são atualizadas após a conclusão da sequência de calibração. Essas propriedades podem ser usadas na otimização de circuitos quânticos ou na construção de modelos de ruído para um simulador clássico. Consulte o guia de tarefas de calibração para obter mais informações.
Em IBM Quantum Platform, você pode baixar os dados de calibração como um arquivo CSV. Clique em uma QPU na página Recursos de computação para visualizar seu cartão de informações detalhadas e, em seguida, clique no ícone de download no canto superior direito da seção Dados de calibração.
Você pode recuperar dados históricos de propriedades de backend no Qiskit com o seguinte código:
backend.properties(datetime=<datetime>)Propriedades do qubit
Ir para a lista de propriedades do qubit
backend.properties().qubit_property() retorna informações sobre os atributos físicos dos qubits. Ele contém um dicionário com várias propriedades do qubit, cada uma emparelhada com seu valor e o carimbo de data/hora da última calibração.
Os exemplos de código a seguir demonstram como listar todas as propriedades ou recuperar propriedades específicas de um qubit específico.
# fundamental physical properties of qubit 1
backend = service.backend("ibm_fez")
backend.qubit_properties(1)Output:
QubitProperties(t1=0.00023525336833619243, t2=0.0002320821005698974, frequency=None)
# Retrieve qubit properties
qubit_index = 126 # Replace with your qubit index
qubit_props = backend.properties().qubit_property(qubit_index)
# Access specific properties
t1 = qubit_props.get("T1", (None,))[0]
t2 = qubit_props.get("T2", (None,))[0]
readout_error = qubit_props.get("readout_error", (None,))[0]
prob_meas0_prep1 = qubit_props.get("prob_meas0_prep1", (None,))[0]
prob_meas1_prep0 = qubit_props.get("prob_meas1_prep0", (None,))[0]
readout_length = qubit_props.get("readout_length", (None,))[0]
print(f"Qubit {qubit_index} Properties:")
print(f" T1: {t1} seconds")
print(f" T2: {t2} seconds")
print(f" Readout Error: {readout_error}")
print(f" P(0 | 1): {prob_meas0_prep1}")
print(f" P(1 | 0): {prob_meas1_prep0}")
print(f" Readout Length: {readout_length} seconds")Output:
Qubit 126 Properties:
T1: 9.634806748588717e-05 seconds
T2: 8.579257084098977e-05 seconds
Readout Error: 0.050048828125
P(0 | 1): 0.0751953125
P(1 | 0): 0.02490234375
Readout Length: 1.7e-06 seconds
Ver propriedades do qubit
O tempo de decaimento ( ) representa a duração média que um qubit permanece em seu estado excitado ( ) antes de decair para seu estado fundamental ( ) devido ao relaxamento de energia. Este parâmetro é usado para caracterizar o comportamento de relaxamento energético do qubit e é expresso em unidades de segundos (s).
Visualizar com Qiskitbackend.properties().t1(<qubit>)Ver em IBM Quantum PlatformSeção de dados de calibração, menu suspenso Qubit; encontre o valor mediano de na seção Detalhes O tempo de coesão ( ) denota a escala de tempo durante a qual um qubit mantém a coerência de fase de uma superposição entre os estados e . Ele leva em consideração tanto o relaxamento energético quanto os processos de desfasamento puro, fornecendo informações sobre as propriedades de coerência do qubit. A análise de espectro de fase ( ) é relatada a partir de uma sequência de eco de Hahn.
Visualizar com Qiskitbackend.properties().t2(<qubit>)Ver em IBM Quantum PlatformSeção de dados de calibração, menu suspenso Qubit; encontre o valor mediano de na seção Detalhes
Propriedades da instrução
Ir para a lista de propriedades de instrução
O backend.target atributo é um qiskit.transpiler.Target objeto: um objeto que contém todas as informações necessárias para transpilá-lo para esse backend. Isso inclui erros de instrução e durações. Por exemplo, a célula a seguir obtém as propriedades para um cz portão atuando entre os qubits 1 e 0.
backend.target["cz"][(1, 0)]Output:
InstructionProperties(duration=6.8e-08, error=0.008303008840692683)
A célula a seguir mostra as propriedades de uma operação de medição (incluindo o erro de leitura) no qubit 0.
backend.target["measure"][(0,)]Output:
InstructionProperties(duration=1.7e-06, error=0.0302734375)
Exibir propriedades da instrução
Este parâmetro indica a probabilidade de medir um qubit no estado 0 quando se pretendia prepará-lo no estado , denotado como . Ele reflete erros na preparação e medição do estado (SPAM), particularmente erros de medição em qubits supercondutores.
Visualizar com Qiskitbackend.properties().qubit_property(<qubit>, 'prob_meas0_prep1')Ver em IBM Quantum PlatformSeção de dados de calibração, menu suspenso Qubit Da mesma forma, este parâmetro representa a probabilidade de medir um qubit no estado 1 quando se pretendia prepará-lo no estado , denotado como . Tal como
prob_meas0_prep1, reflete erros SPAM, sendo os erros de medição o principal contribuinte nos qubits supercondutores.Visualizar com Qiskitbackend.properties().qubit_property(<qubit>, 'prob_meas0_prep0')Ver em IBM Quantum PlatformSeção de dados de calibração, menu suspenso Qubit O erro de dois qubits por borda do mesmo lote de medições usado para calcular o erro mediano 2Q. 2Q erro (melhor) refere-se ao menor erro de dois qubits em qualquer borda do dispositivo, também a partir deste lote de medições.
Visualizar com Qiskitbackend.target['<instruction>'][<qubit 1>, <qubit 2>]Ver em IBM Quantum PlatformSeção de calibração: passe o mouse sobre a conexão do qubit na visualização do mapa ou encontre o valor na visualização da tabela na coluna CZ error (Heron e Nighthawk) ou ECR error (Eagle); encontre o valor para o erro de 2Q (melhor) na seção Detalhes Fidelidade média da porta da operação de dois qubits a partir de benchmarking aleatório. Medido em “isolamento”: lotes com uma separação mínima de dois qubits entre as bordas. Esta comparação aleatória utiliza camadas alternadas de Cliffords de qubit único e portas de dois qubits e, portanto, o valor final do erro de 2Q inclui o erro da camada de Cliffords de qubit único.
Calcule com o QiskitSiga o exemplo neste notebook da Comunidade Qiskit GitHub Ver em IBM Quantum PlatformSeção Detalhes; também encontre dados por borda na seção Dados de calibração Erro médio por porta em camadas (EPLG) em uma cadeia de 100 qubits. A EPLG média mede o erro médio de porta em uma cadeia em camadas de qubits de ( =100 aqui). É derivado de uma quantidade semelhante conhecida como fidelidade de camada (LF), em que EPLG = 4/5(1-LF ) e a fidelidade de camada é a fidelidade do processo da cadeia em camadas de qubits . Para obter detalhes, consulte o artigo Benchmarking quantum processor performance at scale (Avaliação comparativa do desempenho do processador quântico em escala). Observe que, no artigo, o EPLG é definido para erros de processo, mas, para manter a consistência com os erros de porta relatados individualmente, aqui ele é citado para o erro médio de porta, daí o fator de 4/5.
Em IBM Quantum Platform, o cartão de informações detalhadas para cada QPU tem uma seção chamada Erro de porta de dois qubits (em camadas), que fornece uma visão ampliada do valor mais baixo
two-qubit gate error (layered)medido em função do número de qubits na cadeia. O valor final, com comprimento de cadeia 100, é o valor apresentado na seção Detalhes. Na prática, são medidas seis cadeias de 100 qubits (pré-selecionadas com base no desempenho ideal esperado), e o valor relatado para o número de qubitsNé o menor erro encontrado em uma cadeia deNcomprimento de subconjunto que pesquisa as seis cadeias de 100 qubits.Calcule com o QiskitSiga o exemplo neste notebook da Comunidade Qiskit GitHub Ver em IBM Quantum PlatformSeção Detalhes e uma visualização ampliada na seção Erro de porta de dois qubits (em camadas) Erro no portão RZZ calculado com base na média dos ângulos RZZ utilizando uma variante de benchmarking aleatório para unitários arbitrários.
Visualizar com QiskitImportante: Certifique-se de ter definido use_fractional_gates=Trueao carregar o backend, então você poderá usarbackend.target['rzz'][<qubit 1>, <qubit 2>]Ver em IBM Quantum PlatformSeção de calibração: Selecione RZZ no menu suspenso Conexão e passe o mouse sobre a conexão do qubit na visualização Mapa. Você também pode selecionar o erro RZZ no menu suspenso Saída do gráfico na visualização Gráfico ou encontrar o valor na visualização Tabela, na coluna Erro RZZ Erro nas portas discretas de um qubit de duração finita, medido a partir de benchmarking aleatório. A sequência de benchmarking aleatória inclui portas SX, ID e X, e presume-se que seus erros sejam os mesmos. O portão ID é um atraso de duração igual à duração dos portões √X e X. O portão RX também tem a mesma duração que os portões √X e X com amplitude variável e, portanto, é relatado como tendo o mesmo erro que esses portões.
Visualizar com Qiskitbackend.target['<instruction>'][<qubit 1>,]Ver em IBM Quantum PlatformSeção de calibração: menu suspenso Qubit Fidelidade média do portão √X (SX) a partir de benchmarking aleatório, medida simultaneamente em todos os qubits. A sequência de benchmarking aleatória inclui portas SX, ID e X, e presume-se que seus erros sejam os mesmos.
Ver em IBM Quantum PlatformSeção de detalhes Erro no portão virtual RZ. Relatado como todo 0, uma vez que são executados no software.
Visualizar com Qiskitbackend.target['<instruction>'][<qubit 1>,]Ver em IBM Quantum PlatformSeção de calibração: Menu suspenso de conexão O erro de leitura quantifica a probabilidade média de medir incorretamente o estado de um qubit. É comumente calculado como a média de
prob_meas0_prep1eprob_meas1_prep0, fornecendo uma única métrica para a fidelidade da medição.Visualizar com Qiskitbackend.properties().readout_error(<qubit>)Ver em IBM Quantum PlatformSeção de dados de calibração, menu suspenso Qubit Precisão da operação de leitura. O erro de leitura é medido preparando o qubit no estado 0 (1) e medindo a probabilidade de uma saída no estado 1 (0). O valor relatado é a média desses dois erros. A mediana é calculada para todos os qubits.
Ver em IBM Quantum PlatformSeção de dados de calibração, seção Detalhes Duração de uma operação de porta de qubit único. Observe que os valores apresentados em IBM Quantum Platform estão em nanossegundos. Os valores retornados no Qiskit são em segundos.
Visualizar com Qiskitbackend.target['<instruction>'][<qubit 1>,].durationVer em IBM Quantum PlatformSeção de calibração: menu suspenso Qubit Duração da operação da porta de dois qubits. Observe que os valores apresentados em IBM Quantum Platform estão em nanossegundos. Os valores retornados no Qiskit são em segundos.
Visualizar com Qiskitbackend.target['<instruction>'][<qubit 1>, <qubit 2>].durationVer em IBM Quantum PlatformSeção de calibração: menu suspenso Qubit O comprimento da leitura especifica a duração da operação de leitura para um qubit. Ele mede o tempo desde o início do pulso de medição até a conclusão da digitalização do sinal, após o qual o sistema fica pronto para a próxima operação. Compreender esse parâmetro é fundamental para otimizar a execução do circuito, especialmente ao incorporar medições no meio do circuito.
Visualizar com Qiskit- Para
measure:backend.properties().readout_length(<qubit>) - Para
measure_2:backend.target['measure_2'][<qubit 1>,].duration
Ver em IBM Quantum PlatformSeção de dados de calibração, menu suspenso Qubit - Para
Propriedades adicionais
O número máximo de circuitos por segundo (MCPS) inclui a medição, o reset e a reinicialização de um circuito com uma porta de Hadamard e uma única medição.
Visualizar com Qiskitmcps = backend.configuration().mcpsVer em IBM Quantum PlatformSeção de detalhes Operações de camada de circuito por segundo (CLOPS) é uma medida de quantas camadas de um circuito 100x100 (circuito com reconhecimento de hardware) uma QPU pode executar por unidade de tempo.
Calcule com o QiskitEncontre o código CLOPS na Comunidade Qiskit GitHub Ver em IBM Quantum PlatformSeção de detalhes Com
BackendStatus, você pode encontrar o status da QPU (por exemplo,Active,Paused,Offline) bem como o número de tarefas pendentes.Visualizar com Qiskitprint(backend.status().status_msg),print(backend.status().pending_jobs)Ver em IBM Quantum PlatformSeção de detalhes Um diagrama que indica os pares de qubits que suportam operações de porta de dois qubits entre eles. Isso também é chamado de mapa de acoplamento ou conectividade. Os qubits são representados como círculos e as operações de porta de dois qubits suportadas são exibidas como linhas conectando os qubits.
Visualizar com Qiskitfrom qiskit.visualization import plot_gate_mapentãoplot_gate_map(backend)Ver em IBM Quantum PlatformSeção de dados de calibração; clique em Expandir para ampliar a imagem
Se a avaliação comparativa de um qubit ou borda não for bem-sucedida ao longo de vários dias, seja devido à baixa qualidade dos dados ou a outros fatores internos, o valor de erro relatado é considerado obsoleto e será relatado como 1. Isso não significa necessariamente que o qubit ou a borda não estejam funcionando ou que o erro seja 1; em vez disso, o erro é considerado indefinido e você deve proceder com cautela ao operar esse qubit ou porta.
Próximas etapas
- Aprenda a construir modelos de ruído para realizar simulações clássicas ruidosas.
- Consulte o tópico Etapas do transpiler para saber como o transpiler usa propriedades de back-end para otimização de circuitos.
- Consulte a referência da API de back-end do QiskitRuntime.