Preskočiť na obsah

CUDA-Q

Popis

CUDA-Q je open-source kvantová vývojová platforma, ktorá koordinuje hardvér aj softvér potrebný na spúšťanie užitočných, veľkých kvantových výpočtových aplikácií. Hybridný programovací model platformy umožňuje vykonávať výpočty na GPU, CPU a QPU zdrojoch súčasne v rámci jedného kvantového programu. CUDA-Q je „qubitovo nezávislá“ – bezproblémovo sa integruje so všetkými QPU a qubitovými modalitami a ponúka GPU-akcelerované simulácie v prípade, že nie je k dispozícii dostatočný kvantový hardvér.


Oficiálna dokumentácia

Viac informácií o CUDA-Q nájdete tu. Dokumentácia a návod pre používateľa sú dostupné tu.


Dostupné verzie

Aktuálne sú dostupné nasledujúce verzie CUDA-Q:

  • Spúšťacie závislosti:
    • singularity/ce-3.11.0

CUDA-Q je dostupný ako kontajner; na zostavenie alebo spustenie aplikácií použite singularity. Najprv načítajte modul singularity pomocou nasledujúceho príkazu:

module load singularity/ce-3.11.0

Kontajner sa nachádza v /storage-apps/software/containers/cuda-q/cuda-quantum_cu12-0.12.0.sif.


Používane CUDA-Q

Odporúčame spúšťať aplikácie CUDA-Q na GPU. Simulácie kvantových algoritmov CUDA-Q môžu na GPU dosiahnuť výrazné zrýchlenie v porovnaní s CPU.

Príklady

Tu sú ukážkové kódy napísané v jazykoch Python a C++.

import sys
import cudaq

print(f"Running on target {cudaq.get_target().name}")
qubit_count = int(sys.argv[1]) if 1 < len(sys.argv) else 2


@cudaq.kernel
def kernel():
    qubits = cudaq.qvector(qubit_count)
    h(qubits[0])
    for i in range(1, qubit_count):
        x.ctrl(qubits[0], qubits[i])
    mz(qubits)


result = cudaq.sample(kernel)
print(result)  # Example: { 11:500 00:500 }

Na spustenie príkladu vykonajte nasledujúci príkaz po pridaní singularity do vášho prostredia:

singularity exec --nv /storage-apps/software/containers/cuda-q/cuda-quantum_cu12-0.12.0.sif python3 program.py
#include <cudaq.h>

__qpu__ void kernel(int qubit_count) {
  cudaq::qvector qubits(qubit_count);
  h(qubits[0]);
  for (auto i = 1; i < qubit_count; ++i) {
    cx(qubits[0], qubits[i]);
  }
  mz(qubits);
}

int main(int argc, char *argv[]) {
  auto qubit_count = 1 < argc ? atoi(argv[1]) : 2;
  auto result = cudaq::sample(kernel, qubit_count);
  result.dump(); // Example: { 11:500 00:500 }
}

Po pridaní singularity do vášho prostredia skompilujte kód:

singularity exec --nv /storage-apps/software/containers/cuda-q/cuda-quantum_cu12-0.12.0.sif nvq++ program.cpp -o program.x

Na spustenie príkladu vykonajte nasledujúci príkaz:

`bash singularity exec --nv /storage-apps/software/containers/cuda-q/cuda-quantum_cu12-0.12.0.sif ./program.x


Viac príkladov nájdete v /storage-apps/software/cuda-q/examples/. Nachádzajú sa tam aj Jupyter notebooky, ktoré je možné spustiť pomocou aplikácie Jupyter Notebook - singularity cez platformu Open OnDemand. Vo formulári zadajte vyššie uvedenú cestu k kontajneru.

Created by: Marek Štekláč