cuQuantum の PyPI 版 - らんだむな記憶 の続きみたいな内容。
どこに書いてあったか忘れたけど、最新の cuQuantum
は Volta アーキテクチャ以降の NVIDIA GPU と Python 3.8+ を要求していたはず。V100/A100 だけでなく T4 でも動くみたいだけど、Colab のランタイムが 3.7 なのが引っかかってくるはず。
これについては、ColabのランタイムタイプをPython3.8にする手順が完成しました!!|こっころ(engbjapan)|note の方法でランタイムをアップデートしたらいけると思いたい・・・。
試した:
1. 以下で T4 を掴んでいることを確認。(K80 だと多分無理)
! nvidia-smi
2. note の内容でランタイムを Python 3.8 に更新(数分かかる)する。
3. 以下などで必要なパッケージをインストールする。いま調べたら Colab では CUDA 11.2 が使われていた。
! pip3 install -U qiskit pylatexenc cuquantum cuquantum-python cupy-cuda112
4. ランタイムを再起動してインストールしたパッケージを利用可能にする。
5. 好きなように cuQuantum で遊んだらいい:
例えば
from qiskit import QuantumCircuit, QuantumRegister from cuquantum import CircuitToEinsum, contract import numpy as np qc = QuantumCircuit(1) qc.x(0) converter = CircuitToEinsum(qc) expr, operands = converter.amplitude(bitstring='1') print(expr) for op in operands: print(op) print() print(contract(expr, *operands))
a,ba,b->
[1.+0.j 0.+0.j]
[[0.+0.j 1.+0.j]
[1.+0.j 0.+0.j]]
[0.+0.j 1.+0.j]
(1+0j)
となるので、もつれ状態の確率振幅が計算できていることがわかる。ということで、T4 以降が掴めれば、ランタイムさえ更新すれば無料で cuQuantum で遊べる環境が得られることが分かった。
200 量子ビットの回路の単一の確率振幅を求める処理も、セルの実行時間としては 2.9 秒程度で実行できた(%%time
で計測)。