Skip to main content
IBM Quantum Platform

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

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

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

Qiskit Serverless 업그레이드를 진행 중이며, 기능이 빠르게 변화하고 있습니다. 이 개발 단계 동안, 릴리스 노트와 최신 문서는 Qiskit ServerlessGitHub 페이지에서 확인하실 수 있습니다.

이 섹션에서는 qiskit-ibm-catalog 를 사용하여 키스킷 서버리스에서 사용 가능한 프로그램을 나열하고, 이러한 프로그램에 입력을 전달하고, 원격으로 실행하고, 상태를 확인하고, 결과와 로그를 검색하는 방법을 살펴본다.

시작하기 전에 ‘첫 번째 Qiskit Serverless 프로그램 작성하기 ’의 단계별 절차를 모두 따랐는지 확인하세요.


사용 가능한 프로그램 목록

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

from qiskit_ibm_catalog import QiskitServerless

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

Output:

QiskitFunction(transpile_remote_serverless)

업로드된 프로그램을 실행하고 입력을 전달합니다

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

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)

Output:

Output of the previous code cell

그런 다음 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

Output:

'118256c5-bbb0-4ea8-9e9f-51aac2220aef'

작업 상태 점검(O)

키스킷 서버리스 job_id 를 통해 실행 중인 작업의 상태를 확인할 수 있습니다. 여기에는 다음과 같은 상태가 포함됩니다:

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

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

job.status()

Output:

'QUEUED'
Tip

현재 ‘ IBM Quantum ’ 워크로드 표에는 ‘ IBM Quantum Compute Service’ 워크로드만 반영되어 있습니다. Qiskit Serverless 워크로드의 현재 상태를 확인하려면 job.status() 를 사용하세요.

첫 번째 키스킷 서버리스 프로그램을 성공적으로 실행했습니다!


로그 및 결과 가져오기

앞서 언급했듯이 프로그램이 RUNNING 이면 job.logs() 을 사용하여 print() 출력에서 생성된 로그를 가져올 수 있습니다:

logs = job.logs()
print(logs)

Output:

No logs yet.

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

job.stop()

Output:

'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()

Output:

{'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() 을 사용하여 키스킷 서버리스에 제출된 모든 작업을 나열할 수 있습니다:

old_jobs = serverless.jobs()
old_jobs

Output:

[<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>]

다음 단계

권장사항
이 페이지가 도움이 되었습니까?
GitHub에서 버그, 오타를 보고하거나 컨텐츠를 요청하십시오.