量子コンピュータ
量子ゲート
pyQuil

Rigetti ComputingをSDK、ライブラリ、言語、チップ、会社概要まで横断的に見返す

はじめに

量子コンピュータは米国を中心として開発が進んでおり、各社異なる戦略や戦術で開発が進んでいます。1つのスタートアップを取り上げることで、アプリケーションからハードウェアまでをどのように包括的に取り込もうとしているのかが見えて来ますので、実際に量子プログラミングを行う際に参考になります。

**古くなった記事などは随時変更・更新・統合などを行っています。ご了承ください。

Rigetti Computing(リゲッティ・コンピューティング)とは?

創業年:2013年
創業者:Chad Rigetti
所在地:カリフォルニア、バークレー、775 Heinz Avenue, Berkeley, CA 94710
ウェブサイト:https://www.rigetti.com/

カリフォルニアを拠点とする量子コンピュータベンチャー企業です。IBM出身の技術者のChad Rigettiさんによって設立され、現在ハードウェアとソフトウェアの開発を行っています。特にシリコンバレーを中心とした投資家により、高い技術力と優れたソフトウェアをいかして一気通貫の開発を行っています。

2.png
引用元:https://www.rigetti.com/about

サービス

・Forest
彼らの量子コンピュータやQVM(Quantum Virtual Machine)と呼ばれるシミュレータに接続するためには必ずクラウド経由での接続が必要となります。それらのクラウド経由での計算リソースへの接続を管理するのがForestと呼ばれるサービスです。
https://www.rigetti.com/forest

・Grove
PyQuilやForestと呼ばれるサービスを利用してクラウド経由での計算リソースへ接続したあとには、彼らのSDKツールをつかって開発を行うことができますが、それらのツールと連動した形でさまざまな参考アプリケーションがあります。それらを格納したのがGroveです。Groveから各種のゲートモデルのアプリケーションを呼び出して実行できます。
https://github.com/rigetticomputing/grove

・PyQuil
PyQuilはQuantum Instruction LanguageからとったRigetti社の開発した量子コンピュータ向けの機械言語のようなもので、量子計算と古典計算を混ぜて記述をすることで、ハイブリッド型の利用を想定されたものとなっています。
https://pyquil.readthedocs.io/en/latest/

量子ゲート方式について

2018年4月時点、日本国内の量子コンピュータ関連のニュースは多方式が混在して報道されています。Rigettiでは、下記の量子ゲートモデル方式を採用しています。各々の量子ビットと呼ばれるものが初期化され、量子ゲートと呼ばれる論理ゲートに近いものをあてがってプログラミングをおこない、測定を通して計算結果を取得します。横軸は時間で、量子ビットに時間単位でゲート操作を行います。

180308rigetti.png

量子ゲート方式、超電導量子ビットのハードウェアについて

量子ゲート方式の開発方法は多種ありますが、Rigetti社では超電導量子ビットと呼ばれる人工原子を作成して計算をする方法が採用されています。これまでの半導体やメモリは電子や電荷の性質を利用して計算素子の0,1を表現していましたが、超電導量子ビットでは極低温で冷やしながらジョセフソンジャンクションなどの素子を利用してエネルギー準位の違いで0,1を表現しています。単位はより小さいスピンやクーパー対などを利用して物質波の重ね合わせの原理を利用して計算を行います。

現在超電導量子ビットの中で量子ゲートモデルで主流となっているものは「トランズモン」と呼ばれる方式で、クーパー対の単位が小さい場合にはエネルギー準位が近接して励起状態への遷移が起こりやすくなるので、安定化するために多少サイズを大きくして安定化させています。

それらを実現するために極低温を安定的に実現する必要がありますが、それを実現するのが、希釈冷凍機と呼ばれるマシンで、真空で極低温に近づけるための操作を行います。現在この希釈冷凍機を提供するのがフィンランドのblueforsと呼ばれるベンチャー企業で、Rigetti社を始めとして大手の量子コンピュータ開発メーカーも利用しています。

1.png
引用元:http://www.bluefors.com/

かれらのオフィスの写真をみると、大型の冷凍機が所狭しと並んでいて、開発が進んでいるのがわかる。構成品は通常のもので、2.5mほどのアルミの架台に上部から円筒形の筒がぶら下がっており、中は真空かつ上から順番に熱交換で温度が下がっている。腰くらいの台にモニタがついたのが温度制御用のマシンで、サーバーラックに計測機器などが入っている。あとは真空を作り出すコンプレッサーやコールドトラップ用の設備が並ぶ。
2.png
引用元:https://www.rigetti.com/about

19量子ビットQPUチップ

現在彼らはベンチャー企業ながら19量子ビットの超電導量子ビットのチップの開発に成功しています。この実機を使って機械学習を行なった論文が話題となっています。

A quantum processing unit (QPU) is a physical device that contains a number of interconnected qubits. This page presents technical details and average performance of Acorn, the 19Q Rigetti QPU device that is made available for quantum computation through the cloud. This device has been designed, fabricated and packaged at Rigetti Computing.

問題の入力から量子ゲートチップまでの実行

Rigetti社からは具体的な実行のプロセスを見つけることができなかったので、一般的な量子ゲートモデルの実行のプロセスを紹介しておく。

通常は問題の入力を行い、それらを「アルゴリズムレイヤー」と呼ばれる量子ゲートを並べたレイヤーに問題入力する。将来的な量子ゲートモデルで誤り訂正が実装されたマシンはこの誤り訂正方式に変換され、論理量子ビットから物理量子ビットに変換される。時系列の物理量子ビットの実行形式が定まると、それらはインターフェイスのPCに入り、実際にFPGAでパルスの形に変換され、マイクロ波制御によって量子ゲートチップ上の量子ビットに短時間で連続的に処理される。最終的に読み出し回路を通じて、結果を取り出され、この測定を通じて、内部では確率的に行われていた波動の計算が確定し計算結果として取り出される。

2.png

量子シミュレーション(Google社の例)

Rigetti社からは見つからなかったので、こちらはGoogle社の論文からの抜粋ですが、実際に設計した量子ゲートと対応する形でパルス波形がチップの複数の量子ビットに作用して、シミュレーション計算が進む様子が表現されています。

1.png
引用元:https://arxiv.org/ftp/arxiv/papers/1511/1511.03316.pdf

Fab-1(量子ゲート半導体工場)

Rigetti社の特徴は量子ゲートモデルの超電導量子ビットのチップを社内にファブリケーションを持って作成をしているということです。3次元実装を実現する試作工場でチップを作成しているとのことで、メディアにもその様子が公開されています。

The company operates a rapid prototyping fabrication ("fab") lab called Fab-1, designed to quickly create integrated circuits. Lab engineers design and generate experimental designs for 3D-integrated quantum circuits for qubit-based quantum hardware.

1.jpeg
引用元:https://spectrum.ieee.org/tech-talk/computing/software/rigetti-launches-fullstack-quantum-computing-service-and-quantum-ic-fab

Forest+PyQuilの概要

Rigetti社はForestというAPIとpyquilというSDKを公開しています。計算リソースにアクセスするためにAPIの申請も必要です。
https://www.rigetti.com/forest

Rigetti社のAPIにアクセスし、計算を行うためのオープンソースのpythonライブラリがpyQuilです。Githubを通じて公開されており、ドキュメントも揃っています。

Githubのリポジトリ:https://github.com/rigetticomputing/pyQuil
ドキュメント:http://pyquil.readthedocs.io/en/latest/

実際に少し使用方法を確認してみます。詳しい内容は下記の記事から。
https://qiita.com/YuichiroMinato/items/9de89b4467e3341c9dbd

まずはPyQuilのインストール方法です。

pythonとpipがインストールされている状態で下記でインストールできます。

pip install pyquil

続いてAPIの申請方法です

Rigetti社の計算リソースを利用するためにはAPI経由で彼らのサーバーに接続をして計算をする必要があります。これらは実機、シミュレーター共に必要です。(2018年4月段階)

RigettiのクラウドのAPIに接続するためにはAPIキーの申請が必要です。
https://www.rigetti.com/forest
のページの下部にAPI申請用のEmailフォームがあるので、そこで申請をするとメールでAPIキーが送られてきます。

セットアップ方法

基本的なセットアップやインストール方法は
http://pyquil.readthedocs.io/en/latest/getting_started.html#installation
のページにあります。

最初は設定ファイルをつくります。コンソールから、

pyquil-config-setup

と打ち込み、指示に従って送られてきたメール通りの情報を格納します。終了すると自動的に設定ファイルが作成されます。または、自分で設定ファイルを作成して打ち込むこともできます。そちらの方法は下記から参照してください。
https://qiita.com/YuichiroMinato/items/1ec13b7fc7bf574c9267

バージョン

アップデートが早いので、バージョンがあってないと頻繁にエラーが出ますので、適宜アップデートをかけてください。

pip install -U pyquil

Forest+PyQuilを使った具体的なプログラミング方法

SDKを使ってpythonでプログラミングしてみます。
準備をして、サーバーに接続し、具体的にゲート回路を記述し、結果を取り出します。
下記の例題を見てみます。

example.py
from pyquil.quil import Program
import pyquil.api as api
from pyquil.gates import *

qvm = api.QVMConnection()

p = Program()
p.inst(H(0), CNOT(0, 1))

wavefunction = qvm.wavefunction(p)

print(wavefunction)

少し分解してみてみます。
まずは各種モジュールの読み込み

example.py
from pyquil.quil import Program
import pyquil.api as api
from pyquil.gates import *

つぎにapiへの接続準備

example.py
qvm = api.QVMConnection()

そしてProgramオブジェクトをつくって、

example.py
p = Program()

早速書いていきます。ここではアダマールゲートとCNOTゲートを適用しています。
使用する量子ビット数などはこの場合指定しなくても勝手にやってくれるようです。

example.py
p.inst(H(0), CNOT(0, 1))

今使用しているのはバーチャルマシンなので波動関数を取得することができます。
せっかくなので表示してみます。

example.py
wavefunction = qvm.wavefunction(p)
print(wavefunction)

そうすると無事結果を下記の通り得ることができました。

(0.7071067812+0j)|00> + (0.7071067812+0j)|11>

量子ゲートモデル用のライブラリGrove

彼らは様々な量子ゲートモデルのアルゴリズムのライブラリを公開しています。

・Grove
https://github.com/rigetticomputing/grove

2018年4月現在主要なアルゴリズムは下記の通りです。
・The Variational-Quantum-Eigensolver (VQE)
・The Quantum Approximate Optimization Algorithm (QAOA)
・The Quantum Fourier Transform (QFT)
・Phase Estimation Algorithm

ドキュメント類も充実していますので、
http://grove-docs.readthedocs.io/en/latest/
から手に入れることができます。

インストールも簡単で、下記の通りです。こちらで使い始めることができます。

pip install quantum-grove

主要アルゴリズムを見てみる。

・The Variational-Quantum-Eigensolver (VQE)
・The Quantum Approximate Optimization Algorithm (QAOA)
・The Quantum Fourier Transform (QFT)
・Phase Estimation Algorithm

現在公開されている主なアルゴリズムは上記です。それぞれの概要を少し見ていきたいと思います。これらのアルゴリズムはRigetti社特有のものというわけではないので、簡単に触れて終わりにしたいと思います。

The Variational-Quantum-Eigensolver (VQE)

量子化学計算で分子の軌道エネルギーの基底状態の計算を行う際に、それまで想定されていたPEAアルゴリズムの代替として提案された、古典計算機と量子計算機のハイブリッド方式を利用したアルゴリズムです。ハミルトニアンと呼ばれるエネルギー式を古典的な数式変形を数度行い、最終的に量子計算できるようにJW変換など行なった上で、ansatzと呼ばれる試行波動関数を入力してゲートモデルでエネルギー固有値を求めます。その求まったエネルギー固有値を再度古典計算機に入力し、変分法でより精度を高めるために更新されたansatzを準備し、再度量子計算機で計算を行います。それらを繰り返すことで最終的に正しいエネルギー基底に近づけていきます。これらの古典計算機と量子計算機を交互に利用したハイブリッドアルゴリズムはVQEとかQVEと呼ばれています。

http://grove-docs.readthedocs.io/en/latest/vqe.html

The Quantum Approximate Optimization Algorithm (QAOA)

D-waveのような量子アニーリング方式は組み合わせ最適化問題と呼ばれる組合せ爆発を起こす問題を効率的に高速に解くということを目的としています。それらの組み合わせ最適化問題を量子ゲートモデルで解こうというのがQAOAです。QAOAでは、「コストハミルトニアン」と呼ばれる解きたいハミルトニアンと「ドライバーハミルトニアン」と呼ばれる探索用のハミルトニアンを組み合わせてゲートモデルで組み合わせ最適化問題を解きます。

http://grove-docs.readthedocs.io/en/latest/qaoa.html

The Quantum Fourier Transform (QFT)

http://grove-docs.readthedocs.io/en/latest/qft.html
下記の英語説明にある通り、離散フーリエ変換の量子バージョンで、波動関数の振幅を使って実装します。shorのアルゴリウズムなどにも利用されています。

The quantum Fourier transform is the quantum implementation of the discrete Fourier transform over the amplitudes of a wavefunction.

Phase Estimation Algorithm

http://grove-docs.readthedocs.io/en/latest/phaseestimation.html

位相推定アルゴリズムと呼ばれ、固有ベクトルの固有値を求めるためのサブルーチンです。

PyQuilについて

http://pyquil.readthedocs.io/en/latest/

pyQuil is an open source Python library developed at Rigetti Computing that constructs programs for quantum computers. Quil is an opinionated quantum instruction language — its basic belief is that in the near term quantum computers will operate as coprocessors, working in concert with traditional CPUs. This means that Quil is designed to execute on a Quantum Abstract Machine that has a shared classical/quantum architecture at its core.

PyQuilは当面量子コンピュータは古典コンピュータと併用して使用されるということを事前に想定して構築されている実装言語ということです。

Quil programs can be executed on a cloud-based Quantum Virtual Machine (QVM). This is a classical simulation of a quantum processor that can simulate various qubit operations. The default access key allows you to run simulations of up to 26 qubits. These simulations can be run through either synchronous API calls, or through an asynchronous job queue for larger programs.

基本的なプログラムはQVMと呼ばれる量子バーチャルマシンで実行され、古典計算機で最大26量子ビットが処理できます。APIは即時応答で処理したり、大きな問題ではジョブとして処理を投げることもできます。

In addition to the QVM, we offer the ability to run programs on our superconducting quantum processors, or Quantum Processing Units (QPUs), at our lab in Berkeley, California. To request upgraded access to our 19Q QPU, please fill out the request form with a brief summary of what you hope to use it for. For more information on QPUs, check out The Rigetti QPU.

QVMの他に実機の量子コンピュータチップであるQPUに接続することもでき、事前申請で割り当てがあるとのことです。

実際にQuilは古典計算と量子計算の処理を同時に記述することができ、コンパイル時に自動的に量子計算と古典計算の分岐を処理するように設計されています。他の量子計算機ではこのような構成を取っているところはあまりないので、記述したプログラミングを他社に移植する際には注意が必要です。

まとめ

ベンチャー企業にも関わらず多岐にわたるソフトウェアやハードウェアの品揃えと、豊富なライブラリ、
そしてクラウド経由での提供を考慮したビジネス性などの方向性がはっきりしています。自社ファブを構えるという覚悟もあり、注目の企業です。PyQuilベースで作成されたアプリケーションは古典計算を混ぜると他のハードウェアでは使用できないことがあるので、プラットフォーム選択にも多少の考慮は必要です。