#はじめに
IBM-QをWeb上のIBM Q Experience Composerで触り始めてみたところ、線形代数や量子力学の知識が十分でなくとも、ComposerのWeb GUIである程度の量子コンピュータのふるまいと処理が簡単に実験、観察できるのが面白くて、本格的なSDKのQiskitを触り始めました。
当初、Qiskit SDKの膨大なクラスライブラリを避けて量子アセンブリ言語とも言えるQASMでゴリゴリいじろうかと思っていたのですが、IBM-Q のバックエンド(実機)のカップリングマップトポロジー(量子ビット回路同士を接続する組み合わせの仕様)がバックエンドごとに異なることを知り、そのままでは世界各国にある実機ごとにQASMを書き直さなければならないため、トポロジーを自動的に変換してくれる機能を探してQiskit Terraにたどり着きました。
サンプルプログラムがSDKに添付されていて眺めてみたのですが、(・・・よくわからない・・・)ため、自分の勉強用に日本語コメントを付けまくって、Gistに公開してみました。
(あと、Qiitaに登録して初投稿なので、ついでに練習用の記事だったりします・・・)
何か間違い等ありましたら、ご指摘くださると助かります。
#Qiskit Terraモジュールとは
こちらの記事では、以下のように紹介されています。
Qiskit Terraは「ソフトウェア・スタックのためのプラットフォーム」である。Terraには、「回路及びパルスのレベルで量子プログラムを構成し、特定の物理的な量子プロセッサの制約に合わせて量子プログラムを最適化し、リモートで実験のバッチ実行を管理するための一連のツール」がある。また、Terraは「モジュールで構成されているため、回路最適化とバックエンドの機能拡張は容易」である。
・・・説明が抽象的で、私のスキルでは原文、日本語訳ともによくわかりませんでした・・・
ですが、プログラミングのスキルがある方なら、下記サンプルプログラムをレベル0~レベル2まで追いかけて、実際に実行することで、何を手伝ってくれるプラットフォームであるか、より理解が深まると思います。
#オリジナルソースと、日本語コメント版のリンク
##レベル0(初級)
オリジナル: https://github.com/Qiskit/qiskit-terra/blob/master/examples/python/using_qiskit_terra_level_0.py
日本語コメント版: ---> https://gist.github.com/Chirimen-Jako/a5c4ca675f7c58bedc530fea329a1275
レベル0(初心者)でQiskit-Terraを使用する方法を示す例。
この例は、ユーザーTerraの最も基本的な方法を示しています。 いくつかの回路を構築し、
BasicAer(ローカルQiskitプロバイダー)またはIBMQ(リモートIBMQプロバイダー)の両方でそれらを実行します。
コンパイルパラメータを制御するためには、中級ユーザが使用できるtranspile関数を提供しています。
##レベル1(中級)
オリジナル: https://github.com/Qiskit/qiskit-terra/blob/master/examples/python/using_qiskit_terra_level_1.py
日本語コメント版: ---> https://gist.github.com/Chirimen-Jako/36625749902913388468c1d3bfc7058c
レベル1でQiskitを使用する方法を示す例(中級)。
この例は、中級ユーザーがTerraと対話する方法を示しています。
それはいくつかの回路を構築し、それらをtranspileオプションでトランスパイルします。
それはバックエンドで実行される単なるコンテナであるqobjオブジェクトを作成します。
同じqobjを(示されているように)多くのバックエンドに送信することができます。
それが実行できることを確認することはユーザの責任です
(すなわち、もしいずれかのバックエンドに何らかの制限があれば、それに従います)。
これは、回路全体を再コンパイルせずに異なるバックエンドで同じ回路を比較したい
場合、または単にランタイムパラメータを変更したい場合に便利です。
回線を変換するパスを制御するためには、上級ユーザー向けのパスマネージャがあります。
##レベル2(上級)
オリジナル: https://github.com/Qiskit/qiskit-terra/blob/master/examples/python/using_qiskit_terra_level_2.py
日本語コメント版: ---> https://gist.github.com/Chirimen-Jako/d4c112dab2c4d7fe13929ed94917c43a
レベル2(上級)でQiskitを使用する方法を示す例。
この例では、上級ユーザーがTerraと対話する方法を示します。
いくつかの回路を構築し、それらをパスマネージャーで書き換えます。
#おわりに
比較用に英文コメントやメッセージコードも残してあります。お好みでどんどん削除して、自分が見やすい形にしてみてください。
仕事ではもっぱらWindowsとC++,C#を使っておりました。LinuxやPythonに不慣れなため、環境構築に手間取りました。
特にPythonはLinuxでは大変人気があり、パッケージやモジュールも充実していますが、Python2とPython3の非互換性を克服するためにpyenv, Mkvirtualenvwrapper, Anaconda, Minicondaなどの本質的でない部分で相当時間を使った感があります。
これからPythonに手を付ける方はPythonの複数Versionを同居させるために、どんな方法が自分にとってベストプラクティスなのか、あらかじめ研究されることをおすすめしたいと思います。