Uyarlamalı target profille hibrit kuantum bilgi işlem işleri çalıştırma
Karma bilgi işlem, karmaşık sorunları çözmek için klasik ve kuantum bilişim süreçlerini birleştirir.
Karma bilgi işlemde klasik kod, fiziksel kubitler etkin kalırken orta devre ölçümlerine göre kuantum işlemlerinin yürütülmesini denetler. Karmaşık sorunları çalıştırmak için tek bir kuantum programında iç içe geçmiş koşullular, döngüler ve işlev çağrıları gibi yaygın programlama tekniklerini kullanarak gereken çekim sayısını azaltabilirsiniz. Kubit yeniden kullanma teknikleriyle, daha büyük programlar daha az sayıda kubit kullanarak makinelerde çalıştırılabilir.
Bu makalede, profili kullanarak Azure Quantum'a karma işleri gönderme işlemi QIR Adaptive RItarget açıklanmaktadır. Uyarlamalı RI target profili, orta devre ölçümleri, ölçüm tabanlı denetim akışı, kubit sıfırlama ve klasik tamsayı hesaplama desteği sunar.
Ö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.
- Tek başına programlar göndermek Q# istiyorsanız aşağıdaki önkoşullara ihtiyacınız vardır:
- Azure Quantum Development Kit uzantısının yüklü olduğu Visual Studio Code.
- Azure Quantum Development Kit uzantısının en son sürümü.
- Python + Q# programları göndermek istiyorsanız aşağıdaki önkoşullara ihtiyacınız vardır:
Python ve Pip'in yüklü olduğu bir Python ortamı.
Azure Quantum
azure-quantum
veqsharp
paketleri.pip install --upgrade azure-quantum qsharp
Destekli targets
Hibrit kuantum bilişim işlerini çalıştırmak için Uyarlamalı RI target profilini destekleyen bir kuantum sağlayıcısı seçmeniz gerekir.
Şu anda Quantinuum'datargets Azure Quantum'daki uyarlamalı target profil desteklenmektedir.
Uyarlamalı RI işleri gönderme
Karma kuantum bilgi işlem işlerini göndermek için profili olarak yapılandırmanız target gerekir; burada RI , " ve Integer computations"qubit Reset anlamına QIR Adaptive RIgelir.
Profil, QIR Adaptive RItarget orta devre ölçümleri, ölçüm tabanlı denetim akışı, kubit sıfırlama ve klasik tamsayı hesaplama desteği sunar.
Hibrit kuantum işlerini Azure Quantum'a tek başına programlar veya Python + Q# programlar olarak Q# gönderebilirsiniz. Karma kuantum işleri için profili yapılandırmak target için aşağıdaki bölümlere bakın.
Visual Studio Code'da karma işler için profili yapılandırmak target için şu adımları izleyin:
- Visual Studio Code'da bir Q# program açın.
- Görünüm -> Komut Paleti'ni seçin ve şunu yazınQ#: Azure Quantum QIR target profilini ayarlayın. Enter'a basın.
- QIR Adaptive RI öğesini seçin.
Profil olarak target ayarladıktan QIR Adaptive RI sonra programınızı Q# karma kuantum işi olarak Quantinuum'a gönderebilirsiniz.
- Görünüm -> Komut Paleti'ne tıklayın ve şunu yazınQ#: Azure Quantum çalışma alanına bağlanın. Enter'a basın.
- Azure hesabı'nı seçin ve tercih ettiğiniz dizine, aboneliğe ve çalışma alanına bağlanmak için istemleri izleyin.
- Bağlandıktan sonra, Gezgin bölmesinde Kuantum Çalışma Alanları'nı genişletin.
- Çalışma alanınızı genişletin ve Quantinuum sağlayıcısını genişletin.
- Kullanılabilir targetquantinuum(quantinuum.sim.h1-1e) gibi herhangi bir Quantinuum seçin.
- Geçerli Q# programı göndermeye başlamak için adın target sağındaki yürüt simgesini seçin.
- İşi ve çekim sayısını belirlemek için bir ad ekleyin.
- İşi göndermek için Enter tuşuna basın. İş durumu ekranın en altında görüntülenir.
- İşler'i genişletin ve işinizin üzerine gelin ve işinizin zamanlarını ve durumunu görüntüleyin.
Desteklenen özellikler
Aşağıdaki tabloda, Azure Quantum'da Quantinuum ile hibrit kuantum bilişimi için desteklenen özellikler listelenmiştir.
Desteklenen özellik | Notlar |
---|---|
Dynamics değerleri | Değeri bir ölçüm sonucuna bağlı olan bools ve tamsayılar |
Döngüler | Yalnızca klasik sınırlanmış döngüler |
Rastgele denetim akışı | if/else dallanma kullanımı |
Orta devre ölçümü | Klasik yazmaç kaynaklarını kullanır |
Qubit yeniden kullanımı | Desteklenir |
Gerçek zamanlı klasik işlem | 64 bit işaretli tamsayı aritmetik Klasik yazmaç kaynaklarını kullanır |
QDK, seçilen targetiçin dil özellikleri desteklenmediğinde Q# özel geri bildirim sağlartarget. Programınız Q# karma kuantum işlerini çalıştırırken desteklenmeyen özellikler içeriyorsa, tasarım zamanında bir hata iletisi alırsınız. Daha fazla bilgi için QIR wiki sayfasına bakın.
Not
desteklemeyen özellikleri target kullanırken Q# uygun geri bildirim almak için uygun QIR Adaptive RItarget profili seçmeniz gerekir.
Desteklenen özellikleri çalışır durumda görmek için aşağıdaki kodu bir Q# dosyaya kopyalayın ve sonraki kod parçacıklarını ekleyin.
import Microsoft.Quantum.Measurement.*;
import Microsoft.Quantum.Math.*;
import Microsoft.Quantum.Convert.*;
operation Main() : Result {
use (q0, q1) = (Qubit(), Qubit());
H(q0);
let r0 = MResetZ(q0);
// Copy here the code snippets below to see the supported features
// in action.
// Supported features include dynamic values, classically-bounded loops,
// arbitrary control flow, and mid-circuit measurement.
r0
}
Quantinuum, ölçüm sonuçlarına bağlı olan bool'lar ve tamsayılar anlamına gelen dinamik bool'ları ve tamsayıları destekler. r0
Dinamik bool ve tamsayı değerleri oluşturmak için kullanılabilecek bir Result
tür olduğunu unutmayın.
let dynamicBool = r0 != Zero;
let dynamicBool = ResultAsBool(r0);
let dynamicInt = dynamicBool ? 0 | 1;
Quantinuum dinamik boolları ve tamsayıları destekler, ancak çift gibi diğer veri türleri için dinamik değerleri desteklemez. Dinamik değerlerin sınırlamalarıyla ilgili geri bildirimleri görmek için aşağıdaki kodu kopyalayın.
let dynamicDouble = r0 == One ? 1. | 0.; // cannot use a dynamic double value
let dynamicInt = r0 == One ? 1 | 0;
let dynamicDouble = IntAsDouble(dynamicInt); // cannot use a dynamic double value
let dynamicRoot = Sqrt(dynamicDouble); // cannot use a dynamic double value
Bazı veri türleri için dinamik değerler desteklenmese de, bu veri türleri statik değerlerle kullanılabilir.
let staticRoot = Sqrt(4.0);
let staticBigInt = IntAsBigInt(2);
Desteklenen türdeki dinamik değerler bile belirli durumlarda kullanılamaz. Örneğin Quantinuum, boyutu ölçüm sonucuna bağlı olan dinamik dizileri, yani dizileri desteklemez. Quantinuum dinamik olarak sınırlanmış döngüleri de desteklemez. Dinamik değerlerin sınırlamalarını görmek için aşağıdaki kodu kopyalayın.
let dynamicInt = r0 == Zero ? 2 | 4;
let dynamicallySizedArray = [0, size = dynamicInt]; // cannot use a dynamically-sized array
let staticallySizedArray = [0, size = 10];
// Loops with a dynamic condition are not supported by Quantinuum.
for _ in 0..dynamicInt {
Rx(PI(), q1);
}
// Loops with a static condition are supported.
let staticInt = 3;
for _ in 0..staticInt {
Rx(PI(), q1);
}
Quantinuum, hem statik hem de dinamik koşulları kullanarak dallanma da dahil olmak üzere if/else
denetim akışını destekler. Dinamik koşullarda dallanma, ölçüm sonuçlarına göre dallanma olarak da bilinir.
let dynamicInt = r0 == Zero ? 0 | 1;
if dynamicInt > 0 {
X(q1);
}
let staticInt = 1;
if staticInt > 5 {
Y(q1);
} else {
Z(q1);
}
Quantinuum, klasik koşullara ve ifadelere sahip if
döngüleri destekler.
for idx in 0..3 {
if idx % 2 == 0 {
Rx(ArcSin(1.), q0);
Rz(IntAsDouble(idx) * PI(), q1)
} else {
Ry(ArcCos(-1.), q1);
Rz(IntAsDouble(idx) * PI(), q1)
}
}
Quantinuum, ölçüm sonuçlarına göre dallanma gibi orta devre ölçümlerini destekler.
if r0 == One {
X(q1);
}
let r1 = MResetZ(q1);
if r0 != r1 {
let angle = PI() + PI() + PI()* Sin(PI()/2.0);
Rxx(angle, q0, q1);
} else {
Rxx(PI() + PI() + 2.0 * PI() * Sin(PI()/2.0), q1, q0);
}
Hibrit kuantum bilişim işinin maliyetini tahmin etme
Önce bir öykünücüde çalıştırarak Quantinuum donanımında hibrit kuantum bilgi işlem işini çalıştırmanın maliyetini tahmin edebilirsiniz.
Öykünücüde başarılı bir çalıştırmadan sonra:
- Azure Quantum çalışma alanınızda İş yönetimi'ne tıklayın.
- Gönderdiğiniz işi seçin.
- İş ayrıntıları açılır penceresinde Maliyet Tahmini'ni seçerek kaç eHQC (Quantinuum öykünücüsü kredisi) kullanıldığını görüntüleyin. Bu sayı, işi Quantinuum donanımında çalıştırmak için gereken HQC'lerin (Quantinuum kuantum kredileri) sayısına doğrudan çevrilir.
Not
Quantinuum tüm bağlantı hattının kaydını kaldırır ve koşullu olarak yürütülüp yürütülmediklerine bakılmaksızın tüm kod yollarında maliyeti hesaplar.
Hibrit kuantum bilgi işlem örnekleri
Aşağıdaki örnekler kod örnekleri deposunda bulunabilirQ#. Hibrit kuantum bilişimi için geçerli özellik kümesini gösterir.
Üç kubitli yineleme kodu
Bu örnek, bit çevirme hatalarını algılamak ve düzeltmek için kullanılabilecek üç kubitli bir yineleme kodunun nasıl oluşturulacağını gösterir.
Mantıksal kubit yazmacının durumu tutarlıyken hata düzeltmesinin kaç kez gerçekleştirildiğini saymak için tümleşik karma bilgi işlem özelliklerinden yararlanıyor.
Kod örneğini burada bulabilirsiniz.
Yinelemeli faz tahmini
Bu örnek program içinde Q#yinelemeli bir faz tahmini gösterir. Kubit ve ankilla kubit üzerinde target kodlanmış iki 2 boyutlu vektör arasındaki bir iç ürünü hesaplamak için yinelemeli faz tahmini kullanır. Ölçüm için kullanılan tek kubit olan ek bir denetim kubiti de başlatılır.
Bağlantı hattı, kubit ve ancilla kubit üzerindeki target vektör çiftini kodlayarak başlar. Ardından, $\ket +$ durumunda ayarlanan denetim kubitini denetleyen tüm yazmaç için bir Oracle işleci uygular. Denetlenen Oracle işleci, denetim kubitinin $\ket 1$ durumunda bir aşama oluşturur. Bu daha sonra ölçülürken fazı gözlemlenebilir hale getirmek için denetim kubitine bir H kapısı uygulanarak okunabilir.
Kod örneğini burada bulabilirsiniz.
Not
Bu örnek kod, Avustralya'daki KPMG Quantum ekibinin üyeleri tarafından yazılmıştır ve MIT Lisansı kapsamındadır. Genişletilmiş işlevlerini gösterir ve sınırlanmış döngüleri QIR Adaptive RItargets , çalışma zamanında klasik işlev çağrılarını, iç içe yerleştirilmiş if deyimlerini, orta devre ölçümlerini ve kubit yeniden kullanımını gösterir.