Terjadi kesalahan di sirkuit !. Kesalahan = 'Batas Waktu QISkit'

8

Saya mendapatkan kode kuantum berikut menggunakan QISKit (berdasarkan 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))

Saya set saya APItokendi Qconfig.pysebagai:

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

Namun, kode gagal dengan kesalahan berikut:

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'

Saya sudah menguji keduanya ibmqx4dan ibmqx5, masalah yang sama. Saya dapat melihat bahwa mereka aktif di / qx / devices .

Apa artinya? Apakah itu berarti server Q IBM sedang down, atau program terlalu besar untuk dijalankan? Atau ada hal lain yang terjadi? Dengan kata lain, apa yang harus saya lakukan untuk menjalankan program Hello Quantum sederhana pada server kuantum IBM?

kenorb
sumber

Jawaban:

6

Pekerjaan Anda kehabisan waktu, mungkin karena antrian terlalu lama untuk menyelesaikan pekerjaan dalam waktu yang diizinkan secara default .execute().

Tapi Anda sudah tahu itu, tentu saja, karena Anda sudah menulis jawaban yang bagus untuk jawaban Anda sendiri . Meskipun demikian, saya memiliki beberapa wawasan untuk ditambahkan dari pengalaman pertempuran yang keras.

Saya biasanya menggunakan notebook ini untuk memeriksa seberapa sibuk suatu perangkat, dan apakah itu aktif. Maka saya biasanya menjalankan pekerjaan dengan cara berikut.

    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)

Ini digunakan tryuntuk mengelola pengecualian yang mungkin timbul. Program hanya akan menunggu dan mencoba lagi daripada crash.

Jika kita sampai pada titik penggunaan yang sukses .get_counts, program kemudian memeriksa untuk melihat apakah itu benar-benar berisi hasil. Atau lebih tepatnya, memeriksa apakah 'status'kuncinya tidak ada, karena itu adalah pertanda malapetaka. Jika tidak ada hasil yang tepat, program sekali lagi menunggu dan mencoba lagi.

James Wootton
sumber
3

Sesuai pos GitHub , saya harus menambah batas waktu untuk Q_program.execute(), misalnya:

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

Alasannya mungkin, bahwa antrian sedang sibuk, jadi kami perlu memberi tahu QISKit untuk menunggu hingga 10 menit. Instruksi ini pada dasarnya memblokir sisa skrip dan menunggu sampai pekerjaan dijalankan pada server backend yang sebenarnya dan hasilnya dikembalikan.


Untuk daftar detail pekerjaan yang telah diserahkan, kode berikut dapat digunakan seperti yang diusulkan oleh @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'])
kenorb
sumber
Berurusan dengan timeout agak tak terhindarkan, sayangnya. Selain meningkatkan berapa lama menunggu, Anda bisa menggunakan penanganan pengecualian untuk membuatnya mencoba lagi.
James Wootton