Lewati ke konten utama

Porting kode ke Qiskit Serverless

tips

Qiskit Serverless sedang mendapat upgrade, dan fitur-fiturnya berubah dengan cepat. Selama fase pengembangan ini, temukan catatan rilis dan dokumentasi terbaru di halaman Qiskit Serverless GitHub.

Contoh berikut menunjukkan cara porting kode yang sudah ada untuk memanfaatkan Qiskit Serverless.

catatan

Kode berikut mengasumsikan bahwa kamu sudah menyimpan kredensial. Kalau belum, ikuti petunjuk di Siapkan akun IBM Cloud-mu untuk autentikasi dengan API key-mu.

Perbarui eksperimen

catatan

Pada versi Serverless, buat runtime service dengan get_runtime_service() (dari qiskit_serverless) alih-alih QiskitRuntimeService(), sehingga job dan session IBM Quantum® Compute Service yang diluncurkannya dicatat pada job Qiskit Serverless induk. Lihat Menulis program Qiskit Serverless pertamamu untuk detailnya.

from qiskit.transpiler import generate_preset_pass_manager
from qiskit_ibm_runtime import QiskitRuntimeService
from qiskit.circuit.random import random_circuit

qc_random = [(random_circuit(20, 20, measure=True)) for _ in range(30)]
optimization_level = 3

service = QiskitRuntimeService(channel="ibm_quantum_platform")
backend = service.get_backend(backend_name)

pass_manager = generate_preset_pass_manager(
optimization_level=optimization_level, backend=backend
)

# @distribute_task(target={"cpu": 1})
def transpile_parallel(circuit, pass_manager):
"""Distributed transpilation for an abstract circuit into an ISA circuit for a given backend."""

isa_circuit = pass_manager.run(circuit)

return isa_circuit

transpiled_circuits = [
transpile_parallel(circuit, pass_manager)
for circuit in circuits
]

print(transpiled_circuits)

Upload to Qiskit Serverless

Follow the instructions on the Introduction to Qiskit Functions page to authenticate with your API key.

from qiskit_ibm_catalog import QiskitServerless, QiskitFunction

# Authenticate to the remote cluster and submit the pattern for remote execution.
serverless = QiskitServerless()

transpile_remote_demo = QiskitFunction(
title="transpile_remote_serverless",
entrypoint="transpile_remote.py",
working_dir="./source_files/",
)

serverless.upload(transpile_remote_demo)

Output

'transpile_remote_serverless'

Jalankan dari jarak jauh di Qiskit Serverless

from qiskit.circuit.random import random_circuit
from qiskit_ibm_runtime import QiskitRuntimeService

# Setup inputs
qc_random = [(random_circuit(20, 20, measure=True)) for _ in range(30)]
backend = "ibm_brisbane"
optimization_level = 3

# Running program
transpile_remote_serverless = serverless.load('transpile_remote_serverless')
job = transpile_remote_serverless.run(
circuits=qc_random,
backend=backend,
optimization_level=optimization_level
)

job.job_id

Output

'727e921d-512d-4b7d-af97-fe29e93ce7ea'

Langkah berikutnya

Rekomendasi
  • Baca makalah yang memaparkan bagaimana para peneliti memanfaatkan Qiskit Serverless dan quantum-centric supercomputing untuk menjelajahi kimia kuantum.