クラウド量子プログラミング開発環境 StrangeWorks を使ってみた

# StrangeWorksの概要

StrangeWorks は、クラウド量子プログラミング開発環境サービスです。
https://strangeworks.com/
Webブラウザからログインし、ブラウザ上で（主要な量子プログラミングSDKがプリインストールされた）jupyter notebook が使えます。
これまでもクラウド開発環境はありました(例えばIBM,blueqat)が、いくつものSDKが共存しているのは新しいと思います。

今回これを紹介します。日本語の記事はほぼないと思いますので。

StrangeWorksのコンセプト
`One platform,
all the quantum
Curious about quantum computing? You’re in the right place. Strangeworks QC™ is used by thousands of researchers, developers, and companies around the world to learn, teach, create, and collaborate on quantum computing projects. A mystery we made simpler. And now, it’s accessible to everyone.`


実行結果をコミュニティにそのまま投稿できるそうです。

`It's simple.
Okay, simpler.
It doesn't get any simpler than the Strangeworks QC™ platform. All the quantum tools you'll ever need, delivered in a single user interface.`

- Nothing to install or configure
- Supports all major quantum frameworks
- Start with our code, or write your own
- Run experiments and get results
- Share, collaborate, and publish your work

また、いろんな量子コンピュータ実機をここから動かすことが出来るそうです。
ただし無料版では Coming soon となっています。

## 実行環境

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/878664/97c00f7b-90d3-44c7-e560-807345e027bd.png)

上記はblueqat SDK でQAOAを書いています。
pip install しなくても動きます。（プリインストールされています）
本当は
import strangeworks.blueqat 
と書くのが良いみたいです。


## チュートリアル

とりあえず Explor first project から、言われるがままにやってみます。
bell-qasm.qasm　が表示されます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/878664/3f3a819e-3e19-a9cf-2a03-136176ee563e.png)

右上のコードを実行を押すと、
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/878664/2e3138a5-2090-0cd7-80c8-324cfff639bd.png)

qasmの場合、シミュレーターでやるか実機でやるか選べます。
とりあえずシミュレーターで。
無駄にかっこいいエフェクトの後に、結果が出ます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/878664/255cc7fe-3d87-cefe-58c6-4eb9d433b318.png)

回路図と、ヒストグラムが勝手に出ています。助かる！

ちなみに、実機を選ぶと？

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/878664/3a77a370-e171-13cf-f4c4-b90a2d38ae10.png)

無料版では、ここでだめなんですね。

しかし、裏ワザ（でもないですが）として、.pyで以下のように書いておくと、IBMQに限っては実機使えます。
`backend = strangeworks.qiskit.get_backend("ibmqx2")
job = qiskit.execute([qc], backend, shots=100)
`

実行してみると、

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/878664/5ddca8a9-0886-638b-c9d8-b68144bd4b8a.png)


ちゃんとIBMQX2が認識されています。
なお、実機で順番待ちが発生するため、結果のヒストグラムがなかなか出てきません。
気長に待ちましょう。

## 実機関連

そうそうたるメンバーです。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/878664/cdc98689-c922-06e0-2f34-5ccdf3aad924.png)

無料アカウントでは基本的に実機が動かせませんが、上記の通り.pyで直接IBMQを叩くことはできます。
そのためには、Hardware のメニューからIBMQを選択し、APIトークンを入れておく必要があります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/878664/ffd95339-da0f-f420-2615-3d8945c3ebab.png)
このようになれば認証できています。

IBMQのページに入ると、実機の稼働状況がStrangeWorks上でもみえます。
これは面白い。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/878664/b565ffac-8cf8-c67d-1b93-cc578697fc8b.png)

でもそんなことはいいから、自分の投げたタスクの順番待ち状況をGUI上で見れるようにしてほしい。

## チュートリアル

サインイン後に、
https://quantumcomputing.com/
のBeginnerをみてみます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/878664/b26d397f-ed17-c0fc-530b-abd87331c3e4.png)

サンプルが色々あります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/878664/d6959eeb-470d-675f-9b09-a5ea58345046.png)

## 所感(まとめにかえて)

便利といえば便利なのかもしれませんが、正直に言いまして、今あるSDKを寄せ集めただけにも見えます。
braketのように、1つのコードでバックエンドの部分の記述だけを切り替えてマシンを変えることを期待していたのですが、
どうもibmqはqiskit、rigettiはforest(or braket)のように、結局書き分けないといけません。[^1]
もちろんqasmで書いておけば、（有料版なら）マシンをGUI上で選択するだけでいいのかもしれませんが、
低級なqasmで書くのはしんどいですよね。
少なくともqiskitは　to_qasm みたいなmethodがあったと思うので、活用したいところです。

あと、かっこいい画面遷移は（個人的には）要らないです。
``It's simple.
Okay, simpler.`
上記コンセプト通りでお願いいたします。


SDKも実行環境も乱立しており、どれが良いのかよくわかりませんね。
目的を達成するためのSDK、実行環境だと思いますので、あまり振り回されないほうが良いかもしれません。


[^1]: マシンの使い分けが一番便利なのは、現状ではblueqatとPennylaneだと思っています。この2つはプラグインを入れればibmq(実機無料)をサポートしていることも大きいです。Pennylaneは自動微分が使えて機械学習が速いので、良いです。ただ、ちょっと書きにくい気もします。