QODA 소개: 하이브리드 양자-클래식 컴퓨팅을 위한 플랫폼

Reading Time: 5 minutes

양자 컴퓨팅은 지난 10년 동안 아카데미의 울타리에서 벗어나 주류 산업으로 크게 발전하기 시작했습니다. 규모를 불문한 수많은 기업이 고성능 양자 컴퓨터를 개발하기 위한 노력을 멈추지 않고 있습니다. 양자 기술을 상용화하려면 얼마나 시간이 더 필요할지 아직 모르지만, 지금이 양자 응용을 위한 도구를 개발할 적기인 것은 분명합니다. 

먼저 양자 알고리즘을 이해할 수 있는 능력을 키워야 합니다. NVIDIA는 지난해 양자 컴퓨팅 시뮬레이션을 강화할 수 있는 소프트웨어 개발 키트(SDK)인 cuQuantum을 발표했습니다. GPU에서 cuQuantum을 사용해 양자 회로를 시뮬레이션하면, 현재 QPU(Quantum Processing Unit)보다 훨씬 높은 성능과 큰 규모로 알고리즘 연구를 수행할 수 있습니다. 이는 양자 컴퓨터 활용 방법에 있어서 획기적인 발전을 이루는 토대가 될 것입니다.

양자 알고리즘을 개선하는 것 외에도 클래식 리소스인 CPU, GPU와 더불어 QPU를 최대한 활용해야 합니다. NVIDIA는 이처럼 QPU 활용이라는 사명감을 가지고 하이브리드 양자-클래식 컴퓨팅 플랫폼인 Quantum Optimized Device Architecture(QODA)의 출시를 알렸습니다. 

양자 컴퓨팅이 발전함에 따라, 앞으로 양자 애플리케이션은 양자 컴퓨팅과 고성능 클래식 컴퓨팅을 모두 활용하는 하이브리드 형태가 될 것입니다. 순전히 그래픽을 고려해 개발되었던 GPU가 이제는 고성능 컴퓨팅(HPC)에 없어서는 안 될 하드웨어로 거듭났습니다. 이에 따라 강력하면서 손쉽게 프로그래밍할 수 있는 소프트웨어가 절실해졌습니다. 또한 양자 컴퓨터의 활용성을 극대화하려면 새로운 소프트웨어가 필요합니다.

양자 소프트웨어의 시대가 새롭게 열리고 고성능 하이브리드 컴퓨팅이 실현됨에 따라, 양자 컴퓨터에 대한 접근성이 높아질 것으로 보입니다.

그림 1. NVIDIA QODA는 세계 최초의 하이브리드 양자-클래식 컴퓨팅 플랫폼으로 의약품, 화학, 날씨, 금융, 물류 등에 이르기까지 다양한 응용 분야에서 활용될 것으로 기대됩니다.

양자 프로그래밍 환경

지난 5년 동안 혁신적인 소규모 양자 컴퓨팅 아키텍처를 목표로 여러 가지 양자 프로그래밍 시스템이 발전을 해왔습니다. 이러한 발전은 알고리즘 개발자들에게 커다란 도움이 되었으며, 덕분에 표준 양자 알고리즘뿐만 아니라 하이브리드 변분 접근법까지 조기에 프로토타이핑할 수 있게 되었습니다.

하지만 양자 리소스와 하드웨어 구현 사례가 부족하다 보니 이러한 프로그래밍 접근법들은 대부분 Python 언어 레벨에 머무른 채, 원격 클라우드 기반 실행 모델을 지원할 뿐이었습니다.

양자 아키텍처의 발전과 함께 알고리즘 개발자들이 기존 클래식 이기종 컴퓨팅의 실제 양자 가속을 고려하기 시작하면서 한 가지 의문이 제기되었습니다. 기존 HPC 컨텍스트에서 양자 코프로세싱을 지원하려면 어떻게 해야 할까요?

NVIDIA는 지금까지 진정한 개척자로서 HPC 프로그래밍 모델과 이기종 컴파일러 플랫폼, 그리고 NVIDIA GPU를 1개 이상 사용해 기존 계산 과학 워크플로를 가속화하는 하이-레벨 애플리케이션 라이브러리를 개발하는 데 앞장섰습니다.

NVIDIA는 양자 컴퓨팅을 이기종 HPC 시스템 아키텍처의 또 다른 요소로 생각하여 양자 코프로세싱을 기존 CUDA 에코시스템에 원활하게 통합할 수 있는 프로그래밍 모델을 구상하고 있습니다. 현재 Python 언어 레벨의 접근법으로는 클래식 컴퓨팅 리소스와 양자 컴퓨팅 리소스를 효과적으로 통합하기 어렵습니다.

HPC를 위한 QODA

NVIDIA는 HPC 컨텍스트에서 하이브리드 양자-클래식 컴퓨팅 아키텍처를 프로그래밍할 수 있는 오픈 규격을 개발하고 있습니다. 또한, 양자 가속 HPC에 대해 백엔드에 상관없이(물리, 시뮬레이션) 단일 소스 modern C++ 접근법을 지원하는 QODA 프로그래밍 모델 규격과 NVQ++ 컴파일러 플랫폼을 발표했습니다.

QODA는 기본적으로 CUDA, OpenMP, OpenACC 같은 기존 클래식 병렬 프로그래밍 모델과 호환됩니다. 이러한 컴파일러 구현체는 양자-클래식 C++ 소스 코드 표현을 바이너리 실행 파일로 낮춰서 기본적으로 cuQuantum을 지원하는 시뮬레이션 백엔드를 타겟팅합니다.

이와 같은 프로그래밍 및 컴파일 워크플로는 프로그래밍 환경의 성능을 높여 랩톱에서 분산 멀티 노드, 멀티 GPU 아키텍처에 이르기까지 GPU 프로세싱 및 회로 시뮬레이션과 호환되는 표준 상호운용성을 통해 하이브리드 알고리즘 연구 활동을 지원합니다.

auto ghz = [](const int N) __qpu__ {
  qoda::qreg q(N);
  h(q[0]);
  for (auto i : qoda::irange(N-1)) {
    cnot(q[i], q[i+1]);
  }
  mz(q);
};

// Sample a GHZ state on 30 qubits
auto counts = qoda::sample(ghz, 30);
counts.dump();

위 코드 예제에서 알 수 있듯이 QODA는 modern C++에 초점을 맞춰 CUDA와 유사한 커널 기반 프로그래밍 접근법을 제공합니다.  양자 컴퓨터 코드를 독립 실행형 함수 객체 또는 __qpu__로 주석 처리된 람다 함수로 정의할 수 있습니다. 여기에서 __qpu__란 양자 컴퓨터에서 컴파일하여 실행한다는 것을 의미합니다.

free 함수가 아닌 함수 객체를 이용하면(CUDA 커널 접근법) 표준 양자 라이브러리 함수를 작성하여 양자 커널 표현식을 입력할 수 있기 때문에 더욱 효율적입니다.

이러한 예를 단적으로 보여주는 것이 바로 표준 샘플링 QODA 함수(qoda::sample(…))입니다. 이 함수는 양자 커널 인스턴스와 그 밖에 커널을 평가하는 실제 인수를 입력값으로 이용하고, 관찰된 큐비트 측정 비트 문자열을 관찰된 횟수로 매핑하여 익숙한 결과를 반환합니다.

QODA 커널 프로그래머는 양자 컴퓨팅과 관련하여 기본적으로 제공되는 함수 타입(qoda::qubit, qoda::qreg, qoda::spin_op 등)과 양자 게이트 연산, 그리고 C++에서 상속되는 기존 클래식 제어 흐름에 접근할 수 있습니다.

앞에서 자세히 설명한 언어 컴파일 접근법에서 한 가지 흥미로운 점은 CUDA 커널, OpenMP/OpenACC 프라그마, 하이 레벨 CUDA 라이브러리 API 호출이 포함된 QODA 코드를 컴파일할 수 있는 기능입니다. 덕분에 하이브리드 양자-클래식 애플리케이션 개발자는 양자 컴퓨팅과 함께 멀티 GPU 프로세싱을 효과적으로 이용할 수 있습니다.

앞으로는 양자 컴퓨팅 사용 사례에 데이터 전처리/후처리, 표준 양자 컴파일, 양자 오차 보정을 위한 신드롬 디코딩 같은 작업에 클래식 병렬 프로세싱이 필요합니다.

양자-클래식 응용 분야에 대한 조기 전망

단기 양자 컴퓨팅 아키텍처를 목표로 하이브리드 양자-클래식 알고리즘 프로토타입인 VQE(Variational Quantum Eigensolver)가 개발되었습니다. VQE의 개발 목적은 파라미터로 구성되는 상태 준비 회로와 관련하여 양자 역학의 변분 원리를 이용해 Hamiltonian 같은 양자 역학 연산자에 적용되는 최소 고정값(eigenvalue)을 계산하는 데 있습니다.

먼저 임의의 게이트 순환 파라미터 세트를 대상으로 상태 준비 회로를 실행한 후 양자 역학 연산자의 구조에 따라 측정을 수행하여 실제 파라미터로 기대값을 계산합니다. 그런 다음 사용자에 따라 클래식 옵티마이저를 사용해 파라미터 변화에 따른 최소 기대값을 반복해서 검색합니다. 다음은 QODA 프로그래밍 모델을 사용했을 때 일반적으로 볼 수 있는 VQE 유사 알고리즘 모습입니다.

필요한 주 성분은 위 코드 예제에서 std::vector<double>을 갖는 람다 함수와 같이 파라미터로 구성되는 안자츠(ansatz) QODA 커널 표현식입니다.

// Define your state prep ansatz…
auto ansatz = [](std::vector<double> thetas) __qpu__ {
  … Use C++ control flow and quantum intrinsic ops …
};

// Define the Hamiltonian
qoda::spin_op H = … use x, y, z to build up Hamiltonian … ;

// Create a specific function optimization strategy
int n_params = …;
qoda::nlopt::lbfgs optimizer;
optimizer.initial_parameters = qoda::random_vector(-1, 1, n_params);

// Run the VQE algorithm with QODA
auto [opt_val, opt_params] =
    qoda::vqe(ansatz, H, optimizer, n_params);
printf("Optimal <H> = %lf\n", opt_val);

이 람다 함수의 실제 본문은 경우에 따라 다르겠지만, 표준 C++ 제어 흐름, 범위 내 양자 커널 호출, 논리적인 양자 내장 연산을 사용해 이 함수를 자유롭게 작성하면 됩니다.

std::vector<double>.

다음으로 필요한 성분은 계산에 필요한 기대값 연산자입니다. QODA는 이 연산자를 내장 spin_op 타입으로 표현하며, 프로그래머가 Pauli x(int), y(int) 및 z(int) 함수 호출을 사용해 프로그래밍 방식으로 작성할 수 있습니다.

다음으로 필요한 것은 클래식 함수 옵티마이저입니다. 클래식 함수 옵티마이저는 QODA 언어 규격에서 일반적인 개념으로, 기울기 기반으로 하는 최적화 전략 또는 기울기를 이용하지 않는 최적화 전략에 따라 서브 클래스를 만들기 위한 것입니다.

마지막으로 QODA 언어는 표준 라이브러리 함수를 사용해 전체 VQE 워크플로를 호출합니다. 또한 다음 값이 필요한 연산자인 상태 준비 안사츠를 모델링하는 QODA 커널 인스턴스에서 파라미터로 구성됩니다.

  • 최소 고정값
  • 클래식 최적화 인스턴스
  • 총 변분 파라미터 수

그런 다음 구조적 바인딩이 반환되어 상태 준비 회로에 최적화된 고정값과 해당 파라미터를 인코딩합니다.

앞서 언급한 워크플로는 지극히 일반적이지만 양자 커널 표현식, 원하는 스핀 연산자, 클래식 최적화 루틴과 관련하여 포괄적인 변분 알고리즘을 개발하는 데 적합합니다.

그 밖에 QODA 프로그래밍 모델의 기본 철학도 잘 보여주고 있습니다. 여기에서 기본 철학이란 핵심 개념을 통해 양자 코드 표현식을 설명하고, 하이브리드 양자-클래식 알고리즘 결합성을 구현하는 제네릭 함수 표준 라이브러리의 유용성을 널리 알리는 것을 말합니다. 

QODA Early Interest 프로그램

양자 컴퓨터는 가장 중요한 문제를 해결할 수 있다는 점에서 앞으로 전망이 매우 밝습니다. 우리는 HPC와 AI가 이미 중요한 역할을 하고 있는 영역에서 과학자와 전문가들에게 양자 컴퓨팅의 길을 열어주는 동시에 오늘날 최고의 소프트웨어와 양자 소프트웨어를 손쉽게 통합할 수 있도록 뒷받침하고 있습니다. 이에 따라 앞으로 양자 컴퓨터의 잠재력이 실현되는 날도 멀지 않았습니다.

QODA는 이를 위한 오픈 플랫폼을 제공할 것이며, NVIDIA는 전체 양자 커뮤니티와 협력하여 유익한 양자 컴퓨팅을 실현하는 데 커다란 기대를 걸고 있습니다. QODA Early Interest 프로그램에 가입하여 NVIDIA의 최신 양자 컴퓨팅 개발 소식에 귀를 기울여주세요.

자세한 내용은 게시글, 동영상 등을 찾아볼 수 있는 NVIDIA 양자 컴퓨팅 솔루션을 참조하세요.

이 블로그에 열거된 SDK의 대부분의 독점 액세스, 얼리 액세스, 기술 세션, 데모, 교육 과정, 리소스는 NVIDIA 개발자 프로그램 회원은 무료로 혜택을 받으실 수 있습니다. 지금 무료로 가입하여 NVIDIA의 기술 플랫폼에서 구축하는 데 필요한 도구와 교육에 액세스하시고 여러분의 성공을 가속화 하세요.

Discuss (0)

Tags

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 항목은 *(으)로 표시합니다