回路にエラーがありました!。エラー= 'QISkitタイムアウト'


8

QISKit(に基づくhello_quantum.py)を使用して次の量子コードを取得しました。

import sys, os
from qiskit import QuantumProgram, QISKitError, RegisterSizeError

# Create a QuantumProgram object instance.
Q_program = QuantumProgram()
try:
    import Qconfig
    Q_program.set_api(Qconfig.APItoken, Qconfig.config["url"])
except:
    offline = True
    print("WARNING: There's no connection with IBMQuantumExperience servers.");
print("The backends available for use are: {}\n".format(",".join(Q_program.available_backends())))
backend = 'ibmqx5'
try:
    # Create a Quantum Register called "qr" with 2 qubits.
    qr = Q_program.create_quantum_register("qr", 2)
    # Create a Classical Register called "cr" with 2 bits.
    cr = Q_program.create_classical_register("cr", 2)
    # Create a Quantum Circuit called "qc". involving the Quantum Register "qr"
    # and the Classical Register "cr".
    qc = Q_program.create_circuit("bell", [qr], [cr])

    # Add the H gate in the Qubit 0, putting this qubit in superposition.
    qc.h(qr[0])
    # Add the CX gate on control qubit 0 and target qubit 1, putting 
    # the qubits in a Bell state
    qc.cx(qr[0], qr[1])

    # Add a Measure gate to see the state.
    qc.measure(qr, cr)

    # Compile and execute the Quantum Program.
    result = Q_program.execute(["bell"], backend=backend, shots=1024, seed=1)

    # Show the results.
    print(result)
    print(result.get_data("bell"))

except QISKitError as ex:
    print('There was an error in the circuit!. Error = {}'.format(ex))
except RegisterSizeError as ex:
    print('Error in the number of registers!. Error = {}'.format(ex))

私は自分APItokenを次のQconfig.pyように設定しました:

APItoken = 'XXX'
config = {
    'url': 'https://quantumexperience.ng.bluemix.net/api',
}

ただし、コードは次のエラーで失敗します。

The backends available for use are: ibmqx2,ibmqx5,ibmqx4,ibmqx_hpc_qasm_simulator,ibmqx_qasm_simulator,local_qasm_simulator,local_clifford_simulator,local_qiskit_simulator,local_unitary_simulator

ERROR
There was an error in the circuit!. Error = 'QISkit Time Out'

私は両方をテストしたibmqx4ibmqx5、同じ問題を。/ qx / devicesでアクティブになっていることがわかります

どういう意味ですか?IBM Qサーバーがダウンしているか、プログラムが大きすぎて実行できないのでしょうか?または何か他のことが起こっていますか?つまり、IBM量子サーバーで単純なHello Quantumプログラムを実行するにはどうすればよいですか?

回答:


6

ジョブがタイムアウトしました。おそらく、キューが長すぎて、デフォルトで許可されている時間内にジョブを完了できません.execute()

しかし、あなたはすでにそれを知っています。なぜなら、あなたはすでにあなた自身の優れた答えを書いているからです。それにもかかわらず、私は戦いで強化された経験から追加するいくつかの洞察を持っています。

私は通常、このノートブックを使用し、デバイスのビジー状態と、デバイスがアクティブかどうかを確認します。次に、通常は次の方法でジョブを実行します。

    noResults = True
    while noResults:
        try: # try to run, and wait if it fails
            executedJob = engine.execute(["script"], backend=backend, shots=shots, max_credits = 5, wait=30, timeout=600)
            resultsVeryRaw = executedJob.get_counts("script")
            if ('status' not in resultsVeryRaw.keys()):
                noResults = False
            else:
                print(resultsVeryRaw)
                print("This is not data, so we'll wait and try again")
                time.sleep(300)
        except:
            print("Job failed. We'll wait and try again")
            time.sleep(600)

これはtry、発生する可能性のある例外を管理するために使用します。プログラムはクラッシュするのではなく、待機して再試行します。

を正常に使用できるようになる.get_countsと、プログラムは実際に結果が含まれているかどうかを確認します。むしろ、それ'status'は破滅の前兆であるため、鍵が存在しないことを確認します。適切な結果がない場合、プログラムは再び待機して、再試行します。


3

GitHubの投稿に従ってQ_program.execute()、たとえばのタイムアウトを増やす必要がありました。

result = Q_program.execute(["bell"], backend=backend, shots=1024, seed=1, timeout=600)

その理由はおそらく、キューがビジーであるため、QISKitに最大10分間待機するように指示する必要があるためです。この命令は基本的に残りのスクリプトをブロックし、実際のバックエンドサーバーでジョブが実行されて結果が返されるまで待機します。


送信されたジョブの詳細を一覧表示するには、@ ajavadiaによって提案されている次のコードを使用できます。

from qiskit import QuantumProgram
import Qconfig

qp = QuantumProgram()
qp.set_api(Qconfig.APItoken, Qconfig.config['url'])

# Download details of all the jobs you've ever submitted (the default limit is 50).
my_jobs = qp.get_api().get_jobs(limit=999)

# Filter down to get a list of completed jobs.
done_jobs = [j for j in my_jobs if j['status']=='COMPLETED']

# Print the results for all of your completed jobs.
for j in done_jobs:
    for q in j['qasms']:
        print(q['qasm'])
        print(q['result'])

タイムアウトの処理は、残念ながらやや避けられません。待機時間が長くなるだけでなく、例外処理を使用して再試行することもできます。
James Wootton、2018年
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.