Skip to main content
IBM Quantum Platform

Notas de versão do Qiskit 0.38


0.38.0

Terra 0.21.2

Nenhuma mudança

Aer 0.11.0

Prelúdio

Os destaques da versão do Qiskit Aer 0.11.0 são:

  • A migração para um novo namespace autônomo Python qiskit_aer
  • A introdução da classe AerStatevector
  • A introdução de implementações Aer de primitives, Sampler e Estimator
  • Introdução do suporte para execução com cuQuantum

Novos Recurso

  • Adicionado suporte para BackendV2 para from_backend(). Agora ele pode gerar um objeto NoiseModel a partir de uma instância de entrada BackendV2 instância. Quando uma entrada BackendV2 é usada em from_backend() , as duas opções obsoletas, standard_gates e warnings, são ignoradas.

  • Adicionada a implementação Aer de primitives, Sampler e BaseSampler e BaseEstimator aproveitam o qiskit aer para executar com eficiência a computação das operações primitivas. Você pode consultar os qiskit.primitives para obter uma descrição mais detalhada da API de primitivos.

  • Foi adicionada uma biblioteca compartilhada ao Qiskit Aer que permite que programas externos usem os métodos de simulação do Aer. Esse é um recurso experimental e sua API pode ser alterada sem o período de depreciação.

  • Foi adicionado suporte para os sistemas M1 macOS. Os binários pré-compilados para as versões compatíveis de Python >= 3.8 em arm64 macOS agora serão publicados em PyPI para esta e futuras versões.

  • Foi adicionado suporte às APIs do cuQuantum, NVIDIA para computação quântica, para acelerar o vetor de estado, a matriz de densidade e os simuladores unitários usando GPUs. Esta é uma implementação experimental para cuQuantum Beta 2. ( 0.1.0 ) As APIs cuStateVec podem ser aceleradas em vez das implementações do Aer por meio da criação do Aer, definindo o caminho de cuQuantum para CUSTATEVEC_ROOT. (a distribuição binária não está disponível no momento) cuStateVector é ativado com a configuração das opções device='GPU' e cuStateVec_threshold . cuStateVec é ativado quando o número de qubits do circuito de entrada é igual ou superior a cuStateVec_threshold.

  • Adição de suporte parcial para execução nas plataformas ppc64le e s390x Linux. Esta versão começará a publicar binários pré-compilados para as plataformas ppc64le e s390x Linux em todas as versões do Python. No entanto, diferentemente de outras plataformas compatíveis, nem todas as dependências upstream do Qiskit são compatíveis com essas plataformas ainda. Portanto, pode ser necessário um compilador C/C++ para criar e instalar essas dependências, e um simples pip install qiskit-aer com apenas um ambiente Python em funcionamento não será suficiente para instalar o Qiskit Aer. Além disso, essas mesmas restrições nos impedem de testar as rodas pré-compiladas antes de publicá-las, portanto, as mesmas garantias de suporte à plataforma que existem para as outras plataformas não se aplicam a essas plataformas.

  • Permitir a inicialização com um rótulo, que consiste em +-rl. Agora o código a seguir funciona:

    import qiskit
    from qiskit_aer import AerSimulator
    
    qc = qiskit.QuantumCircuit(4)
    qc.initialize('+-rl')
    qc.save_statevector()
    
    AerSimulator(method="statevector").run(qc)

Problemas Conhecidos

  • Ao ser executado em plataformas Linux s390x (ou em outras plataformas big endian), a execução de circuitos que contêm UnitaryGate não funcionará devido a um bug de endianidade. Consulte #1506 para obter mais detalhes.

Notas da Atualização

  • A paralelização MPI para um grande número de qubits é otimizada para aplicar vários chunk-swaps como uma comunicação de todos para todos que pode diminuir o tamanho dos dados trocados nos processos MPI. Essa atualização melhora a escalabilidade da paralelização.

  • Defina o padrão fusion_max_qubit e fusion_threshold dependendo do method configurado para AerSimulator. Anteriormente, os valores padrão de fusion_max_qubit e fusion_threshold eram 5 e 14 , respectivamente, para todos os métodos de simulação. No entanto, seus valores ideais dependem dos métodos de execução. Se você dependia dos padrões anteriores, pode definir explicitamente fusion_max_qubit=5 ou fusion_threshold=14 para manter o comportamento padrão anterior. Por exemplo:

    from qiskit_aer import AerSimulator
    
    sim = AerSimulator(method='mps', fusion_max_qubit=5, fusion_threshold=14)
  • Esta é uma atualização para oferecer suporte ao cuQuantum 22.5.0.41, incluindo a correção de erros de segurança de thread em algumas APIs do cuStateVec. Agora, o Qiskit Aer ativa o multi-threading para multi-shots e a paralelização de vários pedaços ao ativar cuStateVec.

  • A execução do qiskit-aer com Python 3.6 não é mais suportada. Python >= 3.7 agora é necessário para instalar e executar o qiskit-aer.

  • O pacote qiskit-aer Python passou a ser um namespace autônomo, qiskit_aer. Anteriormente, ele compartilhava um espaço de nome com qiskit-terra por ser qiskit.providers.aer. Isso era problemático por vários motivos, e esta versão se distancia disso. Por enquanto, o site import qiskit.providers.aer continuará funcionando e será redirecionado automaticamente para qiskit_aer . As importações do namespace legado qiskit.provider.aer emitirão um DeprecationWarning no futuro. Para evitar possíveis problemas a partir desta versão, é recomendável atualizar todas as importações de qiskit.providers.aer para qiskit_aer e de qiskit.Aer para qiskit_aer.Aer .

  • Removidas as instruções de snapshot (como SnapshotStatevector) que estavam obsoletas desde 0.9.0. Os aplicativos que usam essas instruções precisam ser modificados para usar as instruções de salvamento correspondentes (como SaveStatevector).

  • Removi completamente o módulo qiskit_aer.extensions . Com a remoção das instruções de snapshot, esse módulo ficou vazio e não serve mais para nada.

  • A versão necessária do Qiskit Terra foi aumentada para 0.20.0.

Correções de bugs

  • Correções na distribuição de pedaços de MPI. Incluindo correção para indexação global para implementações do Thrust, correção para bloqueio de cache de operações que não sejam de porta. Além disso, o savestatevector retorna o mesmo vetor de estado para todos os processos (somente o primeiro processo recebeu o vetor de estado anteriormente)

  • Trata uma porta de multiplexador como uma porta unitária se ela não tiver qubits de controle. Anteriormente, se uma porta de multiplexador não tivesse qubits de controle, o estado quântico não era atualizado.

  • Corrige um bug no site RelaxationNoisePass em que as durações das instruções eram sempre consideradas em unidades de tempo dt, independentemente da unidade real da construção. Agora, a conversão de unidades é tratada corretamente para todas as unidades de duração de instrução.

    Consulte o número 1453 para obter detalhes.

  • Corrigida a simulação de loops for em que o parâmetro de loop não era usado no corpo do loop. Por exemplo, anteriormente, esse código falharia, mas agora será bem-sucedido:

    import qiskit
    from qiskit_aer import AerSimulator
    
    qc = qiskit.QuantumCircuit(2)
    with qc.for_loop(range(4)) as i:
        qc.h(0)
        qc.cx(0, 1)
    
    AerSimulator(method="statevector").run(qc)
  • Corrige um bug em NoiseModel.from_backend() que gerava um erro quando T2 valor maior que 2 * T1 era fornecido pelo backend. Após essa correção, o valor de T2 será truncado para até 2 * T1 e emitirá um aviso ao usuário se for truncado. O bug foi introduzido no número 1391 e, antes disso, o site NoiseModel.from_backend() truncava o valor T2 até 2 * T1 silenciosamente.

    Consulte a edição 1464 para obter detalhes.

  • Corrigir a regressão de desempenho em simulações com ruído devido ao grande aumento na sobrecarga de serialização para carregar modelos de ruído de Python em C++, resultante de chamadas de multiprocessamento Python aninhadas não intencionais. Consulte a edição 1407 para obter detalhes.

  • Esta é a correção para o problema nº 1557. Números de sementes diferentes são gerados para cada processo se a opção seed_simulator não estiver definida. Esse conjunto de semente média fixa no Circuit para que todos os processos usem o mesmo número de semente.

  • Essa é uma correção da paralelização MPI para paralelização de vários pedaços e distribuição de vários disparos em processos paralelos. Havia uma configuração de distribuição ausente que impedia a distribuição de MPI, agora corrigida.

  • Essa é a correção para o transpilador de bloqueio de cache e a paralelização de partes para GPUs ou MPI. Essa correção corrige o problema com qubits que têm muitos qubits de controle ou de destino (> blocking_qubits). A partir dessa correção, somente os qubits de destino da porta multicontrolada são bloqueados no cache em blocking_qubits. Mas ele não é compatível com o caso em que o número de qubits de destino ainda é maior do que o bloqueio_qubits (ou seja, multiplicação de matriz unitária grande)

  • Corrige um bug no site QuantumError.to_dict() em que as instruções do circuito N-qubit em que a instrução montada sempre se aplicava aos qubits [0, ..., N-1] em vez dos qubits da instrução. Esse bug também afetou os modelos de ruído do dispositivo e do backend falso.

    Consulte a edição 1415 para obter detalhes.

  • Como uma semente foi atribuída aleatoriamente a cada circuito se seed_simulator não estiver definido, a simulação de vários circuitos não foi reproduzível com outra simulação de vários circuitos. Os usuários precisavam executar várias simulações de circuito único com o seed_simulator, que é atribuído aleatoriamente na simulação de vários circuitos. Essa correção permite que os usuários reproduzam a simulação de vários circuitos com outra simulação de vários circuitos, definindo seed_simulator do primeiro circuito na primeira simulação de vários circuitos. Essa correção também resolve um problema relatado em https://github.com/Qiskit/qiskit-aer/issues/1511 em que a simulação com vínculos de parâmetros retorna resultados idênticos para cada instância de circuito.

  • Correção do problema de desempenho na otimização em lote de vários disparos para GPU ao usar o ruído Pauli. Essa correção permite o multi-threading para a amostragem de ruído em tempo de execução e usa a paralelização OpenMP aninhada ao usar várias GPUs. Esta é a correção para o problema 1473 <https://github.com/Qiskit/qiskit-aer/issues/1473>

  • Esta é a correção para o suporte cuStateVec, correção para o erro de compilação devido à mudança de especificação de algumas APIs do cuStateVec da versão cuQuantum 0.40.

  • Corrige um problema quando while_loop é o final de QuantumCircuit. while_loop é traduzido para instruções de salto e marcação. No entanto, se um while_loop estiver no final de um circuito, sua instrução de marca será truncada incorretamente. Essa correção corrige o algoritmo de truncamento para que as instruções de marca permaneçam sempre.

IBM 0.19.2

Nenhuma mudança

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