はじめに

最近 (主に) Qiskit を使って量子コンピュータの勉強をしています。Qiskit は IBM が開発した量子コンピューティング用の python library で、Software 上で量子回路を作り、それをシミュレータ (古典コンピュータ上で量子計算を行なう) で動かしたり、実機で動かして検証することができます。 ちょっと試してみるとか、予め用意されたサンプルコードを手っ取り早く動かしたいという場合は IBM Quantum でアカウントを作り、そのままクラウド上で動かすと良いです。

ただし、サーバ側のご機嫌が悪い時はアクセスに時間がかかったり、そもそもアクセスできないこともあるし、ある程度 Qiskit を使ってコードを書けるようになったりした場合にはローカル環境で使えると便利です。そこで今回は Qiskit のローカル環境セットアップ時の手順のメモを残しておきます。

準備

今回は macOS Big Sur (Version 11.4) でインストールしています。 Qiskit documentation の Getting Started -> Installation -> Start locally を参照しました。 前準備としてドキュメントにある通り、conda で python のパッケージ管理をすることにしました。 あまり大きなパッケージをインストールしたくなかったので、Miniconda をインストールしました。Python の version は 3.9 です。

conda で Qiskit 用の環境を用意

まずは conda で Qiskit 用の環境 'Qiskit' を用意します。

(base) tsubasa-cc$ conda create -n Qiskit python=3
----- snip -----

The following NEW packages will be INSTALLED:

  ca-certificates    pkgs/main/osx-64::ca-certificates-2021.7.5-hecd8cb5_1
  certifi            pkgs/main/osx-64::certifi-2021.5.30-py39hecd8cb5_0
  libcxx             pkgs/main/osx-64::libcxx-10.0.0-1
  libffi             pkgs/main/osx-64::libffi-3.3-hb1e8313_2
  ncurses            pkgs/main/osx-64::ncurses-6.2-h0a44026_1
  openssl            pkgs/main/osx-64::openssl-1.1.1k-h9ed2024_0
  pip                pkgs/main/osx-64::pip-21.2.4-py37hecd8cb5_0
  python             pkgs/main/osx-64::python-3.9.6-h88f2d9e_1
  readline           pkgs/main/osx-64::readline-8.1-h9ed2024_0
  setuptools         pkgs/main/osx-64::setuptools-52.0.0-py39hecd8cb5_0
  sqlite             pkgs/main/osx-64::sqlite-3.36.0-hce871da_0
  tk                 pkgs/main/osx-64::tk-8.6.10-hb0a8c7a_0
  tzdata             pkgs/main/noarch::tzdata-2021a-h5d7bf9c_0
  wheel              pkgs/main/noarch::wheel-0.37.0-pyhd3eb1b0_0
  xz                 pkgs/main/osx-64::xz-5.2.5-h1de35cc_0
  zlib               pkgs/main/osx-64::zlib-1.2.11-h1de35cc_3


Proceed ([y]/n)? y
----- snip -----
#
# To activate this environment, use
#
#     $ conda activate Qiskit
#
# To deactivate an active environment, use
#
#     $ conda deactivate

create できたら、activate します。

(base) tsubasa-cc$ conda activate Qiskit
(Qiskit) tsubasa-cc$

activate すると、プロンプトの左端が設定した環境名 'Qiskit' に変わります。この 'Qiskit' 環境の中で必要なものをインストールしていきます。

qiskit のインストール

pip は conda create でインストール済みなので、あとは pip install qiskit で qiskit をインストールします。

(Qiskit) tsubasa-cc$ pip install qiskit
Collecting qiskit
  Downloading qiskit-0.29.0.tar.gz (12 kB)
Collecting qiskit-terra==0.18.1
  Downloading qiskit_terra-0.18.1-cp39-cp39-macosx_10_9_x86_64.whl (5.3 MB)
----- snip -----
Successfully installed attrs-21.2.0 cffi-1.14.6 charset-normalizer-2.0.4 cryptography-3.4.7 dill-0.3.4 dlx-1.0.4 docplex-2.21.207 fastdtw-0.3.4 fastjsonschema-2.15.1 h5py-3.2.1 idna-3.2 inflection-0.5.1 joblib-1.0.1 jsonschema-3.2.0 lxml-4.6.3 more-itertools-8.8.0 mpmath-1.2.1 multitasking-0.0.9 ntlm-auth-1.5.0 numpy-1.21.2 pandas-1.3.2 ply-3.11 psutil-5.8.0 pybind11-2.7.1 pycparser-2.20 pyrsistent-0.18.0 python-constraint-1.4.0 python-dateutil-2.8.2 pytz-2021.1 qiskit-0.29.0 qiskit-aer-0.8.2 qiskit-aqua-0.9.4 qiskit-ibmq-provider-0.16.0 qiskit-ignis-0.6.0 qiskit-terra-0.18.1 quandl-3.6.1 requests-2.26.0 requests-ntlm-1.1.0 retworkx-0.9.0 scikit-learn-0.24.2 scipy-1.7.1 six-1.16.0 symengine-0.7.2 sympy-1.8 threadpoolctl-2.2.0 tweedledum-1.1.0 urllib3-1.26.6 websocket-client-1.2.1 yfinance-0.1.62

Successfully installed ... と出れば完了です。qiskit だけでなく、qiskit を利用するのに標準で使うパッケージ達もインストールし手くれるようです。 Python/Qiskit を CLI のみで使うならばこれだけで良いのですが、Jupyter Notebook で動かすのが色々と便利なので、その場合は [visualization] のサポートも必要です。

(Qiskit) tsubasa-cc$ pip install qiskit[visualization]
----- snip -----
Successfully built pylatexenc
Installing collected packages: ipython-genutils, traitlets, wcwidth, tornado, pyzmq, pyparsing, ptyprocess, parso, nest-asyncio, jupyter-core, entrypoints, webencodings, pygments, prompt-toolkit, pickleshare, pexpect, packaging, nbformat, matplotlib-inline, MarkupSafe, jupyter-client, jedi, decorator, backcall, appnope, testpath, pandocfilters, nbclient, mistune, jupyterlab-pygments, jinja2, ipython, defusedxml, debugpy, bleach, terminado, Send2Trash, prometheus-client, nbconvert, ipykernel, argon2-cffi, pillow, notebook, kiwisolver, cycler, widgetsnbextension, matplotlib, jupyterlab-widgets, seaborn, pylatexenc, pydot, ipywidgets
Successfully installed MarkupSafe-2.0.1 Send2Trash-1.8.0 appnope-0.1.2 argon2-cffi-20.1.0 backcall-0.2.0 bleach-4.0.0 cycler-0.10.0 debugpy-1.4.1 decorator-5.0.9 defusedxml-0.7.1 entrypoints-0.3 ipykernel-6.2.0 ipython-7.26.0 ipython-genutils-0.2.0 ipywidgets-7.6.3 jedi-0.18.0 jinja2-3.0.1 jupyter-client-7.0.1 jupyter-core-4.7.1 jupyterlab-pygments-0.1.2 jupyterlab-widgets-1.0.0 kiwisolver-1.3.1 matplotlib-3.4.3 matplotlib-inline-0.1.2 mistune-0.8.4 nbclient-0.5.4 nbconvert-6.1.0 nbformat-5.1.3 nest-asyncio-1.5.1 notebook-6.4.3 packaging-21.0 pandocfilters-1.4.3 parso-0.8.2 pexpect-4.8.0 pickleshare-0.7.5 pillow-8.3.1 prometheus-client-0.11.0 prompt-toolkit-3.0.20 ptyprocess-0.7.0 pydot-1.4.2 pygments-2.10.0 pylatexenc-2.10 pyparsing-2.4.7 pyzmq-22.2.1 seaborn-0.11.2 terminado-0.11.1 testpath-0.5.0 tornado-6.1 traitlets-5.0.5 wcwidth-0.2.5 webencodings-0.5.1 widgetsnbextension-3.5.1

これで、Jupyter 関連や matplotlib (結果をプロットするのに多用する!) などのインストールも完了しました!

Qiskit を試してみる!

早速 Qiskit を試しに使ってみましょう。ここでは Qiskit Documentation にある [Introduction to Qiskit] のコードをそのまま動かしてみます。 まずはターミナルで jupyter-notebook を実行すると Jupyter Notebook が起動してブラウザが自動で開くので、新しいファイルを開きます。 そこでとりあえず Introduction to Qiskit のある以下のコードをコピペして実行してみます。

import numpy as np
from qiskit import QuantumCircuit, transpile
from qiskit.providers.aer import QasmSimulator
from qiskit.visualization import plot_histogram

# Use Aer's qasm_simulator
simulator = QasmSimulator()

# Create a Quantum Circuit acting on the q register
circuit = QuantumCircuit(2, 2)

# Add a H gate on qubit 0
circuit.h(0)

# Add a CX (CNOT) gate on control qubit 0 and target qubit 1
circuit.cx(0, 1)

# Map the quantum measurement to the classical bits
circuit.measure([0,1], [0,1])

# compile the circuit down to low-level QASM instructions
# supported by the backend (not needed for simple circuits)
compiled_circuit = transpile(circuit, simulator)

# Execute the circuit on the qasm simulator
job = simulator.run(compiled_circuit, shots=1000)

# Grab results from the job
result = job.result()

# Returns counts
counts = result.get_counts(compiled_circuit)
print("\nTotal count for 00 and 11 are:",counts)

# Draw the circuit
circuit.draw()
Total count for 00 and 11 are: {'11': 510, '00': 490}
     ┌───┐     ┌─┐   
q_0: ┤ H ├──■──┤M├───
     └───┘┌─┴─┐└╥┘┌─┐
q_1: ─────┤ X ├─╫─┤M├
          └───┘ ║ └╥┘
c: 2/═══════════╩══╩═
                0  1 

すると何やら量子回路が作成できました! そしてこれまたコピペで plot_histogram してみます。

plot_histogram(counts)

ヒストグラムも描画できました! '00' と '11' の2つの状態がおおよそ半々ずつの状態ということでしょうね。 今回はコードの中身には深入りしません。今後1つずつ見ていこうかと思います。

Version 情報

最後に、Qiskit のドキュメントに倣って、qiskit/python/OS などの version 情報を載せておきます。 以下を実行するだけで表形式で綺麗に出してくれます。便利ですね。

import qiskit.tools.jupyter
%qiskit_version_table

Version Information

Qiskit Software Version
qiskit-terra 0.18.1
qiskit-aer 0.8.2
qiskit-ignis 0.6.0
qiskit-ibmq-provider 0.16.0
qiskit-aqua 0.9.4
qiskit 0.29.0
System information
Python 3.9.6 (default, Aug 18 2021, 12:38:10) [Clang 10.0.0 ]
OS Darwin
CPUs 6
Memory (Gb) 16.0
Mon Aug 30 22:42:58 2021 JST