Utilizzo di 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 di CUDA-Q con Amazon Braket

NVIDIA's CUDA-Qè una libreria software progettata per la programmazione di algoritmi quantistici ibridi che combinano CPUs unità di elaborazione quantistiche e quantistiche (). GPUs QPUs 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 il runtime quantistici dei programmi grazie ai simulatori di CPU e GPU integrati. CUDA-Qè disponibile con le istanze native per notebook Braket (NBIs) e Amazon Braket Hybrid Jobs.

CUDA-Q in NBIs

CUDA-Qè installato per impostazione predefinita nell'ambiente Braket NBI. È possibile aprire un notebook di CUDA-Q esempio accedendo alla pagina di avvio di Jupyter e selezionando il riquadro and Braket. CUDA-Q Questo apre il taccuino 0_hello_cudaq_jobs.ipynb di esempio nella finestra principale. Per altri CUDA-Q esempi, consultate 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, è possibile eseguire il comando seguente in una cella di codice di un 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 nei lavori ibridi

L'utilizzo CUDA-Q su Amazon Braket Hybrid Jobs offre un ambiente di elaborazione flessibile e on-demand. Le istanze computazionali vengono eseguite solo per la durata del carico di lavoro, assicurandoti di pagare solo per ciò che usi. 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.

Il supporto di Amazon Braket Hybrid Jobs GPUs è essenziale per massimizzare CUDA-Q il potenziale di Amazon Braket. GPUs velocizza notevolmente le simulazioni di programmi quantistici rispetto ai simulatori basati su CPU, specialmente quando si lavora con circuiti ad alto numero di qubit. La parallelizzazione diventa semplice quando viene utilizzata su Amazon CUDA-Q Braket Hybrid Jobs. 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 propri CUDA-Q carichi di lavoro piuttosto che sulla creazione di infrastrutture per esperimenti su larga scala.

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

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

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. Dopo aver terminato il test, puoi rimuovere il local=True flag ed eseguire il job su. AWS Per ulteriori informazioni, consulta Lavorare con Amazon Braket Hybrid Jobs.

Se i tuoi carichi di lavoro hanno un numero elevato di qubit, un gran numero di circuiti o un gran numero 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 istanze supportati, consulta Configurare l'istanza di job 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 NVIDIA GPU. Il seguente frammento di codice mostra il decoratore configurato dalla GPU. 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 supporta simulazioni GPU NBIs 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 gli osservabili. La parallelizzazione utilizza MPI per la comunicazione tra di loro GPUs, quindi 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, specifica un tipo di istanza che ne ospita più di uno, GPUs 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 notebook di simulazioni parallele negli esempi di Amazon Braket Github end-to-end fornisce esempi che dimostrano come eseguire simulazioni di programmi quantistici su backend di GPU ed eseguire simulazioni parallele di osservabili e batch di circuiti.

Esecuzione dei carichi di lavoro su computer quantistici

Dopo aver completato i test con il simulatore, puoi passare all'esecuzione di esperimenti su. QPUs Basta passare il target a una QPU Amazon Braket, ad esempio IQMIonQ, o dispositivi. Rigetti Il seguente frammento di codice illustra come impostare la destinazione sul dispositivo. IQM Garnet Per un elenco di quelli disponibili QPUs, 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 su Hybrid Jobs, consulta Working with Amazon Braket Hybrid Jobs nella guida per sviluppatori. Per ulteriori informazioni su CUDA-Q, consulta la documentazione su NVIDIA CUDA-Q.