Che cosa sono Q# e il Quantum Development Kit?
QDK Quantum Development Kit è l'SDK necessario per interfacciarsi con il servizio Azure Quantum. È integrato nel portale di Azure Quantum, in cui è possibile sviluppare programmi usando i notebook Jupyter ospitati gratuitamente. È anche possibile installare QDK in locale nel computer per usare il proprio ambiente di sviluppo locale e lavorare sia online che offline con il servizio Azure Quantum. Quantum Development KitCon è possibile creare programmi eseguiti su hardware quantistico o formulare problemi eseguiti nei risolutori di ottimizzazione di ispirazione quantistica in Azure Quantum.
QDK include il linguaggio di programmazione quantistico , un linguaggio Q#di programmazione open source di alto livello che consente di concentrare il lavoro a livello di algoritmo e applicazione per creare programmi quantistici.
QDK offre il supporto per Q#, ma anche per Qiskit e Cirq per il calcolo quantistico, quindi se si lavora già in altri linguaggi di sviluppo, è anche possibile eseguire i circuiti in Azure Quantum.
QDK contiene componenti che possono essere usati autonomamente, indipendentemente dal servizio Azure Quantum:
- librerie quantistiche e del linguaggio, tutte open source.Q#
- Simulatori quantistici che simulano computer quantistici correnti e futuri, in modo che sia possibile eseguire ed eseguire il debug degli algoritmi quantistici scritti in Q#.
- Estensioni per Visual Studio 2022 e Visual Studio Code e integrazione con Jupyter Notebook.
Introduzione a Q# e Quantum Development Kit
Per iniziare subito, è possibile esplorare Q# il portale di Azure Quantum senza alcuna installazione necessaria. Per altre informazioni, vedere Introduzione a Q# e a un notebook di Azure Quantum.
Per altre opzioni di ambiente di sviluppo, vedere Configurare .Quantum Development Kit
Il linguaggio di programmazione quantistico Q#
Q# è un linguaggio di programmazione open source di alto livello per lo sviluppo e l'esecuzione di algoritmi quantistici. Fa parte di Quantum Development Kit (QDK) ed è progettato per essere indipendente dall'hardware, ridimensionare fino all'intera gamma di applicazioni quantistice e ottimizzare l'esecuzione. Per altre informazioni sul progetto di sviluppo del Q# linguaggio, vedere il Q# repository di progettazione delle librerie di base e in GitHub.
Come linguaggio di programmazione, Q# disegna elementi familiari da Python, C# e F# e supporta un modello procedurale di base per la scrittura di programmi con cicli, istruzioni if/then e tipi di dati comuni. Introduce anche nuove strutture e operazioni di dati specifiche del quantum, ad esempio la stima della fase di ripetizione fino al successo e della fase adattiva, che consentono l'integrazione di calcoli quantistici e classici. Ad esempio, il controllo del flusso di un programma classico può essere basato sul risultato di una misurazione quantistica.
Integrazione con calcolo quantistico e classico
Q# è un linguaggio autonomo che offre un livello elevato di astrazione. Non occorre alcuna nozione di stato quantistico o circuito. Q# implementa invece i programmi in termini di istruzioni ed espressioni, in modo molto simile ai linguaggi di programmazione classici. Funzionalità quantistiche distinte, ad esempio il supporto per funtori e costrutti di flusso di controllo, facilitano l'espressione, ad esempio, la stima delle fasi e gli algoritmi di chimica quantistica .
Il Q# linguaggio supporta l'integrazione di calcoli classici e quantistici avanzati. Ciò consente un'espressione pulita di algoritmi adattivi, ad esempio l'operazione di stima casuale della fase di marcia , difficili da esprimere direttamente nel modello di circuito di una sequenza fissa di gate quantistici.
Q# supporta il controllo di flusso classico generale durante l'esecuzione di un algoritmo. In particolare, il controllo del flusso classico si basa sui risultati della misurazione quantistica, che rende molto più semplice scrivere elementi che dipendono dalle misurazioni intermedie. Ad esempio, il ciclo necessario per algoritmi probabilistici, ad esempio la ricerca di Grover, può essere facilmente espresso in Q#, anziché dover tornare al driver classico per verificare se il risultato soddisfa l'oracolo e riesecuzione in caso contrario.
Qubit come riferimenti opachi
In Q#i qubit sono una risorsa richiesta dal runtime quando necessario e restituita quando non è più in uso. Questo è simile al modo in cui i linguaggi classici gestiscono la memoria dell'heap.
Nei Q# qubit vengono modellati come tipi di dati opachi che rappresentano un riferimento a un sistema quantistico a due stati specifico, sia fisico che logico (corretto dall'errore), su cui è possibile eseguire operazioni quantistiche. Si tratta di una visualizzazione operativa dei qubit, ovvero i qubit sono definiti da ciò che è possibile eseguire.
Il mapping da una variabile qubit in un programma a un qubit logico o fisico effettivo viene deciso dal runtime e tale mapping può essere posticipato fino a quando non viene nota la topologia e altri dettagli del target dispositivo. Il runtime è responsabile per la determinazione di un mapping che consente l'esecuzione dell'algoritmo, inclusi eventuali trasferimenti di stato di qubit e ripetizioni del mapping necessari durante l'esecuzione.
La rappresentazione usata in Q# ha l'interessante implicazione che tutto il calcolo quantistico effettivo viene eseguito come effetto collaterale. Non esiste alcun modo per interagire direttamente con lo stato quantistico del computer. Non dispone di alcuna rappresentazione software. Si eseguono invece operazioni su entità qubit che hanno l'effetto collaterale di modificare lo stato quantistico. In effetti, lo stato quantistico del computer è una variabile globale opaca inaccessibile se non tramite un piccolo set di primitive di funzioni di accesso (misurazioni) e anche queste funzioni di accesso hanno effetti collaterali sullo stato quantistico e quindi sono effettivamente "mutatori con risultati" anziché vere e proprie funzioni di accesso.
Rispettare le leggi della fisica
I programmi quantistici devono essere tenuti a rispettare le leggi della fisica. Ad esempio, la copia dello stato di un qubit o l'accesso diretto allo stato del qubit non sono possibili in Q#.
Pertanto, Q# non è in grado di analizzare direttamente lo stato di un qubit o di altre proprietà della meccanica quantistica, il che garantisce che un programma Q# possa essere eseguito fisicamente in qualsiasi computer quantistico. Al contrario, un Q# programma ha la possibilità di chiamare operazioni e funzioni, ad esempio DumpOperation operation, per estrarre informazioni classiche da un qubit, che consentono la convalida e l'esame dello stato per facilitare il debug con un simulatore. Per altre informazioni, vedere test e debug.
Indipendente dall'hardware
Q# è indipendente dall'hardware, ovvero fornisce i mezzi per esprimere e sfruttare concetti avanzati di calcolo quantistico indipendentemente dal modo in cui l'hardware si evolve in futuro. Per essere utilizzabile in un'ampia gamma di applicazioni, Q# consente di creare componenti riutilizzabili e livelli di astrazioni. Per mantenere le prestazioni con l'aumento delle dimensioni dell'hardware quantistico, il linguaggio di programmazione quantistico Q# garantisce la scalabilità sia delle applicazioni che delle attività di sviluppo. Anche se la complessità completa di tali calcoli richiede un ulteriore sviluppo hardware, Q# i programmi possono essere targeteseguiti in vari back-end hardware quantistici in Azure Quantum.
Esecuzione efficiente
Il Q# linguaggio è incentrato sull'espressione di informazioni per ottimizzare l'esecuzione dei componenti quantistici, indipendentemente dal contesto in cui vengono richiamati. Q# consente allo sviluppatore di comunicare le proprie conoscenze su un calcolo in modo che il compilatore possa prendere una decisione informata su come convertirlo in istruzioni, sfruttando le informazioni sull'applicazione end-to-end non disponibili per lo sviluppatore.
Per altre informazioni sulle funzionalità di QDK e sulle parti generali che rientrano in un Q# programma, vedere la guida dell'utente del Q# linguaggio di programmazione quantistica.
Flusso di lavoro di sviluppo quantistico con QDK
Quando si compila ed esegue un programma quantistico, QDK crea un'istanza del simulatore quantistico e vi passa il Q# codice. Il simulatore usa il codice Q# per creare i qubit (simulazioni di particelle quantistiche) e applicare le trasformazioni per modificarne lo stato. I risultati delle operazioni quantistiche nel simulatore vengono quindi restituiti al programma. L'isolamento del codice Q# nel simulatore garantisce che gli algoritmi seguano le leggi della fisica quantistica e possano essere eseguiti correttamente nei computer quantistici.
Tutto ciò che è necessario scrivere ed eseguire Q# programmi, tra cui il Q# compilatore, le Q# librerie e i simulatori quantistici, viene pre-distribuito nei notebook jupyter ospitati nel portale di Azure. È anche possibile installare ed eseguire QDK dal computer locale, in modo da poter usare l'IDE e il linguaggio preferiti in locale e inviare processi a simulatori quantistici o basati sul cloud in Azure Quantum oppure usare simulatori locali. Per altre informazioni, vedere Configurare l'ambiente di sviluppo quantistico.
Il diagramma seguente mostra le fasi che un programma quantistico deve attraversare, dall'idea all'implementazione completa in Azure Quantum, e gli strumenti offerti dal kit di sviluppo Quantum per ogni fase.
Nota
Si usa lo stesso codice Q# per tutti i passaggi del flusso di lavoro. A breve termine potrebbe essere necessario modificare alcune parti del codice per adeguarlo alle limitazioni dell'hardware corrente. A lungo termine sarà tuttavia possibile spostarsi tra diversi simulatori e provider di hardware senza modifiche al codice.
Scrivere il programma quantistico
Un Q# programma può essere compilato in un'applicazione autonoma, può essere eseguito in un Jupyter Notebook o chiamato da un programma host scritto in Python o in un linguaggio .NET.
Se si vuole iniziare a praticare e scrivere i Q# programmi senza installare software aggiuntivo, è possibile usare i notebook jupyter ospitati disponibili nell'area di lavoro di Azure Quantum nel portale di Azure. La raccolta di esempi contiene una raccolta di esempi di notebook con annotazioni: selezionare l'esempio da esplorare ed eseguirlo in simulatori basati sul cloud o in computer quantistici reali.
Se si preferisce un ambiente di sviluppo locale, è possibile creare il Q# programma usando Jupyter Notebook con il kernel IQ# o le estensioni QDK per Visual Studio Code e Visual Studio 2022 e quindi eseguirle su hardware quantistico o su simulatori locali o basati sul cloud.
Indipendentemente dall'ambiente preferito, è possibile seguire le Q# esercitazioni e iniziare a scrivere programmi quantistici per esplorare i concetti quantistici, ad esempio la sovrapposizione, l'entanglement, l'algoritmo quantistico di Grover e altri fenomeni quantistici.
Se non si ha un account Azure e si vuole provare Q# senza installare QDK in locale, è possibile usare Binder per eseguire gli Q# esempi in Jupyter Notebook online.
Esplorare le librerie specifiche del dominio
Le librerie Q# consentono di sviluppare codice di alto livello, consentendo di eseguire operazioni quantistiche complesse senza dover progettare sequenze di operazioni di basso livello. I nuovi Q# progetti includono automaticamente la Q#libreria standard, che fornisce un set di funzioni e operazioni essenziali e molto utili che possono essere usate durante la scrittura di programmi quantistici in Q#.
Oltre alla libreria standard, il kit di sviluppo Quantum include una libreria di chimica quantistica per simulare problemi di dinamica quantistica e struttura elettronica nei computer quantistici, una libreria di Machine Learning quantistico che fornisce un'implementazione dei classificatori sequenziali che sfruttano il calcolo quantistico per eseguire esperimenti ibridi di Machine Learning quantistico/classico e una libreria per il calcolo numerico quantistico che fornisce il supporto per un'ampia gamma di funzionalità numeriche.
Eseguire i programmi nei simulatori
Dopo aver scritto il programma, QDK offre un set di simulatori quantistici , programmi classici che simulano il comportamento di un sistema quantistico, in modo che sia possibile eseguire una piccola istanza del programma e vedere cosa fa senza l'accesso hardware effettivo. È possibile eseguire i programmi quantistici in un simulatore quantistico a stato completo, un simulatore Toffoli con ambito limitato, un simulatore sparse per i sistemi con un numero maggiore di qubit e anche usare il simulatore di rumore per simulare il comportamento dei Q# programmi sotto l'influenza degli ambienti rumorosi.
Vedere l'elenco completo dei simulatori quantistici.
Stimare le risorse
Prima di eseguire l'hardware quantistico, è necessario determinare se il programma può essere eseguito sull'hardware esistente e il numero di risorse che utilizzerà. È possibile usare il simulatore di traccia per stimare il numero di qubit e i gate quantistici necessari ed eseguire il debug di codice classico che fa parte del programma quantistico.
È anche possibile inviare il programma quantistico allo strumento di stimatarget delle risorse di Azure Quantum in portale di Azure. Lo strumento di stima delle risorse di Azure Quantum calcola la stima delle risorse fisiche post-layout prendendo in considerazione i presupposti relativi ai parametri qubit, ai codici di correzione degli errori quantistici e al budget degli errori. È gratuito e richiede un account Azure.
Inviare processi al servizio Azure Quantum
Azure Quantum è il servizio di calcolo quantistico cloud di Azure, con un set diversificato di soluzioni e tecnologie quantistiche. Azure Quantum garantisce un percorso aperto, flessibile e a prova di futuro per il calcolo quantistico che consente di eseguire il programma su hardware quantistico. È possibile eseguire qiskit, cirq e Q# programmi in più sistemi quantistici. Per l'elenco corrente dei provider hardware supportati, vedere Provider di calcolo quantistici .
Suggerimento
Gli utenti per la prima volta ottengono automaticamente $ 500 (USD)Crediti Quantistici di Azure per l'uso con ogni provider hardware quantistico partecipante. Se sono stati utilizzati tutti i crediti e sono necessari crediti aggiuntivi, è possibile candidarsi al programma Azure Quantum Credits.
Dopo aver creato un'area di lavoro Azure Quantum, è possibile inviare i Q# programmi (noti anche come processi) ad Azure Quantum tramite l'ambiente di sviluppo preferito, sia in locale che online. Per altre informazioni, vedere come inviare Q# processi. È anche possibile eseguire e inviare circuiti quantistici scritti in Qiskit o Cirq.
Il diagramma seguente mostra il flusso di lavoro di base dopo l'invio del processo:
Azure Quantum offre alcune delle risorse quantistiche più interessanti e diversificate attualmente disponibili per i leader di diversi settori. Con Azure Quantum e QDK è possibile scrivere programmi di ottimizzazione quantistici e di ottimizzazione di ispirazione quantistica e inviarli ad Azure Quantum per l'esecuzione su hardwarequantistico e risolutori di ottimizzazione.
Passaggi successivi
Per altre informazioni, le esercitazioni Quantum Katas offrono una buona introduzione ai concetti del calcolo quantistico, ad esempio le operazioni quantistiche comuni, e alla modifica dei qubit.