Notas de versão do Qiskit 0.30
0.30.1
Terra 0.18.3
Prelúdio
Esta versão de correção de bugs corrige alguns problemas menores em 0.18, incluindo uma regressão de desempenho em assemble ao lidar com a execução de objetos QuantumCircuit em backends habilitados para pulso.
Correções de bugs
- Corrigido o problema nº 7004, em que o endereço
AttributeErrorera acionado ao executarScheduleBlockem um backend de pulso. Esses blocos agora são tratados corretamente como trabalhos de pulso, comoSchedule. - Foi corrigido um problema que causava um erro ao vincular um valor de parâmetro complexo ao coeficiente de um operador. Os lançamentos para
floatemPrimitiveOpforam generalizados para lançamentos emcomplex, se necessário, mas permanecerão emfloatse não houver componente imaginário. Correções #6976. - Atualize os erros de porta de 1 qubit em
plot_error_mappara usar a porta sx em vez da porta u2, de acordo com os backends do IBMQ.
Aer 0.9.0
Nenhuma mudança
Ignis 0.6.0
Nenhuma mudança
Aqua 0.9.5
Nenhuma mudança
IBM 0.16.0
Nenhuma mudança
0.30.0
Terra 0.18.2
Nenhuma mudança
Aer 0.9.0
Prelúdio
A versão 0.9 inclui novas opções de back-end para a extração paralela de um grande número de circuitos em um cluster HPC usando um Dask distribuído, além de outras melhorias gerais de desempenho e correções de bugs.
Novos Recurso
-
Adição de suporte para set_matrix_product_state.
-
Adicione a biblioteca qiskit
SXdgGateeCUGateàs portas de base compatíveis com os back-ends do simulador Aer. Observe que oCUGatesó tem suporte nativo para os métodosstatevectoreunitary. Para outros métodos de simulação, ele deve ser transpilado para os portões de base suportados para esse método. -
Adiciona suporte para a porta N-qubit Pauli (
qiskit.circuit.library.generalized_gates.PauliGate) a todos os métodos de simulação dos sitesAerSimulatoreQasmSimulator. -
Adiciona a capacidade de definir um executor personalizado e configurar a divisão de tarefas para a execução de vários circuitos em paralelo em um cluster de HPC. Um executor personalizado pode ser definido com a opção
executore a divisão de trabalhos é configurada com a opçãomax_job_size.Por exemplo, a configuração de um backend e a execução usando
backend = AerSimulator(max_job_size=1, executor=custom_executor) job = backend.run(circuits)dividirá a seção em vários trabalhos, cada um contendo um único circuito. Se a divisão de trabalhos estiver ativada, o método
runretornará um objetoAerJobSetque contém todas as classesAerJobindividuais. Depois que todos os trabalhos individuais terminam de ser executados, os resultados do trabalho são automaticamente combinados em um único objeto Result que é retornado porjob.result().Os executores compatíveis incluem os do módulo Python
concurrent.futures(por exemplo,ThreadPoolExecutor,ProcessPoolExecutor) e os executores do cliente distribuído Dask se a biblioteca opcional dask estiver instalada. O uso de um executor Dask permite configurar a execução paralela de vários circuitos em clusters de HPC. -
Adiciona a capacidade de registrar dados de registro para o método de simulação
matrix_product_statenos metadados do resultado do experimento, definindo a opção de backendmps_log_data=True. Os dados salvos incluem as dimensões da ligação e o valor descartado (a soma dos quadrados dos coeficientes de Schmidt que foram descartados por aproximação) após cada instrução de circuito relevante. -
O método
run()paraAerSimulator,QasmSimulator,StatevectorSimulatoreUnitarySimulatortem um novo kwarg,parameter_binds, que é usado para fornecer uma lista de valores a serem usados para quaisquer parâmetros não vinculados no circuito de entrada. Por exemplo:from qiskit.circuit import QuantumCircuit, Parameter from qiskit.providers.aer import AerSimulator shots = 1000 backend = AerSimulator() circuit = QuantumCircuit(2) theta = Parameter('theta') circuit.rx(theta, 0) circuit.cx(0, 1) circuit.measure_all() parameter_binds = [{theta: [0, 3.14, 6.28]}] backend.run(circuit, shots=shots, parameter_binds=parameter_binds).result()executará o circuito de entrada 3 vezes com os valores 0, 3.14 e 6.28 para theta. Ao executar com vários parâmetros, o comprimento das listas de valores deve ser o mesmo. Ao executar com vários circuitos, o comprimento de
parameter_bindsdeve corresponder ao número de circuitos de entrada (você pode usar um dict vazio,{}, se não houver ligações para um circuito). -
O
PulseSimulatoragora pode pegarQuantumCircuitobjetos norun(). Anteriormente, ele só aceitava objetosSchedulecomo entrada pararun(). Quando um circuito ou uma lista de circuitos for passada para o simulador, ele chamaráschedule()para converter os circuitos em uma programação antes de executar o circuito. Por exemplo:from qiskit.circuit import QuantumCircuit from qiskit.compiler import transpile from qiskit.test.mock import FakeVigo from qiskit.providers.aer.backends import PulseSimulator backend = PulseSimulator.from_backend(FakeVigo()) circuit = QuantumCircuit(2) circuit.h(0) circuit.cx(0, 1) circuit.measure_all() transpiled_circuit = transpile(circuit, backend) backend.run(circuit)
Problemas Conhecidos
- Os sites
SaveExpectationValueeSaveExpectationValueVarianceforam desativados para o método extended_stabilizer dos sitesQasmSimulatoreAerSimulatordevido ao fato de retornarem o valor incorreto para determinados componentes do operador Pauli. Consulte #1227 <https://github.com/Qiskit/qiskit-aer/issues/1227> para obter mais informações e exemplos.
Notas da Atualização
- A base padrão da classe
NoiseModelfoi alterada de["id", "u3", "cx"]para["id", "rz", "sx", "cx"]devido à descontinuidade do método de circuitou3no qiskit-terra e à alteração das portas de base do backend do qiskit-ibmq-provider. Para usar as portas de base antigas, você pode inicializar um modelo de ruído com portas de base personalizadas comoNoiseModel(basis_gates=["id", "u3", "cx"]). - Removido o kwarg
backend_optionsdo métodorundos backends do Aer que foi preterido no qiskit-aer 0.7. Todas as opções de execução agora devem ser passadas como kwargs separados. - Removida a passagem de
system_modelcomo um argumento posicional para o métodorundoPulseSimulator.
Notas de descontinuação
- A transmissão de um qobj montado diretamente para o método
run()dos back-ends do simulador Aer foi preterida em favor da transmissão de circuitos transpilados diretamente comobackend.run(circuits, **run_options). - Todas as instruções de snapshot em
qiskit.providers.aer.extensionsforam descontinuadas. Para a substituição, use as instruções de gravação do móduloqiskit.providers.aer.library. - A adição de erros quânticos não locais a um
NoiseModelfoi preterida devido a inconsistências na forma como esse ruído é aplicado ao circuito otimizado. O ruído não local deve ser adicionado manualmente a um circuito programado no Qiskit usando uma passagem de transpilador personalizada antes de ser executado no simulador. - O uso da opção
methoddos aplicativosStatevectorSimulatoreUnitarySimulatorpara executar uma simulação de GPU foi descontinuado. Para executar uma simulação de GPU em um sistema compatível, use a opçãodevice='GPU'.
Correções de bugs
- Corrige o problema de desempenho com a forma como o atributo de configuração
basis_gatesfoi definido. Anteriormente, havia efeitos colaterais não intencionais na classe de back-end que podiam fazer com que o tempo de execução de simulações repetidas aumentasse gradativamente. Consulte #1229 <https://github.com/Qiskit/qiskit-aer/issues/1229> para obter mais informações e exemplos. - Corrigido o erro em MPS::apply_kraus. Depois de aplicar a matriz kraus aos qubits relevantes, devemos propagar as alterações para os qubits vizinhos.
- Corrige um bug em que o qiskit-terra assume que os qubits em uma porta multiplexadora são primeiro os alvos e depois os controles da porta, enquanto o qiskit-aer assume a ordem oposta.
- Corrige um bug introduzido em 0.8.0, no qual as simulações de GPU alocavam memória de host desnecessária, além da memória da GPU.
- Corrige o bug em que a instrução initialize desativava a otimização de amostragem de medição para os métodos de simulação de estado de vetor de estado e de produto de matriz, mesmo quando era a primeira instrução de circuito ou aplicada a todos os qubits e, portanto, determinística.
- Corrija o problema nº 1196 usando os produtos internos com os estados da base computacional para calcular a norma em vez do algoritmo de estimativa da norma.
- Corrige um erro no método do simulador
stabilizerdos sitesQasmSimulatoreAerSimulator, no qual o valor de expectativa para os sitessave_expectation_valueesnapshot_expectation_valuepoderia ter o sinal errado para determinados Pauli's doY. - Corrige o erro em que, se a memória necessária fosse menor do que a memória do sistema, o método de simulação de vários pedaços era ativado e a simulação ainda era iniciada. Esse caso agora lançará uma exceção de memória insuficiente.
- Corrige o problema em que a configuração da opção
shotspara um backend comset_options(shots=k)estava sempre executando o número padrão de disparos (1024) em vez do valor especificado. - Corrige um erro na forma como o
AerSimulatortratava o valor da opção paramax_parallel_experiments=1. Anteriormente, isso era tratado da mesma forma quemax_parallel_experiments=0. - Corrige o erro no método de simulação
extended_stabilizer, que tratava incorretamente as instruções qelay gate e multi-qubit Pauli como não suportadas. - Corrige o erro de digitação nas opções
AerSimulatoreQasmSimulatorpara a opçãoextended_stabilizer_norm_estimation_repetitions. - Corrige um bug na aplicação da porta
unitaryusando o método de simulaçãomatrix_product_stateque não suportava corretamente permutações na ordenação dos qubits nos quais a porta é aplicada. - Corrige um problema em que a fusão de portas ainda podia ser ativada para o método de simulação
matrix_product_state, embora não seja compatível. Agora, a fusão está sempre desativada para esse método. - Corrigido o erro no método de simulação do site
matrix_product_stateno cálculo da normalização após o truncamento dos coeficientes de Schmidt depois de executar o SVD.
Outras observações
- Melhora o desempenho do algoritmo de amostragem de medição para o método de simulação
matrix_product_state. O novo comportamento padrão é sempre fazer a amostragem usando o método aprimoradomps_apply_measure. O método de amostragemmps_probabilitiesainda pode ser usado com a configuração do valor da opção personalizadamps_sample_measure_algorithm="mps_probabilities".
Ignis 0.6.0
Nenhuma mudança
Aqua 0.9.5
Nenhuma mudança
IBM 0.16.0
Nenhuma mudança