주 콘텐츠로 건너뛰기

첫 번째 Qiskit Serverless 워크로드를 원격으로 실행하기

패키지 버전

이 페이지의 코드는 다음 요구 사항을 사용하여 개발되었습니다. 이 버전 이상을 사용하는 것을 권장합니다.

qiskit[all]~=1.4.0
qiskit-ibm-runtime~=0.36.1
qiskit-ibm-catalog~=0.4

이 섹션에서는 qiskit-ibm-catalog를 사용하여 Qiskit Serverless에서 사용 가능한 프로그램을 나열하고, 해당 프로그램에 입력값을 전달하고, 원격으로 실행하고, 상태를 확인하고, 결과 및 로그를 검색하는 방법을 살펴봅니다.

API 키를 사용하여 Qiskit Serverless에 인증이 완료되어 있는지 확인해 주세요 (지침은 IBM Quantum Platform에 배포하기를 참고하세요).

사용 가능한 프로그램 나열하기

QiskitServerless.list()를 사용하여 Qiskit Serverless로 실행할 수 있는 사용 가능한 프로그램 목록을 가져올 수 있습니다. 여기에는 이전에 업로드한 transpile_remote_serverless도 포함됩니다.

# Added by doQumentation — required packages for this notebook
!pip install -q qiskit qiskit-ibm-catalog qiskit-ibm-runtime
from qiskit_ibm_catalog import QiskitServerless

serverless = QiskitServerless()
next(
program
for program in serverless.list()
if program.title == "transpile_remote_serverless"
)
QiskitFunction(transpile_remote_serverless)

업로드된 프로그램 실행 및 입력값 전달하기

먼저, 입력값을 설정합니다. 프로그램에는 circuits, backend, optimization_level의 세 가지 입력값이 있습니다. random_circuit을 사용하여 30개의 무작위 Circuit을 생성할 수 있습니다:

from qiskit.circuit.random import random_circuit

qc_random = [(random_circuit(4, 4, measure=True, seed=i)) for i in range(10)]
qc_random[0].draw(output="mpl", idle_wires=False)

이전 코드 셀의 출력

다음으로, QiskitRuntimeServiceleast_busy를 사용하여 backend를 선택합니다:

from qiskit_ibm_runtime import QiskitRuntimeService

service = QiskitRuntimeService()
backend = service.least_busy(operational=True, simulator=False)
print(backend.name)

최적화 수준을 설정합니다:

optimization_level = 3

serverless.load('PROGRAM_NAME')으로 프로그램을 선택합니다:

transpile_remote_serverless = serverless.load("transpile_remote_serverless")

다음으로, 입력값을 전달하고 파이써닉한 방식으로 다음과 같이 실행합니다:

job = transpile_remote_serverless.run(
circuits=qc_random,
backend=backend.name,
optimization_level=optimization_level,
)
job.job_id
'118256c5-bbb0-4ea8-9e9f-51aac2220aef'

작업 상태 확인하기

Qiskit Serverless job_id를 사용하면 실행 중인 작업의 상태를 확인할 수 있습니다. 다음과 같은 상태가 있습니다:

  • QUEUED: 원격 프로그램이 Qiskit Serverless 큐에 있습니다. 현재 큐 우선순위는 Qiskit Serverless를 얼마나 사용했는지에 따라 결정됩니다.
  • INITIALIZING: 원격 프로그램이 시작 중입니다. 여기에는 원격 환경 설정 및 의존성 설치가 포함됩니다.
  • RUNNING: 프로그램이 실행 중입니다. 이 단계에서 프로그램에 print() 출력이 있으면 job.logs()를 사용하여 로그를 검색할 수 있습니다.
  • DONE: 프로그램이 완료되었으며, job.results()save_result()에 저장된 데이터를 검색할 수 있습니다.

Qiskit Serverless 컴퓨팅 및 데이터 리소스 관리에서 더 자세한 작업 상태를 설정할 수도 있습니다.

job.status()
'QUEUED'
# This cell is hidden from users, it checks the job status
assert _ in ["QUEUED", "INITIALIZING", "RUNNING", "DONE"] # noqa: F821

현재 IBM Quantum 워크로드 테이블은 Qiskit Runtime 워크로드만 반영합니다. job.status()를 사용하여 Qiskit Serverless 워크로드의 현재 상태를 확인해 주세요.

첫 번째 Qiskit Serverless 프로그램을 성공적으로 실행했습니다!

로그 및 결과 검색하기

앞서 언급한 것처럼, 프로그램이 RUNNING 상태가 되면 job.logs()를 사용하여 print() 출력에서 생성된 로그를 가져올 수 있습니다:

logs = job.logs()
print(logs)
No logs yet.

언제든지 작업을 취소할 수도 있습니다:

job.stop()
'Job has been stopped.'

프로그램이 DONE 상태가 되면 job.results()를 사용하여 save_result()에 저장된 결과를 가져올 수 있습니다:

# We can't get results from a cancelled job, so we'll fetch a completed one instead
completed_job = next(
job for job in serverless.jobs() if job.status() == "DONE"
)
completed_job.result()
{'transpiled_circuits': [<qiskit.circuit.quantumcircuit.QuantumCircuit at 0x7f93eca64810>,
<qiskit.circuit.quantumcircuit.QuantumCircuit at 0x7f93ec5e5310>,
<qiskit.circuit.quantumcircuit.QuantumCircuit at 0x7f93ec5d5310>,
<qiskit.circuit.quantumcircuit.QuantumCircuit at 0x7f93ec58b490>,
<qiskit.circuit.quantumcircuit.QuantumCircuit at 0x7f93ec57d310>,
<qiskit.circuit.quantumcircuit.QuantumCircuit at 0x7f93ec535950>,
<qiskit.circuit.quantumcircuit.QuantumCircuit at 0x7f93ec523c90>,
<qiskit.circuit.quantumcircuit.QuantumCircuit at 0x7f93ec60a990>,
<qiskit.circuit.quantumcircuit.QuantumCircuit at 0x7f93ec5527d0>,
<qiskit.circuit.quantumcircuit.QuantumCircuit at 0x7f93ec4152d0>]}

Qiskit Serverless로 이전에 실행한 작업 나열하기

jobs()를 사용하여 Qiskit Serverless에 제출된 모든 작업을 나열할 수 있습니다:

old_jobs = serverless.jobs()
old_jobs
[<Job | 118256c5-bbb0-4ea8-9e9f-51aac2220aef>,
<Job | e9a36469-7d6b-4f00-bf91-78709ebdbbff>,
<Job | 4efd601b-8f61-4c8e-b14a-0b8a9c649dc0>,
<Job | 87cd22c7-8eb9-4606-bdb4-befe946e9e9b>,
<Job | be9a6dfd-0830-4250-aa60-acdd05bb8818>,
<Job | 479513dd-6a76-4c3e-ba49-bb21351b9a05>,
<Job | f9c20c31-be46-41b3-97ac-99f7be61f89e>,
<Job | 37fa2489-4449-4bfb-974e-9d9a9ec3cc21>,
<Job | b754c4e8-6817-48db-9bb9-74c151d6349a>,
<Job | 78bc6744-b417-48cb-8e01-59bb63bcc2be>]

다음 단계

권장 사항