Hızlı başlangıç: Cirq ile Azure hisse 'e bir bağlantı hattı gönderme
azure-quantum Python Azure hisse hizmeti aracılığıyla bir ıonq veya Honeywell hisse bilgi Işlem hedefine Cirq hisse devreleri göndermek için paketini nasıl kullanacağınızı öğrenin. Daha fazla bilgi için bkz. hisse devreleri.
Önkoşullar
- Azure hisse 'ta çalışmak için bir Azure aboneliğine ihtiyacınız vardır. Azure aboneliğiniz yoksa ücretsiz bir hesap oluşturun.
- Bu senaryo için bir Azure hisse çalışma alanı oluşturun ve tercih ettiğiniz sağlayıcıyı, Honeywell veya ıonq (ya da her ikisi) etkinleştirin. Daha fazla bilgi için bkz. Azure hisse çalışma alanı oluşturma.
azure-quantum Python paketini yükleme
Python paketi, Azure Quantum çalışma alanına bağlanmak ve azure-quantum IonQ ve Honeywell gibi kuantum işlem hedeflerine kuantum devreleri göndermeye yönelik gerekli işlevleri içerir.
Henüz yüklememiş olması durumunda Python 3.6 veya sonraki bir sürümü yükleyin.
PIP'i yükleyin ve 19.2 veya daha yüksek bir sürüme sahip olduğundan emin olun.
İsteğe bağlı olarak, Miniconda veya Anaconda kullanıyorsanız, environment.yml dosyasını indirip aşağıdakini çalıştırarak yeni bir ortam oluşturun:
conda env create -f environment.ymlBu, aşağıdakilerle etkinleştiren yeni bir conda ortamı oluşturur:
conda activate azurequantumpip kullanarak
azure-quantumpaketi yükleyin. Bayrağını--upgradekullanarak en son sürümü edin emin olun.pip install --upgrade azure-quantum[cirq]sık kullanılan kod düzenleyicisini veya VS Code , Jupyter veya iPythongibi etkileşimli Python aracını başlatma.
Gerekli içeri aktarmaları yükleme
İlk olarak, gerekli içeri aktarmaları yüklemek için aşağıdaki hücreyi çalıştırın:
from azure.quantum.cirq import AzureQuantumService
Bağlan hizmetine Azure Quantum
Azure Quantum hizmetine bağlanmak için program, kaynak kimliğine ve kaynak çalışma alanınıza Azure Quantum gerekir. Azure hesabınızla oturum https://portal.azure.com açın, çalışma alanınıza Azure Quantum ve üst bilgiden değerleri kopyalayın.

Çalışma alanınıza bağlanan bir AzureQuantumService nesne oluşturmak için değerleri aşağıdaki service oluşturucuya Azure Quantum yapıştırın.
İsteğe bağlı olarak, bu durumda IonQ simülatöründe varsayılan bir hedef belirtsiniz:
service = AzureQuantumService(
resource_id="",
location="",
default_target="ionq.simulator"
)
Tüm hedefleri listele
Artık, geçerli kuyruk süresi ve kullanılabilirlik de dahil olmak üzere erişiminiz olan tüm hedefleri listelebilirsiniz.
print(service.targets())
[<Target name="ionq.qpu", avg. queue time=345 s, Available>,
<Target name="ionq.simulator", avg. queue time=4 s, Available>,
<Target name="honeywell.hqs-lt-s1", avg. queue time=0 s, Available>,
<Target name="honeywell.hqs-lt-s1-apival", avg. queue time=0 s, Available>,
<Target name="honeywell.hqs-lt-s2", avg. queue time=313169 s, Available>,
<Target name="honeywell.hqs-lt-s2-apival", avg. queue time=0 s, Available>,
<Target name="honeywell.hqs-lt-s1-sim", avg. queue time=1062 s, Available>]
Basit bir bağlantı hattı çalıştırma
Ardından, çalıştırmak için basit bir Sqq bağlantı hattı oluşturun. Bu bağlantı hattı, IonQ donanım sistemine özel 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────────
Artık programı Azure Quantum hizmeti aracılığıyla çalıştırabilirsiniz ve sonucu eldeabilirsiniz. Aşağıdaki hücre, devreyi 100 çekimle çalıştıran, iş tamam olana kadar bekler ve sonuçları döndüren bir iş (varsayılan IonQ simülatörüne) göndermenizi sağlar.
result = service.run(program=circuit, repetitions=100)
Bu bir nesnesi cirq.Result döndürür.
print(result)
b=1001100101100001000011011101000011010100010111100011001000100100010000001110010010101110110000011010, 1001100101100001000011011101000011010100010111100011001000100100010000001110010010101110110000011010
IonQ QPU üzerinde çalıştırma
Önceki iş varsayılan simülatörde ( üzerinde) "ionq.simulator" vardı. Ancak, IonQ'nun donanım işlemcisi (Kuantum İşlemcisi Birimi (QPU) üzerinde de çalıştırın. IonQ QPU üzerinde çalıştırmak için bağımsız değişken "ionq.qpu" olarak şu değeri target sağlar:
result = service.run(
program=circuit,
repetitions=100,
target="ionq.qpu",
timeout_seconds=500 # Set timeout to accommodate queue time on QPU
)
Bu da bir nesnesi cirq.Result döndürür.
print(result)
b=0101011011011111100001011101101011011110100010000000011110111000100100110110101100110001001111101111, 0101011011011111100001011101101011011110100010000000011110111000100100110110101100110001001111101111
İşler kullanılarak zaman uyumsuz model
Uzun süre çalışan bağlantı hatlarında bunları zaman uyumsuz olarak çalıştırmak yararlı olabilir.
yöntemi, service.create_job iş Job başarıyla çalıştırıldıktan sonra sonuçları almak için kullanabileceğiniz bir nesnesi döndürür.
job = service.create_job(
program=circuit,
repetitions=100,
target="ionq.simulator"
)
İş durumunu kontrol etmek için job.status() kullanın:
print(job.status())
'completed'
İş tamamlandıktan sonra 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 nesnesi cirq.Result oluşturmaz. 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 nesnesine cirq.Result dönüştürmek için result.to_cirq_result() kullanın:
print(result.to_cirq_result())
b=1110101111111110111000011101011111001100010000001011011101001111001111001101100111010000001100011100, 1110101111111110111000011101011111001100010000001011011101001111001111001101100111010000001100011100
azure-quantum Python paketini yükleme
azure-quantumPython paketi, bir Azure hisse çalışma alanına bağlanmak ve ıonq ve Honeywellgibi hisse bilgi işlem hedeflerine hisse devreleri göndermek için gerekli işlevleri içerir.
Henüz yapmadıysanız Python 3,6 veya üstünü yükleyebilirsiniz.
PIP 'yi yükleyip Sürüm 19,2 veya üzeri bir sürüme sahip olduğunuzdan emin olun.
İsteğe bağlı olarak, Miniconda veya Anacondakullanıyorsanız, Environment. yml dosyasını indirerek ve aşağıdakileri çalıştırarak yeni bir ortam oluşturun:
conda env create -f environment.ymlBu, aşağıdakiler ile etkinleştirebileceğiniz yeni bir Conda ortamı oluşturur:
conda activate azurequantumazure-quantumPaketi PIP kullanarak yükler.--upgradeEn son sürümü aldığınızdan emin olmak için bayrağını kullanın.pip install --upgrade azure-quantum[cirq]en sevdiğiniz kod düzenleyiciyi veya VS Code, jupyter veya ipythongibi etkileşimli Python aracını başlatın.
Gerekli içeri aktarmaları yükleme
İlk olarak, gerekli içeri aktarmaları yüklemek için aşağıdaki hücreyi çalıştırın:
from azure.quantum.cirq import AzureQuantumService
Azure hisse hizmeti Bağlan
Azure hisse hizmeti 'ne bağlanmak için, programınızın kaynak KIMLIĞI ve Azure hisse çalışma alanınızın konumu gereklidir. Azure hesabınızda oturum açın, https://portal.azure.com Azure hisse çalışma alanınıza gidin ve değerleri başlıktaki kopyalayın.

AzureQuantumService service Azure hisse çalışma alanınıza bağlanan bir nesne oluşturmak için değerleri aşağıdaki oluşturucuya yapıştırın.
İsteğe bağlı olarak, varsayılan bir hedef belirtin:
from azure.quantum.cirq import AzureQuantumService
service = AzureQuantumService(
resource_id="",
location="",
default_target="honeywell.hqs-lt-s1-apival"
)
Tüm hedefleri Listele
Artık geçerli kuyruk süresi ve kullanılabilirliği dahil olmak üzere erişiminiz olan tüm hedefleri listeleyebilirsiniz.
print(service.targets())
[<Target name="ionq.qpu", avg. queue time=345 s, Available>,
<Target name="ionq.simulator", avg. queue time=4 s, Available>,
<Target name="honeywell.hqs-lt-s1", avg. queue time=0 s, Available>,
<Target name="honeywell.hqs-lt-s1-apival", avg. queue time=0 s, Available>,
<Target name="honeywell.hqs-lt-s2", avg. queue time=313169 s, Available>,
<Target name="honeywell.hqs-lt-s2-apival", avg. queue time=0 s, Available>,
<Target name="honeywell.hqs-lt-s1-sim", avg. queue time=1062 s, Available>]
API doğrulayıcısı üzerinde basit bir devre çalıştırma
Not
Honeywell API doğrulayıcısı hedefi her zaman ölçümünde 0 döndürür.
Sonra, çalıştırmak için basit bir Cirq devresi oluşturun.
import cirq
q0, q1 = cirq.LineQubit.range(2)
circuit = cirq.Circuit(
cirq.H(q0), # Hadamard
cirq.CNOT(q0, q1), # CNOT
cirq.measure(q0, q1, key='b') # Measure both qubits
)
print(circuit)
0: ───H───@───M────────
│ │
1: ───────X───M────────
Artık programı Azure hisse hizmeti aracılığıyla çalıştırabilir ve sonucu elde edebilirsiniz. Aşağıdaki hücre, 100 görüntüsü ile devreyi ç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)
Bu bir cirq.Result nesne döndürür.
print(result)
b=0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
Sonuçları bir histogram halinde çizebilirsiniz:
pl.hist(result.data)
pl.ylabel("Counts")
pl.xlabel("Result")
Işleri kullanan zaman uyumsuz iş akışı
Uzun süre çalışan devrelere, bunları zaman uyumsuz olarak çalıştırmak yararlı olabilir.
service.create_jobYöntemi, Job iş başarıyla çalıştırıldıktan sonra sonuçları almak için kullanabileceğiniz bir nesnesini döndürür.
job = service.create_job(
program=circuit,
repetitions=100
)
İş durumunu denetlemek için şunu kullanın job.status() :
print(job.status())
'Waiting'
İşin tamamlanmasını beklemek ve sonra sonuçları almak için engelleme çağrısını kullanın job.results() :
result = job.results()
print(result)
{'m_b': ['00', '00', '00', '00', '00', '00', '00', '00', '00', '00', '00', '00', '00', '00', '00', '00', '00', '00', '00', '00', '00', '00', '00', '00', '00', '00', '00', '00', '00', '00', '00', '00', '00', '00', '00', '00', '00', '00', '00', '00', '00', '00', '00', '00', '00', '00', '00', '00', '00', '00', '00', '00', '00', '00', '00', '00', '00', '00', '00', '00', '00', '00', '00', '00', '00', '00', '00', '00', '00', '00', '00', '00', '00', '00', '00', '00', '00', '00', '00', '00', '00', '00', '00', '00', '00', '00', '00', '00', '00', '00', '00', '00', '00', '00', '00', '00', '00', '00', '00', '00']}
Bunun bir nesne döndürmediğini unutmayın cirq.Result . Bunun yerine, ölçüm anahtarı tarafından dizine alınmış bitstring ölçüm sonuçlarının bir sözlüğünü döndürür.