Azure Quantum'a Cirq ile bağlantı hattı gönderme
Paketini kullanarak Cirq quantum bağlantı hattı 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.
Not
Microsoft Quantum Geliştirme Seti (Klasik QDK) artık 30 Haziran 2024'e kadar desteklenmeyecektir. Mevcut bir QDK geliştiricisiyseniz kuantum çözümleri geliştirmeye devam etmek için yeni Azure Quantum Development Kit'e (Modern QDK) geçmenizi öneririz. Daha fazla bilgi için bkz . Q# kodunuzu Modern QDK'ye geçirme.
Önkoşullar
Yükleme ayrıntıları için bkz . VS Code'da Modern QDK'yi yükleme.
Azure aboneliğinizde bir Azure Quantum çalışma alanı. Çalışma alanı oluşturmak için bkz. Azure Quantum çalışma alanı oluşturma.
Python ve Pip'in yüklü olduğu bir ortamPython.
Azure Quantum Geliştirme Seti, Pythonve Jupyter uzantılarının yüklü olduğu VS Code.
[cirq] etiketine sahip Azure Quantum
azure-quantum
paketi veqsharp
veipykernel
paketleri.python -m pip install --upgrade azure-quantum[cirq] qsharp ipykernel
Not
Jupyter Python çekirdeği
ipykernel
algılanmazsa VS Code sizden bunu yüklemenizi ister.
Yeni Jupyter Notebook oluşturma
- VS Code'da Komut paleti Görüntüle'yi > ve ardından Oluştur: Yeni Jupyter Notebook'yi 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ğ üst kısımdaki çekirdek seçiciyi kullanarak bir çekirdek seçmeniz gerekebilir. Ortam algılanmadıysa kurulum bilgileri için VS Code'da Jupyter Notebooks 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.comAzure Quantum çalışma alanınıza gidin ve üst bilgiden değerleri kopyalayın.
Yeni bir hücre ekleyin ve hesap bilgilerinizi kullanarak Azure Quantum çalışma alanınıza bağlanmak üzere nesneler AzureQuantumService
oluşturunWorkspace
.
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
targets Çalışma alanınızdakilerin tümü listelenmeyebilir; burada yalnızca targets Cirq veya OpenQASM bağlantı hattını kabul edebilenler 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.qpu", avg. queue time=229 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 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 sisteminde yerel olan 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 bir işi (varsayılan IonQ simülatörüne) gönderir, işin tamamlanmasını bekler ve sonuçları döndürür.
result = service.run(program=circuit, repetitions=100, target="ionq.simulator")
Bu, bir cirq.Result
nesnesi 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 edebilirsiniz. QPU'da bir işi çalıştırmanın maliyetini tahmin etmek için yöntemini kullanabilirsiniz estimate_cost
:
cost = service.estimate_cost(
program=circuit,
repetitions=100,
target="ionq.qpu"
)
print(f"Estimated cost: {cost.estimated_total}")
Bu, tahmini maliyeti ABD doları cinsinden yazdırır.
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 şu adres aracılığıyla ç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 sağlayın "ionq.qpu"
target
:
result = service.run(
program=circuit,
repetitions=100,
target="ionq.qpu",
timeout_seconds=500 # Set timeout to accommodate queue time on QPU
)
Bu da bir cirq.Result
nesnesi döndürür.
print(result)
b=0101011011011111100001011101101011011110100010000000011110111000100100110110101100110001001111101111, 0101011011011111100001011101101011011110100010000000011110111000100100110110101100110001001111101111
İşleri 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ı bekleyip 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 not defteri oluşturma
- Azure portal oturum açın ve önceki adımdan ç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 workspace
bir AzureQuantumService
nesne oluşturun. Aşağıdaki kodla yeni bir hücre ekleyin:
provider = AzureQuantumService(workspace)
Basit bir devre tanımlama
Ardından, çalıştırmak için basit bir Cirq bağlantı hattı oluşturun. Bu bağlantı hattı, IonQ donanım sisteminde yerel olan 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 öğeleri listelemek için yöntemini kullanın.
Not
targets Çalışma alanınızdakilerin tümü listelenmeyebilir; burada yalnızca targets Cirq veya OpenQASM bağlantı hattını kabul edebilenler 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.qpu", avg. queue time=229 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, devreyi 100 çekimle çalıştıran, iş tamamlanana kadar bekleyen ve sonuçları döndüren bir iş 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
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 edebilirsiniz. QPU'da bir işi çalıştırmanın maliyetini tahmin etmek için yöntemini kullanabilirsiniz estimate_cost
:
cost = service.estimate_cost(
program=circuit,
repetitions=100,
target="ionq.qpu"
)
print(f"Estimated cost: {cost.estimated_total}")
Estimated cost: 1
Bu, tahmini maliyeti ABD doları cinsinden yazdırır.
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ı. 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 target
sağlayınionq.qpu
:
result = service.run(
program=circuit,
repetitions=100,
target="ionq.qpu",
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ılar dikey penceresini seçerek ortalama target kuyruk süresini görüntüleyebilirsiniz.
Bu da bir cirq.Result
nesne döndürür.
print(result)
b=1001100101100001000011011101000011010100010111100011001000100100010000001110010010101110110000011010, 1001100101100001000011011101000011010100010111100011001000100100010000001110010010101110110000011010
İşleri 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ı gönderme işlemi ş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. Örnek:
jobs = []
for circuit in circuits:
jobs.append(backend.run(circuit, shots=N))
results = []
for job in jobs:
results.append(job.result())
Sonraki adımlar
Geri Bildirim
https://aka.ms/ContentUserFeedback.
Çok yakında: 2024 boyunca, içerik için geri bildirim mekanizması olarak GitHub Sorunları’nı kullanımdan kaldıracak ve yeni bir geri bildirim sistemiyle değiştireceğiz. Daha fazla bilgi için bkz.Gönderin ve geri bildirimi görüntüleyin