View a markdown version of this page

Utilizzo CUDA-Q con Amazon Braket - Amazon Braket

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

Utilizzo CUDA-Q con Amazon Braket

NVIDIA's CUDA-Qè una libreria software progettata per la programmazione di algoritmi quantistici ibridi che combinano CPU, GPU e unità di elaborazione quantistica (QPU). Fornisce un modello di programmazione unificato, che consente agli sviluppatori di esprimere istruzioni classiche e quantistiche all'interno di un unico programma, semplificando i flussi di lavoro. CUDA-Qaccelera la simulazione e l'esecuzione dei programmi quantistici con i simulatori CPU e GPU integrati. CUDA-Qè disponibile con istanze notebook Braket native (NBI) e Amazon Braket Hybrid Jobs.

CUDA-Q in NBI

CUDA-Qè installato di default nell'ambiente Braket NBI. Puoi aprire un taccuino di CUDA-Q esempio andando alla pagina di avvio di Jupyter e selezionando il riquadro e Braket. CUDA-Q Questo apre il taccuino 0_Getting_started_with_CUDA-Q.ipynb di esempio nella finestra principale. Per altri CUDA-Q esempi, vedi il pannello a sinistra nella nvidia_cuda_q/ directory.

Puoi anche verificare la versione CUDA-Q o qualsiasi altro pacchetto di terze parti installato nel tuo NBI. Ad esempio, puoi eseguire il seguente comando in una cella di codice del notebook per verificare le versioni dei CUDA-Q pacchetti Qiskit e Braket installate nell'ambiente. PennyLane

%pip freeze | grep -i -e cudaq -e qiskit -e pennylane -e braket

CUDA-Q in Hybrid Jobs

L'utilizzo CUDA-Q su Amazon Braket Hybrid Jobs offre un ambiente di elaborazione flessibile e su richiesta. Le istanze computazionali vengono eseguite solo per la durata del carico di lavoro, assicurandoti di pagare solo per ciò che utilizzi. Amazon Braket Hybrid Jobs offre anche un'esperienza scalabile. Gli utenti possono iniziare con istanze più piccole per la prototipazione e il test, quindi passare a istanze più grandi in grado di gestire carichi di lavoro maggiori per esperimenti completi.

Amazon Braket Hybrid Jobs supporta le GPU essenziali per massimizzare il potenziale. CUDA-Q Le GPU velocizzano notevolmente le simulazioni di programmi quantistici rispetto ai CPU-based simulatori, soprattutto quando si lavora con circuiti ad alto numero di qubit. La parallelizzazione diventa semplice quando si utilizza su Amazon Braket Hybrid Jobs. CUDA-Q Hybrid Jobs semplifica la distribuzione del campionamento dei circuiti e delle valutazioni osservabili su più nodi computazionali. Questa perfetta parallelizzazione dei carichi di lavoro consente agli utenti di concentrarsi maggiormente sullo sviluppo dei CUDA-Q carichi di lavoro piuttosto che sulla creazione di un'infrastruttura per esperimenti su larga scala.

Per iniziare, consulta l'esempio CUDA-Q iniziale su Amazon Braket Examples Github per utilizzare un contenitore di job ibrido fornito da Braket. CUDA-Q

Il seguente frammento di codice è un hello-world esempio di esecuzione di un programma con Amazon Braket Hybrid JobsCUDA-Q.

image_uri = retrieve_image(Framework.CUDAQ, AwsSession().region) @hybrid_job(device='local:nvidia/qpp-cpu', image_uri=image_uri) def hello_quantum(): import cudaq # define the backend device=get_job_device_arn() cudaq.set_target(device.split('/')[-1]) # define the Bell circuit kernel = cudaq.make_kernel() qubits = kernel.qalloc(2) kernel.h(qubits[0]) kernel.cx(qubits[0], qubits[1]) # sample the Bell circuit result = cudaq.sample(kernel, shots_count=1000) measurement_probabilities = dict(result.items()) return measurement_probabilities

L'esempio precedente simula un circuito Bell su un simulatore di CPU. Questo esempio viene eseguito localmente sul laptop o sul notebook Braket Jupyter. A causa dell'local=Trueimpostazione, quando si esegue questo script, nell'ambiente locale verrà avviato un contenitore per eseguire il CUDA-Q programma per il test e il debug. Al termine del test, è possibile rimuovere il local=True contrassegno ed eseguire il processo. AWS Per ulteriori informazioni, consulta Lavorare con Amazon Braket Hybrid Jobs.

Se i carichi di lavoro hanno un numero elevato di qubit, un numero elevato di circuiti o un numero elevato di iterazioni, puoi utilizzare risorse di elaborazione della CPU più potenti specificando l'impostazione. instance_config Il seguente frammento di codice mostra come configurare l'impostazione nel decoratore. instance_config hybrid_job Per ulteriori informazioni sui tipi di istanza supportati, consulta Configurare l'istanza di lavoro ibrida. Per un elenco dei tipi di istanze, consulta Tipi di istanze Amazon EC2.

@hybrid_job( device="local:nvidia/qpp-cpu", image_uri=image_uri, instance_config=InstanceConfig(instanceType="ml.c5.2xlarge"), ) def my_job_script(): ...

Per carichi di lavoro più impegnativi, puoi eseguire i carichi di lavoro su un CUDA-Q simulatore GPU. Per abilitare un simulatore GPU, usa il nome del backend. nvidia Il nvidia backend funziona come un simulatore di GPU. CUDA-Q Quindi, seleziona un tipo di istanza Amazon EC2 che supporti una GPU. NVIDIA Il seguente frammento di codice mostra il decoratore. GPU-configured hybrid_job

@hybrid_job( device="local:nvidia/nvidia", image_uri=image_uri, instance_config=InstanceConfig(instanceType="ml.g4dn.xlarge"), ) def my_job_script(): ...

Amazon Braket Hybrid Jobs e NBIs supportano simulazioni GPU parallele con. CUDA-Q Puoi parallelizzare la valutazione di più osservabili o più circuiti per aumentare le prestazioni del tuo carico di lavoro. Per parallelizzare più osservabili, apporta le seguenti modifiche allo script dell'algoritmo.

Imposta l'mgpuopzione del backend. nvidia Ciò è necessario per parallelizzare le osservabili. La parallelizzazione utilizza l'MPI per la comunicazione tra le GPU, quindi l'MPI deve essere inizializzato prima dell'esecuzione e finalizzato dopo.

Quindi, specifica la modalità di esecuzione impostando. execution=cudaq.parallel.mpi Il seguente frammento di codice mostra queste modifiche.

cudaq.set_target("nvidia", option="mqpu") cudaq.mpi.initialize() result = cudaq.observe( kernel, hamiltonian, shots_count=n_shots, execution=cudaq.parallel.mpi ) cudaq.mpi.finalize()

Nel hybrid_job decoratore, specificate un tipo di istanza che ospita più GPU, come mostrato nel seguente frammento di codice.

@hybrid_job( device="local:nvidia/nvidia-mqpu", instance_config=InstanceConfig(instanceType="ml.g4dn.12xlarge", instanceCount=1), image_uri=image_uri, ) def parallel_observables_gpu_job(sagemaker_mpi_enabled=True): ...

Il taccuino per le simulazioni parallele contenuto in Amazon Braket examples Github fornisce esempi completi che dimostrano come eseguire simulazioni di programmi quantistici su backend GPU ed eseguire simulazioni parallele di osservabili e batch di circuiti.

Esecuzione dei carichi di lavoro su computer quantistici

Dopo aver completato i test del simulatore, è possibile passare all'esecuzione di esperimenti sulle QPU. Basta passare il target a una QPU Amazon Braket, ad esempio,, o dispositiviIQM. IonQ Rigetti Il seguente frammento di codice illustra come impostare il target sul dispositivo. IQM Garnet Per un elenco delle QPU disponibili, consulta la console Amazon Braket.

device_arn = "arn:aws:braket:eu-north-1::device/qpu/iqm/Garnet" cudaq.set_target("braket", machine=device_arn)

Per ulteriori informazioni sui lavori ibridi, consulta Lavorare con Amazon Braket Hybrid Jobs nella guida per sviluppatori. Per ulteriori informazioni su CUDA-Q, consulta la documentazione su NVIDIA CUDA-Q.