Có lỗi trong mạch!. Lỗi = 'Hết giờ QISkit'


8

Tôi đã nhận được mã lượng tử sau bằng QISKit (dựa trên 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))

Tôi đặt APItokentrong Qconfig.py:

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

Tuy nhiên, mã không thành công với lỗi sau:

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'

Tôi đã thử cả hai ibmqx4ibmqx5, cùng một vấn đề. Tôi có thể thấy rằng họ đang hoạt động tại / qx / thiết bị .

Nó có nghĩa là gì? Điều đó có nghĩa là máy chủ IBM Q không hoạt động hay chương trình quá lớn để thực thi? Hoặc có một cái gì đó khác đang xảy ra? Nói cách khác, tôi nên làm gì để chạy một chương trình Hello Quantum đơn giản trên máy chủ lượng tử IBM?

Câu trả lời:


6

Công việc của bạn đã hết thời gian, có thể là do hàng đợi quá dài để công việc hoàn thành trong thời gian được mặc định cho phép .execute().

Nhưng bạn đã biết rằng, tất nhiên, bởi vì bạn đã viết một câu trả lời xuất sắc của riêng bạn . Tuy nhiên, tôi có một số hiểu biết để thêm từ kinh nghiệm chiến đấu cứng.

Tôi thường sử dụng sổ ghi chép này để kiểm tra xem thiết bị có bận không và thiết bị có hoạt động không. Sau đó, tôi thường chạy công việc theo cách sau.

    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)

Điều này sử dụng tryđể quản lý bất kỳ trường hợp ngoại lệ có thể dẫn đến. Chương trình sẽ chỉ chờ và thử lại chứ không phải là sự cố.

Nếu chúng ta đạt đến điểm sử dụng thành công .get_counts, chương trình sẽ kiểm tra xem liệu nó có thực sự chứa kết quả hay không. Hay đúng hơn, nó kiểm tra rằng 'status'chìa khóa không có mặt, vì nó là điềm báo cho sự diệt vong. Nếu không có kết quả chính xác, chương trình sẽ đợi và thử lại.


3

Theo bài đăng trên GitHub , tôi đã phải tăng thời gian chờ Q_program.execute(), ví dụ:

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

Lý do có lẽ là, các hàng đợi đang bận, vì vậy chúng tôi cần nói với QISKit để chờ tới 10 phút. Hướng dẫn này về cơ bản là chặn phần còn lại của tập lệnh và đợi cho đến khi công việc được thực thi trên máy chủ phụ trợ thực tế và kết quả được trả về.


Để liệt kê chi tiết các công việc đã được gửi, mã sau đây có thể được sử dụng theo đề xuất của @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'])

Đối phó với thời gian chờ là một phần không thể tránh khỏi, thật không may. Cùng với việc tăng thời gian chờ đợi, bạn có thể sử dụng xử lý ngoại lệ để thử lại.
James Wootton
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.