Azure Quantum'a Cirq ile bağlantı hattı gönderme
Paketini kullanarak Cirq quantum devresi göndermeyi azure-quantum
Python öğrenin. Yerleşik paketi olan Azure Quantum not defterini kullanarak veya yerel makinenizden Azure Quantum'a azure-quantum
Python 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.
Azure Quantum Geliştirme Seti, ve Python uzantılarının yüklü olduğu VS Code.
[cirq] etiketine ve ve paketlerine
azure-quantum
qsharp
sahip Azure Quantumipykernel
paketi.python -m pip install --upgrade azure-quantum[cirq] qsharp ipykernel
Not
Jupyter Python çekirdeği
ipykernel
algılanmazsa VS Code bunu yüklemenizi ister.
Yeni bir Jupyter Notebook oluşturma
- VS Code'da > Görüntüle'yi ve ardından Oluştur: Yeni Jupyter Not Defteri'ni seçin.
- Sağ üst kısımda VS Code, not defteri için seçilen ve sanal Python ortamın Python sürümü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:
import azure.quantum
from azure.quantum.cirq import AzureQuantumService
Azure Quantum hizmetine bağlanma
Azure Quantum hizmetine bağlanmak için programınızın kaynak kimliğine ve Azure Quantum çalışma alanınızın konumuna ihtiyacı vardır.
Azure hesabınızda oturum açın, https://portal.azure.com,
Azure Quantum çalışma alanınızı seçin ve Genel Bakış'a gidin.
Alanlardaki parametreleri kopyalayın.
Yeni bir hücre ekleyin ve hesap bilgilerinizi Workspace
kullanarak oluşturma ve AzureQuantumService
Nesneleri kullanarak Azure Quantum çalışma alanınıza bağlanın.
workspace = Workspace(
resource_id = "", # Add the resourceID of your workspace
location = "" # Add the location of your workspace (for example "westus")
)
service = AzureQuantumService(workspace)
Tümünü listele targets
targets()
Geçerli kuyruk süresi ve kullanılabilirlik dahil olmak üzere çalışma alanınızda bağlantı hattınızı çalıştırabilen tüm targets alanları listelemek için 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.h1-1", avg. queue time=0 s, Degraded>,
<Target name="quantinuum.sim.h1-1sc", avg. queue time=1 s, Available>,
<Target name="quantinuum.sim.h1-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 bağlantı hattı 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ırmıştı: "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 bağımsız değişken olarak şunu "ionq.qpu.aria-1"
sağlayıntarget
:
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
İşler kullanan zaman uyumsuz 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
Önkoşullar
- Etkin aboneliği olan bir Azure hesabı. Azure hesabınız yoksa ücretsiz kaydolun ve kullandıkça öde aboneliğine kaydolun.
- Azure Quantum çalışma alanı. Daha fazla bilgi için bkz . Azure Quantum çalışma alanı oluşturma.
Çalışma alanınızda yeni bir not defteri oluşturma
- Azure portalında oturum açın ve önceki adımda çalışma alanını seçin.
- Sol dikey pencerede Not Defterleri'ni seçin.
- Not Defterlerim'e ve Yeni Ekle'ye tıklayın.
- Dosya için Cirq.ipynb gibi bir ad yazın ve Dosya oluştur'a tıklayın.
Yeni not defteriniz açıldığında, aboneliğinize ve çalışma alanı bilgilerinize göre ilk hücrenin kodunu otomatik olarak oluşturur.
from azure.quantum import Workspace
workspace = Workspace (
resource_id = "", # Add your resource_id
location = "" # Add your workspace location (for example, "westus")
)
Not
Aksi belirtilmediği sürece, derleme sorunlarını önlemek için her hücreyi oluştururken sırayla çalıştırmanız gerekir.
Kodu çalıştırmak için hücrenin solundaki üçgen "oynat" simgesine tıklayın.
Gerekli içeri aktarmaları yükleme
İlk olarak, ek bir modülü içeri aktarmanız gerekir.
+ Kod'a tıklayarak yeni bir hücre ekleyin ve aşağıdaki kodu ekleyin ve çalıştırın:
from azure.quantum.cirq import AzureQuantumService
Azure Quantum hizmetine bağlanma
Ardından, Azure Quantum çalışma alanınıza bağlanmak için önceki hücredeki nesneyi kullanarak AzureQuantumService
bir workspace
nesne oluşturun. Aşağıdaki koda sahip yeni bir hücre ekleyin:
provider = AzureQuantumService(workspace)
Basit bir bağlantı hattı tanımlama
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────────
Tümünü listele targets
targets()
Geçerli kuyruk süresi ve kullanılabilirlik dahil olmak üzere çalışma alanınızda bağlantı hattınızı çalıştırabilen tüm targets alanları listelemek için 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("This workspace's targets:")
for target in service.targets():
print(target)
This workspace's targets:
<Target name="quantinuum.qpu.h1-1", avg. queue time=0 s, Degraded>
<Target name="quantinuum.sim.h1-1sc", avg. queue time=1 s, Available>
<Target name="quantinuum.sim.h1-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>
Not
tam listesi target çalışma alanınız için farklı olabilir.
Programınızı çalıştırmak için bir target seçin
IonQ simülatöründe çalıştırma
Devrenizi gerçek kuantum donanımında çalıştırmadan önce denetlemek için IonQ simülatörünü ionq.simulator
kullanabilirsiniz.
Aşağıdaki hücre 100 çekimle bağlantı hattını çalıştıran bir iş gönderir, iş tamamlanana kadar bekler ve sonuçları döndürür.
result = service.run(
program=circuit,
repetitions=100,
target="ionq.simulator"
)
Bu bir cirq.Result
nesne döndürür.
print(result)
b=1001100101100001000011011101000011010100010111100011001000100100010000001110010010101110110000011010, 1001100101100001000011011101000011010100010111100011001000100100010000001110010010101110110000011010
Sonuçları histogramda çizebilirsiniz:
import pylab as pl
pl.hist(result.data)
pl.ylabel("Counts")
pl.xlabel("Result")
İş maliyetini tahmin
Bir işi gerçek kuantum donanımında veya kuantum işleme biriminde (QPU) ç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ın Sağlayıcılar dikey penceresinde fiyatlandırma seçeneklerini görüntüleyin. Geçerli kredi durumunuzu ve kullanımınızı görmek için Krediler ve kotalar'ı seçin.
IonQ QPU üzerinde çalıştırma
Önceki iş varsayılan simülatörde çalıştırmıştı: ionq.simulator
. Ancak, IonQ'nun donanım işlemcisinde veya Kuantum İşlemci Birimi'nde (QPU) da çalıştırabilirsiniz. IonQ QPU üzerinde çalıştırmak için bağımsız değişken olarak şunu ionq.qpu.aria-1
sağlayıntarget
:
result = service.run(
program=circuit,
repetitions=100,
target="ionq.qpu.aria-1",
timeout_seconds=500 # Set timeout to accommodate queue time on QPU
)
Not
QPU'da bir bağlantı hattını çalıştırmak için gereken süre geçerli kuyruk sürelerine bağlıdır. Çalışma alanınızın Sağlayıcılartargetiçin ortalama kuyruk süresini görüntüleyebilirsiniz.
Bu da bir cirq.Result
nesne döndürür.
print(result)
b=1001100101100001000011011101000011010100010111100011001000100100010000001110010010101110110000011010, 1001100101100001000011011101000011010100010111100011001000100100010000001110010010101110110000011010
İşler kullanan zaman uyumsuz 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
Not
job.results()
İşlev bir cirq.Result
nesne döndürmez. 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
Önemli
Tek bir işte birden çok bağlantı hattının gönderilmesi şu anda desteklenmemektedir. Geçici bir çözüm olarak, her bağlantı hattını zaman uyumsuz olarak göndermek için yöntemini çağırabilir backend.run
ve ardından her işin sonuçlarını getirebilirsiniz. Örneğin:
jobs = []
for circuit in circuits:
jobs.append(backend.run(circuit, shots=N))
results = []
for job in jobs:
results.append(job.result())
İlgili içerik
- Hızlı Başlangıç: Azure Quantum'a Qiskit ile bir bağlantı hattı gönderme.
- Hızlı Başlangıç: Azure Quantum'a sağlayıcıya özgü biçime sahip bir bağlantı hattı gönderme.