こんにちは、量子研究所で量子クラウドプラットフォームの研究開発を担当している五木田です。
今回、富士通は大阪大学*1、株式会社セック*2、TIS株式会社*3らのチームと共同で開発を進めている量子クラウドプラットフォーム「Open Quantum Toolchain for Operators &Users」を拡張し、各種の量子ソフトウェアを含めOSS(Open Source Software)として公開しましたので、その概要について紹介させて頂きます。 github.com
- 量子コンピュータについて
- 量子コンピュータシステムソフトウェアの現状と課題
- 量子クラウドプラットフォームをOSS公開する意義
- 量子クラウドプラットフォーム「Open Quantum Toolchain for Operators &Users」の概要
- まとめ
量子コンピュータについて
量子コンピュータは、量子力学の原理を利用して計算を行うコンピュータです。従来のコンピュータは「0」、「1」の2つの状態を持つビットと呼ばれる単位で計算を行いますが、量子コンピュータはビットの代わりに量子ビットと呼ばれる単位を使用して計算を行います。量子ビットは、量子重ね合わせと呼ばれる性質を持ち、「0」と「1」の状態を確率的に同時に持つことができます。
他にも、量子もつれと呼ばれる、複数の量子ビットが互いに影響を及ぼしあう性質も持っており、これら量子特有の性質を活用することで従来のコンピュータでは膨大な時間がかかるような計算を短時間で処理することが可能になると期待されています。
量子コンピュータシステムソフトウェアの現状と課題
実際に使える量子コンピュータの数はまだ少なく、運用にも大きな労力がかかるため、ユーザが量子コンピュータや量子回路シミュレータ等の量子デバイス を利用するためには量子コンピュータを保有する企業(プロバイダ)が提供するクラウドサービスを利用するのが一般的です。この際、ユーザはプロバイダが提供する各種量子ソフトウェア(例えばSDKやライブラリ、回路変換プログラム等)を利用して量子プログラムを作成し、プロバイダが運用するシステムソフトウェアを介して量子デバイスにアクセスします。
これらの量子コンピュータを”使う”ユーザ向けのソフトウェアはOSSとして公開されているものが多く、開発も活発に行われていますが、量子コンピュータを”運用する”プロバイダ側のシステムソフトウェアについては、ほとんど公開されていません。プロバイダ側が開発すべきシステムソフトウェアは、ユーザ認証機能、ユーザが投げたジョブを管理するジョブスケジューラ機能、量子デバイスの管理機能、クラウドサービスと量子デバイス間でジョブ情報を仲介する機能等、多岐に渡っており、量子コンピュータの開発を行っている企業やスタートアップ・研究機関等が、単独でこれらのシステムソフトウェアを開発することは困難です。
また、プロバイダ側で一からシステムソフトウェアを開発せず、大手量子クラウドベンダが運用するサービスに量子デバイスを登録し、そのサービスを介して量子デバイスをユーザに公開することも可能ですが、量子クラウドベンダのシステムソフトウェア仕様に縛られてしまい、量子デバイス開発者のニーズに合わせたカスタマイズ等は困難です。
量子クラウドプラットフォームをOSS公開する意義
我々はこうした状況を踏まえ、今回開発した量子クラウドプラットフォーム「Open Quantum Toolchain for Operators &Users」をOSSとして公開しました。改めて量子コンピュータのシステムソフトウェアをOSS公開する意義をまとめます。
- 量子ソフトウェアを開発している世界中の開発者が協力して開発や改善を行うことで多様な意見や技術を取り入れることができ、ソフトウェアの品質向上や機能向上につながる
- 量子コンピュータのハードウェアを研究開発しているスタートアップ・企業・研究機関が容易にシステム構築できるようになり、多くのユーザに利用されることで幅広いフィードバックが得られる。
- 量子コンピュータのユーザやプロバイダがニーズに合わせて自由にシステムを修正・構築することが可能となり量子アプリケーションや量子ソフトウェアの研究加速につながる
今回のOSS公開により、世界中の量子コンピュータユーザ・プロバイダが本開発コミュニティに参画し、量子システムソフトウェア領域が活性化することを期待しています。
量子クラウドプラットフォーム「Open Quantum Toolchain for Operators &Users」の概要
今回公開した量子クラウドベンダプラットフォーム「Open Quantum Toolchain for Operators &Users」の概要について、ユーザが作成したジョブが量子クラウドシステム内部でどのように処理されているかを追いながら簡単に説明します。
まず、ユーザがクラウドサービス経由で量子コンピュータを利用するためには、ユーザが作成した量子回路を、SDKやWebアプリケーションを介してクラウドサービスにリクエストする必要があります。
クラウド層ではユーザの認証を経てジョブを受け取り、ジョブのキューイング処理・ジョブ管理等も行いながら、バックエンド層からジョブを取得するリクエストが来るのを待ちます。
バックエンド層では、クラウド層に対してポーリングを行い、実行できるジョブがないかを定期的に確認します。バックエンド層がジョブを受け取ると、入力量子回路を量子デバイスで実行できる形式に変換するトランスパイルと呼ばれる処理等の前処理が行われます。前処理された量子回路は量子デバイスで実行されサンプリング結果が得られますが、その結果をエラー緩和処理で補正したりジョブの種類に応じた後処理を行った後、APIでクラウドに返します。
最後にユーザがその結果を取得することで一連の処理が完了します。
下図は上記の一連の処理を図示したものですが、赤枠で囲っている部分が本ソフトウェア群でカバーしている範囲となり、実機に近い一部のコンポーネント以外がカバーできていることが分かります。
以下では本ソフトウェア群の代表的なコンポーネントである、クラウドバックエンド部とエッジサーバ部について少し掘り下げて説明します。
クラウドバックエンド部
github.com クラウドバックエンド部は、フロントエンド層とバックエンド層に対してAPIを公開しており、両者のリクエストを処理する、本量子クラウドプラットフォームの中心的な部分です。インターフェース仕様はOpenAPI*4形式で記述し、Restful APIに従って設計したURLにHTTPプロトコルでアクセスできるようになっています。
主な機能としては、ユーザ認証機能・ジョブ管理・ジョブのキューイング等で、認証機能についてはAmazon Cognito、API機能はAmazon API Gateway、アプリケーション機能はAWS Lambda、ジョブ管理はAmazon RDSを利用して実装しています。
API開発については、OpenAPI仕様からコードを自動生成するdatamodel-code-generator*5と、FastAPI*6のフレームワークによるスキーマ駆動開発を採用し、仕様と実装の乖離を防いでいます。詳細については以下のブログをご覧ください。
また、クラウドバックエンド部はTerraform*7によりIaC(Infrastructure as a Code)化されており、インフラ構築の自動化や、構成変更のコード管理が可能になっています。
エッジサーバ部
エッジサーバ部は、バックエンド層の入り口にあたる部分を担い、量子回路の変換(トランスパイル)や実機での実行処理を仲介する機能を担います。クラウド層に対して定期的にポーリングを行ってジョブを取得し、適切なタイミングで量子回路を実行するようなスケジューリングや、ジョブの種類に応じた前処理や後処理を行います。
前処理の一部であるトランスパイル処理については、複数の量子回路ライブラリ・形式に対応したトランスパイラのワンストップ・フレームワークであるTranqu*8と連携を行って実行します。また、Tranqu・量子デバイスや、内部のマイクロサービスとの通信はgRPCプロトコル*9で行っています。
本ソフトウェア群が対応するジョブの種類としては、基本的なサンプリングジョブのほか、期待値計算ジョブ、量子マルチプログラミング*10、我々がSSE(Server Side Execution)*11と呼んでいる量子古典ハイブリッドジョブ機能等に対応しており、量子デバイスで実行したサンプリング結果のエラー緩和処理も行います。
以下では、主に富士通が開発に貢献した期待値計算ジョブとエラー緩和処理について、もう少し掘り下げて説明します。
期待値計算ジョブ
量子アルゴリズムの多くは物理量(オブザーバブル)の期待値計算が必要になります。例えばVQEは、ハミルトニアンの期待値を最小化することで分子の基底状態エネルギーを求めますし、量子機械学習でも損失関数の期待値を最小化することで、量子ニューラルネットのパラメータを最小化します。そのため、量子システムソフトウェアとして期待値計算を簡単に実行できる機能は重要であると言えます。以下では期待値をどのように計算しているのかを説明します。
任意のオブザーバブルはパウリ演算子
の線形結合で表すことができます。例えば1量子ビットのオブザーバブルは以下のように分解できます。
同様に2量子ビットのオブザーバブルの場合は、16個の基底演算子の線形結合で表現できます。次に、このオブザーバブルについてある量子状態
に対する期待値を求めたい場合、その期待値
は、
で計算されます。先ほどの1量子ビットのオブザーバブルの例を考えると、この式は以下のように分解できます。
多くの量子コンピュータは基底での測定が一般的ですが、量子状態
に対応する量子回路に各パウリゲートを追加することで、各パウリ基底での測定結果が得られます。各項の期待値が求まれば、あとはその線形結合により全体の期待値を計算できます。
エッジサーバ部での実装では、前処理でオブザーバブルの各項のパウリ演算子による測定を、入力量子回路に追加する処理を行います。量子デバイスで実行したあとの後処理では、各量子回路の測定結果から各項の期待値を求め、その結果を線形結合してオブザーバブル全体の期待値を計算しています。
量子エラー緩和処理
現在のノイズの多い量子コンピュータ(NISQデバイス)において、量子エラー緩和処理は計算結果の精度を向上させるための重要な技術です。量子コンピュータは、環境ノイズやゲートの不完全性などにより、計算中にエラーが発生しやすいという課題を抱えています。量子エラー緩和は、これらのエラーを完全に訂正するのではなく、緩和することで、より正確な計算結果を得ることを目指します。
量子エラー緩和については外挿法や確率的エラーキャンセル法など様々な方法がありますが、エッジサーバ部では、測定エラー緩和機能を実装しています。
測定エラー緩和では、測定エラーを含むサンプリング結果 は、ノイズのない世界で得ることのできる理想的なサンプリング結果
とエラー行列
の積として考えることができます。
エラー行列の
要素は、真の状態が
であった場合に測定結果として
を得る確率を表しており、
と表現されます。
例えば、2量子ビットのデバイスの
は、
として表現されます。このの逆行列
を両辺に掛けることにより、測定エラーがない理想のサンプリング結果
が得られます。
ただし、このままではに負のカウント数が含まれてしまう可能性があり、カウント数を擬確率分布に変換した後に最近傍確率分布に変換することでその補正を行っています。エッジサーバ部では、量子デバイス実行後の後工程でこの処理を実装しています。
まとめ
本記事では量子コンピュータのクラウドサービスをOSSとして公開した背景や、公開したソフトウェアの概要について説明しました。富士通をはじめとする本ソフトウェア群開発チームは、今後も誰もが使える量子技術の実現、量子クラウドプラットフォームの標準化を目指し、同技術の開発を進める予定です。