Note di rilascio di Qiskit 0.6
0.6
Terra 0.6
Evidenziazioni
Questa versione include una riprogettazione dei componenti interni incentrata su un nuovo formato di comunicazione formale (Qobj), oltre a funzionalità attese da tempo per migliorare l'esperienza utente nel suo complesso. I punti salienti, rispetto alla release 0.5, sono i seguenti:
- Miglioramenti per l'interoperabilità (basati sulle specifiche Qobj) e l'estensibilità (strutture per estendere Qiskit con nuovi backend in modo continuo)
- Nuove opzioni per la gestione delle credenziali e dell'autenticazione per i backend di IBM Q, volte a semplificare il processo e a supportare il caricamento automatico delle credenziali degli utenti
- Un rinnovamento delle utility di visualizzazione: eleganti visualizzazioni interattive sono ora disponibili per gli utenti di Jupyter, insieme a miglioramenti per il cassetto dei circuiti (inclusa una versione basata su matplotlib)
- Miglioramenti delle prestazioni incentrati sulla transpilazione dei circuiti: sono state poste le basi per un'architettura più flessibile e modulare, che comprende la parallelizzazione della compilazione dei circuiti e numerose ottimizzazioni
Considerazioni sulla compatibilità
Si noti che in questa versione sono state introdotte alcune modifiche incompatibili con le versioni precedenti; le note seguenti contengono informazioni su come adattarsi alle nuove modifiche.
Rimozione di QuantumProgram
Come accennato durante il rilascio di 0.5, la deprecazione della classe QuantumProgram è stata completata e non è più disponibile, in favore del lavoro con i singoli componenti (BaseJob, QuantumCircuit, ClassicalRegister, QuantumRegister, qiskit) direttamente.
Per maggiori dettagli sulla transizione, consultare le note di rilascio di 0.5 e gli esempi:
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 Autenticazione e Qconfig.py
La gestione delle credenziali per l'autenticazione quando si utilizzano i backend di IBM Q è stata ampliata e ci sono nuove opzioni che possono essere utilizzate per comodità:
-
salvare le credenziali su disco una volta e caricarle automaticamente nelle sessioni future. Si tratta di un meccanismo una tantum:
from qiskit import IBMQ IBMQ.save_account('MY_API_TOKEN', 'MY_API_URL')in seguito, le credenziali possono essere caricate automaticamente dal disco invocando
load_accounts():from qiskit import IBMQ IBMQ.load_accounts()oppure si possono caricare solo conti specifici, se si desidera utilizzare solo quelli in una sessione:
IBMQ.load_accounts(project='MY_PROJECT') -
utilizzare le variabili d'ambiente. Se
QE_TOKENeQE_URLsono impostati, la chiamataIBMQ.load_accounts()caricherà automaticamente le credenziali da essi.
Inoltre, il metodo precedente di avere un file Qconfig.py nella cartella del programma e di passare le credenziali in modo esplicito è ancora supportato.
Lavorare con i backend
In Terra 0.6 è stato introdotto un nuovo meccanismo come modalità consigliata per ottenere un backend, che consente un filtraggio più potente e unificato ed è integrato con il nuovo sistema di credenziali. I precedenti metodi di primo livello register(), available_backends() e get_backend() sono ancora supportati, ma saranno deprecati nelle prossime versioni a favore dell'uso diretto degli oggetti qiskit.IBMQ e qiskit.Aer, che consentono un filtraggio più complesso.
Ad esempio, per elencare e utilizzare un backend locale:
from qiskit import Aer
all_local_backends = Aer.backends(local=True) # returns a list of instances
qasm_simulator = Aer.backends('qasm_simulator')E per elencare e utilizzare i backend remoti:
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')Si noti inoltre che i nomi dei simulatori locali sono stati semplificati. I nomi precedenti possono ancora essere utilizzati, ma si consiglia di usare i nuovi nomi più brevi:
Qiskit Terra 0.5 | Qiskit Terra 0.6 |
|---|---|
| 'locale_qasm_simulatore' | 'qasm_simulatore' |
| 'simulatore_di_stato_locale' | 'simulatore di vettore di stato' |
| 'locale_unitario_simulatore_py' | 'simulatore unitario' |
Modifiche al backend e all'API dei lavori
-
I lavori inviati ai backend di IBM Q hanno funzionalità migliorate. È possibile cancellarli e ricostituire i crediti (
job.cancel()), e recuperare i lavori precedenti eseguiti su un backend specifico, sia in base all'id del lavoro (backend.retrieve_job(job_id)) sia in batch di lavori più recenti (backend.jobs(limit)) -
Le proprietà per controllare lo stato di ogni singolo lavoro (
queued,running,validating,doneecancelled) non esistono più. Se si desidera verificare lo stato del lavoro, utilizzare il confronto di identità conjob.status:from qiskit.backends import JobStatus job = execute(circuit, backend) if job.status() is JobStatus.RUNNING: handle_job(job)
Per ulteriori informazioni sull'uso dell'API semplificata, consultare la nuova documentazione della classe IBMQJob .
-
Alcuni membri di
BaseBackendeBaseJobnon sono più proprietà, ma metodi e di conseguenza devono essere invocati come funzioni.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
Strumenti Jupyter migliori
La nuova versione contiene miglioramenti all'esperienza d'uso dei notebook Jupyter.
In primo luogo, vengono fornite nuove visualizzazioni interattive degli istogrammi dei conteggi e degli stati quantici: plot_histogram() e plot_state(). Questi metodi saranno impostati di default sul nuovo tipo interattivo quando l'ambiente è Jupyter e c'è una connessione a Internet.
In secondo luogo, la nuova versione fornisce la magia delle celle Jupyter per tenere traccia dei progressi del codice. Utilizzare %%qiskit_job_status per tenere traccia dello stato dei lavori inviati ai backend IBM Q. Utilizzare %%qiskit_progress_bar per tenere traccia dell'avanzamento della compilazione/esecuzione.