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,SamplereEstimator - Introdução do suporte para execução com cuQuantum
Novos Recurso
-
Adicionado suporte para
BackendV2parafrom_backend(). Agora ele pode gerar um objetoNoiseModela partir de uma instância de entradaBackendV2instância. Quando uma entradaBackendV2é usada emfrom_backend(), as duas opções obsoletas,standard_gatesewarnings, são ignoradas. -
Adicionada a implementação Aer de
primitives,SamplereBaseSamplereBaseEstimatoraproveitam o qiskit aer para executar com eficiência a computação das operações primitivas. Você pode consultar osqiskit.primitivespara 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çõesdevice='GPU'ecuStateVec_threshold. cuStateVec é ativado quando o número de qubits do circuito de entrada é igual ou superior acuStateVec_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-aercom 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
UnitaryGatenã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_qubitefusion_thresholddependendo domethodconfigurado paraAerSimulator. Anteriormente, os valores padrão defusion_max_qubitefusion_thresholderam5e14, 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 explicitamentefusion_max_qubit=5oufusion_threshold=14para 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-aerPython passou a ser um namespace autônomo,qiskit_aer. Anteriormente, ele compartilhava um espaço de nome comqiskit-terrapor serqiskit.providers.aer. Isso era problemático por vários motivos, e esta versão se distancia disso. Por enquanto, o siteimport qiskit.providers.aercontinuará funcionando e será redirecionado automaticamente paraqiskit_aer. As importações do namespace legadoqiskit.provider.aeremitirão umDeprecationWarningno futuro. Para evitar possíveis problemas a partir desta versão, é recomendável atualizar todas as importações deqiskit.providers.aerparaqiskit_aere deqiskit.Aerparaqiskit_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 (comoSaveStatevector). -
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
RelaxationNoisePassem 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
forem 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 siteNoiseModel.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