Skip to main content
IBM Quantum Platform

Qiskit Functions 시작하기

Premium, Flex 및 On-Prem ( IBM Quantum Platform API를 통해 제공) 요금제 사용자는 IBM Qiskit Functions 에서 무료로 서비스를 시작할 수 있으며, 카탈로그에 기능을 제공한 파트너사 중 한 곳에서 라이선스를 구매할 수도 있습니다.


타사 제품인 ‘ Qiskit Functions ’의 무료 체험판을 신청하세요

무료 체험을 신청하려면 ‘ Qiskit Functions Catalog ’로 이동하여 세부 정보 패널을 확인해 보세요. AccessGroupIdRequest a free trial 클릭하고, IBM Cloud 를 포함하여 Functions 파트너가 요구하는 정보를 입력하십시오:

  1. IBM Cloud 의 IAM 으로 이동합니다.
  2. 자격 요건을 확인하십시오.
    • 헤더의 메뉴 바에서 계정을 다음 형식과 같은 계정으로 변경하세요: XXXXXXX - [Organization Name]
    • 해당 조직이 귀하의 프리미엄 계정에 연결된 조직과 동일한지 확인하십시오.
    • [“귀하의 이름] 계정”이 표시된다면, 현재 개인 계정을 사용하고 있는 것이며, 이 계정은 프리미엄 이용 자격이 없습니다.
  3. 사용자 액세스 그룹 ID를 확인하세요.
    • 그룹 이름을 클릭하세요.
    • ‘상세 정보’를 클릭하세요.
    • 액세스 그룹 ID를 복사하십시오. AccessGroup-.로 시작해야 합니다.

Qiskit Functions Catalog 클라이언트 설치

  1. Qiskit Functions 를 사용하려면 IBM Qiskit Functions Catalog 클라이언트를 설치하십시오:

    pip install qiskit-ibm-catalog
  2. IBM Quantum Platform 대시보드에서 API 키를 확인한 후, Python 가상 환경을 활성화하세요. 아직 가상 환경을 설정하지 않았다면 설치 안내를 참조하십시오.

    신뢰할 수 있는 Python 환경에서 작업하는 경우(예: 개인 노트북이나 워크스테이션), 방법을 save_account() 사용하여 자격 증명을 로컬에 저장하십시오. (공유 컴퓨터나 공용 컴퓨터와 같이 신뢰할 수 없는 환경에서 IBM Quantum Platform 에 인증하는 경우, 다음 단계로 건너뛰십시오.)

    인증에 사용하는 인스턴스에는 ‘ Qiskit Functions ’ 액세스 권한이 활성화되어 있어야 합니다. 기존 인스턴스에서 이를 구성하려면 ‘인스턴스에서 Qiskit Functions 액세스 구성’을 참조하십시오.

    save_account()이 기능을 사용하려면 셸에서 를 python 실행한 다음, 다음 명령을 입력하세요:

    from qiskit_ibm_catalog import QiskitFunctionsCatalog
    
    QiskitFunctionsCatalog.save_account(channel="ibm_quantum_platform", token="<your-token>", instance="<instance-crn>")

    exit()입력하세요. 이제부터 서비스에 인증이 필요할 때마다 다음 코드를 사용하여 인증 정보를 불러올 수 있습니다:

    from qiskit_ibm_catalog import QiskitFunctionsCatalog
    catalog = QiskitFunctionsCatalog()

    예를 들어,

# Load saved credentials
from qiskit_ibm_catalog import QiskitFunctionsCatalog

catalog = QiskitFunctionsCatalog(channel="ibm_quantum_platform")

보안 위험을 최소화하기 위해 신뢰할 수 없는 시스템이나 외부 클라우드 Python 환경에서 코드를 실행하지 마십시오. 신뢰할 수 없는 환경(예: 공용 컴퓨터)을 사용해야 하는 경우, 위험을 줄이기 위해 매번 사용 후 IBM Cloud 의 API 키 페이지에서 해당 키를 삭제하여 API 키를 변경하십시오. 자세한 내용은 ‘사용자 API 키 관리 ’ 항목에서 확인하세요. 이러한 상황에서 서비스를 초기화하려면 다음 코드를 사용하십시오:

from qiskit_ibm_catalog import QiskitFunctionsCatalog

# After using the following code, delete your API key on the
# IBM Quantum Platform home dashboard
catalog = QiskitFunctionsCatalog(token="<YOUR_API_KEY>") # Use the 44-character
# API_KEY you created and saved from the IBM Quantum Platform Home dashboard
API 키를 안전하게 보호하세요

소스 코드, Python 스크립트 또는 노트북 파일에 절대로 비밀번호를 포함하지 마십시오. 다른 사람과 코드를 공유할 때는 Python 스크립트 내에 API 키가 직접 포함되지 않도록 주의하십시오. 대신, 키를 제외한 스크립트를 공유하고, 이를 안전하게 설정하는 방법을 안내해 주세요.

실수로 키를 다른 사람과 공유했거나 Git 와 같은 버전 관리 시스템에 키를 포함시킨 경우, 위험을 줄이기 위해 IBM Cloud 의 API 키 페이지에서 해당 키를 삭제하여 즉시 키를 취소하십시오. 자세한 내용은 ‘사용자 API 키 관리 ’ 항목에서 확인하세요.


사용할 수 있는 함수를 나열하세요

인증 후에는 Qiskit Functions Catalog 에서 자신이 접근 권한을 가진 함수 목록을 확인할 수 있습니다:

catalog.list()

Output:

[QiskitFunction(qunova/hivqe-chemistry),
 QiskitFunction(global-data-quantum/quantum-portfolio-optimizer),
 QiskitFunction(algorithmiq/tem),
 QiskitFunction(qedma/qesem),
 QiskitFunction(multiverse/singularity),
 QiskitFunction(ibm/circuit-function),
 QiskitFunction(q-ctrl/optimization-solver),
 QiskitFunction(colibritd/quick-pde),
 QiskitFunction(q-ctrl/performance-management),
 QiskitFunction(kipu-quantum/iskay-quantum-optimizer)]

활성화된 함수 실행

catalog.load("<provider/function-name>")카탈로그 객체가 인스턴스화된 후에는 다음을 사용하여 함수를 선택할 수 있습니다:

qesem_function = catalog.load("qedma/qesem")

각 Qiskit 함수에는 고유한 입력, 옵션 및 출력이 있습니다. 자세한 내용은 실행하려는 함수에 대한 관련 문서 페이지를 확인하십시오. 기본적으로 모든 사용자는 한 번에 하나의 함수 작업만 실행할 수 있습니다:

from qiskit.quantum_info import SparsePauliOp

avg_magnetization = SparsePauliOp.from_sparse_list(
    [("Z", [q], 1 / 5) for q in range(5)], num_qubits=5
)

job = qesem_function.run(
    pubs=[(circuit, [avg_magnetization, observable])],
    backend_name=backend_name,  # example: "ibm_fez"
    # options = {
    #     "estimate_time_only": "empirical",
    #     "default_precision": 0.2,  # Default precision is applied to all pubs that don't have a precision specified, see API reference for more details
    #     "max_execution_time": 3600,  # You can specify a maximum QPU time in seconds, see API reference for more details
    #     "transpilation_level": "standard",  # "minimal_with_layout_opt" for minimal transpilation, see API reference for more details
    #     "parallel_execution": True,  # True for parallel execution, see API reference for more details
    # },
)
job.job_id

Output:

'7f08c9d5-471b-4da2-92e7-4f2cb94c23a8'
Tip

run() 작업 제출 전에 남은 용량과 백엔드 접근 권한을 확인합니다. 인스턴스의 용량이 부족하거나 지정한 백엔드에 접속할 수 없는 경우, run() 작업이 큐에서 실패하도록 방치하지 않고 즉시 오류를 발생시킵니다. 용량이 부족할 때 경고 메시지를 표시합니다. run() ‘Pass’를 suppress_low_usage_warning=True 눌러 소리를 끄세요.

job = qesem_function.run(
    pubs=[(circuit, [avg_magnetization, observable])],
    backend_name=backend_name,  # example: "ibm_fez"
    suppress_low_usage_warning=True,
    # options = {
    #     "estimate_time_only": "empirical",
    #     "default_precision": 0.2,  # Default precision is applied to all pubs that don't have a precision specified, see API reference for more details
    #     "max_execution_time": 3600,  # You can specify a maximum QPU time in seconds, see API reference for more details
    #     "transpilation_level": "standard",  # "minimal_with_layout_opt" for minimal transpilation, see API reference for more details
    #     "parallel_execution": True,  # True for parallel execution, see API reference for more details
    # },
)

작업 상태 점검(O)

job_idQiskit Function을 사용하면 실행 중인 작업의 상태를 확인할 수 있습니다. 여기에는 다음과 같은 상태가 포함됩니다:

  • QUEUED: 원격 프로그램이 Qiskit 함수 대기열에 있습니다. 대기열 우선순위는 Qiskit Functions 을 얼마나 많이 이용했는지에 따라 결정됩니다.
  • INITIALIZING: 원격 프로그램이 시작되고 있습니다. 여기에는 원격 환경 설정 및 종속성 설치가 포함됩니다.
  • RUNNING: 프로그램이 실행 중입니다. 또한 특정 기능에서 지원하는 경우, 이에 더해 몇 가지 더 상세한 상태 정보도 포함됩니다.
    • RUNNING: MAPPING: 이 함수는 현재 고전적 입력값을 양자 입력값으로 매핑하고 있습니다.
    • RUNNING: OPTIMIZING_FOR_HARDWARE: 이 함수는 선택된 QPU에 최적화되어 있습니다. 여기에는 회로 트랜스필레이션, QPU 특성 분석, 관측 가능한 역전파 등이 포함될 수 있습니다.
    • RUNNING: WAITING_FOR_QPU: 이 함수는 IBM Quantum 컴퓨트 서비스에 작업을 제출했으며, 현재 대기열에서 대기 중입니다.
    • RUNNING: EXECUTING_QPU: 이 함수에는 실행 중인 양자 컴퓨팅 작업이 있습니다.
    • RUNNING: POST_PROCESSING: 이 함수는 결과 후처리 기능을 수행하며, 여기에는 오차 완화, 양자 결과를 고전적 결과로 매핑하는 작업 등이 포함될 수 있습니다.
  • DONE: 프로그램이 완료되었으며,.을 사용하여 결과 데이터를 가져올 수 있습니다 job.result().
  • ERROR: 문제가 발생하여 프로그램이 중단되었습니다. 오류 메시지를 확인하려면 를 사용하세요 job.result() .
  • CANCELED: 해당 프로그램은 사용자, 서비스 또는 서버에 의해 취소되었습니다.
job.status()

Output:

'QUEUED'

검색 결과

프로그램이 실행된 DONE후에는 를 job.result() 사용하여 결과를 가져올 수 있습니다. 이 출력 형식은 함수마다 다르므로, 해당 함수의 설명서를 반드시 확인하시기 바랍니다:

result = job.result()
print(result)

Output:

PrimitiveResult([PubResult(data=DataBin(evs=np.ndarray(<shape=(), dtype=float64>), stds=np.ndarray(<shape=(), dtype=float64>), ensemble_standard_error=np.ndarray(<shape=(), dtype=float64>)), metadata={'shots': 4096, 'target_precision': 0.015625, 'circuit_metadata': {}, 'resilience': {}, 'num_randomizations': 32})], metadata={'dynamical_decoupling': {'enable': True, 'sequence_type': 'XX', 'extra_slack_distribution': 'middle', 'scheduling_method': 'alap'}, 'twirling': {'enable_gates': False, 'enable_measure': True, 'num_randomizations': 'auto', 'shots_per_randomization': 'auto', 'interleave_randomizations': True, 'strategy': 'active-accum'}, 'resilience': {'measure_mitigation': True, 'zne_mitigation': False, 'pec_mitigation': False}, 'version': 2})

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

job.cancel()

Output:

'Job has been stopped.'

관련된 양자 컴퓨팅 작업에 액세스하기

Qiskit 함수는 실행 중에 하나 이상의 양자 컴퓨팅 작업을 QPU에 제출할 수 있습니다. 해당 런타임 작업의 ID를 가져오려면 다음을 사용하십시오 job.runtime_jobs(). 이 ID를 사용하여 QiskitRuntimeService 인스턴스에서 런타임 작업 객체를 가져오거나, IBM Quantum® Platform 대시보드에서 워크로드를 찾을 수 있습니다.

runtime_job_ids = job.runtime_jobs()
runtime_job_ids

함수가 실행 중인 작업을 세션이나 배치로 묶는 경우, 를 사용하여 세션 ID를 나열하십시오 job.runtime_sessions() . 특정 세션 ID를 전달하여 해당 세션의 런타임 작업만 반환하려면 job.runtime_jobs() :

sessions = job.runtime_sessions()
if sessions:
    session_runtime_jobs = job.runtime_jobs(runtime_session=sessions[0])
    print(session_runtime_jobs)
else:
    print("No runtime sessions for this job.")
Note

리턴된 목록은 빈 목록일 수 있습니다. 함수는 실행 시점에 할당받은 런타임 서비스를 통해 런타임 작업을 제출할 때만 해당 작업을 보고하며, 일부 함수는 런타임 작업을 직접 제출하지 않습니다.


작업 로그 보기

를 사용하여 함수가 실행되는 동안 생성하는 로그 출력을 가져옵니다 job.logs() . 로그는 진행 상황을 추적하고, 특정 ERROR 상태로 종료된 작업의 오류를 진단하는 데 유용합니다.

print(job.logs().splitlines())

로그 행이 많이 생성되는 장시간 실행되는 작업의 경우, 를 사용하여 원하는 행만 반환하십시오 job.filtered_logs() . 정규 표현식을 에 전달하여 일치하는 줄을 include 유지하거나, 에 전달하여 exclude 일치하는 줄을 제외하려면:

print(job.filtered_logs(include="iteration"))

이전에 실행된 Qiskit Functions 작업 목록

Qiskit Functions 에 제출된 모든 작업을 나열하려면 다음 명령을 사용할 jobs() 수 있습니다:

old_jobs = catalog.jobs()
old_jobs

Output:

[<Job | f6c29f49-4d5f-4fff-aca6-2e9a115b9763>,
 <Job | 7f08c9d5-471b-4da2-92e7-4f2cb94c23a8>,
 <Job | 62fe9176-d1e5-467e-b2bd-7a3f3c7be4e5>,
 <Job | af525b2e-16b1-45a1-80bb-dbd94ce30258>,
 <Job | b95a7a57-c1ad-4958-b7ac-953e4e1ee824>,
 <Job | 7bfa33da-0f17-4e67-84b6-f556f7eeb436>,
 <Job | ca46c191-9eb9-4de6-bfa7-b60d7eb29b5e>,
 <Job | 6ac0ba93-3831-43fb-9fb9-760da2225e06>,
 <Job | f0e38071-060d-47e8-988d-9cc1f69358e3>,
 <Job | 629cf110-e490-4675-8a07-f6d298d166b0>]

검색 결과를 좁히려면 필터를 적용하세요. 을 사용하여 기능별로 function, 을 사용하여 상태별로 status, 을 사용하여 제출 날짜별로 필터링하세요 created_after. 와 limit : 키를 사용하여 결과를 넘겨보세요 offset:

recent_errors = catalog.jobs(
    function=qesem_function,
    status="ERROR",
    created_after="2024-01-01T00:00:00Z",
    limit=5,
)
recent_errors

특정 작업의 작업 ID를 이미 알고 있다면, 다음 명령어를 사용하여 해당 작업을 조회할 수 있습니다 catalog.job():

# First, get the most recent job that has been executed.
latest_job = old_jobs[0]

# We can also get that same job with `catalog.job`
job_by_id = catalog.job(latest_job.job_id)

# Verify that the job is the same using both retrieval methods.
assert job_by_id.job_id == latest_job.job_id

# Print the job_id for this job.
print(job_by_id.job_id)

Output:

f6c29f49-4d5f-4fff-aca6-2e9a115b9763

오류 메시지 가져오기

ERROR프로그램 상태가 인 경우, 다음과 같이 를 사용하여 job.error_message() 오류 메시지를 가져옵니다:

job.error_message()

Output:

qiskit.exceptions.QiskitError: 'Workflow execution failed -- https://docs.quantum.ibm.com/errors#9999'

다음 단계

권장사항
  • 트랜스파일링이나 오류 처리를 직접 관리할 필요 없이, 회로 기능을 활용하여 새로운 알고리즘과 애플리케이션을 구축해 보세요.
  • 고전적인 입력과 출력을 사용하여 도메인별 과제를 해결하는 애플리케이션 기능을 살펴보세요.
  • Qiskit Functions 에 대한 API 참조 문 서를 참조하십시오.
  • 실습을 해보고 싶다면, ‘ Qiskit Functions ’를 다루는 튜토리얼을 몇 가지 따라해 보세요.
이 페이지가 도움이 되었습니까?
GitHub에서 버그, 오타를 보고하거나 컨텐츠를 요청하십시오.