Referência da API do QESEM da Qedma
Qiskit Functions — ferramentas pré-configuradas criadas por organizações parceiras — abstraem partes do fluxo de trabalho de desenvolvimento de software para simplificar e acelerar a descoberta de algoritmos e o desenvolvimento de aplicativos em escala de serviços públicos. Clique para ver o guia desta função do Qiskit.
Guia de funções do QESEM Qiskit
Entradas
pubs
Tipo: EstimatorPubLike
Esta é a entrada principal. O Pub contém de 2 a 4 elementos: um circuito, uma ou mais grandezas observáveis, 0 ou um único conjunto de valores de parâmetros e uma precisão opcional. Se não for especificada uma precisão, será utilizada a default_precision do options .
A precisão PUB pode ser um valor float ou um dicionário. Um número de tipo float define a precisão alvo para os valores esperados retornados. Um dicionário mapeia fatores de escala de ruído para precisões-alvo e solicita resultados do Ajuste Quase-Probabilístico de Erro (QET) nas escalas especificadas.
O QESEM também retornará fatores de escala complementares próximos a 1.0; a precisão alvo é garantida apenas para os fatores de escala solicitados.
- Necessário: sim
- Exemplo:
[(circuit, [obs1,obs2,obs3], parameter_values, 0.03)] - Exemplo de QET:
[(circuit, [obs1, obs2], None, {0.5: 0.15, 1.3: 0.2})]
backend_name
Tipo: `str`
Valor Padrão: QESEM will get least busy device reported by IBM
Nome do backend a ser utilizado
- Obrigatório: Não
- Exemplo:
"ibm_fez"
instance
Tipo: `str`
O nome do recurso na nuvem da instância a ser usado nesse formato
- Obrigatório: Não
- Exemplo:
"CRN"
Opções
Tipo: `dict`
As opções de entrada para esta função são especificadas como um dicionário aninhado. Veja a lista completa de opções e seus valores padrão.
- Obrigatório: Não
- Exemplo:
{ "default_precision": 0.03, "max_execution_time": 3600, "transpilation_level": "standard"}
Lista de opções
estimate_time_only
Valor Padrão: None
Este sinalizador permite que os usuários obtenham uma estimativa do tempo de QPU necessário para executar o circuito com o QESEM.
- Quando definido como “Nenhum”, o circuito será executado com o QESEM.
- Se definido como
"analytical", é calculado um limite superior do tempo de QPU sem consumir nenhuma capacidade da QPU. Essa estimativa tem uma resolução de 30 minutos (por exemplo, 30 minutos, 60 minutos, 90 minutos e assim por diante). É tipicamente pessimista e só pode ser obtida para observáveis de Pauli isolados ou somas de observáveis de Pauli cujos conjuntos de apoio não se intersectam (por exemplo, Z0+Z1 ). É útil principalmente para comparar os níveis de complexidade de diferentes parâmetros fornecidos pelo usuário (circuito, precisão e assim por diante). - Para obter uma estimativa mais precisa do tempo de QPU, defina este sinalizador como
"empirical". Embora essa opção exija a execução de um número reduzido de circuitos, ela oferece uma estimativa do tempo de QPU significativamente mais precisa. Essa estimativa tem uma resolução de 5 minutos (por exemplo, 20 minutos, 25 minutos, 30 minutos e assim por diante). O usuário pode optar por executar a estimativa empírica de tempo no modo em lote ou no modo de sessão. Para mais detalhes, consulte aexecution_modedescrição. Por exemplo, no modo em lote, a estimativa empírica do tempo consumirá menos de 10 minutos de tempo de QPU. - Opções:
"analytical"/"empirical"/ Nenhuma
default_precision
Valor Padrão: 0.02
Será aplicado aos pubs que não tiverem precisão. A precisão representa o erro aceitável nos valores esperados das grandezas observáveis, expresso em valor absoluto. Mais especificamente, o tempo de execução da QPU para a mitigação será determinado de forma a fornecer valores de saída para todas as variáveis observáveis de interesse que se enquadrem em um intervalo de confiança de 1 e da precisão alvo. Se forem fornecidas várias variáveis observáveis, a mitigação será executada até que a precisão alvo seja alcançada para cada uma das variáveis observáveis de entrada.
- Opções: 0 < float
max_execution_time
Valor Padrão: 3,600 (one hour)
Permite limitar o tempo de uso da QPU, especificado em segundos, para todo o processo do QESEM. O valor padrão é 3.600 segundos (uma hora).
Como o tempo final de QPU necessário para atingir a precisão alvo é determinado dinamicamente durante o trabalho do QESEM, esse parâmetro permite limitar o custo do experimento. Se o tempo de QPU determinado dinamicamente for menor do que o tempo alocado pelo usuário, esse parâmetro não afetará o experimento. O max_execution_time parâmetro é particularmente útil nos casos em que a estimativa do tempo de análise fornecida pelo QESEM antes do início do trabalho é excessivamente conservadora e o usuário deseja, mesmo assim, iniciar um trabalho de mitigação. Após o término do prazo, o QESEM deixa de enviar novos circuitos. Os circuitos que já foram enviados continuam sendo executados (portanto, o tempo total pode ultrapassar o limite em até 30 minutos), e o usuário recebe os resultados processados dos circuitos executados até aquele momento. Caso deseje aplicar um limite de tempo do QPU inferior à estimativa de tempo analítico, consulte a Qedma para obter uma estimativa da precisão que pode ser alcançada dentro desse limite de tempo.
- Opções: 0 ≤ número inteiro ≤ 28.800 (8 horas)
transpilation_level
Valor Padrão: standard
Depois que um circuito é enviado ao QESEM, ele prepara automaticamente várias transpilacões alternativas do circuito e escolhe aquela que minimiza o tempo de processamento da QPU. Por exemplo, implementações alternativas poderiam utilizar portas RZZ fracionárias otimizadas por Qedma para reduzir a profundidade do circuito. É claro que todas as transpilacões são equivalentes ao circuito de entrada, em termos de sua saída ideal. Para exercer maior controle sobre a transpilagem do circuito, defina o nível de transpilagem no arquivo options. Embora "transpilation_level": "standard" corresponda ao comportamento padrão descrito acima, "transpilation_level": "minimal_with_layout_opt" inclui apenas as modificações mínimas necessárias no circuito original; por exemplo, o mapeamento do circuito para o gráfico de conectividade do dispositivo. Observe que, em qualquer caso, é aplicado o mapeamento automático de hardware para qubits de alta fidelidade.
transpilation_level | Descrição |
|---|---|
| "padrão" | Transpilagem padrão do QESEM. Prepara várias compilações alternativas e escolhe aquela que minimiza o tempo de processamento da CPU. As barreiras podem ser modificadas na etapa de estratificação. |
| "minimal_with_layout_opt" | Transpilacão mínima: o circuito mitigado será estruturalmente muito semelhante ao circuito de entrada. Os circuitos fornecidos neste nível devem ser compatíveis com o conjunto de portas de base do dispositivo; portanto, você deve transpilá-los separadamente para o conjunto de portas de base do dispositivo. Por exemplo: CX, Rzz(α) e portas padrão de um único qubit (U, x, sx, rz e assim por diante). As barreiras serão respeitadas na etapa de estratificação. |
Para trabalhos que contenham múltiplos PUBs de entrada ou múltiplas instâncias de circuitos vinculadas a parâmetros, use "minimal_with_layout_opt".
- Opções: “minimal_with_layout_opt” / “standard”
execution_mode
Valor Padrão: batch
O usuário pode optar por executar o trabalho do QESEM em uma sessão dedicada do IBM ou em vários lotes do IBM :
-
Modo de sessão : As sessões são mais caras, mas proporcionam resultados mais rápidos. Assim que a sessão começa, a QPU fica reservada exclusivamente para o trabalho do QESEM. O cálculo do tempo de execução inclui tanto o tempo gasto na execução do QPU quanto os cálculos clássicos associados (realizados pelo QESEM e pelo IBM ). A função QESEM Qiskit se encarrega de criar e encerrar a sessão automaticamente. Para usuários com acesso ilimitado a QPUs (por exemplo, em instalações locais), recomenda-se usar o modo de sessão para uma execução mais rápida do QESEM.
-
Modo em lote : No modo em lote, a QPU fica livre durante os cálculos clássicos, o que resulta em menor utilização da QPU. Como os trabalhos em lote geralmente se estendem por um período mais longo, há um risco maior de desvios de hardware; o QESEM incorpora medidas para detectar e compensar esses desvios, mantendo a confiabilidade durante execuções prolongadas.
-
Opções:
"session"/"batch"
parallel_execution
Valor Padrão: True
Esse sinalizador permite que o usuário execute o circuito de entrada em paralelo na QPU. O QESEM verifica se outros patches na QPU apresentam fidelidade suficiente. Se esses patches reduzirem o tempo de processamento da QPU, o QESEM executa o circuito de entrada nesses patches em paralelo. Os resultados dos patches são combinados por meio da ponderação pela variância inversa.
-
Exemplo: Um usuário deseja executar um circuito de 8 qubits em
ibm_marrakesh, um dispositivo de 156 qubits, comparallel_execution=True. O QESEM cria nove cópias do circuito transpilado, cada uma mapeada para um patch distinto de 8 qubits no gráfico de conectividade do Marrakesh. Após a execução, o usuário recebe um único valor esperado e uma barra de erro para cada observável de entrada. -
Opções:
"False"/"True"
description
Valor Padrão: None
Descrição opcional a ser anexada ao trabalho no QESEM.
A estimativa de tempo da QPU varia de um backend para outro. Portanto, ao executar a função QESEM, certifique-se de executá-la no mesmo backend que foi selecionado ao obter a estimativa de tempo da QPU.
O QESEM encerrará sua execução quando atingir a precisão desejada ou quando atingir max_execution_time, o que ocorrer primeiro.
As operações de barreira são normalmente utilizadas para especificar as camadas das portas de dois qubits em circuitos quânticos. "minimal_with_layout_opt"Com o QESEM, as camadas especificadas pelas barreiras são preservadas. Com "standard", as camadas especificadas pelas barreiras são consideradas como uma alternativa de transpilação ao minimizar o tempo de execução na QPU.
Saídas
A saída da função QESEM é um PrimitiveResult, que contém um PubResult por entrada PUB, além de metadados no nível do trabalho.
Cada um deles PubResult pode ser acessado por meio da PrimitiveResult indexação e contém um campo data e um metadata campo.
-
O
datacampo contém, no mínimo, uma matriz de valores esperados (PubResult.data.evs) e uma matriz de erros-padrão (PubResult.data.stds). Ele também pode conter mais dados, dependendo das opções utilizadas. -
O
metadatacampo contém metadados do nível PUB (PubResult.metadata), incluindo os resultados detalhados do QESEM e as métricas de execução.
Os campos comuns PubResult.metadata incluem:
Campo | Descrição |
|---|---|
results | Resultados do QESEM por circuito e por observável. |
noisy_results | Valores esperados não corrigidos e barras de erro, quando disponíveis. |
transpiled_circs | Informações sobre o circuito transpilado, incluindo mapeamentos de qubits e o número de bases de medição. |
total_qpu_time | Tempo de CPU utilizado pelo trabalho. |
gate_fidelities | Fidelidades de porta medidas durante o experimento. |
total_shots | Número total de fotos utilizadas pelo trabalho. |
mitigation_shots | Número de disparos utilizados para mitigação. |
resource_usage | Discriminação do uso de recursos para o trabalho. |
Os detalhes do QESEM por observável são armazenados em metadata["results"]. Os resultados são agrupados primeiro por instância do circuito e, em seguida, por observável.
Cada entrada observável pode incluir o resultado do QESEM (qesem), o resultado não mitigado (unmitigated), os resultados de escalonamento de ruído (noise_scaling) e os resultados heurísticos do QESEM (qesem_heuristic).