Qiskit のローカル環境セットアップをしてみる
はじめに
最近 (主に) 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 (結果をプロットするのに多用する!) などのインストールも完了しました!
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()
すると何やら量子回路が作成できました! そしてこれまたコピペで plot_histogram してみます。
plot_histogram(counts)
ヒストグラムも描画できました! '00' と '11' の2つの状態がおおよそ半々ずつの状態ということでしょうね。 今回はコードの中身には深入りしません。今後1つずつ見ていこうかと思います。
import qiskit.tools.jupyter
%qiskit_version_table