Notes de publication de Qiskit 0.6
0.6
Terra 0.6
Mises en évidence
Cette version comprend une refonte des composants internes centrée sur un nouveau format de communication formel (Qobj), ainsi que des fonctionnalités attendues depuis longtemps pour améliorer l'expérience de l'utilisateur dans son ensemble. Les points forts, par rapport à la version 0.5, sont les suivants :
- Amélioration de l'interopérabilité (basée sur la spécification Qobj) et de l'extensibilité (facilités pour étendre Qiskit avec de nouveaux backends de manière transparente)
- Nouvelles options de gestion des informations d'identification et d'authentification pour les backends de IBM Q, visant à simplifier le processus et à prendre en charge le chargement automatique des informations d'identification des utilisateurs
- Une refonte des utilitaires de visualisation : des visualisations interactives élégantes sont désormais disponibles pour les utilisateurs de Jupyter, ainsi que des améliorations pour le dessinateur de circuits (y compris une version basée sur matplotlib)
- Amélioration des performances autour de la transpilation des circuits : les bases d'une architecture plus flexible et modulaire ont été posées, y compris la parallélisation de la compilation des circuits et de nombreuses optimisations
Compatibility Considerations
Veuillez noter que certaines modifications incompatibles avec le passé ont été introduites dans cette version. Les notes suivantes contiennent des informations sur la manière de s'adapter à ces nouvelles modifications.
Suppression de QuantumProgram
Comme indiqué lors de la publication de 0.5, la dépréciation de la classe QuantumProgram est maintenant terminée et n'est plus disponible, en faveur d'un travail avec les composants individuels (BaseJob, QuantumCircuit, ClassicalRegister, QuantumRegister, qiskit) directement.
Veuillez consulter les notes de mise à jour de 0.5 et les exemples pour plus de détails sur la transition :
from qiskit import QuantumCircuit, ClassicalRegister, QuantumRegister
from qiskit import Aer, execute
q = QuantumRegister(2)
c = ClassicalRegister(2)
qc = QuantumCircuit(q, c)
qc.h(q[0])
qc.cx(q[0], q[1])
qc.measure(q, c)
backend = get_backend('qasm_simulator')
job_sim = execute(qc, backend)
sim_result = job_sim.result()
print("simulation: ", sim_result)
print(sim_result.get_counts(qc))IBM Q Authentification et Qconfig.py
La gestion des informations d'identification pour l'authentification lors de l'utilisation des backends de IBM Q a été élargie, et de nouvelles options peuvent être utilisées pour plus de commodité :
-
enregistrer une fois vos informations d'identification sur le disque et les charger automatiquement lors de sessions ultérieures. Il s'agit d'un mécanisme unique :
from qiskit import IBMQ IBMQ.save_account('MY_API_TOKEN', 'MY_API_URL')ensuite, vos informations d'identification peuvent être automatiquement chargées à partir du disque en invoquant
load_accounts():from qiskit import IBMQ IBMQ.load_accounts()ou vous pouvez charger uniquement des comptes spécifiques si vous ne voulez utiliser que ceux-là dans une session :
IBMQ.load_accounts(project='MY_PROJECT') -
utiliser des variables d'environnement. Si
QE_TOKENetQE_URLsont définis, l'appelIBMQ.load_accounts()chargera automatiquement les informations d'identification à partir de ceux-ci.
En outre, la méthode précédente, qui consistait à placer un fichier Qconfig.py dans le dossier du programme et à transmettre les informations d'identification de manière explicite, est toujours prise en charge.
Travailler avec les backends
Un nouveau mécanisme a été introduit dans Terra 0.6 comme moyen recommandé pour obtenir un backend, permettant un filtrage plus puissant et unifié et intégré au nouveau système d'accréditation. Les anciennes méthodes de niveau supérieur register(), available_backends() et get_backend() sont toujours prises en charge, mais elles seront abandonnées dans les prochaines versions au profit de l'utilisation directe des objets qiskit.IBMQ et qiskit.Aer, qui permettent un filtrage plus complexe.
Par exemple, pour répertorier et utiliser un backend local :
from qiskit import Aer
all_local_backends = Aer.backends(local=True) # returns a list of instances
qasm_simulator = Aer.backends('qasm_simulator')Et pour lister et utiliser des backends distants :
from qiskit import IBMQ
IBMQ.enable_account('MY_API_TOKEN')
5_qubit_devices = IBMQ.backends(simulator=True, n_qubits=5)
ibmqx4 = IBMQ.get_backend('ibmqx4')Veuillez également noter que les noms des simulateurs locaux ont été simplifiés. Les anciens noms peuvent encore être utilisés, mais il est encouragé d'utiliser les nouveaux noms, plus courts :
Qiskit Terra 0.5 | Qiskit Terra 0.6 |
|---|---|
| simulateur local" (local_qasm\simulator) | qasm_simulateur' |
| simulateur d'état local | simulateur de vecteur d'état |
| local_unitary_simulator_py | simulateur_unitaire |
Modifications apportées au backend et à l'API Job
-
Les travaux soumis aux backends de IBM Q ont des capacités améliorées. Il est possible de les annuler et de reconstituer les crédits (
job.cancel()), et de récupérer les travaux précédents exécutés sur un backend spécifique, soit par l'identifiant du travail (backend.retrieve_job(job_id)), soit par le lot des derniers travaux (backend.jobs(limit)) -
Les propriétés permettant de vérifier l'état de chaque emploi (
queued,running,validating,doneetcancelled) n'existent plus. Si vous souhaitez vérifier l'état d'un travail, utilisez la comparaison d'identité avecjob.status:from qiskit.backends import JobStatus job = execute(circuit, backend) if job.status() is JobStatus.RUNNING: handle_job(job)
Veuillez consulter la nouvelle documentation de la classe IBMQJob pour en savoir plus sur l'utilisation de l'API simplifiée.
-
Un certain nombre de membres de
BaseBackendetBaseJobne sont plus des propriétés, mais des méthodes, et doivent donc être invoqués en tant que fonctions.Qiskit Terra 0.5Qiskit Terra 0.6backend.name backend.name() backend.status backend.status() backend.configuration backend.configuration() backend.calibration backend.properties() backend.parameters backend.jobs () backend.retrieve_job (job_id) job.status job.status() job.cancelled job.queue_position() job.running job.cancel() job.queued job.done
De meilleurs outils Jupyter
La nouvelle version contient des améliorations de l'expérience utilisateur lors de l'utilisation des carnets Jupyter.
Tout d'abord, de nouvelles visualisations interactives des histogrammes de comptage et des états quantiques sont fournies : plot_histogram() et plot_state(). Ces méthodes utiliseront par défaut le nouveau type de visualisation interactive lorsque l'environnement est Jupyter et qu'une connexion internet existe.
Deuxièmement, la nouvelle version propose des cellules Jupyter magiques pour suivre l'évolution de votre code. Utilisez %%qiskit_job_status pour suivre l'état des travaux soumis aux backends IBM Q. Utilisez %%qiskit_progress_bar pour suivre la progression de la compilation/exécution.