IBM Quantumでの実機実行

# Versionの確認
import qiskit
print(f"qiskit=={qiskit.__version__}")
import qiskit_ibm_runtime
print(f"qiskit-ibm-runtime=={qiskit_ibm_runtime.__version__}")
qiskit==1.3.2
qiskit-ibm-runtime==0.34.0

IBM Quantumにアカウントを作成後,https://quantum.ibm.com/account にアクセスしてAPIトークンを取得し,以下のYOUR_API_TOKENに入力する.
✳︎IBM Qunanumのアカウント作成方法は省略します.

from qiskit_ibm_runtime import QiskitRuntimeService
QiskitRuntimeService.save_account(
    token="YOUR_API_TOKEN",
    channel="ibm_quantum",
    overwrite=True
)

上記コードを実行すると,(Macの場合).qiskit/qiskit-ibm.json にアカウント情報が保存され,次からはAPIトークンを指定せずにQiskitRuntimeServiceを使用できるようになる.

{
    "default-ibm-quantum": {
        "channel": "ibm_quantum",
        "private_endpoint": false,
        "token": "YOUR_API_TOKEN",
        "url": "https://auth.quantum-computing.ibm.com/api"
    }
}%

Bell状態を作る量子回路を実機実行してみる.

from qiskit import QuantumCircuit
from qiskit.visualization import plot_histogram
from qiskit_ibm_runtime import QiskitRuntimeService
from qiskit_ibm_runtime import SamplerV2 as Sampler
from qiskit.transpiler.preset_passmanagers import generate_preset_pass_manager

# IBM Quantum に接続
service = QiskitRuntimeService()

#一番空いているバックエンドを取得する.
backend = service.least_busy(operational=True)
print(f"The least busy device is {backend.name}")

# 量子回路を作成
qc = QuantumCircuit(2, 2)
qc.h(0)
qc.cx(0, 1)
qc.measure([0, 1], [0, 1])

# コンパイル(最適化)
# バックエンドに合わせてトランスパイル
pm = generate_preset_pass_manager(backend=backend, optimization_level=3)
isa_qc = pm.run(qc)

isa_qc.draw("mpl", idle_wires=False)
The least busy device is ibm_kyiv

2025-02-05_qiskit-0002_21.png

# Samplerを使用してジョブを実行
sampler = Sampler(mode=backend)
job = sampler.run([isa_qc], shots=10000)
print("job id:", job.job_id()) 
job id: cyge3bn7v8tg008xa2t0

# ジョブの実行状態を確認
job.status()
'DONE'
# job.status() が 'DONE' になったら
result = job.result()

#  測定された回数を表示
counts = result[0].data.c.get_counts()
print(counts)

# ヒストグラムで測定された確率をプロット
plot_histogram(counts)
{'11': 4850, '00': 5030, '10': 57, '01': 63}

2025-02-05_qiskit-0002_31.png

# 待ち時間が長い時に後から結果を確認する場合

from qiskit_ibm_runtime import QiskitRuntimeService
service = QiskitRuntimeService() 
job = service.job('JOB_ID') # 実機実行したjobIDを入力する
job.status()

Posted

in

by

Tags:

Comments

Leave a Reply

Your email address will not be published. Required fields are marked *

CAPTCHA