Skip to main content
IBM Quantum Platform

HI-VQE Chemistry - Qunova Computing의 Qiskit 함수

API 참조 보기

Note

키스킷 기능은 IBM 퀀텀 프리미엄 요금제, 플렉스 요금제 및 온프레미스( IBM 퀀텀 플랫폼 API를 통해) 요금제 사용자에게만 제공되는 실험적 기능입니다. 프리뷰 릴리스 상태이며 변경될 수 있습니다.

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

    qiskit-ibm-runtime~=0.45.0
    

개요

양자 화학에서 전자 구조 문제는 시스템 전자의 거동을 설명하는 양자 파동 함수인 전자 슈뢰딩거 방정식의 해를 찾는 데 중점을 둡니다. 이러한 파동 함수는 복잡한 진폭의 벡터이며, 각 진폭은 가능한 전자 구성의 기여도에 해당합니다.

접지 상태는 시스템의 가장 낮은 에너지 파동 함수이며 분자 시스템 연구에서 특별한 중요성을 갖습니다. 접지 상태를 계산하는 가장 정확한 방법은 가능한 모든 전자 구성을 고려하는 것이지만, 시스템 크기에 따라 구성의 수가 기하급수적으로 증가하기 때문에 대규모 시스템에서는 이 방법을 사용하기가 어렵습니다.

핸드오버 반복적 변형 양자 아이겐솔버(HI-VQE)는 분자 시스템의 기저 상태를 정확하게 추정하기 위한 혁신적인 하이브리드 양자 고전적 방법입니다. 양자 하드웨어와 클래식 컴퓨팅을 통합하여 양자 프로세서를 사용하여 후보 전자 구성을 효율적으로 탐색하고 클래식 컴퓨터에서 결과 파동 함수를 계산합니다. HI-VQE는 작지만 화학적으로 정확한 파동 함수를 생성함으로써 양자 화학 및 재료 과학 분야의 연구와 발견을 향상시킵니다.

쿠노바의 HI-VQE 알고리즘 개요를 보여주는 이미지

HI-VQE는 높은 정확도로 접지 상태를 효율적으로 추정하여 전자 구조 문제의 계산 복잡성을 줄여줍니다. 가장 관련성이 높은 전자 구성의 엄선된 하위 집합에 집중하여 정확도와 효율성을 모두 최적화합니다.

기존 컴퓨터와 양자 컴퓨터의 강점을 결합한 HI-VQE는 현재 추정 파동 함수를 반복적으로 개선하고 개선합니다. 고유한 서브스페이스 구성 기술을 통해 구성 선택의 효율성을 높여 사용자가 양자 화학 시뮬레이션을 더욱 효율적으로 제어하고 정확도를 향상시킬 수 있습니다.

해당 알고리즘에 대해 더 깊이 알고 싶으시다면, 관련 연구 논문을 읽어보실 수 있습니다


설명

분자 시스템의 전자 구성 수는 시스템 크기에 따라 기하급수적으로 증가합니다. 그러나 접지 상태와 같은 특정 전자 상태의 경우, 구성의 일부만이 상태의 에너지에 크게 기여하는 것이 일반적입니다. 선택된 구성 상호 작용(SCI) 방법은 이러한 희소성을 활용하여 가장 관련성이 높은 구성을 식별하고 집중함으로써 계산 비용을 절감합니다. 이러한 구성의 하위 집합을 서브스페이스라고 합니다.

HI-VQE는 분자 시스템을 표현하는 양자 컴퓨터의 고유한 효율성을 활용하여 하위 공간 검색을 지원합니다. 클래식 및 양자 서브루틴을 통합하여 전자 구조 문제를 높은 정확도로 해결합니다. 기존의 양자 SCI 방법과 달리 HI-VQE는 가변 훈련, 반복적인 하위 공간 구성, 사전 대각선화 구성 스크리닝을 결합하여 양자 측정, 반복 및 고전적인 대각선화 비용을 줄여 효율성을 높입니다. 따라서 HI-VQE는 더 많은 큐비트를 필요로 하는 더 큰 분자 시스템에 적용할 수 있으며, 주어진 크기의 문제를 동일한 정확도로 해결하는 데 드는 비용을 절감할 수 있습니다.

Qunova의 HI-VQE 알고리즘 각 단계에 대한 상세한 설명을 보여주는 이미지.

시스템의 기저 상태를 계산하기 위해 HI-VQE는 먼저 고전 화학 패키지 PySCF 를 사용하여 분자 형상 및 기타 분자 정보와 같은 사용자가 제공한 입력으로부터 분자 표현을 생성합니다. 그런 다음 하이브리드 양자-클래식 최적화 루프에 진입하여 포함된 구성의 수를 최소화하면서 접지 상태를 최적으로 표현하기 위해 하위 공간을 반복적으로 다듬습니다. 이 루프는 하위 공간 크기 또는 에너지 안정성과 같은 수렴 기준이 충족될 때까지 계속되며, 그 후 계산된 기저 상태 파동 함수와 에너지가 출력됩니다. 이러한 결과는 정확한 포텐셜 에너지 표면을 구성하고 시스템에 대한 추가 분석을 수행하는 데 사용할 수 있습니다.

이 최적화 루프는 고품질의 부분공간을 생성하기 위해 양자 회로의 매개변수를 조정하는 데 중점을 둡니다. HI-VQE는 ‘ efficient_su2 ’ 및 ‘LUCJexcitation_preserving등 세 가지 양자 회로 옵션을 제공합니다. 이 최적화 과정은 하트리-팍 기준 상태가 일반적으로 적합하기 때문에, 해당 상태에 근접한 위치에서 초기화됩니다. 그런 다음 이 회로가 양자 장치에서 실행되고, 결과 양자 상태에서 구성 정보를 추출한 뒤 이진 문자열로 반환됩니다. 양자 소자의 잡음으로 인해, 일부 샘플링된 구성은 물리적으로 유효하지 않을 수 있으며, 이 경우 전자 수나 스핀이 보존되지 않을 수 있습니다. HI-VQE는 qiskit-addon-sqd 패키지의 구성 복구 프로세스를 활용하여 이 문제를 해결하므로, 사용자는 잘못된 구성을 수정하거나 삭제할 수 있습니다.

그런 다음 유효한 구성은 최소한의 기여를 할 것으로 예상되는 구성을 제거하기 위해 선택적 선별 단계를 거칩니다. 이렇게 하면 하위 공간의 크기가 줄어들어 대각선화 단계의 비용이 낮아집니다. 스크리닝이 활성화되면 유효한 구성으로 예비 하위 공간 해밀턴이 구성되고 매우 느슨한 종료 기준을 사용하여 대각선화가 수행됩니다. 각 구성에 대한 결과 진폭의 정확도는 낮지만, 이번 반복에서 하위 공간에서 제외할 구성을 예측하는 데 효과적이며 계산 속도가 빠릅니다.

선택한 구성이 하위 공간에 추가되고 시스템의 해밀턴이 이 하위 공간에 투영됩니다. 하위 공간은 반복적으로 업데이트되어 반복에 걸쳐 가장 관련성이 높은 구성을 유지합니다. 이 접근 방식은 양자 회로가 각 단계에서 전체 접지 상태를 근사화할 필요가 없기 때문에 다른 방법과 대조됩니다.

다음으로, 아공간 해밀턴을 고전적으로 대각선화하여 최저 고유값과 그에 해당하는 고유 벡터를 구하고, 이는 접지 상태와 그 에너지의 근사치를 나타냅니다. 반복을 통해 서브스페이스 품질이 향상되면 계산된 접지 상태가 실제 접지 상태에 더 근접하게 됩니다. 이 시점에서 추가 스크리닝 단계를 수행하여 계산된 접지 상태에 크게 기여하지 않는 구성을 하위 공간에서 제거할 수 있습니다. 이 단계를 통해 다음 반복으로 전달되는 하위 공간이 최대한 컴팩트하게 유지됩니다. 이는 대각선화에 의해 반환되는 진폭을 기반으로 평가되며, 이는 계산된 접지 상태에 대한 각 구성의 중요도 기여도를 나타냅니다.

그런 다음 융합 검사를 통해 추가 교육이 결과를 개선할 수 있는지 여부를 결정합니다. 그렇다면 선택적인 고전적 확장 단계가 수행되고 양자 회로 파라미터가 업데이트되어 계산된 에너지를 더욱 최소화하며 이 과정이 반복됩니다. 고전적인 확장 단계에서는 양자 디바이스에서 샘플링한 구성을 보완하여 하위 공간에 대한 추가 구성을 생성합니다. 먼저 대각선화 결과에서 진폭이 가장 큰 구성을 식별한 다음 식별된 구성에서 단일 여기 및 이중 여기로 새로운 구성을 생성합니다. 그런 다음 원하는 수의 이러한 구성이 하위 공간에 추가됩니다.

반복이 수렴했다고 판단되면 HI-VQE는 계산된 기저 상태(기저 상태 파함수의 하위 공간 상태와 진폭의 형태), 에너지, 그리고 계산된 상태가 시스템의 해밀턴 고유 상태를 형성하는지를 나타내는 에너지 분산 측정값을 반환합니다.

사용자는 각 양자 회로에 사용되는 양자 회로와 촬영 횟수를 결정할 수 있으며, 서브스페이스 크기를 제어하거나 양자 생성 구성을 지원하는 추가 구성의 고전적 생성을 활성화할 수 있습니다. 이러한 방식으로 사용자는 원하는 애플리케이션에 맞게 HI-VQE의 동작을 조정할 수 있습니다.


시작하기

먼저, 해당 함수에 대한 접근 권한을 요청하십시오. 그런 다음, IBM Quantum® API 키를 사용하여 인증하고, 계정을 이미 로컬 환경에 저장해 두었다면 다음과 같이 Qiskit Function을 선택하세요:

import reprlib
from qiskit_ibm_catalog import QiskitFunctionsCatalog

catalog = QiskitFunctionsCatalog(channel="ibm_quantum_platform")

# Verify that you have access to the function
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)]
# Load the function
function = catalog.load("qunova/hivqe-chemistry")

첫 번째 예는 HI-VQE 알고리즘을 사용하여 NH3 분자의 기저 상태 에너지를 계산하는 방법을 보여줍니다.

분자 기하 구조 및 옵션을 정의하십시오

NH3 의 분자 기하학은 각 원자에 대해 ";"로 구분된 데카르트 좌표로 제공됩니다.

# Define the molecule geometry
geometry = """
N         -0.85188       -0.02741        0.03141;
H          0.16545        0.00593       -0.01648;
H         -1.16348       -0.39357       -0.86702;
H         -1.16348        0.94228        0.06281;
"""

다음 사전 형식으로 분자 시스템에 대한 추가 옵션을 정의하고 제공할 수 있습니다.

# Configure some options for the job.
molecule_options = {"basis": "sto3g"}
hivqe_options = {"shots": 100, "max_iter": 20}

지오메트리 및 옵션 입력으로 함수를 실행합니다.

# Run HI-VQE
job = function.run(
    geometry=geometry,
    # `backend_name` is the name of a backend with at least 16 qubits,
    # for example, "ibm_marrakesh".
    backend_name=backend_name,
    max_states=2000,
    max_expansion_states=10,
    molecule_options=molecule_options,
    hivqe_options=hivqe_options,
)

문제가 발생할 경우 지원 요청에 제공할 수 있도록 함수 작업 ID를 인쇄해 두는 것이 좋습니다.

print("Job ID:", job.job_id)

Output:

Job ID: e5ced6f2-fd1d-4244-a6aa-bd27cfb0cdee

이 예에서는 NH3 분자에 대해 8개의 궤도를 가진 16개의 큐비트( sto3g 기준)를 사용합니다.

다음과 같이 Qiskit 함수 워크로드의 상태를 확인하거나 결과를 반환하세요:

print(job.status())

Output:

QUEUED

작업이 완료되면 result() 인스턴스로 결과를 얻을 수 있습니다.

result = job.result()

# Output can be long, so we display a shortened representation
shortened_result = reprlib.repr(result)
print(shortened_result)

Output:

{'eigenvector': [0.9824448589364075, 0.009527106392132133, 6.854074372058527e-08, 3.591500190038039e-07, 0.0012975231577544268, 2.310159709002111e-05, ...], 'energy': -55.52108557170985, 'energy_history': [-55.51901898989887, -55.52056881448526, -55.52065046778772, -55.520690696813716, -55.520691108428, -55.520708448092634, ...], 'energy_variance': 3.066239097617371e-10, ...}

접지 상태 에너지에 액세스하려면 '에너지' 키를 사용하세요. "고유 벡터" 키는 결과의 "상태"와 함께 저장된 전자 구성의 해당 비트 문자열 표기법과 함께 CI 계수를 제공합니다.

fci_energy = -55.521148034704126  # the exact energy using FCI method
hivqe_energy = result["energy"]
print(
    f"|Exact Energy - HI-VQE Energy|: "
    f"{abs(fci_energy - hivqe_energy) * 1000} mHa"
)
print(f"Sampled Number of States: {len(result['states'])}")

Output:

|Exact Energy - HI-VQE Energy|: 0.06246299427914437 mHa
Sampled Number of States: 1936

라이센싱

더 높은 한도를 허용하는 라이선스를 취득하지 않는 한, 이 Qiskit 함수의 사용은 최대 20 큐비트까지 필요한 문제로 제한된다는 점에 유의하십시오.

라이선스 관련 문의 사항은 qiskit.support @ qunovacomputing.com 으로 이메일을 보내주십시오.

라이선스가 부여된 함수 사용 예시

라이선스 사용자에게는 라이선스 토큰이 발급되며, 이후 래퍼 라이브러리를 사용하여 해당 라이선스 토큰을 함수에 제출해야 합니다. 이 래퍼 라이브러리는 PyPI 에서 다음 명령어를 사용하여 설치할 수 있습니다 pip install hivqe-qiskit-function-utils. 아래 예제는 함수를 호출할 때 이 라이브러리를 사용하여 라이선스 토큰을 전송하는 방법을 보여줍니다.

import math
from qiskit_ibm_catalog import QiskitFunctionsCatalog
from hivqe_qiskit_function_utils import FunctionWrapper

catalog = QiskitFunctionsCatalog(
    token="your_qiskit_functions_catalog_token",
    channel="ibm_quantum_platform",
    instance="your_ibm_instance",
)

molecule_geometry = f"""
O 0 0 0;
H {-0.957*math.sin(math.radians(104.5)/2.0)} {0.957*math.cos(math.radians(104.5)/2.0)} 0;
H {0.957*math.sin(math.radians(104.5)/2.0)} {0.957*math.cos(math.radians(104.5)/2.0)} 0
"""

hivqe = FunctionWrapper(
    token="your_hivqe_license_token",
    function=catalog.load("qunova/hivqe-chemistry"),
)
job = hivqe.run(
    geometry=molecule_geometry,
    backend_name="ibm_torino",
    max_states=10000,
    max_expansion_states=1000,
    hivqe_options={"ansatz": "epa", "max_iter": 10},
)
result = job.result()

성능

이 섹션에서는 24-큐비트 사례( Li2S ), 40-큐비트 사례( N2 분자), 44-큐비트 사례( FeP-NO 시스템)로 HI-VQE의 벤치마크 계산 시연을 보여줍니다.

24 큐비트를 가진 Li2S 분자의 이탈 가능 에너지 표면 곡선

PES 곡선은 FCI 기준 및 RHF의 초기 추측과 함께 FCI 기준의 에너지 오차와 함께 표시됩니다.

Li2S 시스템에 대해 HI-VQE가 고전적 기준 PES 곡선의 화학적 정확도 범위 내에서 해를 생성함을 보여주는 이미지.

계산은 다음 지오메트리와 옵션을 사용하여 수행되었습니다.

# Define Li2S geometries
Li2S_geoms = {
    "Li2S_1.51": "S        -1.239044    0.671232   -0.030374;Li       -1.506327    0.432403   -1.498949;Li       -0.899996    0.973348    1.826768;",
    "Li2S_2.40": "S        -1.741432    0.680397    0.346702;Li       -0.529307    0.488006   -1.729343;Li       -1.284307    0.989409    2.177209;",
    "Li2S_3.80": "S        -2.707255    0.674298    0.909161;Li        0.079218    0.552012   -1.671656;Li       -0.927010    0.931502    1.557063;",
}

# Configure some options for the job.
molecule_options = {
    "basis": "sto3g",
}
hivqe_options = {
    "shots": 100,
    "max_iter": 20,
}

results = []
for geom in ["Li2S_1.51", "Li2S_2.40", "Li2S_3.80"]:
    # Run HI-VQE
    job = function.run(
        geometry=Li2S_geoms[geom],
        backend_name=backend_name,  # can use any device with at least 38 qubits
        max_states=2000,
        max_expansion_states=10,
        molecule_options=molecule_options,
        hivqe_options=hivqe_options,
    )
    results.append(job.result())

빨간색 점은 여섯 가지 지오메트리에 대한 HI-VQE 계산 결과를 나타내며, 1.51, 2.40, 3.80 옹스트롬에 해당하는 세 가지 지오메트리가 위 셀에 입력으로 제공됩니다.

40 큐비트를 가진 양자 원자 분자( N2 )의 해리 PES 곡선

질소 분자는 하트리-복크 상태를 넘어서는 상관 에너지 기여도가 큰 다중 참조 시스템으로 확인되었습니다. 호모-루모 활성 궤도 선택을 사용하여 N2 분자에 대한 벤치마크 계산을 수행했습니다( 20o,14e ). 이 문제를 나타내는 전체 활성 공간(CAS) 번호는 6,009,350,400입니다. 강력한 데스크톱( 16cpu/64GB )을 사용하여 이 상태 수로 고유값 문제 해법(에너지 및 전자 구조)을 구하는 것은 불가능합니다. HI-VQE를 사용하면 CAS 상태의 하위 공간을 효율적으로 검색하여 화학적으로 정확한 결과를 찾는 동시에 계산 리소스를 크게 절약할 수 있습니다. 다음 플롯은 N2 분자 해리에 대한 40큐비트 HI-VQE 계산의 PES 곡선을 보여줍니다.

N2 계에 대해 HI-VQE가 고전적 기준 PES 곡선의 화학적 정확도 범위 내에서 해를 산출함을 보여주는 그림

44 큐비트를 가진 NO 시스템을 갖는 5배위 철(II)-포르피린의 이탈 PES 곡선

또 다른 흥미로운 화학 시스템은 다양한 생리학적 과정에서 중요한 역할을 하는 생물학적으로 관련된 메탈로포르피린 시스템을 나타내는 배위 산화질소(NO) 리간드와 결합된 철(II)-포르피린( FeP ) 복합체입니다. 이 예에서는 HI-VQE를 사용하여 FeP 와 NO 사이의 분자 간 상호작용의 정확한 위치 에너지 표면 곡선(다르게 분리된 지오메트리의 기저 상태 에너지)을 추정했습니다. 결합된 시스템은 총 450개의 궤도와 202개의 전자( 450o,202e )와 6-31g(d )를 기반으로 합니다. 호모 루모 활성 궤도 선택은 ( 22o,22e )를 사용하여 실제 사례에서 더 작은 사례를 계산하는 데 사용되었습니다. 다음 벤치마크 결과를 보면, CASCI(DMRG)( 22o,22e ) 참조의 최첨단 고전 컴퓨터 화학 계산을 통해 화학적 정확도(> 1.6 mHa )를 달성할 수 있었습니다.

FeP-NO 계에 대해 HI-VQE가 고전적 기준 PES 곡선의 화학적 정확도 범위 내에서 해를 산출함을 보여주는 그림

벤치마크

  • 정확한 행렬 크기는 FCI 및 CASCI와 같은 정확한 솔루션을 위한 행렬 결정자의 수입니다.
  • HI-VQE 계산 샘플을 추출하고 그 하위 공간을 계산합니다(예: HI-VQE 행렬 크기).
  • 총 시간에는 QPU 런타임과 CPU로 실행되는 키스킷 함수가 포함됩니다.
  • 정확도는 정확한 솔루션과의 에너지 차이로 추정됩니다.
화학 시스템
큐비트 수
정확한 매트릭스 크기
HI-VQE 매트릭스 크기
E(diff)에서 정확한 ( mHa )
반복 횟수
총 시간
QPU 런타임 사용량
NH3NH_3 (8o,10e)그림 16313619360.08637 s34 s
Li2SLi_2S (10o,10e)206350439690.605250 s50초
NH3NH_3 (15o,10e)6시간에서 30분9018009497290.905354 s54 s
N2N_2 (16o,14e)3213087360017982811.1096531 s121 s
3H2O3H_2O (18o,24e)363446220963994240.90245174 s130 s
N2N_2 (20o,14e)40600935040090120041.2021개46547 s258 s

오류 메시지 가져오기

워크로드가 실패하면 상태는 ERROR 이며 job.result() 으로 전화하면 예외가 발생합니다:

job = function.run(
    geometry="invalid-geometry",  # This will cause an error
    backend_name=backend_name,
    max_states=2000,
    max_expansion_states=15,
    molecule_options=molecule_options,
    hivqe_options=hivqe_options,
)

job.result()

Output:

---------------------------------------------------------------------------
QiskitServerlessException                 Traceback (most recent call last)
Cell In[12], line 10
      1 job = function.run(
      2     geometry="invalid-geometry",  # This will cause an error
      3     backend_name=backend_name,
   (...)
      7     hivqe_options=hivqe_options,
      8 )
---> 10 job.result()

File ~/work/documentation/documentation/.tox/py311/lib/python3.11/site-packages/qiskit_serverless/core/job.py:253, in Job.result(self, wait, cadence, verbose, maxwait)
    251 if self.status() == "ERROR":
    252     if results:
--> 253         raise QiskitServerlessException(results)
    255     raise QiskitServerlessException(self.filtered_logs(include=r"(?i)error|exception"))
    257 if isinstance(results, str):

QiskitServerlessException: ["runner.UnknownRuntimeError: 'An unexpected error occurred during job execution. Please make sure that your inputs are valid. If you are still experiencing problems, you can contact the Qunova Computing support service at [email protected] and provide the Function job ID of this job for more assistance. -- https://docs.quantum.ibm.com/errors#1500'\n"]
job.status()

Output:

'ERROR'

지원 받기

이 기능에 대한 도움이 필요하면 qunovacomputing.com qiskit.support 이메일을 보내세요.

특정 오류를 해결하는 데 도움이 필요하면 오류가 발생한 작업의 함수 작업 ID를 알려주세요.


다음 단계

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