Skip to main content
IBM Quantum Platform

Notes de publication de Qiskit 0.42


0.42.1

Terra 0.23.3

Prélude

Qiskit Terra 0.23.3 est une version mineure de correction de bugs.

Corrections des erreurs

  • Correction d'un bogue dans la passe de transformation Optimize1qGatesDecomposition où le score des substitutions était mal calculé lorsque les erreurs de porte étaient nulles.

  • La méthode ECRGate.inverse() renvoie maintenant une autre instance de ECRGate plutôt qu'une porte personnalisée, puisqu'elle est auto-inverse.

  • Les probabilités d'écrêtage des méthodes QuantumState.probabilities() et QuantumState.probabilities_dict() sont ramenées à l'intervalle [0, 1]. Cela corrige les erreurs d'arrondi où les probabilités pouvaient, par exemple, être supérieures à 1, ce qui entraînait des erreurs dans l'émulation de l'échantillonneur. Correction #9761.

  • Correction d'un bogue dans l'application BackendSampler où les chaînes de bits des probabilités binaires étaient tronquées au nombre minimal de bits requis pour représenter le plus grand résultat sous la forme d'un entier. Cela signifie que si par exemple {"0001": 1.0} a été mesuré, le résultat a été tronqué à {"1": 1.0}.

  • Correction d'un problème avec la méthode PassManagerConfig.from_backend() lorsqu'elle était utilisée avec un backend de simulateur basé sur BackendV1 avec un backend de simulateur basé sur la technologie Pour certains backends de simulateurs qui ne remplissaient pas certains champs optionnels, le constructeur générait une erreur. Corrigé #9265 et #8546

  • Correction des BackendSampler et BackendEstimator pour qu'il fonctionne avec succès avec une version personnalisée de bound_pass_manager. Auparavant, l'exécution des circuits simples avec bound_pass_manager soulevait ValueError parce qu'une liste n'était pas renvoyée dans l'une des étapes.

  • La passe de GateDirection ne rejettera plus les portes qui ont reçu des calibrages explicites, mais qui n'existent pas dans la carte de couplage générique ou dans la cible.

  • Correction d'un problème avec la classe CommutationChecker qui tentait d'allouer en interne un tableau pour 2n2^{n} qubits alors qu'elle n'avait besoin que d'un tableau pour représenter nn qubits. Par exemple, une porte de 4 qubits nécessiterait 32 gigaoctets au lieu de 2 kilooctets. Corrigé #9197

  • L'obtention d'un étalonnage vide à partir de InstructionProperties soulève AttributeError a été corrigé. Il renvoie maintenant None.

  • Corrigé qasm() pour qu'il ajoute ; après l'instruction reset .

  • Les noms de registres et de paramètres seront désormais échappés lors de l'exportation de OpenQASM 3 (qasm3.dumps()) s'ils ne sont pas déjà des identificateurs valides. Correction #9658.

  • QPY (utilisant qpy.load()) désérialise désormais correctement les instructions StatePreparation instructions. Auparavant, QPY provoquait une erreur lorsqu'il tentait de charger un fichier contenant un. Correction #8297.

  • Correction d'un bogue dans random_circuit() avec 64 qubits ou plus et conditional=True, où le circuit résultant pouvait avoir une valeur incorrectement tapée dans sa condition, causant une variété d'échecs lors de la transpilation ou d'autres opérations sur le circuit. Correction #9649.

  • Correction d'un problème avec les méthodes de la classe OneQubitEulerDecomposer les méthodes de la classe angles() et angles_and_phase() provoquaient une erreur si la matrice d'entrée était d'un type autre que complex/np.cdouble. Dans les versions précédentes, cela fonctionnait bien, mais cela a cessé de fonctionner dans Qiskit Terra 0.23.0 lorsque les éléments internes de OneQubitEulerDecomposer ont été réécrits en Rust. Corrigé #9827

  • Les portes Qiskit CCZGate, CSGate, CSdgGate ne sont pas définies dans qelib1.inc et, par conséquent, lorsqu'elles sont déversées sous la forme OpenQASM 2.0, leur définition doit être insérée dans le fichier. Corrige #9559, #9721, et #9722.

Aer 0.12.0

Pas de modification

IBM 0.20.2 du fournisseur Q

Pas de modification


0.42.0

Terra 0.23.2

Pas de modification

Aer 0.12.0

Prélude

Les points forts de la version de Qiskit Aer 0.12.0 sont les suivants :

  • Ajout d'un nouveau simulateur de réseau tensoriel GPU basé sur la technologie cuTensorNet
  • Ajout d'une nouvelle classe AerDensityMatrix au qiskit_aer.quantum_info module
  • Amélioration considérable des performances d'exécution de la classe AerSimulator et des classes héritées QasmSimulator, StatevectorSimulator et UnitarySimulator en convertissant directement les objets d'entrée en une représentation C++ interne au lieu de sérialiser d'abord le circuit en une classe C++ QuantumCircuit en une représentation interne C++ au lieu de sérialiser d'abord le circuit en un objet QasmQobj. Cette amélioration sera surtout perceptible pour les circuits comportant un petit nombre de qubits ou pour les circuits paramétrés à l'aide du mot-clé parameter_binds .

Nouvelles fonctions

  • Ajout d'une nouvelle méthode de classe from_backend_properties() à la méthode NoiseModel. Cela permet de construire un nouveau NoiseModel à partir d'un objet BackendProperties . Une fonctionnalité similaire était présente dans le constructeur NoiseModel.from_backend() , mais elle a été supprimée car un objet BackendProperties ne contient pas à lui seul suffisamment d'informations pour créer un objet NoiseModel .

  • Ajout d'une nouvelle classe, AerDensityMatrix, au module qiskit_aer.quantum_info module. Cette classe est utilisée pour fournir la même interface que la classe upstream DensityMatrix de Qiskit, mais soutenue par la simulation de Qiskit Aer.

  • Ajout d'un nouveau mot-clé, abelian_grouping, à l'option Estimator. Cet argument est utilisé pour contrôler si le Estimator regroupera les observables d'entrée en observables commuables par qubits, ce qui réduit le nombre d'exécutions de circuits nécessaires pour calculer la valeur de l'espérance et améliore les performances d'exécution de l'algorithme Estimator. Par défaut, cette valeur est fixée à True.

  • AerState dispose d'une nouvelle méthode initialize_density_matrix() qui définit une matrice de densité à AER::QV::DensityMatrix. Cette méthode sera appelée dans q.i.states.DensityMatrix pour initialiser ses données avec ndarray. initialize_density_matrix() a un argument booléen qui spécifie la copie ou le partage des données de ndarray . Si les données sont partagées entre C++ et Python, elles ne doivent pas être collectées dans Python alors que C++ y accède.

  • Les frais généraux liés à l'exécution de simulations avec run() (pour toutes les classes de backend du simulateur) ont été considérablement réduits. Pour ce faire, les objets ne sont plus sérialisés en interne QuantumCircuit en QasmQobj et en remplaçant l'objet QuantumCircuit directement à une structure de circuit C++ interne utilisée pour la simulation. Cette amélioration est surtout perceptible pour les simulations de circuits avec un petit nombre de qubits ou de circuits paramétrés utilisant le mot-clé parameter_binds de run(). Notez que la simulation par impulsion (via PulseSimulator, désormais obsolète) et la simulation basée sur DASK utilisent toujours la sérialisation interne et ne bénéficieront pas de cette amélioration des performances.

  • Ajout d'une nouvelle méthode à AerJob, circuits(), qui renvoie une liste d'objets QuantumCircuit objets. Cette méthode renvoie None si Qobj est utilisé pour la simulation.

  • AerState et AerStatevector prennent désormais en charge l'application des opérateurs Kraus des opérateurs. Dans AerStatevector, l'un des opérateurs de Kraus est appliqué de manière aléatoire à l'état quantique sur la base des probabilités d'erreur.

  • Ajout d'une nouvelle méthode de simulation basée sur les API de NVIDIAcuTensorNet De cuQuantum SDK. Il s'agit d'un simulateur de réseau tensoriel général accéléré par le GPU qui peut simuler n'importe quel circuit quantique, en traduisant en interne le circuit en un réseau tensoriel pour effectuer la simulation. Pour utiliser cette méthode de simulation, il faut définir method="tensor_network" et device="GPU" lors de l'initialisation d'un objet AerSimulator . Par exemple :

    from qiskit_aer import AerSimulator
    
    tensor_net_sim = AerSimulator(method="tensor_network", device="GPU")

    Cette méthode permet d'effectuer des simulations de vecteurs d'état et de matrices de densité. La simulation du bruit peut également être effectuée à l'aide d'une matrice de densité en une seule fois s'il n'y a pas d'opérations SaveStatevector dans le circuit.

    Cette nouvelle méthode de simulation prend également en charge la parallélisation avec plusieurs GPU et processus MPI en utilisant la technique de découpage du réseau tensoriel. Toutefois, ce type de simulation risque de prendre beaucoup de temps si les circuits d'entrée sont compliqués.

  • La variable d'environnement BLA_VENDOR peut maintenant être spécifiée pour utiliser une bibliothèque BLAS différente lors de la construction de Qiskit Aer à partir des sources. Par défaut, si cela n'est pas spécifié, OpenBLAS sera utilisé par défaut. Si la bibliothèque BLAS spécifiée dans BLA_VENDOR` ne peut pas être trouvée, le processus de construction de Cmake s'arrêtera.

Problèmes connus

  • Cette version de Qiskit Aer n'est pas compatible avec la série de versions de Conan 2.X. Si vous construisez Qiskit Aer à partir des sources manuellement, assurez-vous que vous utilisez une version de Conan 1.x. La compatibilité avec les versions plus récentes de Conan sera corrigée dans une prochaine version. Vous pouvez vous référer au numéro 1730 pour plus de détails.

Mise à niveau

  • Le comportement par défaut de la primitive Estimator regroupe désormais l'observable d'entrée en observables commuables sur le plan des qubits. Le regroupement réduit le nombre de circuits à exécuter et améliore les performances. Si vous souhaitez le comportement précédent, vous pouvez initialiser votre instance de Estimator avec le mot-clé abelian_grouping=False.

  • Suppression de l'utilisation de primitives avec le gestionnaire de contexte et l'initialisation avec des circuits, (observables seulement pour Estimator), et des paramètres qui a été déprécié dans la version de Qiskit Terra 0.22.0 en Octobre 2022.

  • Le comportement de la méthode run() a changé lorsque des objets invalides ou non simulables sont transmis en entrée QuantumCircuit sont transmis en entrée. Auparavant, dans ces cas, la méthode run() renvoyait un AerJob dont la méthode result() renvoyait un Result avec ERROR ou PARTIAL COMPLETED (selon que toutes les entrées du circuit ou seulement certaines étaient invalides ou non). À partir de cette version, au lieu de renvoyer un objet de résultat avec ces statuts, une exception sera levée. Ce changement était nécessaire en raison des améliorations de performance apportées par le fait de ne plus sérialiser en interne les objets Qobj avant de les transmettre à C++ QuantumCircuit en un Qobj avant de le passer au C++, au lieu de cela la conversion directe de QuantumCircuit se trompe maintenant directement lorsqu'il essaie de simuler un circuit que Qiskit Aer est incapable d'exécuter. Si vous souhaitez le comportement précédent, vous pouvez construire Qiskit Aer en mode autonome et sérialiser manuellement vos objets en une représentation JSON QuantumCircuit en une représentation JSON de l'objet QasmQobj que vous passez ensuite au binaire Aer autonome qui conservera le comportement précédent.

  • Une méthode obsolète add_nonlocal_quantum_error() dans NoiseModel a été supprimée. Aucune méthode alternative n'est disponible. Si vous souhaitez ajouter des erreurs quantiques non locales, vous devez écrire une passe de transpilation qui insère votre propre erreur quantique dans un circuit, et exécuter la passe juste avant d'exécuter le circuit sur le simulateur Aer.

  • Le site NoiseModel.from_backend() a maintenant changé pour ne pas accepter l'objet BackendProperties comme argument backend . Utilisez plutôt la nouvelle méthode NoiseModel.from_backend_properties() .

  • Un argument déprécié de standard_gates largement utilisé dans plusieurs méthodes et fonctions (énumérées ci-dessous) du module noise a été supprimé.

    • NoiseModel.from_backend() et noise.device.basic_device_gate_errors()
    • kraus_error(), mixed_unitary_error(), pauli_error() et depolarizing_error() en noise.errors.standard_errors
    • QuantumError.__init__()

    Il n'existe pas d'autres moyens, car l'utilisateur doit être agnostique quant à la manière dont le simulateur représente les bruits (erreurs quantiques) en interne.

  • Le constructeur de QuantumError a maintenant abandonné la prise en charge de l'entrée de type json dépréciée pour l'argument noise_ops . Utilisez plutôt la nouvelle entrée styple pour l'argument noise_ops , par exemple,

    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),
    #  ])

    Il a également supprimé les arguments obsolètes :

    • number_of_qubits: Utilisez QuantumCircuit pour définir noise_ops à la place.
    • atol: Utilisez plutôt l'attribut QuantumError.atol .
    • standard_gates: Aucune alternative n'est disponible (les utilisateurs ne devraient pas trop se préoccuper de la représentation interne des erreurs quantiques).
  • Le module noise.errors.errorutils , obsolète, a été entièrement supprimé et aucune alternative n'est disponible. Toutes les fonctions du module étaient des fonctions d'aide destinées à être utilisées uniquement pour mettre en œuvre des fonctions dans standard_errors (c'est-à-dire qu'elles auraient dû être fournies en tant que fonctions privées) et ne sont plus utilisées dans ce module.

  • Le site utils.noise_remapper a été entièrement supprimé et aucune alternative n'est disponible puisque le code C++ tronque et remappe automatiquement les modèles de bruit s'il tronque les circuits.

  • Toutes les fonctions (pauli_operators() et reset_operators()) et classes (NoiseTransformer) dépréciées du module utils.noise_transformation ont été supprimées, et aucune alternative n'est disponible. Il s'agit en fait de fonctions/classes privées utilisées uniquement pour la mise en œuvre de approximate_quantum_error() et qui n'auraient pas dû être publiques.

  • Le nom de l'argument qobj de la méthode run() des classes AerSimulator et PulseSimulator , qui était auparavant déprécié, a été supprimé. Ce nom d'argument a été supprimé lors de la publication de Qiskit Aer 0.8.0 et a été remplacé par les noms d'argument circuits et schedules respectivement.

  • Le site setup.py d'Aer a été mis à jour pour ne plus tenter d'appeler pip afin d'installer les exigences de construction, à la fois manuellement et via l'option setup_requires dans setuptools.setup. La meilleure façon de construire Aer est d'utiliser un constructeur compatible avec la PEP 517, comme par exemple :

    pip install .

    Cette modification signifie qu'un appel direct à setup.py ne fonctionnera plus si les exigences de construction ne sont pas installées. Ceci est conforme aux directives modernes en matière d'emballage ( Python ).

Remarques concernant la dépréciation

  • La prise en charge de l'exécution de Qiskit Aer avec Python 3.7 est obsolète et sera supprimée dans une prochaine version. Cela signifie qu'à partir d'une prochaine version, vous devrez mettre à jour la version de Python que vous utilisez vers Python 3.8 ou une version supérieure.

  • Le backend PulseSimulator est obsolète et sera supprimé dans une prochaine version. Si vous utilisez le backend PulseSimulator pour effectuer une simulation de niveau d'impulsion, vous devez utiliser la bibliothèque Qiskit Dynamics pour effectuer la simulation. Qiskit Dynamics fournit un cadre de simulation au niveau de l'impulsion plus flexible et plus robuste que le backend PulseSimulator .

  • La méthode qobj() de la classe AerJob est désormais obsolète et sera supprimée dans une prochaine version. L'utilisation du format qobj comme entrée de run() a été dépréciée depuis qiskit-aer 0.9.0 et, dans la plupart des cas, cette méthode renverrait None de toute façon. Si vous souhaitez obtenir l'entrée de la méthode run() maintenant, vous pouvez utiliser la méthode circuits() à la place, qui renverra les objets qui ont été simulés dans le travail QuantumCircuit qui ont été simulés dans le travail.

  • Un argument warnings largement utilisé dans plusieurs méthodes et fonctions du module noise a été supprimé en faveur de l'utilisation de fonctions de filtrage dans la bibliothèque standard warnings de Python.

Corrections des erreurs

  • Correction d'un problème lors de la création d'une nouvelle instance AerStatevector à partir d'une instance numpy.ndarray dont la mémoire n'était pas contiguë. Auparavant, cela entraînait un comportement inattendu (et une erreur potentielle), car AerStatevector supposait que le tableau d'entrée était contigu. Ce problème a été corrigé de manière à ce que la disposition de la mémoire soit vérifiée et que le site numpy.ndarray soit copié en interne sous la forme d'un tableau contigu avant d'être utilisé.

  • Correction d'un problème avec la classe Sampler qui échouait si l'entrée contenait plusieurs registres classiques multiples QuantumCircuit contenait plusieurs registres classiques multiples. Corrigé #1679

  • Le nombre de bits du registre classique utilisé sur le GPU n'a pas été défini avant le calcul de la mémoire libre disponible pour les morceaux, ce qui provoque une boucle infinie. Ce correctif définit donc le nombre de bits avant d'allouer des morceaux si l'exécution de plans par lots est activée.

  • Corrige les erreurs de compilation et de test lorsque le GPU est activé mais que cuQuantum est désactivé.

  • Correction d'un problème dans la méthode de simulation de l'état du produit matriciel (c'est-à-dire en définissant l'argument du mot clé method="matrix_product_state" lors de l'initialisation d'un objet AerSimulator ) où le simulateur triait incorrectement les qubits avant d'effectuer la mesure, ce qui pouvait entraîner une boucle infinie. Ce problème a été résolu de manière à ce que la mesure des qubits se fasse dans l'ordre de la structure actuelle du MPS et que le tri se fasse ensuite en tant qu'étape de post-traitement. Cela devrait également améliorer les performances de la méthode de simulation et permettre une représentation plus précise des états intriqués. Corrigé #1694

  • Le backend de AerSimulator avec des méthodes :

    • statevector
    • density_matrix
    • matrix_product_state
    • stabilizer

    signalent désormais qu'ils prennent en charge les instructions break_loop et continue_loop lorsqu'elles sont utilisées comme backends pour la fonction Terra transpile() . Les simulateurs les prenaient déjà en charge, mais ne le signalaient pas.

IBM 0.20.2 du fournisseur Q

Cette version supprime les contraintes de version trop restrictives définies dans les exigences pour le paquet ajouté à 0.20.1. Pour 0.20.1, la seule dépendance qui devait avoir un plafond de version était le paquet requests-ntlm , car sa nouvelle version était la seule dépendance qui présentait actuellement une incompatibilité avec qiskit-ibmq-provider. Les autres caps de version qui ont été ajoutés dans le cadre de 0.20.1 posaient des problèmes d'installation dans plusieurs environnements, car ils rendaient le paquet qiskit-ibmq-provider incompatible avec les versions des dépendances utilisées dans d'autres paquets.

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