はじめに
いろんな会社からプラットフォームが出てきました。その辺りをまとめてみたいと思います。
2019年12月3日段階の情報です。
プレイヤー
プラットフォームプレイヤーは以前と今回の量子コンピュータの流行で大きく変わりました。これまでは、
・D-Wave
・Rigetti
・IonQ
・IBM
などがプラットフォーム提供者でした、そしてこれまでもそうだと思います。しかし、その上にさらにオープンプラットフォームの考え方がかぶさってきて、
・IBM
・aws
・Microsoft
が大きなプラットフォーム提供者という形に変化してきました。
これは、
・IBM - 自社超電導デバイス+インスブルックイオントラップ
・aws - D-Wave/IonQ/Rigetti
・Microsoft - Honeywell/IonQ/qci超電導
というように、大手のIT企業がハードウェアをまるっと抱え始めたからです。
Googleは自社で超電導チームを抱えているのですが、現在はGCPとハード提供の両方で遅れている状況です。
アニーリング
この中で、アニーリング方式はawsのD-Waveのみです。アニーリングと呼ばれる組み合わせ最適化問題を取り掛かりたい人はaws一択になります。
D-Waveはディーウェーブと読み、カナダのバンクーバーの近くのバーナビーにある企業です。創立20年を誇るベンチャーで、量子アニーリング型と呼ばれるタイプのマシンを提供しています。計算手法はRigettiやIonQとは少し異なります。
詳しい内容は、
「D-WaveのSDKや実機サービスの使い方を確認する。」
https://qiita.com/YuichiroMinato/items/57cb8504ab61930eb479
ですが、
Oceanというツールを提供していて、これを使うことで簡単に量子コンピュータのプログラミングができます。
https://github.com/dwavesystems/dwave-ocean-sdk
また、量子コンピュータの性能はまだ実問題に追いついていないのですが、qbsolvというツールを使うと、タブーサーチという古典最適化アルゴリズムとD-Waveの機能を組み合わせることで大規模問題分割という手法で、社会問題を解くことができます。
https://github.com/dwavesystems/qbsolv
qbsolvを使った問題で有名なのが、VWが北京で行ったタクシーの最適化計算です。
最適化の手法はQUBOと呼ばれる数式もしくは行列を作ることでプログラミングができます。プログラミング例は、
from dwave.system.samplers import DWaveSampler
from dwave.system.composites import EmbeddingComposite
sampler = EmbeddingComposite(DWaveSampler())
response = sampler.sample_ising({'a': -0.5, 'b': 1.0}, {('a', 'b'): -1})
response.data_vectors['energy']
array([-1.5])
のようにやります。シミュレーターを使うには、手元のPCで十分ですが、実機を使うには、登録が必要です。
https://cloud.dwavesys.com/leap/login/?next=/leap/
国内では、無料で1分の計算時間が割り当てられますが、それは計算するには十分な量です。
D-Waveで有名なのがキメラグラフと呼ばれる接続で、問題をグラフ問題というものに落とし込みますが、グラフ問題の接続が実際の超電導のチップ形状に左右されます。キメラは、
のような形状をしており、来年にはペガサスという新しいグラフ形状も出ますが、
のような形状をしています。
詳しくは、
「【次世代量子アニーリング】D-Wave5000量子ビット+ペガサスグラフをみてみる」
https://qiita.com/YuichiroMinato/items/dbc142ecb1efbebd6adf
ゲート
ゲート方式は量子コンピュータの本命です。現在のマシンはエラーが多いので、NISQとも呼ばれ、本来の量子コンピュータのアルゴリズムとちょっと違うものを使ったりします。
教科書に載っているのは汎用アルゴリズムが主流で、NISQアルゴリズムはなかなか出てきませんので、実用的なものを使いたい場合には、新しい技術をウェブや論文から取る必要があります。
量子ゲート方式は量子回路と呼ばれる時間で変化する音符のような回路を活用して問題をプログラミングします。
量子ゲート方式は汎用計算機と呼ばれ、現在の私たちの使っているコンピュータの計算回路を再現できる汎用性(と互換性?)があります。量子回路は量子ビットの初期化と量子ゲート操作や演算、そして測定からなります。
初期化は普段は量子ビットは0に初期化されます。次に量子ゲート操作をおこなうことによって量子状態と呼ばれる特殊な状態を操作することができます。その量子状態は私たちの目に見える世界以上に複雑なデータの持ち方をすることができ、それを活用することで今のコンピュータにできない計算をします。そして最後に測定をするとその量子状態は壊れて私たちに見える形で計算結果が戻ります。
開発手順
ソフトウェア開発は共通していますが、まずは手元のPCにSDKを入れます。
そして、テストを手元のシミュレータと呼ばれる量子コンピュータをもぎした仕組みで動かし、うまくいけば本物の量子コンピュータにインターネット経由でジョブを投げます。
アルゴリズムには2種類あり、量子コンピュータ単体で使うものと、VQEやQAOAのように量子コンピュータと普通のコンピュータをハイブリッドで使うという仕組みもあります。
目的に応じて使い分けます。
https://jp.techcrunch.com/2019/12/03/2019-12-02-aws-launches-braket-its-quantum-computing-service/
SDKはアニーリング方式は使い方が大きく異なりますが、ゲート方式はほぼ共通して使い方が同じです。現状では大きな違いが出ないので、今回のような多くのプラットフォームが競いながら違いを出していくのだと思います。
ストレンジワークス
ストレンジワークスの新しいプラットフォームも紹介しました。いろんなコードをシェアしやすい上に、GUIのインターフェイスがついているのはとても良い利点です。現状では、GoogleとIBMに対応しています。詳しくはこちらをご覧ください。
「新しいストレンジワークスの量子コンピュータのコミュニケーションプラットフォーム」
https://qiita.com/YuichiroMinato/items/67c0db4853f9a46eadf5
まとめ
windows開発者はmicrosoft一択だと思います。
IBMが先行していましたが、awsの巻き返しがどうなるかというところです。IBMはチュートリアルや利用者が多くて資料が豊富です。量子ビット数でも先行しています。awsはベンチャー企業中心のハードウェア揃えているので、なかなかハードウェアの大きさや予算の関係で大きな問題が難しいと思います。
awsの良さはバランスの良さです。アニーリングのD-Wave、超電導のrigetti、イオントラップのIonQといろんな種類をバランスよく揃えています。
microsoftはイオントラップ中心のラインナップでqciは動いているかどうかのアナウンスはありません。honeywellが使えるのがmicrosoftの大きな利点で、イオントラップマシンでもhoneywellはとても性能が良いという前評判なのでとても期待が持てます。
Googleは商用化にはまだ時間がかかりそうですが、cirqをみる限り、シミュレーションに特化したものですが、ハードウェアをオープンに集めてくるのか、超電導で頑張るのかは今後の展開次第でしょう。
D-WaveやRigettiやIonQはこうした大手IT企業のプラットフォーム以外にも独自に提供も並行して進めるでしょうから、個別に使ってみるのももちろんありだと思います。