Skip to main content
IBM Quantum Platform

Notes de publication de Qiskit 0.30


0.30.1

Terra 0.18.3

Prélude

Cette version corrige quelques problèmes mineurs dans 0.18, y compris une régression de performance dans assemble lors de l'exécution d'objets QuantumCircuit sur les backends activés par pulse.

Corrections des erreurs

  • Correction de #7004AttributeError était levé lors de l'exécution de ScheduleBlock sur un backend pulse. Ces blocs sont désormais correctement traités comme des tâches d'impulsion, comme Schedule.
  • Correction d'un problème provoquant une erreur lors de la liaison d'une valeur de paramètre complexe au coefficient d'un opérateur. Les casts à float dans PrimitiveOp ont été généralisés à des casts à complex si nécessaire, mais resteront à float s'il n'y a pas de composante imaginaire. Corrige #6976.
  • Mettre à jour les erreurs de porte à 1 qubit dans plot_error_map pour utiliser la porte sx au lieu de la porte u2, en cohérence avec les backends IBMQ.

Aer 0.9.0

Pas de modification

Ignis 0.6.0

Pas de modification

Aqua 0.9.5

Pas de modification

IBM 0.16.0 du fournisseur Q

Pas de modification


0.30.0

Terra 0.18.2

Pas de modification

Aer 0.9.0

Prélude

La version 0.9 comprend de nouvelles options de backend pour l'exeuction parallèle d'un grand nombre de circuits sur un cluster HPC utilisant une distribution Dask, ainsi que d'autres améliorations générales des performances et des corrections de bogues.

Nouvelles fonctions

  • Ajout de la prise en charge de set_matrix_product_state.

  • Ajouter la bibliothèque qiskit SXdgGate et CUGate aux portes de base supportées par les backends du simulateur Aer. Notez que la CUGate n'est prise en charge que pour les méthodes statevector et unitary . Pour les autres méthodes de simulation, il doit être transposé dans les portes de base prises en charge pour cette méthode.

  • Ajout de la prise en charge de la porte de Pauli N-qubit ( qiskit.circuit.library.generalized_gates.PauliGate) à toutes les méthodes de simulation des sites AerSimulator et QasmSimulator.

  • Ajout de la possibilité de définir un exécuteur personnalisé et de configurer le fractionnement des tâches pour l'exécution de plusieurs circuits en parallèle sur un cluster HPC. Un exécuteur personnalisé peut être défini à l'aide de l'option executor , et le fractionnement des tâches est configuré à l'aide de l'option max_job_size .

    Par exemple, la configuration d'un backend et l'exécution à l'aide de

    backend = AerSimulator(max_job_size=1, executor=custom_executor)
    job = backend.run(circuits)

    divisera l'exection en plusieurs travaux, chacun contenant un seul circuit. Si le fractionnement des tâches est activé, la méthode run renvoie un objet AerJobSet contenant toutes les classes AerJob . Une fois que tous les travaux individuels ont été exécutés, les résultats sont automatiquement regroupés en un seul objet Result qui est renvoyé par job.result().

    Les exécuteurs pris en charge sont ceux du module Python concurrent.futures (par exemple ThreadPoolExecutor, ProcessPoolExecutor) et les exécuteurs du client distribué Dask si la bibliothèque optionnelle dask est installée. L'utilisation d'un exécuteur Dask permet de configurer l'exécution parallèle de plusieurs circuits sur des clusters HPC.

  • Ajout de la possibilité d'enregistrer les données de journalisation pour la méthode de simulation matrix_product_state dans les métadonnées du résultat de l'expérience en définissant l'option backend mps_log_data=True. Les données enregistrées comprennent les dimensions de la liaison et la valeur rejetée (la somme des carrés des coefficients de Schmidt qui ont été rejetés par approximation) après chaque instruction de circuit pertinente.

  • La méthode run() pour AerSimulator, QasmSimulator, StatevectorSimulator et UnitarySimulator comporte un nouveau kwarg, parameter_binds , qui est utilisé pour fournir une liste de valeurs à utiliser pour tout paramètre non consolidé dans le circuit entrant. Par exemple :

    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()

    exécutera le circuit d'entrée 3 fois avec les valeurs 0, 3.14, et 6.28 pour theta. En cas d'utilisation de plusieurs paramètres, la longueur des listes de valeurs doit être la même. En cas d'utilisation de plusieurs circuits, la longueur de parameter_binds doit correspondre au nombre de circuits d'entrée (vous pouvez utiliser un dict vide, {}, s'il n'y a pas d'obligations pour un circuit).

  • Le site PulseSimulator peut maintenant prendre QuantumCircuit objets sur le site run(). Auparavant, il n'acceptait que les objets Schedule en entrée de run(). Lorsqu'un circuit ou une liste de circuits est transmis au simulateur, il appelle schedule() pour convertir les circuits en un programme avant d'exécuter le circuit. Par exemple :

    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)

Problèmes connus

  • Les sites SaveExpectationValue et SaveExpectationValueVariance ont été désactivés pour la méthode extended_stabilizer des sites QasmSimulator et AerSimulator car ils renvoient une valeur incorrecte pour certains composants de l'opérateur de Pauli. Pour plus d'informations et d'exemples, consultez le site #1227 <https://github.com/Qiskit/qiskit-aer/issues/1227>.

Mise à niveau

  • La base par défaut de la classe NoiseModel a été modifiée de ["id", "u3", "cx"] à ["id", "rz", "sx", "cx"] en raison de la dépréciation de la méthode de circuit u3 dans qiskit-terra et de la modification des portes de base du backend qiskit-ibmq-provider. Pour utiliser les anciennes portes de base, vous pouvez initialiser un modèle de bruit avec des portes de base personnalisées comme NoiseModel(basis_gates=["id", "u3", "cx"]).
  • Suppression du kwarg backend_options de la méthode run des backends Aer qui était obsolète dans qiskit-aer 0.7. Toutes les options d'exécution doivent désormais être passées en tant que kwargs séparés.
  • Suppression du passage de system_model comme argument de position pour la méthode run de PulseSimulator.

Remarques concernant la dépréciation

  • Le passage d'un qobj assemblé directement à la méthode run() des backends du simulateur Aer a été supprimé en faveur du passage de circuits transpilés directement à backend.run(circuits, **run_options).
  • Toutes les instructions d'instantané de qiskit.providers.aer.extensions ont été supprimées. Pour le remplacement, utiliser les instructions de sauvegarde du module qiskit.providers.aer.library .
  • L'ajout d'erreurs quantiques non locales à un site NoiseModel a été déconseillé en raison d'incohérences dans la manière dont ce bruit est appliqué au circuit optimisé. Le bruit non local doit être ajouté manuellement à un circuit programmé dans Qiskit à l'aide d'une passe de transposition personnalisée avant d'être exécuté sur le simulateur.
  • L'utilisation de l'option method de StatevectorSimulator, et UnitarySimulator pour exécuter une simulation GPU a été supprimée. Pour exécuter une simulation GPU sur un système compatible, utilisez plutôt l'option device='GPU' .

Corrections des erreurs

  • Correction d'un problème de performance lié à la manière dont l'attribut de configuration basis_gates a été défini. Auparavant, il y avait des effets secondaires involontaires sur la classe backend qui pouvaient entraîner une augmentation progressive de la durée d'exécution des simulations répétées. Pour plus d'informations et d'exemples, consultez le site #1229 <https://github.com/Qiskit/qiskit-aer/issues/1229>.
  • Correction d'un bug dans MPS::apply_kraus. Après avoir appliqué la matrice de Kraus aux qubits concernés, nous devons propager les changements aux qubits voisins.
  • Corrige un bug où qiskit-terra suppose que les qubits dans une porte de multiplexage sont d'abord les cibles et ensuite les contrôles de la porte alors que qiskit-aer suppose l'ordre inverse.
  • Correction d'un bogue introduit dans 0.8.0 où les simulations GPU allouaient de la mémoire hôte inutile en plus de la mémoire GPU.
  • Correction d'un bug où l'instruction initialize désactivait l'optimisation de l'échantillonnage des mesures pour les méthodes de simulation de l'état du vecteur d'état et du produit matriciel, même s'il s'agissait de la première instruction du circuit ou qu'elle était appliquée à tous les qubits et donc déterministe.
  • Correction du problème #1196 en utilisant les produits intérieurs avec les états de la base de calcul pour calculer la norme plutôt que l'algorithme d'estimation de la norme.
  • Corrige un bogue dans la méthode du simulateur stabilizer de QasmSimulator et AerSimulator où la valeur de l'espérance pour save_expectation_value et snapshot_expectation_value pouvait avoir le mauvais signe pour certaines Y Pauli.
  • Correction d'un bogue où, si la mémoire requise est inférieure à la mémoire du système, la méthode de simulation multi-chunk était activée et la simulation démarrait quand même. Dans ce cas, une exception de mémoire insuffisante sera levée.
  • Correction d'un problème où la définition de l'option shots pour un backend avec set_options(shots=k) exécutait toujours le nombre de tirs par défaut (1024) au lieu de la valeur spécifiée.
  • Correction d'un bogue dans la manière dont AerSimulator gérait la valeur de l'option pour max_parallel_experiments=1. Auparavant, il était traité de la même manière que max_parallel_experiments=0.
  • Correction d'un bogue dans la méthode de simulation extended_stabilizer qui traitait incorrectement la porte qelay et les instructions Pauli multi-qubits comme n'étant pas prises en charge.
  • Correction d'une coquille dans les options AerSimulator et QasmSimulator pour l'option extended_stabilizer_norm_estimation_repetitions .
  • Correction d'un bug avec l'application de la porte unitary en utilisant la méthode de simulation matrix_product_state qui ne supportait pas correctement les permutations dans l'ordre des qubits sur lesquels la porte est appliquée.
  • Correction d'un problème où la fusion de portes pouvait être activée pour la méthode de simulation matrix_product_state alors qu'elle n'est pas prise en charge. Désormais, la fusion est toujours désactivée pour cette méthode.
  • Correction d'un bug dans la méthode de simulation matrix_product_state dans le calcul de la normalisation suite à la troncature des coefficients de Schmidt après l'exécution du SVD.

Autres remarques

  • Améliore les performances de l'algorithme d'échantillonnage des mesures pour la méthode de simulation matrix_product_state . Le nouveau comportement par défaut consiste à toujours échantillonner en utilisant la méthode améliorée mps_apply_measure . La méthode d'échantillonnage mps_probabilities peut encore être utilisée en définissant la valeur de l'option personnalisée mps_sample_measure_algorithm="mps_probabilities".

Ignis 0.6.0

Pas de modification

Aqua 0.9.5

Pas de modification

IBM 0.16.0 du fournisseur Q

Pas de modification

Cette page a-t-elle été utile ?
Signaler un bogue, une coquille ou proposer du contenu sur GitHub.