量子軟件開(kāi)發(fā)框架SpinQit:讓量子軟件的開(kāi)發(fā)更加開(kāi)放與高效

和傳統(tǒng)計(jì)算機(jī)類似,在量子計(jì)算領(lǐng)域,計(jì)算機(jī)硬件是基礎(chǔ),但若沒(méi)有相應(yīng)的軟件,人們就無(wú)法有效利用硬件資源執(zhí)行量子計(jì)算。因此,還需要軟件工具去設(shè)計(jì)、優(yōu)化、運(yùn)行和理解量子程序。
此時(shí),開(kāi)發(fā)者往往需要一套量子軟件開(kāi)發(fā)框架來(lái)完成這些操作。
量子軟件開(kāi)發(fā)框架(Software Development Kit,以下簡(jiǎn)稱SDK)可以被視為一套工具箱,它提供了進(jìn)行量子編程和量子算法設(shè)計(jì)所需要的基本元素。使用量子SDK,開(kāi)發(fā)者可以高效地創(chuàng)建、調(diào)試和運(yùn)行量子程序。
早期的量子SDK只支持基礎(chǔ)量子算法,多用于教育和科研。隨著變分量子算法和量子機(jī)器學(xué)習(xí)的發(fā)展,出現(xiàn)了新的算法和應(yīng)用,這些算法可以在有噪聲的機(jī)器上運(yùn)行,也對(duì)量子SDK提出了新的需求,如自動(dòng)微分和訓(xùn)練經(jīng)典-量子混合的機(jī)器學(xué)習(xí)模型。
然而,早期的SDK難以很好地支持這些需求。與此同時(shí),一些現(xiàn)有的量子機(jī)器學(xué)習(xí)平臺(tái)也存在各種局限性,例如有些忽視了基礎(chǔ)的容錯(cuò)量子算法,或者只綁定自家的經(jīng)典機(jī)器學(xué)習(xí)平臺(tái)。
支持更多量子算法、兼容度更高、更開(kāi)放的量子SDK成為新的需求?;诖?,量旋科技的工程師們以“開(kāi)放”和“高效”為核心,設(shè)計(jì)、研發(fā)并開(kāi)源了量子軟件開(kāi)發(fā)框架SpinQit。

從整體架構(gòu)上來(lái)看,SpinQit分為三個(gè)部分:前端API、編譯器和后端執(zhí)行平臺(tái)。
前端包含不同量子編程的語(yǔ)法,支持對(duì)接不同的經(jīng)典軟件或開(kāi)發(fā)平臺(tái);
基于圖論的中間表示是SpinQit可擴(kuò)展架構(gòu)的核心,不同的前端編程語(yǔ)法被對(duì)應(yīng)的編譯器轉(zhuǎn)為統(tǒng)一的中間表示,再轉(zhuǎn)為不同后端平臺(tái)能夠執(zhí)行的格式;
而不同后端執(zhí)行平臺(tái)可以高效執(zhí)行量子程序,滿足不同的應(yīng)用需求。
前端支持多種語(yǔ)法和量子算法
API集成方便調(diào)用,開(kāi)發(fā)更高效
1)支持多種前端語(yǔ)法
SpinQit的開(kāi)放特性之一體現(xiàn)在其對(duì)不同前端語(yǔ)法的支持上,包括對(duì)Python、OpenQASM語(yǔ)言的支持,以及對(duì)Qiskit量子編程庫(kù)的兼容。

量旋科技的工程師們?yōu)镾pinQit設(shè)計(jì)了一套基于Python的量子編程語(yǔ)法,它能夠同時(shí)支持各種不同量子算法的開(kāi)發(fā)需要。
Python為多數(shù)量子計(jì)算編程的用戶所熟悉,選擇Python可以降低用戶的學(xué)習(xí)成本和參與開(kāi)源社區(qū)的門(mén)檻。同時(shí),SpinQit也能夠容易地和眾多支持Python的經(jīng)典機(jī)器學(xué)習(xí)平臺(tái)結(jié)合。
OpenQASM是目前業(yè)界使用最廣泛的量子匯編語(yǔ)言之一,用于很多量子計(jì)算課程。對(duì)OpenQASM的支持便于用戶將其他平臺(tái)上的量子程序移植到SpinQit上,或者用來(lái)比較不同平臺(tái)的執(zhí)行結(jié)果。
另外,SpinQit也能夠兼容IBM的量子編程庫(kù)Qiskit。由于不少用戶對(duì)Qiskit較為熟悉,這在很大程度上方便了程序的復(fù)用。
2)支持直接調(diào)用基礎(chǔ)算法模塊
在量子計(jì)算領(lǐng)域,有許多基礎(chǔ)的量子算法模塊,往往被使用在不同的應(yīng)用場(chǎng)景中,或用于構(gòu)建組合算法。例如,量子傅里葉變換就是量子相位估計(jì)、HHL、Shor等算法的重要組成部分。

在SpinQit中,眾多像量子傅里葉變換這樣的基礎(chǔ)算法被封裝為原語(yǔ)和算法API供用戶調(diào)用,使用戶不用重復(fù)造輪子,這也是它的重要價(jià)值所在。
3)支持多種量子算法
除基礎(chǔ)算法模塊,SpinQit也支持變分量子算法這類典型量子-經(jīng)典混合算法,其被廣泛應(yīng)用于量子化學(xué)、組合優(yōu)化等領(lǐng)域。這類算法的大體架構(gòu)是將問(wèn)題建模為哈密頓量,結(jié)合含參量子線路進(jìn)行迭代優(yōu)化。

SpinQit對(duì)整個(gè)算法流程進(jìn)行了充分的支持,包括哈密頓量的處理、參數(shù)化線路、經(jīng)典/量子目標(biāo)函數(shù)、經(jīng)典/量子優(yōu)化器等等。
特別地,SpinQit實(shí)現(xiàn)了純量子微分算法,可在真實(shí)量子計(jì)算機(jī)上運(yùn)行,也在經(jīng)典模擬器中實(shí)現(xiàn)了基于反向傳播的自動(dòng)微分。SpinQit實(shí)現(xiàn)了一些量子優(yōu)化器,還通過(guò)接口封裝,使用戶能夠使用他們熟悉的經(jīng)典優(yōu)化器。
4)支持量子機(jī)器學(xué)習(xí)
對(duì)量子機(jī)器學(xué)習(xí)的支持是SpinQit的另一亮點(diǎn)。
上文提到的一系列量子計(jì)算的基本模塊構(gòu)成了對(duì)量子機(jī)器學(xué)習(xí)的底層支撐。此外,SpinQit提供了接口,能夠支持量子計(jì)算和PyTorch、TensorFlow等經(jīng)典機(jī)器學(xué)習(xí)框架的混合學(xué)習(xí)。

在這些基礎(chǔ)上,SpinQit可以支持多種不同類型的量子機(jī)器學(xué)習(xí)算法,例如量子聚類、量子神經(jīng)網(wǎng)絡(luò)、量子支持向量機(jī)。這些量子機(jī)器學(xué)習(xí)算法已經(jīng)被證明可以應(yīng)用于多種不同的場(chǎng)景,例如金融投資、反欺詐和醫(yī)療的輔助診斷,以及經(jīng)典機(jī)器學(xué)習(xí)的領(lǐng)域,包括自然語(yǔ)言處理和圖像識(shí)別等。
多級(jí)編譯優(yōu)化
多元化后端執(zhí)行
前端輸入設(shè)計(jì)好的量子算法之后,量子程序還需要被翻譯成量子計(jì)算機(jī)能夠理解的指令,經(jīng)過(guò)后端執(zhí)行,才能完成量子計(jì)算操作。
在專門(mén)為量子計(jì)算設(shè)計(jì)的SpinQit編譯系統(tǒng)中,前文所述三種前端語(yǔ)法都有對(duì)應(yīng)的編譯器,將程序編譯為統(tǒng)一的中間表示。
“中間表示”可以被視為一個(gè)中轉(zhuǎn)站,不同的源代碼在這里被轉(zhuǎn)換為中間表示,進(jìn)而再轉(zhuǎn)換為目標(biāo)后端的執(zhí)行代碼。
除部分特例外,前端用戶自定義的量子門(mén)都會(huì)分解為一些基本門(mén)。在SpinQit中,中間表示基于一組基本的量子邏輯門(mén),以圖的形式表示相互關(guān)系。
SpinQit的內(nèi)置編譯器可以基于中間表示進(jìn)行不同級(jí)別的編譯優(yōu)化,從基礎(chǔ)的算符消除、融合,到控制比特的化簡(jiǎn)等,優(yōu)化級(jí)別可以自行設(shè)定,對(duì)應(yīng)的編譯時(shí)間也不同。
不同執(zhí)行平臺(tái)支持的基本量子門(mén)是不同的,為了能夠在不同平臺(tái)上運(yùn)行量子程序,每個(gè)執(zhí)行平臺(tái)都有對(duì)應(yīng)的匯編器做進(jìn)一步處理。這些匯編器也會(huì)充分利用后端平臺(tái)的特點(diǎn),加速一些操作,比如初始態(tài)制備。

而豐富的后端執(zhí)行平臺(tái)正是SpinQit的一大優(yōu)勢(shì)。依托量旋科技強(qiáng)大的量子計(jì)算機(jī)硬件資源,用戶可以選擇在包含真機(jī)和云平臺(tái)的不同平臺(tái)上運(yùn)行自己的程序。
真機(jī)方面,SpinQit是國(guó)內(nèi)唯一可以提交到本地量子計(jì)算機(jī)執(zhí)行的SDK。目前SpinQit已對(duì)桌面型核磁量子計(jì)算機(jī)提供支持,未來(lái)還將進(jìn)一步支持超導(dǎo)量子計(jì)算機(jī)。
作為SpinQit生態(tài)的一部分,量旋科技金牛座量子云平臺(tái)內(nèi)的云上資源也可供使用,用戶同樣可將程序提交到云平臺(tái)執(zhí)行。
模擬器方面,SpinQit對(duì)本地CPU模擬器和大規(guī)模GPU模擬器都提供了支持。
本地的CPU模擬器方便用戶進(jìn)行小規(guī)模的程序驗(yàn)證,或是滿足教學(xué)場(chǎng)景的需要;而GPU模擬器可以將模擬的規(guī)模提高到30個(gè)量子比特以上,支持高性能的較大規(guī)模模擬。
另外,SpinQit還擁有一個(gè)特殊后端,就是將量子計(jì)算代碼轉(zhuǎn)化為OpenQASM代碼輸出。這樣一來(lái),所有支持OpenQASM的第三方平臺(tái)都可以執(zhí)行使用SpinQit開(kāi)發(fā)的量子程序。
量子云平臺(tái)提供支撐
開(kāi)源共享,開(kāi)放共建

目前,SpinQit已在GitHub開(kāi)源,并提供了在線文檔,其中包含API說(shuō)明和一些基本用例。量旋科技的工程師們希望將SpinQit建設(shè)成為一個(gè)開(kāi)放的量子計(jì)算開(kāi)源社區(qū),為量子算法的研究和軟件開(kāi)發(fā)搭建一個(gè)高效的平臺(tái)。
不僅僅有助于創(chuàng)新和協(xié)作,SpinQit的開(kāi)源也利于推動(dòng)完善量子SDK開(kāi)放的標(biāo)準(zhǔn),改善不同系統(tǒng)和工具間的兼容性。
除開(kāi)放API和接口,以及開(kāi)放源代碼外,SpinQit的開(kāi)放特性同樣體現(xiàn)在量子計(jì)算云平臺(tái)的支撐上。量子計(jì)算云平臺(tái)為公眾開(kāi)放提供了訪問(wèn)和使用量子硬件的能力,無(wú)論身處何地,人們都可以通過(guò)網(wǎng)絡(luò)連接到這些資源。

“金牛座”量子云平臺(tái)是由量旋科技打造的一款開(kāi)放物理底層控制、鏈接多種真實(shí)量子計(jì)算體系的云服務(wù)平臺(tái),其搭載多個(gè)量子計(jì)算體系,同時(shí)支持8、5、3、2個(gè)比特的量子計(jì)算,且具有多達(dá)24比特的高性能模擬平臺(tái)。
目前,金牛座云平臺(tái)提供三種不同層次的服務(wù):一是提供硬件基礎(chǔ)設(shè)施,SpinQit和線上都可以提交計(jì)算任務(wù)到量旋科技的量子計(jì)算機(jī)或模擬器平臺(tái)執(zhí)行;二是提供在線編程環(huán)境,用戶可以通過(guò)交互界面和代碼的形式來(lái)構(gòu)造量子線路進(jìn)行實(shí)驗(yàn);三是上線了一批量子算法應(yīng)用,用案例展示如何用量子程序解決實(shí)際的應(yīng)用問(wèn)題。
關(guān)于量子算法應(yīng)用及其案例,我們將在下一期文章中作詳細(xì)介紹。
接下來(lái),SpinQit計(jì)劃從算法、編譯系統(tǒng)和執(zhí)行平臺(tái)三個(gè)層面持續(xù)做出改進(jìn),包括但不限于:
持續(xù)更新最新的量子算法,尤其是量子機(jī)器學(xué)習(xí)算法,為用戶提供更全面的支持。
引入即時(shí)編譯技術(shù),改進(jìn)含參量子線路處理,避免在變分量子算法或量子機(jī)器學(xué)習(xí)算法的迭代優(yōu)化過(guò)程中重復(fù)編譯量子線路等。
支持更多的后端執(zhí)行平臺(tái),包括支持超導(dǎo)量子計(jì)算機(jī)和改進(jìn)經(jīng)典模擬器等。
相信隨著不斷升級(jí)迭代,SpinQit作為一款量子軟件開(kāi)發(fā)框架,將進(jìn)一步推動(dòng)更多量子軟件的誕生,在量子計(jì)算中發(fā)揮更大的作用。并且,隨著對(duì)更多量子算法的支持,SpinQit也將助力量子計(jì)算機(jī)在醫(yī)療、金融、人工智能等多個(gè)領(lǐng)域的科研與應(yīng)用。