Qiskit Functions 소개
- Qiskit Functions는 IBM Quantum® Premium Plan, Flex Plan, 및 On-Prem(IBM Quantum Platform API를 통한) Plan 사용자만 사용할 수 있는 실험적 기능입니다. 미리보기 릴리스 상태이며 변경될 수 있습니다.
패키지 버전
이 페이지의 코드는 다음 요구 사항을 사용하여 개발되었습니다. 이 버전 이상을 사용하는 것을 권장합니다.
qiskit[all]~=1.4.1
qiskit-ibm-runtime~=0.37.0
qiskit-ibm-catalog~=0.4
Qiskit Functions는 양자 소프트웨어 개발 워크플로우의 일부를 추상화하여 유틸리티 규모의 알고리즘 발견과 애플리케이션 개발을 간소화하고 가속화합니다. 이를 통해 Qiskit Functions는 코드를 직접 작성하고 실험을 미세 조정하는 데 소요되는 시간을 절약해 줍니다.
Functions는 두 가지 형태로 제공됩니다:
| 유형 | 기능 | 입출력 예시 | 대상 사용자 |
|---|---|---|---|
| Circuit 함수 | Circuit 실행을 위한 간소화된 인터페이스. 트랜스파일링, 오류 억제, 오류 완화를 추상화 | 입력: 추상 PUB 객체 출력: 완화된 기대값 | 하드웨어 최적화나 오류 처리에 집중할 필요 없이 Qiskit을 사용하여 새로운 알고리즘과 애플리케이션을 발견하는 연구자. Circuit 함수를 사용하여 커스텀 애플리케이션 함수를 구축할 수 있습니다. |
| 애플리케이션 함수 | 알고리즘 탐색 및 도메인별 사용 사례와 같은 고수준 작업을 다룹니다. 고전적 입출력으로 작업을 해결하기 위한 양자 워크플로우를 추상화 | 입력: 분자, 그래프 출력: 바닥 + 들뜬 상태 에너지, 비용 함수의 최적값 | 비양자 분야의 연구자로, 고전적 데이터를 양자 Circuit에 매핑할 필요 없이 기존 대규모 고전적 워크플로우에 양자를 통합하는 분야. |
# Added by doQumentation — required packages for this notebook
!pip install -q qiskit qiskit-ibm-catalog qiskit-ibm-runtime
Functions는 IBM® 및 타사 파트너에 의해 제공됩니다. 각각은 특정 워크로드 특성에 대해 성능이 최적화되어 있으며 고유한 성능 튜닝 옵션을 가지고 있습니다.
사용 가능한 함수 개요
Circuit 함 수
| 이름 | 제공자 | 권장 사용 사례 | 고유 장점 |
|---|---|---|---|
| 텐서 네트워크 오류 완화 | Algorithmiq | 저가중치 옵저버블과 루프 프리 Circuit이 있는 워크로드. | 관련 Circuit 클래스에 대해 영점 잡음 외삽(ZNE) 및 확률적 오류 상쇄(PEC)와 같은 표준 오류 완화 기준선을 능가하면서 측정 오버헤드와 분산을 줄입니다. |
| QESEM: 오류 억제 및 오류 완화 | Qedma | 분수 또는 매개변수화된 Gate가 있는 Circuit, 고가중치 옵저버블, 편향 없는 기대값과 정확한 런타임 추정이 필요한 워크플로우가 포함된 워크로드. | 관련 Circuit 클래스에 대해 ZNE 및 PEC를 능가하면서, 낮은 분산과 리소스 오버헤드로 편향 없는 기대값을 생성합니다. |
| 성능 관리 | Q-CTRL | 파라메트릭 Circuit, 깊은 Circuit, 또는 많은 Circuit 실행이 필요한 워크로드. | AI 기반 오류 억제를 양자 알고리즘에 자동으로 적용하여, IBM 디바이스의 성능을 최대화하고 필요한 샷 수, 컴퓨팅 시간 및 비용을 줄이면서 정확한 결과를 제공합니다. Sampler 및 Estimator 프리미티브의 실행 정확도를 향상시키는 제로 오버헤드 방법으로, 모든 가중치의 옵저버블과 호환됩니다. |
애플리케이션 함수
| 이름 | 제공자 | 권장 사용 사례 | 고유 장점 |
|---|---|---|---|
| QUICK-PDE | ColibriTD | 다중 물리 PDE를 위한 양자 계산 사용. 양자 및 물리적 모델링 매개변수 모두에 대한 완전한 제어를 유지하면서 양자 하드웨어용 시뮬레이션 워크플로우 준비. | 고급 솔루션 인코딩 및 스펙트럼 방법을 통해 정밀하고 확장 가능한 PDE 솔루션을 제공하는 강력한 하이브리드 VQA 프레임워크를 제공하여, 양자 대비 시뮬레이션 역량을 구축하려는 팀에 이상적인 진입점입니다. |
| Quantum Portfolio Optimizer | Global Data Quantum | 금융 최적화 워크로드로, 리스크를 최소화하고 수익을 극대화하면서 시간에 따른 최적의 포트폴리오 전략을 찾고, 거래 전략 백테스팅을 가능하게 합니다. | 이 금융 사용 사례를 위한 VQE 양자 알고리즘의 고도로 특화된 적응을 통해 조합 최적화 문제를 해결하며, 포트폴리오 최적화에 맞춤화된 최적화된 실행 전략 및 옵티마이저, 노이즈 인식 오류 완화 기법을 사용합니다. |
| HI-VQE Chemistry | Qunova Computing | 다체 전자 구조 문제 해결이 필요한 계산 화학, 분자 시뮬레이션, 재료 과학 또는 모든 해밀토니안 시뮬레이션의 워크로드. | 40~60 Qubit으로 모델링된 문제에 대해 화학적 정확도(1 kcal/mol, 1.6 mHa)를 달성하는 향상된 SQD를 사용하여 분자 전자 구조를 해결하며, 수렴 속도 또는 정확도에서 각각 슈퍼컴퓨터의 일부 고전적 솔루션이나 표준 SQD를 수 자릿수 능가합니다. |
| Iskay Quantum Optimizer | Kipu Quantum | 스케줄링, 물류, 라우팅, QUBO/HUBO 문제와 같은 최적화 워크로드. | 양자 최적화 루틴을 위한 통합 조절 가능한 고전적 전처리 및 후처리 방법. 선택된 HUBO 벤치마크에서 고전적 솔버(CPLEX, 시뮬레이티드 어닐링, 타부 서치)보다 런타임 이점을 제공합니다. 어려운 도전인 Market Split ms_5_100을 수 시간 내에 해결(이 튜토리얼 참조). |
| Singularity Machine Learning | Multiverse Computing | IBM 하드웨어에서 실행되는 양자 최적화를 활용하여 향상된 정확도 또는 계산 효율성의 이점을 얻을 수 있는 고전적 머신러닝 분류 워크플로우. | Random Forest나 XGBoost와 같은 고전적 모델과 비교하거나 이를 초과하는 정확도를 제공하면서, 상당히 적은 학습기와 더 컴팩트한 앙상블로 작동합니다. 양자 최적화 투표로 구동되어, 가장 유익한 학습기를 선택하고 결정 경계를 정제하여, 더 높은 효율성, 감소된 모델 복잡성, 더 강건한 성능을 달성합니다. |
| Optimization Solver | Q-CTRL | 이진 최적화 문제 또는 이진 비용 함수로 매핑할 수 있는 모든 조합 문제. 모든 차수의 비용 함수와 최대 디바이스 규모까지의 문제 크기가 지원됩니다. | 고수준 문제 정의의 입력을 가능하게 하고 유틸리티 규모 양자 하드웨어에서 고전적으로 도전적인 조합 문제에 대한 정확한 솔루션을 자동으로 찾는 노이즈 인식 엔드투엔드 양자 최적화 솔루션입니다. 오류 억제, 효율적 매핑, 하이브리드 양자-고전적 최적화를 처리하여 심층적인 양자 전문 지식 없이 전체 디바이스 규모에서 최적화 작업을 해결합니다. |
Qiskit Functions 시작하기
Premium, Flex 및 On-Prem(IBM Quantum Platform API를 통한) Plan 사용자는 IBM Qiskit Functions를 무료로 시작하거나, 카탈로그에 함수를 기여한 파트너 중 하나로부터 라이선스를 구매할 수 있습니다.
타사 Qiskit Functions 무료 체험 요청
새로운 무료 체험을 요청하려면, Qiskit Functions Catalog로 이동하여 세부 정보 패널을 탐색하세요. Request a free trial을 클릭하고 IBM Cloud AccessGroupId를 포함하여 Functions 파트너가 요구하는 정보를 입력하세요:
- IBM Cloud IAM으로 이동하세요.
- 자격을 확인하세요.
- 상단 바에서
XXXXXXX - [조직 이름]형식의 계정으로 전환하세요. - 조직이 Premium 계정과 연결된 조직과 동일한지 확인하세요.
- "[이름]의 계정"이 표시되면, 개인 계정을 사용하고 있는 것이며, Premium 접근 자격이 없습니다.
- 상단 바에서
- 액세스 그룹 ID를 찾으세요.
- 그룹 이름을 클릭하세요.
- Details를 클릭하세요.
- 액세스 그룹 ID를 복사하세요.
AccessGroup-으로 시작해야 합니다.
Qiskit Functions Catalog 클라이언트 설치
-
Qiskit Functions를 사용하기 시작하려면, IBM Qiskit Functions Catalog 클라이언트를 설치하세요:
pip install qiskit-ibm-catalog -
IBM Quantum Platform 대시보드에서 API 키를 가져오고, Python 가상 환경을 활성화하세요. 아직 가상 환경을 설정하지 않았다면 설치 지침을 참조하세요.
신뢰할 수 있는 Python 환경(예: 개인 노트북이나 워크스테이션)에서 작업하는 경우,
save_account()메서드를 사용하여 인증 정보를 로컬에 저장하세요. (공유 또는 공용 컴퓨터와 같은 신뢰할 수 없는 환경에서 IBM Quantum Platform에 인증하는 경우 다음 단계로 건너뛰세요.)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 스크립트 또는 노트북 파일에 키를 포함하지 마세요. 다른 사람과 코드를 공유할 때, API 키가 Python 스크립트에 직접 포함되지 않도록 하세요. 대신 키 없이 스크립트를 공유하고 안전하게 설정하는 방법에 대한 지침을 제공하세요.
실수로 키를 다른 사람과 공유하거나 Git과 같은 버전 관리에 포함한 경우, 즉시 IBM Cloud API 키 페이지에서 키를 삭제하여 취소하세요. 사용자 API 키 관리 주제에서 자세히 알아보세요.
-
인증 후, 접근 가능한 Qiskit Functions Catalog의 함수를 나열할 수 있습니다:
catalog.list()
[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)을 사용하여 함수를 선택할 수 있습니다:
ibm_cf = catalog.load("ibm/circuit-function")
각 Qiskit Function에는 커스텀 입력, 옵션, 출력이 있습니다. 실행하려는 함수에 대한 자세한 정보는 해당 문서 페이지를 확인하세요. 기본적으로 모든 사용자는 한 번에 하나의 함수 작업만 실행할 수 있습니다:
# This cell is hidden from users
# It gets these details programmatically so we can test this notebook
from qiskit_ibm_runtime import QiskitRuntimeService
from qiskit.circuit.random import random_circuit
service = QiskitRuntimeService()
instance = service.active_account()["instance"]
backend_name = service.least_busy().name
circuit = random_circuit(num_qubits=2, depth=2, seed=42)
observable = "Z" * circuit.num_qubits
job = ibm_cf.run(
pubs=[(circuit, observable)],
instance=instance,
backend_name=backend_name, # E.g. "ibm_fez"
)
job.job_id
'7f08c9d5-471b-4da2-92e7-4f2cb94c23a8'
작업 상태 확인
현재 IBM Quantum 워크로드 테이블은 Qiskit Runtime 워크로드만 반영합니다. job.status()를 사용하여 Qiskit Function 워크로드의 현재 상태를 확인하세요.
Qiskit Function job_id로 실행 중인 작업의 상태를 확인할 수 있습니다. 여기에는 다음 상태가 포함됩니다:
QUEUED: 원격 프로그램이 Qiskit Function 큐에 있습니다. 큐 우선순위는 Qiskit Functions 사용량에 기반합니다.INITIALIZING: 원격 프로그램이 시작 중입니다. 여기에는 원격 환경 설정 및 의존성 설치가 포함됩니다.RUNNING: 프로그램이 실행 중입니다. 특정 함수에서 지원하는 경우 더 상세한 상태도 포함됩니다RUNNING: MAPPING: 함수가 현재 고전적 입력을 양자 입력에 매핑하고 있습니다RUNNING: OPTIMIZING_FOR_HARDWARE: 함수가 선택된 QPU에 맞게 최적화하고 있습니다. 여기에는 Circuit 트랜스파일링, QPU 특성화, 옵저버블 역전파 등이 포함될 수 있습니다RUNNING: WAITING_FOR_QPU: 함수가 Qiskit Runtime에 작업을 제출했으며, 큐에서 대기 중입니다RUNNING: EXECUTING_QPU: 함수에 활성 Qiskit Runtime 작업이 있습니다RUNNING: POST_PROCESSING: 함수가 결과를 후처리하고 있습니다. 여기에는 오류 완화, 양자 결과를 고전적으로 매핑하는 것 등이 포함될 수 있습니다
DONE: 프로그램이 완료되었으며,job.results()로 결과 데이터를 검색할 수 있습니다.ERROR: 문제로 인해 프로그램이 실행을 중지했습니다.job.result()를 사용하여 오류 메시지를 확인하세요.CANCELED: 프로그램이 취소되었습니다. 사용자, 서비스 또는 서버에 의해 취소됩니다.
job.status()
'QUEUED'
결과 검색
프로그램이 DONE 상태가 되면, job.results()를 사용하여 결과를 가져올 수 있습니다. 이 출력 형식은 각 함수에 따라 다르므로, 해당 문서를 따라야 합니다:
result = job.result()
print(result)
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.stop()
'Job has been stopped.'
Qiskit Functions로 이전에 실행한 작업 나열
jobs()를 사용하여 Qiskit Functions에 제출된 모든 작업을 나열할 수 있습니다:
old_jobs = catalog.jobs()
old_jobs
[<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>]
특정 작업의 작업 ID가 이미 있는 경우, catalog.get_job_by_id()로 작업을 검색할 수 있습니다:
# First, get the most recent job that has been executed.
latest_job = old_jobs[0]
# We can also get that same job with get_job_by_id
job_by_id = catalog.get_job_by_id(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)
f6c29f49-4d5f-4fff-aca6-2e9a115b9763
오류 메시지 가져오기
프로그램 상태가 ERROR인 경우, job.error_message()를 사용하여 다음과 같이 오류 메시지를 가져옵니다:
job.error_message()
qiskit.exceptions.QiskitError: 'Workflow execution failed -- https://docs.quantum.ibm.com/errors#9999'
다음 단계
- Circuit 함수 탐색 - 트랜스파일링이나 오류 처리를 관리할 필요 없이 새로운 알고리즘과 애플리케이션을 구축합니다.
- 애플리케이션 함수 탐색 - 고전적 입출력으로 도메인별 작업을 해결합니다.