Skip to main content
IBM Quantum Platform

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 Optimize1qGatesDecomposition em 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ância ECRGate em vez de uma porta personalizada, já que é autoinverso.

  • Recorte as probabilidades nos métodos QuantumState.probabilities() e QuantumState.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 BackendSampler em 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 em BackendV1 baseado 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 BackendSampler e BackendEstimator para ser executado com êxito com um bound_pass_manager personalizado. Anteriormente, a execução de circuitos únicos com um bound_pass_manager gerava um ValueError porque uma lista não era retornada em uma das etapas.

  • A passagem do GateDirection nã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 CommutationChecker em que ela tentava alocar internamente uma matriz para 2n2^{n} qubits quando só precisava de uma matriz para representar nn 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 InstructionProperties levanta AttributeError foi corrigido. Agora ele retorna None.

  • Corrigido qasm() para que ele anexe ; após a instrução reset .

  • 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ções StatePreparation instruçõ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 e conditional=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 OneQubitEulerDecomposer métodos da classe angles() e angles_and_phase() apresentavam erro se a matriz de entrada fosse de um dtype diferente de complex/np.cdouble. Em versões anteriores, isso funcionava bem, mas parou de funcionar no Qiskit Terra 0.23.0 quando os componentes internos do OneQubitEulerDecomposer foram reescritos em Rust. Corrigido #9827

  • Os portões Qiskit CCZGate, CSGate, CSdgGate não estão definidas em qelib1.inc e, 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 AerDensityMatrix ao qiskit_aer.quantum_info módulo
  • Melhorar consideravelmente o desempenho do tempo de execução das classes AerSimulator e QasmSimulator, StatevectorSimulator e UnitarySimulator , 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++ QuantumCircuit para uma representação interna do C++ em vez de primeiro serializar o circuito em um objeto QasmQobj. Essa melhoria será mais perceptível em circuitos com um pequeno número de qubits ou circuitos parametrizados usando o argumento da palavra-chave parameter_binds .

Novos Recurso

  • Foi adicionado um novo método de classe from_backend_properties() ao site NoiseModel. Isso permite a construção de um novo NoiseModel a partir de um objeto BackendProperties . Uma funcionalidade semelhante costumava estar presente no construtor NoiseModel.from_backend() , mas foi removida porque um objeto BackendProperties sozinho não contém informações suficientes para criar um objeto NoiseModel .

  • Adicionada uma nova classe, AerDensityMatrix, ao módulo qiskit_aer.quantum_info módulo. Essa classe é usada para fornecer a mesma interface para a classe upstream DensityMatrix no Qiskit, mas com o suporte da simulação do Qiskit Aer.

  • Foi adicionado um novo argumento de palavra-chave, abelian_grouping, ao comando Estimator. Esse argumento é usado para controlar se o Estimator agrupará 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 do Estimator. Por padrão, isso é definido como True.

  • AerState tem um novo método initialize_density_matrix() que define uma matriz de densidade para AER::QV::DensityMatrix. Esse método será chamado em q.i.states.DensityMatrix para inicializar seus dados com ndarray. initialize_density_matrix() tem um argumento booleano que especifica a cópia ou o compartilhamento dos dados de ndarray . 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 objetos QuantumCircuit em objetos QasmQobj e, em vez disso, o objeto QuantumCircuit diretamente 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-chave parameter_binds de run(). Observe que a simulação de pulso (por meio do agora obsoleto PulseSimulator) 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 de QuantumCircuit objetos. Esse método retorna None se Qobj for usado para simulação.

  • AerState e AerStatevector agora suportam a aplicação de operadores Kraus operadores. Em AerStatevector, 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" e device="GPU" ao inicializar um objeto AerSimulator . 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 SaveStatevector no 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_VENDOR agora 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 Estimator agora 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ância Estimator com o argumento de palavra-chave abelian_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áveis QuantumCircuit são passados como entrada. Anteriormente, nesses casos, o método run() retornaria um AerJob cujo método result() retornaria um Result com ERROR ou PARTIAL 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 objetos QuantumCircuit para um Qobj antes de passá-lo para o C++; em vez disso, a conversão direta de QuantumCircuit agora 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 objetos QuantumCircuit para uma representação JSON do objeto QasmQobj que, 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() em NoiseModel foi 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 objeto BackendProperties como um argumento backend . Em vez disso, use o método NoiseModel.from_backend_properties() recém-adicionado.

  • Um argumento obsoleto do standard_gates amplamente usado em vários métodos e funções (listados abaixo) no módulo noise foi removido.

    • NoiseModel.from_backend() e noise.device.basic_device_gate_errors()
    • kraus_error(), mixed_unitary_error(), pauli_error() e depolarizing_error() em noise.errors.standard_errors
    • QuantumError.__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 QuantumError agora deixou de oferecer suporte à entrada obsoleta do tipo json para o argumento noise_ops . Em vez disso, use a nova entrada de estilo para o argumento noise_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: Use QuantumCircuit para definir noise_ops em seu lugar.
    • atol: Em vez disso, use o atributo QuantumError.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.errorutils foi 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 site standard_errors (ou seja, deveriam ter sido fornecidas como funções privadas) e não mais usadas nele.

  • O obsoleto utils.noise_remapper foi 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() e reset_operators()) e a classe (NoiseTransformer) do módulo utils.noise_transformation foram removidas e não há alternativas disponíveis. Na verdade, eram funções/classes privadas usadas somente para implementar o approximate_quantum_error() e não deveriam ser públicas.

  • O nome do argumento qobj , anteriormente obsoleto, do método run() das classes AerSimulator e PulseSimulator foi 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 argumento circuits e schedules , respectivamente.

  • O site setup.py da Aer foi atualizado para não tentar mais fazer chamadas para pip para instalar os requisitos de compilação, tanto manualmente quanto por meio da opção setup_requires em setuptools.setup. A maneira preferida de criar o Aer é usar um construtor compatível com a PEP 517, como o

    pip install .

    Essa alteração significa que uma chamada direta para setup.py nã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 PulseSimulator foi preterido e será removido em uma versão futura. Se estiver usando o backend PulseSimulator para 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 backend PulseSimulator .

  • O método qobj() da classe AerJob está obsoleto e será removido em uma versão futura. O uso do formato qobj como entrada para run() foi preterido desde o qiskit-aer 0.9.0 e, na maioria dos casos, esse método retornaria None de qualquer forma. Se você quiser obter a entrada para o método run() agora, poderá usar o método circuits() , que retornará os QuantumCircuit objetos que foram simulados no trabalho.

  • Um argumento do warnings amplamente usado em vários métodos e funções no módulo noise foi preterido em favor do uso de funções de filtragem na biblioteca padrão warnings do Python.

Correções de bugs

  • Foi corrigido um problema ao criar uma nova instância do AerStatevector a partir de um numpy.ndarray que tinha memória não contígua. Anteriormente, isso resultava em um comportamento inesperado (e um possível erro), pois o site AerStatevector presumia que a matriz de entrada era contígua. Isso foi corrigido para que o layout da memória seja verificado e o numpy.ndarray seja copiado internamente como uma matriz contígua antes de ser usado.

  • Foi corrigido um problema com a classe Sampler em que ela falhava anteriormente se a entrada QuantumCircuit contivesse 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 objeto AerSimulator ) 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 AerSimulator com métodos:

    • statevector
    • density_matrix
    • matrix_product_state
    • stabilizer

    agora informam que são compatíveis com as instruções break_loop e continue_loop quando usadas como backends para a função Terra transpile() . 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.

Esta página foi útil?
Relate um bug, erro de digitação ou solicite conteúdo no GitHub.