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
Optimize1qGatesDecompositionoù le score des substitutions était mal calculé lorsque les erreurs de porte étaient nulles. -
La méthode
ECRGate.inverse()renvoie maintenant une autre instance deECRGateplutôt qu'une porte personnalisée, puisqu'elle est auto-inverse. -
Les probabilités d'écrêtage des méthodes
QuantumState.probabilities()etQuantumState.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
BackendSampleroù 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é surBackendV1avec 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
BackendSampleretBackendEstimatorpour qu'il fonctionne avec succès avec une version personnalisée debound_pass_manager. Auparavant, l'exécution des circuits simples avecbound_pass_managersoulevaitValueErrorparce qu'une liste n'était pas renvoyée dans l'une des étapes. -
La passe de
GateDirectionne 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
CommutationCheckerqui tentait d'allouer en interne un tableau pour qubits alors qu'elle n'avait besoin que d'un tableau pour représenter 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
InstructionPropertiessoulève AttributeError a été corrigé. Il renvoie maintenantNone. -
Corrigé
qasm()pour qu'il ajoute;après l'instructionreset. -
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 instructionsStatePreparationinstructions. 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 etconditional=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
OneQubitEulerDecomposerles méthodes de la classeangles()etangles_and_phase()provoquaient une erreur si la matrice d'entrée était d'un type autre quecomplex/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 deOneQubitEulerDecomposeront été réécrits en Rust. Corrigé #9827 -
Les portes Qiskit
CCZGate,CSGate,CSdgGatene sont pas définies dansqelib1.incet, 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
AerDensityMatrixauqiskit_aer.quantum_infomodule- Amélioration considérable des performances d'exécution de la classe
AerSimulatoret des classes héritéesQasmSimulator,StatevectorSimulatoretUnitarySimulatoren 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++QuantumCircuiten une représentation interne C++ au lieu de sérialiser d'abord le circuit en un objetQasmQobj. 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éthodeNoiseModel. Cela permet de construire un nouveauNoiseModelà partir d'un objetBackendProperties. Une fonctionnalité similaire était présente dans le constructeurNoiseModel.from_backend(), mais elle a été supprimée car un objetBackendPropertiesne contient pas à lui seul suffisamment d'informations pour créer un objetNoiseModel. -
Ajout d'une nouvelle classe,
AerDensityMatrix, au moduleqiskit_aer.quantum_infomodule. Cette classe est utilisée pour fournir la même interface que la classe upstreamDensityMatrixde Qiskit, mais soutenue par la simulation de Qiskit Aer. -
Ajout d'un nouveau mot-clé,
abelian_grouping, à l'optionEstimator. Cet argument est utilisé pour contrôler si leEstimatorregroupera 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'algorithmeEstimator. Par défaut, cette valeur est fixée àTrue. -
AerStatedispose d'une nouvelle méthodeinitialize_density_matrix()qui définit une matrice de densité àAER::QV::DensityMatrix. Cette méthode sera appelée dansq.i.states.DensityMatrixpour initialiser ses données avecndarray.initialize_density_matrix()a un argument booléen qui spécifie la copie ou le partage des données dendarray. 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 interneQuantumCircuitenQasmQobjet en remplaçant l'objetQuantumCircuitdirectement à 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_bindsderun(). Notez que la simulation par impulsion (viaPulseSimulator, 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'objetsQuantumCircuitobjets. Cette méthode renvoieNonesi Qobj est utilisé pour la simulation. -
AerStateetAerStatevectorprennent désormais en charge l'application des opérateursKrausdes opérateurs. DansAerStatevector, 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"etdevice="GPU"lors de l'initialisation d'un objetAerSimulator. 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
SaveStatevectordans 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_VENDORpeut 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
Estimatorregroupe 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 deEstimatoravec 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éeQuantumCircuitsont transmis en entrée. Auparavant, dans ces cas, la méthoderun()renvoyait unAerJobdont la méthoderesult()renvoyait unResultavecERRORouPARTIAL 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++QuantumCircuiten un Qobj avant de le passer au C++, au lieu de cela la conversion directe deQuantumCircuitse 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 JSONQuantumCircuiten une représentation JSON de l'objetQasmQobjque vous passez ensuite au binaire Aer autonome qui conservera le comportement précédent. -
Une méthode obsolète
add_nonlocal_quantum_error()dansNoiseModela é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'objetBackendPropertiescomme argumentbackend. Utilisez plutôt la nouvelle méthodeNoiseModel.from_backend_properties(). -
Un argument déprécié de
standard_gateslargement utilisé dans plusieurs méthodes et fonctions (énumérées ci-dessous) du modulenoisea été supprimé.NoiseModel.from_backend()etnoise.device.basic_device_gate_errors()kraus_error(),mixed_unitary_error(),pauli_error()etdepolarizing_error()ennoise.errors.standard_errorsQuantumError.__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
QuantumErrora maintenant abandonné la prise en charge de l'entrée de type json dépréciée pour l'argumentnoise_ops. Utilisez plutôt la nouvelle entrée styple pour l'argumentnoise_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: UtilisezQuantumCircuitpour définirnoise_opsà la place.atol: Utilisez plutôt l'attributQuantumError.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 dansstandard_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_remappera é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()etreset_operators()) et classes (NoiseTransformer) dépréciées du moduleutils.noise_transformationont é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 deapproximate_quantum_error()et qui n'auraient pas dû être publiques. -
Le nom de l'argument
qobjde la méthoderun()des classesAerSimulatoretPulseSimulator, 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'argumentcircuitsetschedulesrespectivement. -
Le site
setup.pyd'Aer a été mis à jour pour ne plus tenter d'appelerpipafin d'installer les exigences de construction, à la fois manuellement et via l'optionsetup_requiresdanssetuptools.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.pyne 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
PulseSimulatorest obsolète et sera supprimé dans une prochaine version. Si vous utilisez le backendPulseSimulatorpour 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 backendPulseSimulator. -
La méthode
qobj()de la classeAerJobest désormais obsolète et sera supprimée dans une prochaine version. L'utilisation du format qobj comme entrée derun()a été dépréciée depuis qiskit-aer 0.9.0 et, dans la plupart des cas, cette méthode renverraitNonede toute façon. Si vous souhaitez obtenir l'entrée de la méthoderun()maintenant, vous pouvez utiliser la méthodecircuits()à la place, qui renverra les objets qui ont été simulés dans le travailQuantumCircuitqui ont été simulés dans le travail. -
Un argument
warningslargement utilisé dans plusieurs méthodes et fonctions du modulenoisea été supprimé en faveur de l'utilisation de fonctions de filtrage dans la bibliothèque standardwarningsde Python.
Corrections des erreurs
-
Correction d'un problème lors de la création d'une nouvelle instance
AerStatevectorà partir d'une instancenumpy.ndarraydont la mémoire n'était pas contiguë. Auparavant, cela entraînait un comportement inattendu (et une erreur potentielle), carAerStatevectorsupposait 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 sitenumpy.ndarraysoit copié en interne sous la forme d'un tableau contigu avant d'être utilisé. -
Correction d'un problème avec la classe
Samplerqui échouait si l'entrée contenait plusieurs registres classiques multiplesQuantumCircuitcontenait 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 objetAerSimulator) 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
AerSimulatoravec des méthodes :statevectordensity_matrixmatrix_product_statestabilizer
signalent désormais qu'ils prennent en charge les instructions
break_loopetcontinue_looplorsqu'elles sont utilisées comme backends pour la fonction Terratranspile(). 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.