Skip to main content
IBM Quantum Platform

Notes de publication de Qiskit 0.38


0.38.0

Terra 0.21.2

Pas de modification

Aer 0.11.0

Prélude

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

  • La migration vers un nouvel espace de noms autonome Python qiskit_aer
  • L'introduction de la classe AerStatevector
  • L'introduction des implémentations Aer de primitives, Sampler et Estimator
  • Introduction d'une aide à la gestion des cuQuantum

Nouvelles fonctions

  • Ajout de la prise en charge de BackendV2 à from_backend(). Il peut maintenant générer un objet NoiseModel à partir d'une instance d'entrée BackendV2 d'entrée. Lorsqu'une entrée BackendV2 est utilisée sur from_backend() , les deux options dépréciées, standard_gates et warnings, sont ignorées.

  • Ajout d'une implémentation Aer de primitives, Sampler et BaseSampler et BaseEstimator s'appuient sur qiskit aer pour effectuer efficacement le calcul des opérations primitives. Vous pouvez vous référer à la qiskit.primitives pour une description plus détaillée de l'API des primitives.

  • Ajout d'une bibliothèque partagée à Qiskit Aer qui permet aux programmes externes d'utiliser les méthodes de simulation d'Aer. Il s'agit d'une fonctionnalité expérimentale et son API peut être modifiée sans période de dépréciation.

  • Ajout de la prise en charge des systèmes M1 macOS. Les binaires précompilés pour les versions supportées de Python >= 3.8 sur arm64 macOS seront désormais publiés sur PyPI pour cette version et les versions futures.

  • Ajout de la prise en charge de cuQuantum, NVIDIA APIs pour l'informatique quantique, afin d'accélérer les simulateurs de vecteurs d'état, de matrices de densité et d'unités en utilisant des GPU. Il s'agit d'une mise en œuvre expérimentale pour cuQuantum Beta 2. ( 0.1.0 ) Les API cuStateVec peuvent être accélérées à la place des implémentations d'Aer en construisant Aer en définissant le chemin d'accès de cuQuantum à CUSTATEVEC_ROOT. (la distribution binaire n'est pas disponible actuellement) cuStateVector est activée en définissant les options device='GPU' et cuStateVec_threshold . cuStateVec est activé lorsque le nombre de qubits du circuit d'entrée est égal ou supérieur à cuStateVec_threshold.

  • Ajout d'une prise en charge partielle de l'exécution sur les plates-formes ppc64le et s390x Linux. Cette version commencera à publier des binaires précompilés pour les plateformes ppc64le et s390x Linux sur toutes les versions de Python. Cependant, contrairement aux autres plateformes supportées, toutes les dépendances en amont de Qiskit ne supportent pas encore ces plateformes. Un compilateur C/C++ peut donc être nécessaire pour construire et installer ces dépendances et un simple pip install qiskit-aer avec un environnement Python fonctionnel ne sera pas suffisant pour installer Qiskit Aer. En outre, ces mêmes contraintes nous empêchent de tester les roues précompilées avant de les publier, de sorte que les mêmes garanties concernant la prise en charge des plates-formes qui existent pour les autres plates-formes ne s'appliquent pas à ces plates-formes.

  • Permettre l'initialisation avec une étiquette, qui consiste en +-rl. Le code suivant fonctionne à présent :

    import qiskit
    from qiskit_aer import AerSimulator
    
    qc = qiskit.QuantumCircuit(4)
    qc.initialize('+-rl')
    qc.save_statevector()
    
    AerSimulator(method="statevector").run(qc)

Problèmes connus

  • Sur les plates-formes Linux s390x (ou d'autres plates-formes big endian), l'exécution de circuits contenant des opérations de type UnitaryGate ne fonctionnera pas à cause d'un bug d'endianité. Voir #1506 pour plus de détails.

Mise à niveau

  • La parallélisation MPI pour un grand nombre de qubits est optimisée pour appliquer des échanges de morceaux multiples en tant que communication tout-en-un qui peut réduire la taille des données échangées sur les processus MPI. Cette mise à niveau améliore l'évolutivité de la parallélisation.

  • Définissez les valeurs par défaut fusion_max_qubit et fusion_threshold en fonction des valeurs configurées method pour AerSimulator. Auparavant, les valeurs par défaut de fusion_max_qubit et fusion_threshold étaient respectivement 5 et 14 pour toutes les méthodes de simulation. Toutefois, leurs valeurs optimales dépendent des méthodes d'exécution. Si vous dépendez des valeurs par défaut précédentes, vous pouvez définir explicitement fusion_max_qubit=5 ou fusion_threshold=14 pour conserver le comportement par défaut précédent. Par exemple :

    from qiskit_aer import AerSimulator
    
    sim = AerSimulator(method='mps', fusion_max_qubit=5, fusion_threshold=14)
  • Il s'agit d'une mise à jour pour prendre en charge cuQuantum 22.5.0.41, y compris la correction de bogues concernant la sécurité des threads dans certaines API de cuStateVec. Désormais, Qiskit Aer active le multithreading pour les multi-shots et la parallélisation multi-chunk lors de l'activation de cuStateVec.

  • L'exécution de qiskit-aer avec Python 3.6 n'est plus supportée. Python >= 3.7 est désormais nécessaire pour installer et exécuter qiskit-aer.

  • Le paquet qiskit-aer Python est devenu un espace de noms autonome, qiskit_aer. Auparavant, il partageait un espace de noms avec qiskit-terra en étant qiskit.providers.aer. Cela posait des problèmes pour plusieurs raisons, et cette version s'en éloigne. Pour l'instant, import qiskit.providers.aer continuera à fonctionner et redirigera automatiquement vers qiskit_aer . Les importations de l'ancien espace de noms qiskit.provider.aer émettront un DeprecationWarning à l'avenir. Pour éviter tout problème potentiel à partir de cette version, il est recommandé de mettre à jour toutes les importations de qiskit.providers.aer vers qiskit_aer et de qiskit.Aer vers qiskit_aer.Aer .

  • Suppression des instructions instantanées (telles que SnapshotStatevector) qui sont obsolètes depuis 0.9.0. Les applications qui utilisent ces instructions doivent être modifiées pour utiliser les instructions de sauvegarde correspondantes (telles que SaveStatevector).

  • Le module qiskit_aer.extensions a été complètement retiré. Avec la suppression des instructions relatives à l'instantané, ce module est devenu vide et n'a plus de raison d'être.

  • La version requise de Qiskit Terra a été augmentée à 0.20.0.

Corrections des erreurs

  • Correction de la distribution des morceaux MPI. Y compris la correction de l'indexation globale pour les implémentations Thrust, la correction du blocage du cache pour les opérations sans porte. Savestatevector renvoie également le même vecteur d'état à tous les processus (seul le premier processus a reçu le vecteur d'état précédemment)

  • Traite une porte de multiplexeur comme une porte unitaire si elle n'a pas de qubits de contrôle. Auparavant, si une porte de multiplexeur n'avait pas de qubits de contrôle, l'état quantique n'était pas mis à jour.

  • Correction d'un bogue dans RelaxationNoisePass où les durées d'instruction étaient toujours supposées être en unités de temps dt, indépendamment de l'unité réelle de l'isntruction. La conversion des unités est désormais correctement gérée pour toutes les unités de durée d'instruction.

    Voir #1453 pour plus de détails.

  • Correction de la simulation des boucles for lorsque le paramètre de boucle n'était pas utilisé dans le corps de la boucle. Par exemple, ce code, qui échouait auparavant, réussira désormais :

    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 un bogue dans NoiseModel.from_backend() qui provoquait une erreur lorsque T2 valeur supérieure à 2 * T1 était fournie par le backend. Après cette correction, il devient possible de tronquer la valeur de T2 jusqu'à 2 * T1 et d'émettre un avertissement à l'utilisateur si la valeur est tronquée. Le bogue a été introduit au #1391 et, avant cela, NoiseModel.from_backend() avait tronqué la valeur de T2 jusqu'à 2 * T1 silencieusement.

    Voir le numéro 1464 pour plus de détails.

  • Correction d'une régression des performances dans les simulations bruyantes due à une forte augmentation de la surcharge de sérialisation pour le chargement des modèles de bruit de Python en C++, résultant d'appels multiprocessus imbriqués non intentionnels à Python. Voir le numéro 1407 pour plus de détails.

  • Il s'agit de la correction du problème n°1557. Des numéros de semences différents sont générés pour chaque processus si l'option seed_simulator n'est pas définie. Il s'agit de fixer le nombre moyen de graines dans le circuit pour que tous les processus utilisent le même nombre de graines.

  • Il s'agit d'une correction de la parallélisation MPI pour la parallélisation multi-chunk et la distribution multi-shot sur les processus parallèles. Il manquait une configuration de distribution qui empêchait la distribution de MPI, c'est maintenant corrigé.

  • Il s'agit d'une correction pour le transpilateur de blocage de cache et la parallélisation par morceaux pour les GPU ou MPI. Ce correctif résout le problème des qubits qui ont beaucoup de qubits de contrôle ou de qubits cibles (> blocking_qubits). À partir de cette fixation, seuls les qubits cibles de la porte multicontrôlée sont bloqués en cache dans blocking_qubits. Mais il ne prend pas en charge le cas où le nombre de qubits cibles est toujours supérieur au nombre de qubits bloquants (c'est-à-dire une multiplication matricielle unitaire importante)

  • Corrige un bogue dans QuantumError.to_dict() où les instructions de circuit à N qubits où l'instruction assemblée s'appliquait toujours aux qubits [0, ..., N-1] plutôt qu'aux qubits de l'instruction. Ce bogue affecte également les modèles de bruit de l'appareil et du faux backend.

    Voir le numéro 1415 pour plus de détails.

  • Étant donné qu'une graine a été attribuée de manière aléatoire à chaque circuit si seed_simulator n'est pas défini, la simulation multi-circuits n'était pas reproductible avec une autre simulation multi-circuits. Les utilisateurs ont dû effectuer plusieurs simulations à circuit unique avec le simulateur de base (seed_simulator) qui est assigné de manière aléatoire dans la simulation à circuits multiples. Cette correction permet aux utilisateurs de reproduire une simulation multi-circuits avec une autre simulation multi-circuits en définissant seed_simulator du premier circuit dans la première simulation multi-circuits. Cette correction résout également un problème signalé dans https://github.com/Qiskit/qiskit-aer/issues/1511 où la simulation avec des paramètres liés renvoie des résultats identiques pour chaque instance de circuit.

  • Correction d'un problème de performance dans l'optimisation multi-shots par lots pour le GPU lors de l'utilisation du bruit de Pauli. Cette correction permet le multithreading pour l'échantillonnage du bruit en cours d'exécution, et utilise la parallélisation nested OpenMP lors de l'utilisation de plusieurs GPU. Il s'agit de la correction du problème 1473 <https://github.com/Qiskit/qiskit-aer/issues/1473>

  • Il s'agit du correctif pour le support de cuStateVec, correctif pour l'erreur de construction due au changement de spécification de certaines API de cuStateVec à partir de la version cuQuantum 0.40.

  • Corrige un problème lorsque while_loop est la queue de QuantumCircuit. while_loop est traduit en instructions de saut et de marquage. Toutefois, si une boucle while se trouve à la fin d'un circuit, son instruction mark est tronquée de manière erronée. Ce correctif corrige l'algorithme de troncature pour qu'il conserve toujours les instructions de marque.

IBM 0.19.2 du fournisseur Q

Pas de modification

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