Raspberry PIで量子コンピューターをシミュレーションする(IBM Qiskit環境構築編)

## :rosette: この記事の目的

この記事は、「Raspberry PIで量子コンピューターをシミュレーションする(blueqat環境構築編)」の連載編です。

■Raspberry PIで量子コンピューターをシミュレーションする(blueqat環境構築編)
https://qiita.com/ttlabo/items/ac098d3ea7cb36013c86

今回は、IBM社からリリースされているQiskitをラズベリーパイ(Raspberry PI)にインストールし、量子コンピュータのシミュレーターとして使用するための環境構築を行います。

## :rosette: 量子情報ソフトウェア「Qiskit」

Qiskitとは、IBM社から提供されているオープンソースフレームワークで、量子回路を作成したり、量子計算をシミュレーションするためのソフトウェアです。
Qiskitでは、Python言語でプログラミングを行います。
本記事を執筆時の令和2年8/7時点では、Qiskitのバージョンは`qiskit 0.19.6`です。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/399135/7833434b-d907-6ea2-0c74-c2c7388182c9.png)
■Qiskit
https://qiskit.org/

## :rosette: Raspberry PIのセットアップ

今回(令和2年8月時点)は以下の内容でRaspberry PIを用意しました。
また、セットアップはrootユーザで実施するものとします。

■Raspberry PI スペック

>Raspberry PI バージョン：Raspberry PI 3 Model B (メモリ1GB)
>Micro SDカード容量：16GB
>OSバージョン：Raspbian GNU/Linux 10 (buster)
>Kernelバージョン：Linux raspberrypi 4.19.97-v7+
>Pythonバージョン：Python 3.6.1
>Anaconda(Berryconda)バージョン：4.3.22
>使用ユーザ：root


**①インストール済パッケージ類の最新化**

以下のコマンドでインストール済のパッケージソフトウェア類を最新化しておきます。

`apt-get update`
`apt-get upgrade`

**②Anaconda(Berryconda)のインストール**

Qiskitの公式チュートリアルにもありますが、Anacondaのインストールを推奨しています。ここでは、Raspberry PI向けに作成されているBerrycondaをインストールします。

以下の公式サイトから最新版をダウンロードしインストールします。
https://github.com/jjhelmus/berryconda
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/399135/5b11b0b5-29e5-7880-510c-6602ffed5926.png)
wgetコマンドでsh(シェル)ファイルをダウンロード後、shを実行してインストールします。
`wget https://github.com/jjhelmus/berryconda/releases/download/v2.0.0/Berryconda3-2.0.0-Linux-armv7l.sh`

`bash Berryconda3-2.0.0-Linux-armv7l.sh`
※rootユーザでインストールを行うため、インストール先のディレクトリは、/root/berryconda3とします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/399135/120c2da0-439b-a0e5-ebd8-031eca0b5fcf.png)
インストール後、`conda -V`コマンドで
バージョン確認が通ればOKです。もし通らない場合は、プロンプト画面を一旦閉じて、再度起動して下さい。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/399135/e2ee270f-58d1-e928-9f36-a5785986576c.png)

**③仮想環境の作成**

condaコマンドにより仮想環境を作成します。作成した環境でQiskitを動作させます。
以下のコマンドでPythonのバージョンを指定して、仮想環境(環境名：qiskit)を作成して下さい。
`conda create -n qiskit python==3.6.1`
仮想環境の有効化
`source activate qiskit`

念のため、Pythonのバージョンが3.6.1となっていることを確認して下さい。
`python -V`
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/399135/cc664dbf-42ca-1e26-e9f9-be112dff17b5.png)


**④Qiskitのインストール**

Qiskitをインストールします。
`pip install qiskit`
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/399135/a5eb431b-b624-079a-a576-251489209e5e.png)


qiskitをインストールする際にいくつかのエラーが出ましたので以下にまとめました。以下の「インストール時のトラブルシューティング」をご参照下さい。

インストールが終わりましたら、「インストール後の動作確認」へ進んで下さい。


## :rosette: インストール時のトラブルシューティング

qiskitをインストールする際にいくつかのエラーが出ましたので以下にまとめました。

**①setuptoolsバージョンエラーの対応**
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/399135/4c1a37a1-f2b6-cac6-7d2d-b82221384f41.png)
setuptoolsのバージョンが要件を満たしていないという内容のメッセージです。
setuptoolsを最新化します。
`pip install --upgrade setuptools`

**②cmakeエラーの対応**
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/399135/b95c6c85-d703-412f-715c-c2f8a8fe89fb.png)
cmakeライブラリに関するエラーです。
以下を実行して下さい。
`apt-get install cmake`

**③scipyに関するエラーの対応**
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/399135/71911032-44e5-a791-c4ed-30583643fa45.png)
scipyライブラリを追加します。
以下を実行して下さい。
`pip install scipy`

**④No lapack/blas resources foundに関するエラーの対応**
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/399135/be42fec7-a41b-344c-df44-d67d488df58e.png)
blas,Lapackに関するライブラリが不足しています。
以下を実行して下さい。
`apt-get install libblas-dev liblapack-dev`

**⑤no Fortran compiler foundに関するエラーの対応**
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/399135/f856ae3d-5f29-a81a-dd15-a0fc74165fb4.png)
Fortranのコンパイラに関するライブラリが不足しています。
以下を実行して下さい。
`apt-get install gfortran`

**⑥No package 'libffi' foundに関するエラーの対応**
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/399135/5ec414df-8001-1842-ac64-cb001ea8cd09.png)
libffiパッケージが不足しています。
以下を実行して下さい。
`apt-get install libffi-dev`

**⑦Failed building wheel for h5pyに関するエラーの対応**
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/399135/897fe621-a5bf-6ffa-1ffa-933e9ff76605.png)
以下を実行して下さい。
`apt-get install libhdf5-dev`

**⑧Can not find Rust compiler(Failed building wheel for retworkx)に関するエラーの対応**
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/399135/45ab1af7-054b-839d-d30e-f810d1d7edc2.png)
Rust compiler不足により、retworkxライブラリのインストールができていません。
以下を実行してRust compilerをインストールして下さい。
`curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh`

上記シェルコマンド(sh)実行後、有効化するために以下も実行して下さい。
`source $HOME/.cargo/env`

**⑨Could NOT find Cythonに関するエラーの対応**
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/399135/1d528cb8-d1b9-9ddd-8212-d28ba2326c62.png)
Cythonをインストールします。以下を実行して下さい。
`pip install cython`


## :rosette: インストール後の動作確認

インストール終了後、python対話モードでqiskitのインポートのテストを行います。以下がエラー無く実行出来たら、qiskitのインストールは終了です。
`import qiskit`
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/399135/1fdce120-8e75-fefd-0774-7733eaa1ca37.png)


## :rosette: 一般ユーザでQiskitをインストールする手順
上記の説明は、rootユーザによるQiskitのインストールの説明でしたが、一般ユーザでもその環境下でQiskit実行環境の構築が可能です。
これについては、実行するコマンドの手順のみを示しておきます。

※BerryCondaをインストールした後、conda createで独自環境を作成しておいて下さい。
`conda create -n myqiskit python==3.6.1`

**一般ユーザでQiskitのインストールコマンド一覧**(2020.08.15時点)

(1)sudo apt-get update
(2)sudo apt-get upgrade
(3)pip install --upgrade pip
(4)pip install --upgrade setuptools
(5)sudo apt-get install cmake
(6)sudo apt-get install libblas-dev liblapack-dev
(7)sudo apt-get install gfortran
(8)pip install cython
(9)sudo apt-get install libhdf5-dev
(10)curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
(11)source $HOME/.cargo/env
(12)pip install --upgrade six


## :rosette: 関連情報

■Qiskit公式チュートリアル(Qiskitのインストール)
https://qiskit.org/documentation/locale/ja/install.html


■Raspberry PIで量子コンピューターをシミュレーションする(blueqat環境構築編)
https://qiita.com/ttlabo/items/ac098d3ea7cb36013c86

## :rosette: ご意見など

ご意見、間違い訂正などございましたらお寄せ下さい。