Azure Quantum'a bir Cirq devresi nasıl gönderilir?

Alt modülü kullanarak Cirq kuantum devresi gönderme işlemini nasıl yapacağınızı qdk.azure.cirqPython öğrenin. Yerel makinenizden Visual Studio Code'daki (VS Code) Microsoft Quantum Development Kit (QDK) ve Jupyter Notebook'u kullanarak Azure Quantum'a Cirq devreleri gönderebilirsiniz.

Daha fazla bilgi için bkz . Kuantum devreleri.

Önkoşullar

Yükleme ayrıntıları için bkz. QDK uzantısını ayarlama.

  • Azure aboneliğinizdeki bir Azure Quantum çalışma alanı. Çalışma alanı oluşturmak için bkz Azure Quantum çalışma alanı oluşturma.

  • Python ve Pip'inPython.

  • QDK, Pythonve Jupyter uzantılarının yüklü olduğu VS Code.

  • qdk Python kitaplığı, azure ve cirq ekleri ile ipykernel paketi ile birlikte.

    python -m pip install --upgrade "qdk[azure,cirq]" ipykernel 
    

    Not

    Jupyter Python çekirdeği ipykernel algılanmazsa, VS Code bunu yüklemeniz için bir uyarı verir.

Yeni bir Jupyter Notebook oluşturma

  1. VS Code'da Görünüm menüsünü açın ve Komut Paleti'ni seçin.
  2. Oluştur: Yeni Jupyter Not Defteri'ni girin ve seçin.
  3. VS Code, defter için seçilen Python sürümünü ve sanal Python ortamını algılar ve görüntüler. Birden çok Python ortamınız varsa, sağ üstteki çekirdek seçiciyi kullanarak bir çekirdek seçmeniz gerekebilir. Ortam algılanmadıysa kurulum bilgileri için VS Code'da Jupyter Not Defterleri bölümüne bakın.

Gerekli içeri aktarmaları yükleme

Not defterinizin ilk hücresinde, gerekli içeri aktarmaları yüklemek için aşağıdaki kodu çalıştırın:

from qdk.azure import Workspace
from qdk.azure.cirq import AzureQuantumService

Azure Quantum hizmetine bağlanma

Azure Quantum hizmetine bağlanmak için programınızın Azure Quantum çalışma alanınızın kaynak kimliğine ihtiyacı vardır.

  1. Azure hesabınızda oturum açın, https://portal.azure.com,
  2. Azure Quantum çalışma alanınızı seçin ve Genel Bakış'a gidin.
  3. Kaynak Kimliği alanındaki değeri kopyalayın.

Yeni bir hücre ekleyin ve Workspace ve AzureQuantumService nesnelerini oluşturmak için hesap bilgilerinizi kullanarak Azure Quantum çalışma alanınıza bağlanın.

workspace = Workspace(resource_id="") # Add the resource ID of your workspace

service = AzureQuantumService(workspace)

Tümünü listele targets

Çalışma alanınızdaki devrenizi çalıştırabilen tüm targets() bileşenlerini ve onların geçerli kuyruk süresi ile kullanılabilirliğini listelemek için targets yöntemini kullanın.

Not

Çalışma alanınızdakilerin targets tümü listelenmeyebilir; yalnızca targets Cirq veya OpenQASM bağlantı hattını kabul edebilenler burada listelenir.

print(service.targets())
[<Target name="quantinuum.qpu.h2-1", avg. queue time=0 s, Degraded>,
<Target name="quantinuum.sim.h2-1sc", avg. queue time=1 s, Available>,
<Target name="quantinuum.sim.h2-1e", avg. queue time=40 s, Available>,
<Target name="ionq.simulator", avg. queue time=3 s, Available>,
<Target name="ionq.qpu.aria-1", avg. queue time=1136774 s, Available>]

Basit bir devre oluşturma

Ardından, çalıştırmak için basit bir Cirq devresi oluşturun. Bu bağlantı hattı, IonQ donanım sistemine özgü X geçidinin karekökünü kullanır.

import cirq

q0, q1 = cirq.LineQubit.range(2)
circuit = cirq.Circuit(
    cirq.X(q0)**0.5,             # Square root of X
    cirq.CX(q0, q1),              # CNOT
    cirq.measure(q0, q1, key='b') # Measure both qubits
)
print(circuit)
0: ───X^0.5───@───M────────
              │   │
1: ───────────X───M────────

Programınızı çalıştırmak için bir target seçin

IonQ simülatöründe çalıştırma

Artık programı Azure Quantum hizmeti aracılığıyla çalıştırabilir ve sonucu alabilirsiniz. Aşağıdaki hücre, bağlantı hattını 100 çekimle çalıştıran, iş tamamlanana kadar bekleyen ve sonuçları döndüren bir iş (varsayılan IonQ simülatörüne) gönderir.

result = service.run(program=circuit, repetitions=100, target="ionq.simulator")

Bu bir cirq.Result nesne döndürür.

print(result)
    b=1001100101100001000011011101000011010100010111100011001000100100010000001110010010101110110000011010, 1001100101100001000011011101000011010100010111100011001000100100010000001110010010101110110000011010

İş maliyetini tahmin

QPU'da bir işi çalıştırmadan önce çalıştırmanın maliyetini tahmin etmelisiniz.

En güncel fiyatlandırma ayrıntıları için IonQ Fiyatlandırması'na bakın veya çalışma alanınızı bulun ve fiyatlandırma seçeneklerini çalışma alanınızın "Sağlayıcı" sekmesinde görüntüleyin: aka.ms/aq/myworkspaces.

IonQ QPU üzerinde çalıştırma

Önceki iş, varsayılan simülatörde çalıştırıldı, "ionq.simulator". Ancak, bunu IonQ'nun donanım işlemcisinde (Kuantum İşlemci Birimi (QPU) da çalıştırabilirsiniz. IonQ QPU üzerinde çalıştırmak için "ionq.qpu.aria-1"'yi target parametresi olarak sağlayın.

result = service.run(
    program=circuit,
    repetitions=100,
    target="ionq.qpu.aria-1",
    timeout_seconds=500 # Set timeout to accommodate queue time on QPU
)

Bu da bir cirq.Result nesne döndürür.

print(result)
b=0101011011011111100001011101101011011110100010000000011110111000100100110110101100110001001111101111, 0101011011011111100001011101101011011110100010000000011110111000100100110110101100110001001111101111

Görevler kullanan asenkron model

Uzun süre çalışan devreler için bunları zaman uyumsuz olarak çalıştırmak yararlı olabilir. service.create_job yöntemi, iş başarıyla çalıştırıldıktan sonra sonuçları almak için kullanabileceğiniz bir Job nesnesi döndürür.

job = service.create_job(
    program=circuit,
    repetitions=100,
    target="ionq.simulator"
)

İş durumunu denetlemek için kullanın job.status():

print(job.status())
'completed'

İşin tamamlanmasını beklemek ve sonuçları almak için engelleme çağrısını job.results()kullanın:

result = job.results()
print(result)
00: 0.5
11: 0.5

Bunun bir cirq.Result nesne döndürmediğini unutmayın. Bunun yerine IonQ simülatörüne özgü bir sonuç nesnesi döndürür ve çekim verileri yerine durum olasılıklarını kullanır.

type(result)
cirq_ionq.results.SimulatorResult

Bunu bir cirq.Result nesneye dönüştürmek için kullanın result.to_cirq_result():

print(result.to_cirq_result())
b=1110101111111110111000011101011111001100010000001011011101001111001111001101100111010000001100011100, 1110101111111110111000011101011111001100010000001011011101001111001111001101100111010000001100011100