NVIDIA CUDA-Q rappresenta un modello di programmazione “open source” per la creazione di applicazioni quantistiche classiche.
Con il framework Nvidia CUDA-Q, carichi di lavoro utili del calcolo quantistico verranno eseguiti su architetture informatiche eterogenee come unità di elaborazione quantistica (QPU), GPU e CPU in tandem per risolvere problemi del mondo reale. CUDA-Q consente l’accelerazione di tali applicazioni fornendo gli strumenti per programmare armoniosamente queste architetture informatiche.
La capacità di indirizzare più QPU e GPU è essenziale per scalare le applicazioni quantistiche. La distribuzione dei carichi di lavoro su più endpoint di calcolo può ottenere notevoli accelerazioni quando questi carichi di lavoro possono essere parallelizzati. Una nuova funzionalità CUDA-Q consente di programmare senza problemi piattaforme multi-QPU insieme a più GPU.
Gran parte dell’accelerazione in CUDA-Q viene eseguita utilizzando Message Passing Interface (MPI), un protocollo di comunicazione creato per la programmazione parallela. È particolarmente utile per risolvere problemi che richiedono grandi quantità di calcoli, come le previsioni meteorologiche e le simulazioni di dinamica dei fluidi e molecolari. Ora, CUDA-Q può essere integrato con qualsiasi implementazione MPI utilizzando un plug-in MPI, in modo che i client possano utilizzare facilmente CUDA-Q con la configurazione MPI di cui già dispongono.
Simulazione di circuiti in scala con multi-GPU
La simulazione del circuito per n qubit è limitata dalla memoria richiesta per memorizzare il vettore di stato bidimensionale. Le GPU NVIDIA Hopper H100 offrono 80 GB di memoria ciascuna per i target CUDA-Q per eseguire la simulazione esatta del vettore di stato oltre i limiti di ciò che è fattibile con l’attuale hardware QPU.
Inoltre, il target nvidia-mgpu raggruppa la memoria di più GPU in un nodo e di più nodi in un cluster per consentire il ridimensionamento e rimuovere il collo di bottiglia della memoria della singola GPU. Questo strumento software pronto all’uso in CUDA-Q funziona allo stesso modo per un singolo nodo come per decine o addirittura migliaia di nodi. I conteggi dei qubit sono limitati solo dalle risorse GPU disponibili.
Pertanto, per un nodo con quattro GPU, ciascuna con 80 GB di memoria, è possibile utilizzare 80 x 4 = 320 GB di memoria per archiviare e manipolare il vettore dello stato quantistico per la simulazione del circuito.
Parallelizzazione con multi-QPU
La modalità multi-QPU consente di programmare flussi di lavoro futuri in cui la parallelizzazione può ridurre il tempo di esecuzione di un fattore pari alle risorse di calcolo disponibili.
Si immagini un protocollo di taglio di circuiti in cui un taglio richiede l’esecuzione di più sottocircuiti, i cui risultati vengono ricuciti insieme in post-elaborazione. Nel software tradizionale, questi sottocircuiti verrebbero eseguiti in sequenza. Tuttavia, con il target nvidia-mqpu in CUDA-Q, l’esecuzione di questi sottocircuiti avverrà in parallelo, riducendo drasticamente il tempo di esecuzione.
Attualmente, ciascuna QPU nel target nvidia-mqpu è una GPU.
Un altro flusso di lavoro comune definito “embarassingly parallel” è il calcolo del valore atteso di un hamiltoniano con molti termini. Con la modalità multi-QPU è possibile definire più endpoint, in cui ciascun endpoint può simulare una parte indipendente del problema. Utilizzando il target nvidia-mqpu, è possibile eseguire, ad esempio, più termini di un hamiltoniano in parallelo in modo asincrono. Per i dettagli, vedere Programmazione del supercomputer quantistico-classico.
Per il cluster di quattro GPU menzionato in precedenza, il calcolo dei termini hamiltoniani in parallelo, rispetto alla loro valutazione su una singola GPU, consente di ottenere una velocità 4 volte superiore. Se il calcolo sequenziale richiede 1 ora, con più endpoint, richiede solo 15 minuti. Tuttavia, la dimensione del problema su ciascuna GPU è ancora limitata a 80 GB.
Combinazione di carichi di lavoro multi-QPU e multi-GPU
Come spiegato in precedenza, è possibile raggiungere la scala della simulazione di circuiti quantistici con il target nvidia-gpu e la parallelizzazione con il target nvidia-mqpu. Con CUDA-Q 0.6, è ora possibile combinare i due target, consentendo l’esecuzione in parallelo di simulazioni su larga scala.
Tornando all’esempio precedente, se il calcolo sequenziale richiedesse 1 ora, con due endpoint, occorrerebbero solo 30 minuti, ma ciascun endpoint può essere costituito da due GPU NVIDIA A100 e contenere un vettore di stato da 160 GB.
In qualità di sviluppatore, ora puoi sperimentare per trovare il punto giusto tra la dimensione del problema e il numero di endpoint paralleli, utilizzando al massimo le tue GPU. Consulta la documentazione CUDA-Q per ulteriori informazioni sulla destinazione remote-mqpu.
Plug-in MPI
MPI è un protocollo di comunicazione utilizzato per programmare computer paralleli.
CUDA-Q utilizza MPI ed è costruito con Open MPI, che è un’implementazione open source del protocollo MPI. Esistono altre implementazioni MPI popolari come MPICH e MVAPICH2 e molti centri o data center di calcolo ad alte prestazioni (HPC) sono già configurati con un’implementazione specifica.
Ora è più semplice che mai integrare CUDA-Q con qualsiasi implementazione MPI, tramite un’interfaccia plug-in MPI. È necessario uno script di attivazione una tantum per creare una libreria dinamica per l’implementazione. CUDA-Q 0.6 include implementazioni di plugin compatibili con Open MPI e MPICH. Contributi per ulteriori implementazioni MPI sono benvenuti e dovrebbero essere facili da aggiungere.
Scopri di più su come utilizzare il plug-in MPI nella sezione Distributed Computing with MPI della documentazione CUDA-Q.
Ulteriori informazioni su CUDA-Q
Visita NVIDIA/cuda-quantum per visualizzare il registro completo della versione CUDA-Q 0.6. CUDA-Q Quick Start ti guida attraverso i passaggi di configurazione con esempi Python e C++. Per casi d’uso avanzati per applicazioni quantistiche classiche, vedere i tutorial CUDA-Q. Infine, esplora il codice, segnala i problemi e fornisci suggerimenti sulle funzionalità nel repository open source CUDA-Q.
(fonte: developer.nvidia.com)
Iscriviti ai nostri gruppi Telegram
Link utili