在過去的十年里,量子計算從學術實驗室躍入主流。創業公司和大公司都在努力制造更好的量子計算機。雖然目前尚不清楚我們離在常見問題上使用量子優勢還有多遠,但很明顯,現在是構建交付有價值的量子應用所需工具的時候了。
首先,我們需要在理解量子算法方面取得進展。去年, NVIDIA 發布了 cuQuantum ,這是一款用于加速量子計算模擬的軟件開發工具包( SDK )。在 GPU 上使用 cuQuantum 模擬量子電路,使算法研究的性能和規模遠遠超過了目前在量子處理單元( QPU )上可以實現的性能和規模。這為在理解如何充分利用量子計算機方面取得突破鋪平了道路。
除了改進量子算法外,我們還需要充分利用 QPU 以及經典計算資源 CPU 和 GPU 。如今, NVIDIA 宣布推出 量子優化設備架構( QODA ) 是一個混合量子經典計算平臺,其使命是實現這一效用。
隨著量子計算的發展,所有有價值的量子應用都將是混合的,量子計算機將與高性能經典計算一起工作。 GPU 純粹為圖形而創建,并轉化為 high-performance computing ( HPC )的基本硬件。這需要新的軟件來實現強大而直接的編程。量子計算機從科學實驗向有用加速器的轉變也需要新的軟件。
量子軟件的這一新時代將實現性能混合計算,并為更廣泛的科學家和創新者群體增加量子計算機的可訪問性。
量子編程景觀
在過去五年中,針對小規模、噪聲量子計算架構的量子編程方法得到了發展。這一發展對算法開發人員來說意義重大,并使標準量子算法以及混合變分方法的早期原型化成為可能。
由于缺乏量子資源和硬件實現的實用性,大多數編程方法都處于純 Python 級別,支持遠程、基于云的執行模型。
隨著量子體系結構的改進和算法開發人員考慮現有經典異構計算的真正量子加速,問題出現了:我們應該如何在傳統高性能計算環境中支持量子協處理?
NVIDIA 是開發高性能計算編程模型、異構編譯器平臺和高級應用程序庫的真正先驅,這些應用程序庫可以通過一個或多個應用程序加速傳統的科學計算工作流 NVIDIA GPU .
我們將量子計算視為異構高性能計算系統架構的另一個元素,并設想了一種編程模型,該模型將量子協處理無縫地結合到我們現有的系統中 CUDA 生態系統 . 在這方面,目前從 Python 語言級別開始的方法是不夠的,最終將限制經典和量子計算資源的性能集成。
QODA 用于高性能計算
NVIDIA 正在開發一個開放規范,用于在高性能計算環境中編程混合量子經典計算架構。我們宣布 QODA 編程模型規范和相應的 NVQ ++編譯器平臺,支持后端不可知(物理、模擬)、單源、現代 C ++方法來實現量子加速高性能計算。
QODA 與現有的經典并行編程模型(如 CUDA 、 OpenMP 和 OpenACC )具有內在的互操作性。該編譯器實現還將量子經典 C ++源代碼表示降低為二進制可執行文件,這些二進制可執行文件本機以支持量子的模擬后端為目標。
該編程和編譯工作流程通過與 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 提供了一種類似 CUDA 的基于內核的編程方法,以現代 C ++為中心。您可以將量子設備代碼定義為獨立的函數對象或帶有 _uqpu_uu 注釋的 lambda ,以指示將編譯到量子設備并在其上執行。
通過依賴自由函數上的函數對象( ZCK0 內核方法),您可以實現一種高效的方法來構建通用標準量子庫函數,該函數可以將任何量子內核表達式作為輸入。
這方面的一個簡單示例是標準采樣 QODA 函數(qoda::sample(...)
),它將量子內核實例和任何具體參數作為輸入,并將觀察到的量子比特測量位字符串的熟悉映射返回到相應的觀察次數。
QODA 內核程序員可以訪問與量子計算相關的某些內置類型(qoda::qubit
、qoda::qreg
、qoda::spin_op
等)、量子門操作以及從 C ++繼承的所有傳統經典控制流。
前面詳細介紹的語言編譯方法的一個有趣方面是能夠編譯包含 CUDA 內核、 OpenMP 和 OpenACC pragmas 以及更高級別的 CUDA 庫 API 調用的 QODA 代碼。此功能將使混合量子經典應用程序開發人員能夠真正利用多 GPU 處理與量子計算。
未來的量子計算用例將需要經典的并行處理,例如數據預處理和后處理、標準量子編譯任務和量子糾錯的綜合征解碼。
量子經典應用的早期展望
針對噪聲、短期量子計算架構的典型混合量子經典算法是變分量子特征解算器( VQE )。矢量量化方程的目標是根據量子力學的變分原理,計算給定量子力學算子(如哈密頓量)相對于參數化狀態制備電路的最小特征值。
為給定的一組柵極旋轉參數執行狀態準備電路,并執行一組由量子力學算子的結構決定的測量,以計算這些具體參數的期望值。然后使用用戶指定的經典優化器通過改變這些參數來迭代搜索最小期望值。
您可以在 QODA 編程模型中看到類似 VQE 的通用算法的樣子:
// 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);
所需的主要組件是參數化的 ansatz-QODA 內核表達式,在代碼示例中顯示為采用std::vector<double>
的 lambda 。
這個 lambda 的實際主體取決于當前的問題,但您可以自由地使用標準 C ++控制流、作用域內量子內核調用和量子內在操作的邏輯集來構建這個函數。
下一個需要的組件是您需要計算其期望值的運算符。 QODA 將它們表示為內置的spin_op
類型,您可以通過 Pauli x(int)
、y(int)
和z(int)
函數調用以編程方式構建它們。
接下來,您需要一個經典的函數優化器,這是 QODA 語言規范中的一個一般概念,用于將子類化為特定的優化策略,基于梯度或無梯度。
最后,該語言公開了用于調用整個 VQE 工作流的標準庫函數。它在 QODA 內核實例上參數化,該實例建模狀態準備 ansatz ,該運算符需要以下值:
- 最小特征值
- 經典優化實例
- 變分參數的總數
然后返回一個結構化綁定,該綁定對狀態準備電路的最優特征值和相應的最優參數進行編碼。
前面的工作流非常通用,有助于開發變分算法,這些算法最終在量子核表達式、感興趣的自旋算子和經典優化例程方面是通用的。
但它也展示了 QODA 編程模型的基本原理:提供描述量子代碼表達式的核心概念,然后促進通用函數標準庫的實用性,從而實現混合量子經典算法的可組合性。
QODA 早期興趣計劃
量子計算機有望幫助我們解決一些最重要的問題。我們正在向高性能計算和人工智能已經發揮關鍵作用的領域的科學家和專家開放量子計算,并實現當今最好的現有軟件與量子軟件的輕松集成。這將大大加速量子計算機實現其潛力。
QODA 提供了一個開放的平臺來實現這一點, NVIDIA 很高興與整個量子社區合作,使有用的量子計算成為現實。應用于 QODA 早期興趣計劃 以了解 NVIDIA quantum computing 的最新發展。
有關更多信息,請參閱 NVIDIA 量子計算解決方案 ,以及帖子、視頻等。
?