こんにちは、いろいろな情報が混じっていて大変ですが、量子コンピュータへジョブを投げる方法を、現時点でのおさらいです。弊社のクラウドからAPIを利用して投げることで、固定の金額で従量課金のように金額を心配しながら投げる必要がなく安心です。また、すぐに利用できるので、申請などなしにお金を払えば利用できます。
現在blueqat cloudのSDKではなく、クラウドに搭載されたblueqat quantum task clientというものを利用します。すみませんが、外部へは公開がされていません。
最初にクライアントからタスクとデバイスを読み込みます。
from bq_quantum_task_client import BqQuantumTaskClient, Device
次に量子回路を作ります。今回はQiskit経由で投げます。
from qiskit import QuantumCircuit
qc = QuantumCircuit(3)
qc.h(0)
for qubit in range(1, 3):
qc.cx(0, qubit)
そしてAPIキーを用意してクライアントを準備します。
api_key = "<ログインしてみれるAPIキー>"
client = BqQuantumTaskClient( api_key=api_key, )
そうしましたらタスクを投げられます。
task = await client.create_quantum_task(
circuit=qc,
shots=<投げたいショット数>,
device=Device.<利用したいデバイス>,
)
そうするとタスクが投げられますので、
job_id = task.job_id
print("ジョブID:", job_id)
ジョブを確認できます。
result = await client.get_quantum_task(
job_id=task.job_id,
)
result
ちょっとうまくいかないこともあるようですが、
# しばらく待つ(オプション:非同期処理の完了を待つ)
import asyncio
await asyncio.sleep(5) # 5秒待つ
# 結果取得(Qiskitなし版)
import httpx
url = "https://quantum-task-api.blueqat.com/v1/jobs/get"
headers = {
"user-agent": "blueqat/1.0 (blueqatQuantumTaskAPI; +https://blueqat.com/)",
"x-api-key": client.api_key,
"accept-encoding": "gzip, deflate",
"Content-Type": "application/json",
}
payload = {
"job_id": job_id,
}
async with httpx.AsyncClient() as http_client:
response = await http_client.post(url, headers=headers, json=payload)
data = response.json()
# データの取得
results = data.get("payload", {}).get("results", [])
counts = Counter()
for r in results:
counts.update(r.get("data", {}).get("counts", {}))
print("測定結果:", dict(counts))
で行けました。便利ですね。
結構簡単ですよね。