Hyppää sisältöön

Docs CSC now features an automatic Finnish translation. Click here for more information.

Warning!

Puhti and Mahti are being decommissioned in stages, and their storage areas will become fully unavailable from 15 October 2026. Clean up unnecessary files and move any data you need to keep by 31 August 2026. See the Roihu data migration guide for instructions on transferring your data to Roihu.

Puhti computing services have been decommissioned and no new jobs are accepted or executed on its compute nodes. Puhti login nodes and storage services are planned to remain available until 15 October 2026.

Q20-palvelu MyCSC:ssä

Q20-palvelussa on tällä hetkellä joitakin ongelmia projekteille, joilla on Q20-allokaatioita. Jos et löydä Aalto-Q20-palvelua tai kohtaat muita ongelmia, ota yhteyttä CSC:n asiakastukeen osoitteessa servicedesk@csc.fi.

Ajaminen Q20:llä ja Q50:llä

Töiden ajaminen

Jos haluat lähettää töitä kvanttitietokoneille (Q20 ja Q50), käytä niille varattua kvanttisolmua (q_fiqci) lisäämällä --partition=q_fiqci eräajokomentosarjaasi.

Tällä hetkellä Q20 ja Q50 tukevat töiden lähettämistä Qiskitillä tai Cirqillä. Nämä skriptit on lähetettävä tavallisina Python-tiedostoina.

Jos haluat ajaa töitä kvanttitietokoneilla, noudata seuraavia vaiheita oikean ympäristön määrittämiseksi LUMIssa:

Huom: Suorita nämä komennot joko eräajokomentosarjassasi tai interaktiivisessa istunnossa, joka on käynnistetty srun-komennolla.

  • Lisää moduulipolku, jotta järjestelmä löytää saatavilla olevat moduulit: module use /appl/local/quantum/modulefiles tai module load Local-quantum

  • Lataa sopiva ympäristömoduuli käyttämäsi viitekehyksen mukaan:

    • Qiskitille: module load fiqci-vtt-qiskit
    • Cirqille module load fiqci-vtt-cirq

Moduulit fiqci-vtt-qiskit ja fiqci-vtt-cirq tarjoavat valmiiksi määritetyt Python-ympäristöt töiden ajamiseen kvanttitietokoneilla. Jos sinun täytyy asentaa lisää Python-paketteja, voit tehdä sen komennolla:

python -m pip install --user package.

Oman Python-ympäristön luominen

Jos haluat mieluummin käyttää mukautettua Python-ympäristöä, suosittelemme käyttämään container wrapper -työkalua ympäristösi luomiseen ja hallintaan.

Tällä hetkellä tuetut ohjelmistoversiot ovat:

Software LUMI_Module_name Versions
IQM client fiqci-vtt-qiskit/fiqci-vtt-cirq ≥ 34.0.0, < 35.0.0

Tässä on esimerkki eräajokomentosarjasta kvanttityön lähettämiseen

#!/bin/bash

#SBATCH --job-name=quantumjob   # Job name
#SBATCH --account=project_<id>  # Project for billing (slurm_job_account)
#SBATCH --partition=q_fiqci   # Partition (queue) name
#SBATCH --ntasks=1              # One task (process)
#SBATCH --mem-per-cpu=2G       # memory allocation
#SBATCH --cpus-per-task=1     # Number of cores (threads)
#SBATCH --time=00:05:00         # Run time (hh:mm:ss)

module use /appl/local/quantum/modulefiles

# uncomment the correct line:
# module load fiqci-vtt-qiskit
# or
# module load fiqci-vtt-cirq
export DEVICES=("radiance20")
source $RUN_SETUP
python your_python_script.py
#!/bin/bash

#SBATCH --job-name=quantumjob   # Job name
#SBATCH --account=project_<id>  # Project for billing (slurm_job_account)
#SBATCH --partition=q_fiqci   # Partition (queue) name
#SBATCH --ntasks=1              # One task (process)
#SBATCH --mem-per-cpu=2G       # memory allocation
#SBATCH --cpus-per-task=1     # Number of cores (threads)
#SBATCH --time=00:05:00         # Run time (hh:mm:ss)

module use /appl/local/quantum/modulefiles

# uncomment the correct line:
# module load fiqci-vtt-qiskit
# or
# module load fiqci-vtt-cirq
export DEVICES=("Q50")
source $RUN_SETUP
python your_python_script.py

Eräajokomentosarja voidaan sitten lähettää komennolla sbatch. Voit myös lähettää interaktiivisia töitä srun-komennolla.

module use /appl/local/quantum/modulefiles
module --ignore_cache load "fiqci-vtt-qiskit"
export DEVICES=("radiance20")
srun --account project_xxx -t 00:15:00 -c 1 -n 1 --partition q_fiqci bash -c "source $RUN_SETUP && python your_python_script.py"
module use /appl/local/quantum/modulefiles
module --ignore_cache load "fiqci-vtt-qiskit"
export DEVICES=("Q50")
srun --account project_xxx -t 00:15:00 -c 1 -n 1 --partition q_fiqci bash -c "source $RUN_SETUP && python your_python_script.py"

Moduuli fiqci-vtt-* määrittää oikean Python-ympäristön Qiskitin tai Cirqin käyttämiseen yhdessä kvanttitietokoneiden kanssa.

Ajaminen fyysisillä kvanttitietokoneilla

Kun lähetät työn Q20:lle tai Q50:lle, käyttäjän slurm_job_account (projekti, jolla työ ajetaan) mapataan project_id-tunnukseen, ja tämä tieto siirretään VTT:lle laskutustarkoituksiin. Jos haluat ajaa Q50:llä, määritä laite komennolla export DEVICES=("Q50")

Qiskit

Jos haluat ladata Qiskit-moduulin, käytä komentoa module load fiqci-vtt-qiskit.

Qiskit Python -skripteissä sinun tulee sisällyttää seuraava:

import os

from qiskit import QuantumCircuit, transpile
from iqm.qiskit_iqm import IQMProvider

DEVICE_CORTEX_URL = os.getenv('Q20_CORTEX_URL')

provider = IQMProvider(DEVICE_CORTEX_URL, quantum_computer="radiance20")
backend = provider.get_backend()

shots = 1000  # Set the number of shots you wish to run with

# Create your quantum circuit.
# Here is an example
circuit = QuantumCircuit(2, 2)
circuit.h(0)
circuit.cx(0, 1)
circuit.measure_all()

print(circuit.draw(output='text'))

transpiled_circuit = transpile(circuit, backend)
job = backend.run(transpiled_circuit, shots=shots)
counts = job.result().get_counts()
print(counts)
import os

from qiskit import QuantumCircuit, transpile
from iqm.qiskit_iqm import IQMProvider

DEVICE_CORTEX_URL = os.getenv('Q50_CORTEX_URL')

provider = IQMProvider(DEVICE_CORTEX_URL, quantum_computer="q50")
backend = provider.get_backend()

shots = 1000  # Set the number of shots you wish to run with

# Create your quantum circuit.
# Here is an example
circuit = QuantumCircuit(2, 2)
circuit.h(0)
circuit.cx(0, 1)
circuit.measure_all()

print(circuit.draw(output='text'))

transpiled_circuit = transpile(circuit, backend)
job = backend.run(transpiled_circuit, shots=shots)
counts = job.result().get_counts()
print(counts)

Cirq

Jos haluat ladata Cirq-moduulin, käytä komentoa module load fiqci-vtt-cirq.

import os

import cirq
from iqm.cirq_iqm.iqm_sampler import IQMSampler

DEVICE_CORTEX_URL = os.getenv('Q20_CORTEX_URL')

sampler = IQMSampler(DEVICE_CORTEX_URL, quantum_computer="radiance20")

shots = 1000

# Create your quantum circuit
# Here is an example
q1, q2 = cirq.NamedQubit('QB1'), cirq.NamedQubit('QB2')
circuit = cirq.Circuit()
circuit.append(cirq.H(q1))
circuit.append(cirq.CNOT(q1, q2))
circuit.append(cirq.measure(q1, q2, key='m'))
print(circuit)

routed_circuit, initial_mapping, final_mapping = sampler.device.route_circuit(circuit)
decomposed_circuit = sampler.device.decompose_circuit(routed_circuit)

# Optionally print mapping
# print(routed_circuit)
# print(initial_mapping)
# print(final_mapping)
# print(decomposed_circuit)

result = sampler.run(decomposed_circuit, repetitions=shots)
print(result.measurements['m'])
import os

import cirq
from iqm.cirq_iqm.iqm_sampler import IQMSampler

DEVICE_CORTEX_URL = os.getenv('Q50_CORTEX_URL')

sampler = IQMSampler(DEVICE_CORTEX_URL, quantum_computer="q50")

shots = 1000

# Create your quantum circuit
# Here is an example
q1, q2 = cirq.NamedQubit('QB1'), cirq.NamedQubit('QB2')
circuit = cirq.Circuit()
circuit.append(cirq.H(q1))
circuit.append(cirq.CNOT(q1, q2))
circuit.append(cirq.measure(q1, q2, key='m'))
print(circuit)

routed_circuit, initial_mapping, final_mapping = sampler.device.route_circuit(circuit)
decomposed_circuit = sampler.device.decompose_circuit(routed_circuit)

# Optionally print mapping
# print(routed_circuit)
# print(initial_mapping)
# print(final_mapping)
# print(decomposed_circuit)

result = sampler.run(decomposed_circuit, repetitions=shots)
print(result.measurements['m'])

Lisäesimerkkejä

Lisää esimerkkejä löytyy täältä. Esimerkeissä korostetaan simulaattorilla ajamisen ja oikealla fyysisellä kvanttitietokoneella ajamisen välistä eroa sekä sitä, miten piirisi kannattaa rakentaa optimaalisten tulosten saavuttamiseksi kvanttitietokoneilla. Repositorio sisältää myös hyödyllisiä skriptejä töiden lähettämiseen.

Simuloidut testiajot

Koska kvanttiresurssit voivat olla niukkoja, on suositeltavaa valmistella etukäteen koodit ja algoritmit, jotka aiot ajaa kvanttitietokoneilla. Tämän prosessin helpottamiseksi qiskit-on-iqm tarjoaa fake noise model backendin. Voit ajaa fake noise model backendin paikallisesti omalla kannettavallasi simulointia ja testausta varten.

Saatavilla on myös joukko Qiskit- ja Cirq-esimerkkejä sekä skriptejä kvanttitietokoneiden käytön tueksi. Löydät ne täältä.

Työn metadata

Työhösi liittyvää lisämetadataa voidaan hakea suoraan Qiskitillä. Esimerkiksi:

=== "Q20

```python

DEVICE_CORTEX_URL = os.getenv('Q20_CORTEX_URL')
provider = IQMProvider(DEVICE_CORTEX_URL, quantum_computer="radiance20")
backend = provider.get_backend()

#Retrieving backend information
print(f'Native operations: {backend.operation_names}')
print(f'Number of qubits: {backend.num_qubits}')
print(f'Coupling map: {backend.coupling_map}')

transpiled_circuit = transpile(circuit, backend)
job = backend.run(transpiled_circuit, shots=shots)
result = job.result()
exp_result = result._get_experiment(circuit)

print("Job ID: ", job.job_id())  # Retrieving the submitted job id
print(result.request.circuits)  # Retrieving the circuit request sent
print("Calibration Set ID: ", exp_result.calibration_set_id)  # Retrieving the current calibration set id.
print(result.request.qubit_mapping)  # Retrieving the qubit mapping
print(result.request.shots)  # Retrieving the number of requested shots.

#retrieve a job using the job_id from a previous session
#old_job = backend.retrieve_job(job_id)
```
DEVICE_CORTEX_URL = os.getenv('Q50_CORTEX_URL')
provider = IQMProvider(DEVICE_CORTEX_URL, quantum_computer="q50")
backend = provider.get_backend()

#Retrieving backend information
print(f'Native operations: {backend.operation_names}')
print(f'Number of qubits: {backend.num_qubits}')
print(f'Coupling map: {backend.coupling_map}')

transpiled_circuit = transpile(circuit, backend)
job = backend.run(transpiled_circuit, shots=shots)
result = job.result()
exp_result = result._get_experiment(circuit)

print("Job ID: ", job.job_id())  # Retrieving the submitted job id
print(result.request.circuits)  # Retrieving the circuit request sent
print("Calibration Set ID: ", exp_result.calibration_set_id)  # Retrieving the current calibration set id.
print(result.request.qubit_mapping)  # Retrieving the qubit mapping
print(result.request.shots)  # Retrieving the number of requested shots.

#retrieve a job using the job_id from a previous session
#old_job = backend.retrieve_job(job_id)

Tallenna työsi Job ID!

Huomaa, että tällä hetkellä ei ole menetelmää aiempien Job ID:iden listaamiseen, joten on suositeltavaa aina tulostaa Job ID työn lähettämisen jälkeen ja tallentaa se johonkin! Sama koskee calibration set id:tä.

Kalibrointidata

Kalibrointidata (tai laatumittaristo) voi olla tarpeen Q20/Q50:llä tuotetun työn julkaisemisessa. Se antaa myös käsityksen kvanttitietokoneiden tämänhetkisestä tilasta. Kalibrointidata on saatavilla FiQCI-sivulla. Lisäksi fiqci-examples sisältää apuskriptin kalibrointidatan hakemiseen manuaalisesti. Skripti löytyy täältä. Tämä tiedosto voidaan lisätä omiin Python-skripteihisi, ja se palauttaa datan json-muodossa. Huomaa, että uusimman kalibrointidatan kysely voi antaa puutteellisen tai vanhentuneen lukujoukon. Siksi calibration set ID:t tulisi tallentaa yhdessä Job ID:iden kanssa.

Tässä on lyhyt kuvaus kyselyssä annettavista suureista:

Figure Key Description
T1 Time (s) t1_time T1-aikaa kutsutaan pitkittäiseksi relaksaationopeudeksi, ja se kuvaa, kuinka nopeasti kubitin virittynyt tila palautuu perustilaansa.
T2 Time (s) t2_time T2-aikaa kutsutaan poikittaiseksi relaksaationopeudeksi, ja se kuvaa superpositiotilan koherenssin häviämistä.
T2 Echo Time (s) t2_echo_time T2-kaikuaika kuvaa kubitin superpositiotilan koherenssin häviämistä. Se on tarkempi kuin T2-aika, koska se on vähemmän altis matalataajuiselle kohinalle.
Readout fidelity measure_fidelity_ssro_fidelity Tämä kuvaa fideliteettiä, kun suoritetaan kubitin tilan single shot -lukemia. Single-shot-luku valmistaa 50 % kubittitiloista virittyneeseen tilaan ja 50 % perustilaan.
Single shot readout 01 error measure_fidelity_ssro_error_0_to_1 Virhe virittyneen tilan ('1') määrittämisessä, kun tila on perustilassa ('0').
Single shot readout 10 error measure_fidelity_ssro_error_1_to_0 Virhe perustilan ('0') määrittämisessä, kun tila on virittyneessä tilassa ('1').
Single qubit gate fidelity prx_rb_fidelity Tämä lasketaan Randomized Benchmarking -menetelmällä ja kuvaa keskimääräistä porttifideliteettiä, kun satunnainen yksikubittisten Clifford-porttien sarja suoritetaan.
Fidelity 2QB Cliffords averaged clifford_rb_fidelity Tämä lasketaan Randomized Benchmarking -menetelmällä, ja se näyttää keskimääräisen Clifford-portin fideliteetin.
CZ gate fidelity cz_irb_fidelity Controlled-z-portin fideliteetti, joka lasketaan interleaved randomized benchmarking -menetelmällä, jossa controlled-z-portti lomitetaan mukaan.
MCM fidelity measure_ssro_fidelity Keskipiirin mittauksen fideliteetti.
QNDness fidelity measure_qndness_fidelity Quantum non-demolition (QND) -fideliteetti kuvaa todennäköisyyttä sille, että kubitin kvanttitila säilyy keskipiirin mittaustoimenpiteen jälkeen.
QNDness 0 measure_qndness_qndness_0 QND-fideliteetti perustilalle. Se kuvaa todennäköisyyttä sille, että alun perin perustilassa oleva kubitti pysyy perustilassa mittauksen jälkeen.
QNDness 1 measure_qndness_qndness_1 QND-fideliteetti ensimmäiselle virittyneelle tilalle. Se kuvaa todennäköisyyttä sille, että alun perin ensimmäisessä virittyneessä tilassa oleva kubitti pysyy ensimmäisessä virittyneessä tilassa mittauksen jälkeen.
QNDness repeatability measure_qndness_repeatability Keskipiirin mittaustulosten toistettavuus. Todennäköisyys sille, että toinen mittaustulos vastaa ensimmäistä. Tämä metriikka sisältää lukudiskriminointivirheet, mikä tarkoittaa, että jos lukufideliteetti on heikko, toistettavuus on alhainen, vaikka mittaus olisi ei-destruktiivinen.

Lisätietoja kalibrointidatasta saat ottamalla yhteyttä osoitteeseen fiqci-feedback@postit.csc.fi tai CSC:n asiakastukeen, joka on tavoitettavissa osoitteessa servicedesk@csc.fi.

Q20/Q50:n käyttäminen Lumi-selainkäyttöliittymässä

LUMI:n selainkäyttöliittymä mahdollistaa kvanttitöiden ajamisen Q20:llä ja Q50:llä selainkäyttöliittymän kautta. Lisätietoja kirjautumisesta LUMI:n selainkäyttöliittymään löytyy LUMI-dokumentaation sivulta.

Q20/Q50:n käyttäminen

Kun tunnistautuminen on onnistunut, sinulla pitäisi nyt olla pääsy hallintapaneeliisi. Napsauta Jupyter-sovellusta, valitse projektisi ja osioksi q_fiqci. Jos sinulla on aktiivinen varaus, voit käyttää sitä valitsemalla sen reservation-kohdasta.

On suositeltavaa käyttää Advanced settings -asetuksia. Valitse Custom init -vaihtoehdon alta Text, ja kirjoita Script to start -tekstikenttään seuraava skripti ympäristön määrittämiseksi kvanttiohjelmistopinon käyttöä varten.

Qiskit

module use /appl/local/quantum/modulefiles
module load fiqci-vtt-qiskit
export DEVICES=("radiance20")
source $RUN_SETUP
module use /appl/local/quantum/modulefiles
module load fiqci-vtt-qiskit
export DEVICES=("Q50")
source $RUN_SETUP

Cirq

module use /appl/local/quantum/modulefiles
module load fiqci-vtt-cirq
export DEVICES=("radiance20")
source $RUN_SETUP
module use /appl/local/quantum/modulefiles
module load fiqci-vtt-cirq
export DEVICES=("Q50")
source $RUN_SETUP

"Qcs with LUMI web"

Napsauta launch käynnistääksesi Jupyter-istuntosi. Tämä käynnistää Jupyterin komennolla python -m Jupyter lab. Jos käytät Q20:tä/Q50:tä kvanttilaskennan kurssin aikana, kurssia varten on voitu luoda mukautettu ympäristö. Tässä tapauksessa voit käyttää kvanttitietokoneita Jupyter-for-courses-sovelluksen kautta.

"Qcs with LUMI web courses"

QPU-käytön tarkasteleminen LUMIssa ja MyCSC:ssä

Voit nyt tarkastella QPU-käyttöä MyCSC-hallintapaneelissa. Jos haluat tarkastella QPU-käyttöä LUMIn terminaalissa, käytä alla olevaa menetelmää. Komento lumi-allocations ei näytä QPU-käyttöä oikein.

Jos haluat tarkastella QPU-käyttöä, lataa ensin terminaalissasi moduuli fiqci-vtt-qiskit ja suorita sitten komento project-qpu-allocations. Tämä komento näyttää nykyisen QPU-allokaatiosi ja käyttösi tiedot kaikille projekteillesi.

module use /appl/local/quantum/modulefiles
module load fiqci-vtt-qiskit
project-qpu-allocations
# To view for a specific project, run
project-qpu-allocations <project_xxxx>

Vaihtoehtoisesti voit saavuttaa saman tuloksen käyttämällä project-qpu-allocations-työkalua suoraan.

/appl/local/quantum/resource-checker/project-qpu-allocations

Lisälukemista

Suomenkielinen tekoälykäännös

Sisällössä voi esiintyä virheellistä tietoa tekoälykäännöksestä johtuen.

Klikkaa tästä antaaksesi palautetta