【過去記事】Googleが量子コンピュータNISQ向けオープンソースフレームワーク「Cirq」を発表


はじめに

Googleが量子ゲートモデルのNISQむけのフレームワークを発表しました。これによりQAOAなどのゲートモデルの機械学習向けアルゴリズムがより容易に実装ができるようになりました。早速その内容をみてみたいと思います。


NISQとは?

現在量子ゲートモデルと呼ばれるモデルで実装されているのは、比較的量子ビットにノイズが多く、50-100量子ビット程度の中規模のマシンが主体になっています。それらのノイズが多く、誤り訂正機能のないアナログの性質の強いゲートモデルをNoisy Intermediate-Scale Quantum(NISQ)と呼ぶことがあります。


NISQ向けアルゴリズムについて

NISQ向けのアルゴリズムは従来考えられていたゲートモデル向けのアルゴリズムとは少し方向性などが違いますので、それを確認することはとても重要です。

たとえば、VQEは量子化学計算用のアルゴリズムで開発されましたが、従来はPEAという別のアルゴリズムを使用していました。古典計算機と量子計算機を組み合わせることでノイズの多い現行機でも計算のできるアルゴリズムが開発されています。


さっそくみてみます

Google AI Blogで発表されています。

Announcing Cirq: An Open Source Framework for NISQ Algorithms

Wednesday, July 18, 2018

Posted by Alan Ho, Product Lead and Dave Bacon, Software Lead, Google AI Quantum Team

https://ai.googleblog.com/2018/07/announcing-cirq-open-source-framework.html?m=1


概要や目的としては、(一部をgoogle翻訳)

NISQプロセッサで量子アルゴリズムを設計する際の共通の問題は、アルゴリズムとハードウェア間のマッピングが不適切なために生じるオーバーヘッドではなく、問題の最も難しい部分を解決するためにリソースを使用する、これらの限られた量子デバイスをいかに活用するかということです。さらに、いくつかの量子プロセッサは、複雑な幾何学的制約および他のニュアンスを有し、これらを無視すると、量子計算が不完全になるか、または修正され、準最適である計算が行われる。

つまり、ハードごとの接続などを補助するミドルウェアが目的のようです。


発表としては、(google翻訳)

今日、量子ソフトウェアと量子コンピュータ学習(QSML)に関する第1回国際ワークショップでは、Google AI QuantumチームがNISQコンピュータのオープンソースフレームワークであるCirqのパブリックアルファを発表しました。 Cirqは短期間の問題に焦点を当てており、NISQ量子コンピュータが実用上重要な計算上の問題を解決できるかどうかを研究者が理解できるよう支援しています。 CirqはApache 2のライセンスを受けており、商用またはオープンソースのパッケージに変更または埋め込むことができます。

ということでApache2ライセンスでオープンソースのフレームワークを発表しました。

導入はこちらから、

https://github.com/quantumlib/cirq


そして、機能概要、(こちらもgoogle翻訳)

Cirqをインストールすると、研究者は特定の量子プロセッサ用の量子アルゴリズムを書くことができます。 Cirqは、ユーザに、量子回路に対する微調整制御、ネイティブゲートを使ったゲート動作の指定、デバイスへの適切なゲートの配置、量子ハードウェアの制約内でのこれらのゲートタイミングのスケジューリングを行います。データ構造は、ユーザがNISQアーキテクチャを最大限に活用できるように、これらの量子回路の書き込みとコンパイルに最適化されています。 Cirqはこれらのアルゴリズムをシミュレータ上でローカルに実行することをサポートし、クラウドを介して将来の量子ハードウェアまたはより大きなシミュレータと容易に統合できるように設計されています。


さらに量子化学計算向けパッケージOpenFermionとの連携

また、Cirqベースのアプリケーションの一例であるOpenFermion-Cirqのリリースを発表しています。 OpenFermionは化学問題の量子アルゴリズムを開発するためのプラットフォームであり、OpenFermion-Cirqは量子シミュレーションアルゴリズムをCirqにコンパイルするオープンソースライブラリです。新しいライブラリは、量子化学問題のための低深度量子アルゴリズムを構築する最新の進歩を利用して、ユーザーが化学的な問題の詳細から特定のハードウェア上で動作するようにカスタマイズされた高度に最適化された量子回路に移行できるようにします。例えば、このライブラリを使用すると、分子や複雑な材料の特性をシミュレートするための量子変分アルゴリズムを簡単に構築できます。

隙がない。ちなみにOpenFermionのインストールはこちらから、

https://github.com/quantumlib/OpenFermion

OpenFermion-Cirqはこちら、

https://github.com/quantumlib/OpenFermion-Cirq


強力な援軍が、、、

量子コンピューティングは、その潜在能力を最大限に発揮させるためには、強力な業界横断的および学術的な共同作業が必要です。 Cirqを構築するにあたり、私たちは初期のテスターと協力して、NISQコンピュータのアルゴリズム設計のフィードバックと洞察を得ました。これらの早期導入者から得られたCirqの仕事の例を以下に示します。

Zapata,QC Ware,CQCなど有名どころのスタートアップ大集結です。アルゴリズムはだいたい予想通りの有名なものが揃ってます。

Zapata Computing: simulation of a quantum autoencoder

QC Ware: QAOA implementation and integration into QC Ware’s AQUA platform

Quantum Benchmark: integration of True-Q software tools for assessing and extending hardware capabilities

Heisenberg Quantum Simulations: simulating the Anderson Model

Cambridge Quantum Computing: integration of proprietary quantum compiler t|ket>

NASA: architecture-aware compiler based on temporal-planning for QAOA and simulator of quantum computers


CirqとGoogleの量子コンピュータ

CirqがどのようにNISQアルゴリズムを有効にしているかの詳細については、多くのアダプターが実装のサンプルソースコードを提供している上記のリンクを参照してください。 今日、Google AI QuantumチームはCirqを使用してGoogleのBristleconeプロセッサ上で動作する回路を作成しています。将来的には、このプロセッサをクラウドで利用できるようにする予定であり、Cirqはユーザーがこのプロセッサ用のプログラムを書くためのインターフェイスになります。その間、CirqはNISQアルゴリズム開発者と研究者の生産性をどこにでも向上させることを願っています。 CirqとOpenFermion-CirqのGitHubリポジトリを参照してください。

ということでBristleconeでも連携するらしいので、かなり色々進みそうです。

日本もがんばらなきゃ(泣)


ということで、実際に見ます。

1-3.png


まずインストール

一番上にInstallationというのがあるので、そっからインストールドキュメントを表示。

https://github.com/quantumlib/Cirq/blob/master/docs/install.md

linux/macOS/widowsがあるので、えらびます。

自分のマシンはmacOSなので、それでやってみます。

pip install --upgrade pip

pip install cirq

僕はpython3関連でごちゃごちゃしてましたがなんとかインストールできました。

テストコマンドが載ってるのでインストールが完了したら実行して見ました。

python3 -c 'import cirq; print(cirq.google.Foxtail)'

(0, 0)───(0, 1)───(0, 2)───(0, 3)───(0, 4)───(0, 5)───(0, 6)───(0, 7)───(0, 8)───(0, 9)───(0, 10)
│ │ │ │ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ │ │ │
(1, 0)───(1, 1)───(1, 2)───(1, 3)───(1, 4)───(1, 5)───(1, 6)───(1, 7)───(1, 8)───(1, 9)───(1, 10)

なんか素敵な図形が出てきました。こちらは実機の量子ビットの結合状況のようです。GoogleのFoxtailというチップの22量子ビットの配列ははしご状です。


例題

import cirq

# Pick a qubit.
qubit = cirq.GridQubit(0, 0)

# Create a circuit
circuit = cirq.Circuit.from_ops(
cirq.X(qubit)**0.5, # Square root of NOT.
cirq.measure(qubit, key='m') # Measurement.
)
print("Circuit:")
print(circuit)

# Simulate the circuit several times.
simulator = cirq.google.XmonSimulator()
result = simulator.run(circuit, repetitions=20)
print("Results:")
print(result)

まずはcirqを読み込んで、

import cirq

次に、量子ビットを用意。

# Pick a qubit.

qubit = cirq.GridQubit(0, 0)

そして回路を作成。printで回路を出力できました。

# Create a circuit

circuit = cirq.Circuit.from_ops(
cirq.X(qubit)**0.5, # Square root of NOT.
cirq.measure(qubit, key='m') # Measurement.
)
print("Circuit:")
print(circuit)

実行結果は、Xゲートと測定のMeasurementが出力されました。

(0, 0): ───X^0.5───M('m')───

繰り返し実行して結果を取り出せます。

# Simulate the circuit several times.

simulator = cirq.google.XmonSimulator()
result = simulator.run(circuit, repetitions=20)
print("Results:")
print(result)

結果は、

m=01001101110100100010

測定の結果が20回0と1で出力されます。

さらに勉強したい場合には

こちらにチュートリアルがありますので、これから見れます。

https://github.com/quantumlib/Cirq/blob/master/docs/tutorial.md

こちらでも少しずつ学んでいきたいと思います。