量子計算渴望為某些類型的經(jīng)典難題提供更強大的計算能力和更快的結(jié)果。量子電路模擬對于理解量子計算和量子算法的發(fā)展至關(guān)重要。在量子電路中,量子器件由 N 量子位組成,通過對量子位應(yīng)用一系列量子門和測量來執(zhí)行計算。
從數(shù)學(xué)上來說, N 量子比特系統(tǒng)的量子態(tài)可以描述為一個復(fù)雜的 2 N – 維向量。在經(jīng)典計算機上模擬量子電路最直觀的方法是狀態(tài)向量模擬,它將這個向量與其 2 N 復(fù)雜值直接存儲在內(nèi)存中。該電路通過將向量乘以一系列矩陣來執(zhí)行,這些矩陣對應(yīng)于構(gòu)成該電路的門序列。
然而,隨著狀態(tài)向量的維數(shù)隨著量子位的數(shù)量呈指數(shù)增長,完整描述狀態(tài)的內(nèi)存需求將這種方法限制在 30 – 50 量子位的電路中?;趶埩烤W(wǎng)絡(luò)的替代方法可以模擬更多的量子位,但通常在能夠有效模擬的電路的深度和復(fù)雜性方面受到限制。
NVIDIA cuQuantum SDK 具有用于狀態(tài)向量和張量網(wǎng)絡(luò)方法的庫。在本文中,我們將重點介紹狀態(tài)向量模擬和 cuStateVec 庫。有關(guān)張量網(wǎng)絡(luò)方法庫的更多信息,請參閱 利用 NVIDIA cuTensorNet 進行量子電路模擬 。
cuStateVec 圖書館
cuStateVec 庫提供了單個 GPU 原語來加速狀態(tài)向量模擬。由于狀態(tài)向量方法是模擬量子電路的基礎(chǔ),大多數(shù)量子計算框架和庫都包含自己的狀態(tài)向量模擬器。為了便于與這些現(xiàn)有模擬器集成, cuStateVec 提供了一套 API ,以涵蓋常見用例:
測量
門應(yīng)用
期望值
采樣器
狀態(tài)向量運動
測量
一個量子位可以存在于兩個態(tài)|0》和|1》的疊加中。當進行測量時,其中一個值被概率選擇和觀察,另一個值崩潰。 cuStateVec 測量 API 模擬量子位測量,并支持基于 Z 基產(chǎn)品的測量用例和批量單量子位測量。
門應(yīng)用
量子電路有量子邏輯門來修改和準備量子態(tài),以觀察理想的結(jié)果。量子邏輯門用酉矩陣表示。 cuStateVec gate 應(yīng)用程序 API 提供了將量子邏輯門應(yīng)用于某些矩陣類型的功能,包括:
稠密的
斜線的
廣義置換
泡利矩陣的矩陣指數(shù)
期望值
在量子力學(xué)中,計算算符和量子態(tài)的期望值。對于量子電路,我們還計算了給定電路和量子態(tài)的期望值。 cuStateVec 有一個 API ,可以用較小的內(nèi)存占用計算期望值。
采樣器
狀態(tài)向量模擬在數(shù)值上將量子態(tài)保留在狀態(tài)向量中。通過計算每個狀態(tài)向量元素的概率,您可以有效地多次模擬多個量子位的測量,而不會破壞量子態(tài)。 cuStateVec sampler API 以較小的內(nèi)存占用在 GPU 上執(zhí)行采樣。
狀態(tài)向量運動
將狀態(tài)向量放置在 GPU 上,以加速 GPU 的模擬。要在 CPU 上分析模擬結(jié)果,請將生成的狀態(tài)向量復(fù)制到 CPU 。 cuStateVec 提供訪問器 API 來代表用戶執(zhí)行此操作。在復(fù)制過程中,狀態(tài)向量元素的順序可以被重新安排,這樣你就可以將量子位重新排序為所需的量子位順序。
谷歌 Cirq / qsim 和 NVIDIA cuStateVec
宣布NVIDIA CuStEVEEC 文庫集成的第一個項目是 Google’s qsim ,一個優(yōu)化的模擬器,用于他們的量子計算框架, Cirq 。 Google Quantum 人工智能團隊通過一個新的基于 cuStateVec 的 GPU 模擬后端擴展了 qsim ,以補充他們的 CPU 和 CUDA 模擬引擎。
使用 cuStateVec 為 Cirq 和 qsim 構(gòu)建說明
要通過 Cirq 啟用 cuStateVec ,請從源代碼編譯 qsim ,并安裝 qsimcirq Python 包提供的 Cirq 綁定。
# Prerequisite: # Download cuQuantum Beta2 from https://developer.nvidia.com/cuquantum-downloads # Extract cuQuantum Beta2 archive and set the path to CUQUANTUM_ROOT $ tar -xf cuquantum-linux-x86_64-0.1.0.30-archive.tar.xz $ export CUQUANTUM_ROOT=`pwd`/cuquantum-linux-x86_64-0.1.0.30-archive $ ln -sf $CUQUANTUM_ROOT/lib $CUQUANTUM_ROOT/lib64 # Clone qsim repository from github and checkout v0.11.1 branch $ git clone https://github.com/quantumlib/qsim.git $ git checkout v0.11.1 # Build and install qsimcirq with cuStateVec $ pip install . # Install cirq $ pip install cirq
在本例中,我們運行一個電路,創(chuàng)建格林伯格 – 霍恩 – 齊林格( GHZ )狀態(tài),并對實驗結(jié)果進行采樣。以下 Python 腳本通過調(diào)用三個不同的模擬器來獲取|0…00>
和|1…11>
中的振幅:
- Cirq 內(nèi)置模擬器
- 基于 CPU 的模擬器共享
- 使用 cuStateVec 加速拆分
我們啟用了兩個基于 CIRQS 和 77YC 的 CPU 插槽,這兩個插槽分別用于基于 CPU 的 CPU 模擬器。對于 cuStateVec 加速模擬,我們使用單個 A100 GPU 。
import cirq import qsimcirq n_qubits = 32 qubits = cirq.LineQubit.range(n_qubits) circuit = cirq.Circuit() circuit.append(cirq.H(qubits[0])) circuit.append(cirq.CNOT(qubits[idx], qubits[idx + 1]) \ for idx in range(n_qubits - 1)) # Cirqs = cirq.sim.Simulator() result = s.compute_amplitudes(circuit, [0, 2**n_qubits-1]) print(f'cirq.sim : {result}') # qsim(CPU) options = qsimcirq.QSimOptions(max_fused_gate_size=4, cpu_threads=512) s = qsimcirq.QSimSimulator(options) result = s.compute_amplitudes(circuit, [0, 2**n_qubits-1]) print(f'qsim(CPU) : {result}') # qsim(cuStateVec) options = qsimcirq.QSimOptions(use_gpu=True, max_fused_gate_size=4, gpu_mode=1) s = qsimcirq.QSimSimulator(options) result = s.compute_amplitudes(circuit, [0, 2**n_qubits-1]) print(f'cuStateVec: {result}')
以下控制臺輸出顯示,通過使用 CPU SIMD 指令和 OpenMP 進行優(yōu)化, qsim 的 CPU 版本比 Cirq 的模擬器快 5.1x 。通過使用 cuStateVec 版本,模擬速度進一步加快,比 Cirq 的模擬器快 30.04 倍,比 qsim 的 CPU 版本快 5.9 倍。
cirq.sim : [0.70710677+0.j 0.70710677+0.j], 87.51 s qsim(CPU) : [(0.7071067690849304+0j), (0.7071067690849304+0j)], 17.04 s cuStateVec: [(0.7071067690849304+0j), (0.7071067690849304+0j)], 2.88 s
績效結(jié)果
下圖顯示了一些常用電路的門應(yīng)用的初步性能結(jié)果。所有量子位計數(shù)的模擬都會加速。然而,隨著量子位數(shù)量的增加,模擬速度顯著加快,對于最大的電路,模擬速度大約是 10-20 倍。這種性能為探索更大量子電路的開發(fā)和評估提供了機會。
A100 與 64 核 CPU 上的 Cirq / qsim + cuStateVec
圖 1 。與 64 核 EPYC 7742 CPU 上的 Cirq / qsim 相比,在單個 NVIDIA A100 GPU 上使用 cuStateVec 的流行量子電路的模擬性能
相對于 EPYC 7742 中的 64 個 CPU 內(nèi)核,一個 NVIDIA A100 上的 VQE 加速
圖 2 。與 64 核 EPYC 7742 CPU 上的 Cirq / qsim 相比,在單個 NVIDIA A100 GPU 上使用 cuStateVec 的多個不同分子的變分量子本征解算器加速
多 GPU 狀態(tài)向量仿真
狀態(tài)向量模擬也非常適合在多個 GPU 上執(zhí)行。大多數(shù)門應(yīng)用是一種完全并行的操作,通過拆分狀態(tài)向量并將其分布在多個 GPU 上來加速。
在大約 30 個量子位之外,多 GPU 模擬是不可避免的。這是因為一個狀態(tài)向量無法適應(yīng)單個 GPU 的內(nèi)存,因為它的大小隨著附加的量子位呈指數(shù)增長。
當多個 GPU 在一個模擬中協(xié)同工作時,每個 GPU 可以將一個門并行應(yīng)用于其狀態(tài)向量部分。在大多數(shù)情況下,每個 GPU 只需要本地數(shù)據(jù)來更新狀態(tài)向量,每個 GPU 都可以獨立應(yīng)用門。
然而,根據(jù)門作用于哪個模擬量子位, GPU 有時可能需要存儲在不同 GPU 中的部分狀態(tài)向量來執(zhí)行更新。在這種情況下, GPU 必須交換大部分狀態(tài)向量。這些部分的大小通常為數(shù)百兆字節(jié)或幾千兆字節(jié)。因此,多 GPU 狀態(tài)向量模擬對 GPU 互連的帶寬非常敏感。
DGX A100 完全符合這些要求,八款 NVIDIA A100 GPU 使用 NVLink 提供 600GB / s 的 GPU 到 GPU 直接帶寬。我們選擇了三種 30-32 量子位的常見量子計算算法,在 DGX A100 上用 cuStateVec 對 Cirq / qsim 進行基準測試:
量子傅里葉變換( QFT )
肖爾算法
梧桐至上電路
與單次 GPU 運行相比,在八次 GPU 運行中,所有基準測試都顯示出 4.5 – 7 倍加速之間良好的強縮放行為。
圖 3 。 DGX A100 上流行電路狀態(tài)向量模擬的多重 GPU 縮放
圖 4 。流行量子電路模擬的加速比。在 DGX A100 上測量了 GPU 模擬的性能,并與 EPYC 7742 的兩個插座的性能進行了比較。
與兩個 64 核 CPU 上的模擬時間相比, DGX-A100 在 50-90 倍之間提供了令人印象深刻的整體速度提升。
總結(jié)
NVIDIA CuQuin SDK 中的 CuStEVEVEC 庫旨在加速 GPU 上的量子電路的狀態(tài)向量模擬器。谷歌針對 Cirq qsim 的模擬器是首批采用該庫的模擬器之一,該庫對現(xiàn)有程序的 GPU 加速使 Cirq 用戶受益。隨后將集成到更多量子電路框架,包括 IBM 的 Qiskit 軟件。
我們也在擴大規(guī)模?;?cuStateVec 的多 GPU 模擬的初步結(jié)果顯示,關(guān)鍵量子算法的加速比為 50 – 90 倍。我們希望 cuStateVec 成為開創(chuàng)量子計算新領(lǐng)域的寶貴工具。
關(guān)于作者
Shinya Morino 是NVIDIA 高級解決方案架構(gòu)師,隸屬于NVIDIA 人工智能技術(shù)中心( NVAITC )。他已經(jīng)在 NVAITC 中原型化了一個 GPU 加速狀態(tài)向量模擬器,并正在利用他的知識推動 cuStateVec 的開發(fā)。新亞擁有日本東京大學(xué)的工程學(xué)博士學(xué)位。
Andreas Hehn 是NVIDIA 的開發(fā)技術(shù)工程師。他幫助客戶使用 GPU 加速他們的科學(xué)工作流程,重點關(guān)注基因組學(xué)、高能物理實驗和量子計算。安德烈亞斯擁有瑞士蘇黎世 ETH 的物理學(xué)博士學(xué)位,他在那里從事大規(guī)模凝聚態(tài)物理模擬。
Leo Fang 是NVIDIA 的高級工程師,專注于 HPC 、量子計算和 Python 軟件。 2017 年,他在杜克大學(xué)獲得物理學(xué)博士學(xué)位。在加入 NVIDIA 之前,他是布魯克海文國家實驗室計算科學(xué)倡議的助理計算科學(xué)家。他也是許多開源項目的定期貢獻者,包括 CuPy 、 mpi4py 、 conda forge 和 Python 數(shù)據(jù) API 標準聯(lián)盟。
審核編輯:郭婷
-
NVIDIA
+關(guān)注
關(guān)注
14文章
5309瀏覽量
106355 -
gpu
+關(guān)注
關(guān)注
28文章
4944瀏覽量
131217 -
API
+關(guān)注
關(guān)注
2文章
1613瀏覽量
64015
發(fā)布評論請先 登錄
milvus向量數(shù)據(jù)庫的主要特性和應(yīng)用場景

RISC-V架構(gòu)下的編譯器自動向量化

數(shù)字地與模擬地的區(qū)別及原理介紹
Redis 8 向量搜索實測:輕松擴展至 10 億向量

案例 基于CFD仿真的潛航器不同航行狀態(tài)下阻力特性模擬與評估

《AI Agent 應(yīng)用與項目實戰(zhàn)》閱讀心得3——RAG架構(gòu)與部署本地知識庫
交流回饋老化測試負載的詳細介紹

云數(shù)據(jù)庫是哪種數(shù)據(jù)庫類型?
基于有源RFID集裝器具狀態(tài)記錄系統(tǒng)的介紹與應(yīng)用

自研創(chuàng)新 數(shù)智未來 2024中國數(shù)據(jù)庫技術(shù)大會盛大召開

TI模擬前端(AFE)被動均衡的介紹及相關(guān)考慮

觸發(fā)器的無效狀態(tài)怎么判斷
什么是IO模擬量模塊?

評論