Notas de versão do Qiskit 0.42
0.42.1
Terra 0.23.3
Prelúdio
O Qiskit Terra 0.23.3 é uma versão com pequenas correções de bugs.
Correções de bugs
-
Corrige um bug na passagem de transformação
Optimize1qGatesDecompositionem que a pontuação das substituições era calculada incorretamente quando os erros de gate eram zero. -
O método
ECRGate.inverse()agora retorna outra instânciaECRGateem vez de uma porta personalizada, já que é autoinverso. -
Recorte as probabilidades nos métodos
QuantumState.probabilities()eQuantumState.probabilities_dict()para o intervalo[0, 1]. Isso corrige erros de arredondamento em que as probabilidades poderiam, por exemplo, ser maiores que 1, levando a erros na emulação de disparo do amostrador. Corrigido #9761. -
Foi corrigido um bug no
BackendSamplerem que as cadeias de bits de probabilidade binária eram truncadas para o número mínimo de bits necessários para representar o maior resultado como inteiro. Isso significa que se, por exemplo{"0001": 1.0}foi medido, o resultado foi truncado para{"1": 1.0}. -
Foi corrigido um problema com o método
PassManagerConfig.from_backend()quando ele era usado com um backend de simulador baseado emBackendV1baseado em um backend de simulador. Para alguns back-ends de simuladores que não preenchiam alguns campos opcionais, o construtor dava erro. Corrigidos os números 9265 e 8546 -
Corrigido o
BackendSamplereBackendEstimatorpara ser executado com êxito com umbound_pass_managerpersonalizado. Anteriormente, a execução de circuitos únicos com umbound_pass_managergerava umValueErrorporque uma lista não era retornada em uma das etapas. -
A passagem do
GateDirectionnão rejeitará mais as portas que receberam calibrações explícitas, mas que não existem no mapa de acoplamento genérico ou no destino. -
Foi corrigido um problema com a classe
CommutationCheckerem que ela tentava alocar internamente uma matriz para qubits quando só precisava de uma matriz para representar qubits. Isso poderia causar uma quantidade excessiva de memória para portas largas, por exemplo, uma porta de 4 qubit exigiria 32 gigabytes em vez de 2 kilobytes. Corrigido #9197 -
A obtenção de uma calibração vazia de
InstructionPropertieslevanta AttributeError foi corrigido. Agora ele retornaNone. -
Corrigido
qasm()para que ele anexe;após a instruçãoreset. -
Os nomes de registros e parâmetros agora terão escape durante a exportação do OpenQASM 3 (
qasm3.dumps()) se eles ainda não forem identificadores válidos. Corrigido #9658. -
QPY (usando
qpy.load()) agora deserializará corretamente as instruçõesStatePreparationinstruções. Anteriormente, o QPY dava erro ao tentar carregar um arquivo que continha um. Corrigido #8297. -
Foi corrigido um bug em
random_circuit()com 64 ou mais qubits econditional=True, em que o circuito resultante poderia ter um valor digitado incorretamente em sua condição, causando uma variedade de falhas durante a transpilação ou outras operações de circuito. Corrigido #9649. -
Foi corrigido um problema com os métodos da classe
OneQubitEulerDecomposermétodos da classeangles()eangles_and_phase()apresentavam erro se a matriz de entrada fosse de um dtype diferente decomplex/np.cdouble. Em versões anteriores, isso funcionava bem, mas parou de funcionar no Qiskit Terra 0.23.0 quando os componentes internos doOneQubitEulerDecomposerforam reescritos em Rust. Corrigido #9827 -
Os portões Qiskit
CCZGate,CSGate,CSdgGatenão estão definidas emqelib1.ince, portanto, quando despejadas como OpenQASM 2.0, sua definição deve ser inserida no arquivo. Correções #9559, #9721 e #9722.
Aer 0.12.0
Nenhuma mudança
IBM 0.20.2
Nenhuma mudança
0.42.0
Terra 0.23.2
Nenhuma mudança
Aer 0.12.0
Prelúdio
Os destaques da versão do Qiskit Aer 0.12.0 são:
- Adição de um novo simulador de rede tensorial de GPU baseado em cuTensorNet
- Adicionada uma nova classe
AerDensityMatrixaoqiskit_aer.quantum_infomódulo- Melhorar consideravelmente o desempenho do tempo de execução das classes
AerSimulatoreQasmSimulator,StatevectorSimulatoreUnitarySimulator, convertendo diretamente os objetos de entrada em uma representação interna do C++, em vez de primeiro serializar o circuito para uma representação interna do C++QuantumCircuitpara uma representação interna do C++ em vez de primeiro serializar o circuito em um objetoQasmQobj. Essa melhoria será mais perceptível em circuitos com um pequeno número de qubits ou circuitos parametrizados usando o argumento da palavra-chaveparameter_binds.
Novos Recurso
-
Foi adicionado um novo método de classe
from_backend_properties()ao siteNoiseModel. Isso permite a construção de um novoNoiseModela partir de um objetoBackendProperties. Uma funcionalidade semelhante costumava estar presente no construtorNoiseModel.from_backend(), mas foi removida porque um objetoBackendPropertiessozinho não contém informações suficientes para criar um objetoNoiseModel. -
Adicionada uma nova classe,
AerDensityMatrix, ao móduloqiskit_aer.quantum_infomódulo. Essa classe é usada para fornecer a mesma interface para a classe upstreamDensityMatrixno Qiskit, mas com o suporte da simulação do Qiskit Aer. -
Foi adicionado um novo argumento de palavra-chave,
abelian_grouping, ao comandoEstimator. Esse argumento é usado para controlar se oEstimatoragrupará os observáveis de entrada em observáveis comutáveis de qubit-wise, o que reduz o número de execuções de circuito necessárias para calcular o valor esperado e melhora o desempenho do tempo de execução doEstimator. Por padrão, isso é definido comoTrue. -
AerStatetem um novo métodoinitialize_density_matrix()que define uma matriz de densidade paraAER::QV::DensityMatrix. Esse método será chamado emq.i.states.DensityMatrixpara inicializar seus dados comndarray.initialize_density_matrix()tem um argumento booleano que especifica a cópia ou o compartilhamento dos dados dendarray. Se os dados forem compartilhados com o C++ e o python, eles não deverão ser coletados no python enquanto o C++ os acessa. -
A sobrecarga para executar simulações com
run()(para todas as classes de back-end do simulador) foi bastante reduzida. Isso foi feito ao deixar de serializar internamente os objetosQuantumCircuitem objetosQasmQobje, em vez disso, o objetoQuantumCircuitdiretamente para uma estrutura de circuito C++ interna usada para simulação. Esse aprimoramento é mais perceptível em simulações de circuitos com um pequeno número de qubits ou circuitos parametrizados usando o argumento de palavra-chaveparameter_bindsderun(). Observe que a simulação de pulso (por meio do agora obsoletoPulseSimulator) e a simulação baseada em DASK ainda usam a serialização interna e não verão essa melhoria de desempenho. -
Foi adicionado um novo método ao
AerJob,circuits(), que retorna uma lista deQuantumCircuitobjetos. Esse método retornaNonese Qobj for usado para simulação. -
AerStateeAerStatevectoragora suportam a aplicação de operadoresKrausoperadores. EmAerStatevector, um dos operadores Kraus é aplicado aleatoriamente ao estado quântico com base nas probabilidades de erro. -
Adição de um novo método de simulação baseado nas APIs do NVIDIAcuTensorNet Do cuQuantum SDK. Isso fornece um simulador de rede tensorial geral acelerado por GPU que pode simular qualquer circuito quântico, traduzindo internamente o circuito em uma rede tensorial para realizar a simulação. Para usar esse método de simulação, defina
method="tensor_network"edevice="GPU"ao inicializar um objetoAerSimulator. Por exemplo:from qiskit_aer import AerSimulator tensor_net_sim = AerSimulator(method="tensor_network", device="GPU")Esse método suporta simulações de vetores de estado e matrizes de densidade. A simulação de ruído também pode ser feita com uma simulação de disparo único de matriz de densidade se não houver nenhuma operação
SaveStatevectorno circuito.Esse novo método de simulação também suporta a paralelização com várias GPUs e processos MPI usando a técnica de fatiamento de rede de tensores. No entanto, esse tipo de simulação provavelmente levará muito tempo se os circuitos de entrada forem complicados.
-
A variável de ambiente
BLA_VENDORagora pode ser especificada para usar uma biblioteca BLAS diferente ao criar o Qiskit Aer a partir da fonte. Por padrão, se isso não for especificado, OpenBLAS será usado por padrão. Se a biblioteca BLAS especificada em BLA_VENDOR` não puder ser encontrada, o processo de compilação do Cmake será interrompido.
Problemas Conhecidos
- Esta versão do Qiskit Aer não é compatível com a série de versões do Conan 2.X. Se você estiver criando o Qiskit Aer a partir da fonte manualmente, certifique-se de que esteja usando uma versão do Conan 1.x. A compatibilidade com versões mais recentes do Conan será corrigida em uma versão futura. Você pode consultar a edição nº 1730 para obter mais detalhes.
Notas da Atualização
-
O comportamento padrão da primitiva
Estimatoragora agrupará o observável de entrada em observáveis comutáveis em termos de qubit. O agrupamento reduz o número de circuitos a serem executados e melhora o desempenho. Se você desejar o comportamento anterior, poderá inicializar sua instânciaEstimatorcom o argumento de palavra-chaveabelian_grouping=False. -
Removido o uso de primitivos com o gerenciador de contexto e a inicialização com circuitos (observáveis apenas para Estimator) e parâmetros que foram descontinuados na versão do Qiskit Terra 0.22.0 em outubro de 2022.
-
O comportamento do método
run()foi alterado quando objetos inválidos ou não simuláveisQuantumCircuitsão passados como entrada. Anteriormente, nesses casos, o métodorun()retornaria umAerJobcujo métodoresult()retornaria umResultcomERRORouPARTIAL COMPLETED(dependendo do fato de todas as entradas do circuito ou apenas algumas serem inválidas ou não). A partir desta versão, em vez de retornar um objeto de resultado com esses status, será gerada uma exceção. Essa alteração foi necessária devido às melhorias de desempenho por não mais serializar internamente os objetosQuantumCircuitpara um Qobj antes de passá-lo para o C++; em vez disso, a conversão direta deQuantumCircuitagora comete erros diretamente ao tentar simular um circuito que o Qiskit Aer não consegue executar. Se desejar o comportamento anterior, você poderá criar o Qiskit Aer no modo autônomo e serializar manualmente seus objetosQuantumCircuitpara uma representação JSON do objetoQasmQobjque, em seguida, você passa para o binário autônomo do Aer, que manterá o comportamento anterior. -
Um método obsoleto
add_nonlocal_quantum_error()emNoiseModelfoi removido. Nenhum método alternativo está disponível. Se quiser adicionar erros quânticos não locais, você deve escrever uma passagem do transpilador que insira seu próprio erro quântico em um circuito e executar a passagem imediatamente antes de executar o circuito no simulador Aer. -
O
NoiseModel.from_backend()agora foi alterado para não aceitar o objetoBackendPropertiescomo um argumentobackend. Em vez disso, use o métodoNoiseModel.from_backend_properties()recém-adicionado. -
Um argumento obsoleto do
standard_gatesamplamente usado em vários métodos e funções (listados abaixo) no módulonoisefoi removido.NoiseModel.from_backend()enoise.device.basic_device_gate_errors()kraus_error(),mixed_unitary_error(),pauli_error()edepolarizing_error()emnoise.errors.standard_errorsQuantumError.__init__()
Não há meios alternativos disponíveis porque o usuário deve ser agnóstico sobre como o simulador representa internamente os ruídos (erros quânticos).
-
O construtor de
QuantumErroragora deixou de oferecer suporte à entrada obsoleta do tipo json para o argumentonoise_ops. Em vez disso, use a nova entrada de estilo para o argumentonoise_ops, por exemplo,from qiskit.circuit.library import IGate, XGate from qiskit_aer.noise import QuantumError error = QuantumError([ ((IGate(), [1]), 0.9), ((XGate(), [1]), 0.1), ]) # json-like input is no longer accepted (the following code fails) # error = QuantumError([ # ([{"name": "I", "qubits": [1]}], 0.9), # ([{"name": "X", "qubits": [1]}], 0.1), # ])Além disso, ele eliminou argumentos obsoletos:
number_of_qubits: UseQuantumCircuitpara definirnoise_opsem seu lugar.atol: Em vez disso, use o atributoQuantumError.atol.standard_gates: Nenhuma alternativa está disponível (os usuários não devem se preocupar muito com a representação interna dos erros quânticos).
-
O módulo obsoleto
noise.errors.errorutilsfoi totalmente removido e não há alternativas disponíveis. Todas as funções no módulo eram funções auxiliares destinadas a serem usadas somente para implementar funções no sitestandard_errors(ou seja, deveriam ter sido fornecidas como funções privadas) e não mais usadas nele. -
O obsoleto
utils.noise_remapperfoi totalmente removido e não há alternativas disponíveis, pois o código C++ agora trunca e remapeia automaticamente os modelos de ruído se truncar os circuitos. -
Todas as funções obsoletas (
pauli_operators()ereset_operators()) e a classe (NoiseTransformer) do móduloutils.noise_transformationforam removidas e não há alternativas disponíveis. Na verdade, eram funções/classes privadas usadas somente para implementar oapproximate_quantum_error()e não deveriam ser públicas. -
O nome do argumento
qobj, anteriormente obsoleto, do métodorun()das classesAerSimulatorePulseSimulatorfoi removido. Esse nome de argumento foi preterido como parte da versão do Qiskit Aer 0.8.0 e foi substituído pelo nome de argumentocircuitseschedules, respectivamente. -
O site
setup.pyda Aer foi atualizado para não tentar mais fazer chamadas parapippara instalar os requisitos de compilação, tanto manualmente quanto por meio da opçãosetup_requiresemsetuptools.setup. A maneira preferida de criar o Aer é usar um construtor compatível com a PEP 517, como opip install .Essa alteração significa que uma chamada direta para
setup.pynão funcionará mais se os requisitos de compilação não estiverem instalados. Isso está de acordo com as modernas diretrizes de embalagem do site Python.
Notas de descontinuação
-
O suporte para a execução do Qiskit Aer com o suporte Python 3.7 foi preterido e será removido em uma versão futura. Isso significa que, a partir de uma versão futura, será necessário atualizar a versão Python que você está usando para Python 3.8 ou superior.
-
O backend
PulseSimulatorfoi preterido e será removido em uma versão futura. Se estiver usando o backendPulseSimulatorpara realizar a simulação de nível de pulso, deverá usar a biblioteca Qiskit Dynamics para realizar a simulação. O Qiskit Dynamics oferece uma estrutura de simulação em nível de pulso mais flexível e robusta do que o backendPulseSimulator. -
O método
qobj()da classeAerJobestá obsoleto e será removido em uma versão futura. O uso do formato qobj como entrada pararun()foi preterido desde o qiskit-aer 0.9.0 e, na maioria dos casos, esse método retornariaNonede qualquer forma. Se você quiser obter a entrada para o métodorun()agora, poderá usar o métodocircuits(), que retornará osQuantumCircuitobjetos que foram simulados no trabalho. -
Um argumento do
warningsamplamente usado em vários métodos e funções no módulonoisefoi preterido em favor do uso de funções de filtragem na biblioteca padrãowarningsdo Python.
Correções de bugs
-
Foi corrigido um problema ao criar uma nova instância do
AerStatevectora partir de umnumpy.ndarrayque tinha memória não contígua. Anteriormente, isso resultava em um comportamento inesperado (e um possível erro), pois o siteAerStatevectorpresumia que a matriz de entrada era contígua. Isso foi corrigido para que o layout da memória seja verificado e onumpy.ndarrayseja copiado internamente como uma matriz contígua antes de ser usado. -
Foi corrigido um problema com a classe
Samplerem que ela falhava anteriormente se a entradaQuantumCircuitcontivesse vários registros clássicos múltiplos. Corrigido #1679 -
A contagem de bits do registro clássico usado na GPU não foi definida antes do cálculo da memória livre disponível para pedaços, o que causa um loop infinito. Portanto, essa correção define a contagem de bits antes de alocar blocos se a execução de disparos em lote estiver ativada.
-
Corrigir erros de compilação e erros de teste ao ativar a GPU, mas desativar o cuQuantum.
-
Foi corrigido um problema no método de simulação do estado do produto da matriz (ou seja, a definição do argumento da palavra-chave
method="matrix_product_state"ao inicializar um objetoAerSimulator) em que o simulador classificava incorretamente os qubits antes de realizar a medição, o que poderia resultar em um loop infinito. Isso foi corrigido para que a medição dos qubits ocorra na ordem da estrutura atual do MPS e, em seguida, seja classificada como uma etapa de pós-processamento. Isso provavelmente também melhorará o desempenho do método de simulação e permitirá uma representação mais precisa dos estados emaranhados. Corrigido #1694 -
O backend
AerSimulatorcom métodos:statevectordensity_matrixmatrix_product_statestabilizer
agora informam que são compatíveis com as instruções
break_loopecontinue_loopquando usadas como backends para a função Terratranspile(). Os simuladores já ofereciam suporte a isso, mas não estavam informando.
IBM 0.20.2
Esta versão remove as restrições de versão excessivamente restritivas definidas nos requisitos do pacote adicionado em 0.20.1. No caso do 0.20.1, a única dependência que deveria ter um limite de versão era o pacote requests-ntlm , pois sua nova versão era a única dependência que atualmente tem uma incompatibilidade com o qiskit-ibmq-provider. Os outros limites de versão que foram adicionados como parte do 0.20.1 estavam causando problemas de instalação em vários ambientes porque tornavam o pacote qiskit-ibmq-provider incompatível com as versões de dependência usadas em outros pacotes.