Aracılığıyla paylaş


Azure Quantum'da target farklı profil türleri

Kuantum cihazları hala yeni ortaya çıkan bir teknolojidir ve ne yazık ki bunların tümü her Q# programını çalıştıramayabilir. Bu nedenle, kuantum programları geliştirirken bazı kısıtlamaları göz önünde bulundurmanız gerekir. Profil target türleri, Q# programlarınızla birlikte kullanabileceğiniz target kuantum cihazlarının özelliklerini tanımlar. Microsoft Quantum Geliştirme Seti (QDK), Azure Quantum'da kullanılabilen geçerli kuantum cihazlarının tüm özelliklerini destekleyen farklı target profil türleri kümesine sahiptir.

Bu makalede Azure Quantum'daki farklı profil türleri target , bunların sınırlamaları ve bunların QDK'de nasıl yapılandırılacağı ele alınmaktadır.

Hedef profiller ve bunların sınırlamaları

Şu anda Azure Quantum ve QDK, target çalıştırma yeteneklerine bağlı olarak farklı QIR profilleri yönetmektedir.

  • Unrestricted: Bu profil, simülatörler için bellek sınırları veya fiziksel kuantum bilgisayarları için kubit sayısı içinde herhangi bir QIR programı ve dolayısıyla herhangi bir Q# programını çalıştırabilir.
  • Base: Bu profil, program akışını denetlemek için kubit ölçümlerinden elde edilecek sonuçların kullanılmasını gerektirmeyen herhangi bir Q# programını çalıştırabilir. Bu tür QPU için hedeflenen bir Q# programında, türündeki Result değerler eşitlik karşılaştırmasını desteklemez.
  • Adaptive RI: Bu profil, program akışını denetlemek için kubit ölçümlerinin sonuçlarını kullanma yeteneği sınırlıdır. Bu tür QPU için hedeflenen bir Q# programı içinde, işlemlerdeki deyimler içindeki Result koşulların bir parçası olarak tür if değerlerini karşılaştırabilir ve devre ortası ölçümüne olanak sağlayabilirsiniz.
  • Adaptive RIF: Bu profil, profille aynı özelliklere sahiptir, ancak kayan Adaptive RI nokta işlemlerini de destekler.

Profil için Unrestrictedtarget program oluşturma ve çalıştırma

Unrestricted target profiller tüm Q# programını çalıştırabilir, böylece işlev kısıtlamalarını göz önünde bulundurmanıza gerek kalmadan Q# kodu yazabilirsiniz. Azure Quantum, bu profili destekleyen gerçek bir cihaz targets sağlamaz. Ancak, QDK ile sağlanan simülatörlerde bu profile sahip Q# programlarını çalıştırabilirsiniz Unrestricted .

Profili yapılandırma Unrestrictedtarget

Profilinizi QIRtarget el ile ayarlamazsanız, derleyici profili sizin için otomatik olarak ayarlar target . Derleyici, programınızın seçtiğiniz Azure Quantum cihazında target çalışmasına izin veren en kısıtlayıcı profili seçer.

Profili el ile QIR olarak ayarlamak target için aşağıdaki seçeneklerden birini belirleyin:

  • Bir Q# projesi ayarlarsanız projenizin qsharp.json dosyasına aşağıdaki komutu ekleyin:

    {
      "targetProfile": "unrestricted"
    }
    
  • Q# projesinin parçası olmayan bir .qs dosyada çalışıyorsanız, profili doğrudan Q# kodunuzda ayarlayın target . Bunu yapmak için, bu işlem varsayılan @EntryPoint(Unrestricted)olduğunda bile programınızdaki giriş noktası işleminin hemen önüne ekleyinMain.

  • Python'da qdk.init yöntemini çağırarak target profilini ayarlayın.

    from qdk import init, TargetProfile
    
    init(target_profile=TargetProfile.Unrestricted) 
    

Profil için Basetarget program oluşturma ve çalıştırma

Base target profiller, program akışını denetlemek için kubit ölçümlerinden elde ettikleri sonuçları kullanamama kısıtlamasıyla çok çeşitli Q# uygulamaları çalıştırabilir. Daha açık belirtmek gerekirse, tür Result değerleri eşitlik karşılaştırmayı desteklemez.

Örneğin, bir FlipQubitOnZeroBase üzerinde aşağıdaki target işlemini çalıştıramazsınız:

    @EntryPoint(Base)
    operation FlipQubitOnZero() : Unit {
        use q = Qubit();
        if M(q) == Zero {
            X(q);
        }
    }

FlipQubitOnZero Cihaz kuantum algoritması çalışırken koşullu mantık gerçekleştirmek için kubit ölçümünün sonucunu kullanamadığından, bu kodu bir Basetargettarget üzerinde çalıştırdığınızda işlem başarısız olur. Bir Basetarget cihazda algoritmaları çalıştırmayı planlıyorsanız, kodunuzun mantıksal bir koşulu değerlendirmek için ölçülen kubitleri kullanan if için herhangi bir blok içermediğinden emin olun.

Profili yapılandırma Basetarget

Profili manuel olarak ayarlamak için QIRtargetBase aşağıdaki seçeneklerden birini belirleyin:

  • Bir Q# projesi ayarlarsanız projenizin qsharp.json dosyasına aşağıdaki komutu ekleyin:

    {
      "targetProfile": "base"
    }
    
  • Q# projesinin parçası olmayan bir .qs dosyada çalışıyorsanız, profili doğrudan Q# kodunuzda ayarlayın target . Bunu yapmak için, bu işlem varsayılan @EntryPoint(Base)olduğunda bile programınızdaki giriş noktası işleminin hemen önüne ekleyinMain.

  • Python'da qdk.init yöntemini çağırarak target profilini ayarlayın.

    from qdk import init, TargetProfile
    
    init(target_profile=TargetProfile.Base) 
    

targets Base target profili için desteklenir

Şimdilik Azure Quantum aşağıdakilere Basetargetserişim sağlar:

Provider Simülatör Kuantum İşlem Birimi (QPU)
IonQ ionq.simulator ionq.qpu.*
Rigetti rigetti.sim.* rigetti.qpu.*

Azure Quantum'da bu sağlayıcılar hakkında daha fazla bilgi edinmek için bkz. IonQ sağlayıcısı ve Rigetti sağlayıcısı.

Profil için Adaptive RItarget program oluşturma ve çalıştırma

Adaptive RI target profiller, profillere göre Base daha fazla Q# uygulaması çalıştırabilir, ancak bazı sınırlamaları vardır. Profillerden farklı olarak Basetarget , Adaptive RItargets devre içi ölçümleri destekler.

Orta devre ölçümleriyle kubitleri yalnızca uçta değil kuantum programının herhangi bir noktasında seçmeli olarak ölçebilirsiniz. Daha sonra, bloklarla if koşullu dallanma gibi programınızdaki diğer işlemler için ölçüm sonuçlarını kullanabilirsiniz. Orta devreyi ölçtüğünüz kubitler klasik duruma (sıfır veya bir) daraltılır, ancak ölçülmeyen kubitler kuantum durumunda kalır.

Q# dilinde bir kubit ölçtüyseniz, türünde Result bir değer döndürülür. Bu sonucu bir koşullu deyimde kullanmak istiyorsanız, koşullu deyimde doğrudan karşılaştırmanız gerekir. İlgili koşullu bloklar return veya set deyimlerini içermemelidir.

Örneğin, içinde Adaptive RItargetaşağıdaki Q# koduna izin verilir:

@EntryPoint(Adaptive_RI)
operation MeasureQubit(q : Qubit) : Result { 
    return M(q); 
}

operation SetToZero(q : Qubit) : Unit {
     if MeasureQubit(q) == One { X(q); }
}

Profili yapılandırma Adaptive RItarget

Profili manuel olarak ayarlamak için QIRtargetAdaptive RI aşağıdaki seçeneklerden birini belirleyin:

  • Bir Q# projesi ayarlarsanız projenizin qsharp.json dosyasına aşağıdaki komutu ekleyin:

    {
      "targetProfile": "adaptive_ri"
    }
    
  • Q# projesinin parçası olmayan bir .qs dosyada çalışıyorsanız, profili doğrudan Q# kodunuzda ayarlayın target . Bunu yapmak için, bu işlem varsayılan @EntryPoint(Adaptive_RI)olduğunda bile programınızdaki giriş noktası işleminin hemen önüne ekleyinMain.

  • Python'da qdk.init yöntemini çağırarak target profilini ayarlayın.

    from qdk import init, TargetProfile
    
    init(target_profile=TargetProfile.Adaptive_RI) 
    

targets Adaptive RI target profili için desteklenir

Şimdilik Quantinuum, Azure Quantum'da Adaptive RItargetsbulunan tek sağlayıcıdır.

  • Emulators:quantinuum.sim.h2-1e ve quantinuum.sim.h2-2e
  • QPU'lar:quantinuum.qpu.h2-1 ve quantinuum.qpu.h2-2

Quantinuum'un Azure Quantum'daki teklifleri hakkında daha fazla bilgi için bkz. Quantinuum Öykünücüleri.

Profil için Adaptive RIFtarget program oluşturma ve çalıştırma

Adaptive RIF target profiller, profillerin tüm özelliklerine sahiptir, ancak kayan Adaptive RI nokta hesaplamaları içeren Q# programlarını da destekler.

Örneğin, içinde Adaptive RIFtargetaşağıdaki Q# koduna izin verilir:

@EntryPoint(Adaptive_RIF)
operation DynamicFloat() : Double {
    use q = Qubit();
    H(q);
    mutable f = 0.0;
    if M(q) == One {
        f = 0.5;
    }
    Reset(q);
    return f;
}

Profili yapılandırma Adaptive RIFtarget

Profili manuel olarak ayarlamak için QIRtargetAdaptive RIF aşağıdaki seçeneklerden birini belirleyin:

  • Bir Q# projesi ayarlarsanız projenizin qsharp.json dosyasına aşağıdaki komutu ekleyin:

    {
      "targetProfile": "adaptive_rif"
    }
    
  • Q# projesinin parçası olmayan bir .qs dosyada çalışıyorsanız, profili doğrudan Q# kodunuzda ayarlayın target . Bunu yapmak için, bu işlem varsayılan @EntryPoint(Adaptive_RIF)olduğunda bile programınızdaki giriş noktası işleminin hemen önüne ekleyinMain.

  • Python'da qdk.init yöntemini çağırarak target profilini ayarlayın.

    from qdk import init, TargetProfile
    
    init(target_profile=TargetProfile.Adaptive_RIF) 
    

targets Adaptive RIF target profili için desteklenir

Şimdilik Azure Quantum henüz mevcut değil Adaptive RIFtargets. Ancak, QDK'daki yerel simülatörde için Adaptive RIFtargets programları çalıştırabilirsiniz.