Aracılığıyla paylaş


Etkileşimli kuantum bilişimi: oturumlar

Bu makalede, oturumlar olarak da bilinen etkileşimli kuantum bilişiminin mimarisi ve yeni bir oturumun nasıl oluşturulacağı açıklanmaktadır.

Bu hibrit kuantum bilişim modelinde istemci işlem kaynağı buluta taşınabilir ve bu da daha düşük gecikme süresine ve kuantum devresinin farklı parametrelerle yürütülmesini tekrarlama olanağına neden olabilir. İşler mantıksal olarak tek bir oturumda gruplandırılabilir ve bu oturumdaki işler, oturum dışı işlere göre önceliklendirilebilir. Kubit durumları işler arasında kalıcı olmasa da oturum, işler için daha kısa kuyruk sürelerine ve daha uzun çalışan sorunlara olanak tanır.

Etkileşimli kuantum bilişimi

Önkoşullar

Oturum oluşturmak için aşağıdaki önkoşullara ihtiyacınız vardır:

  • 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.

  • Python ve Pip'in yüklü olduğu bir Python ortamı.

  • Azure Quantum azure-quantum paketi. Qiskit veya Cirq kullanmak istiyorsanız paketi [qiskit] veya [cirq] etiketleriyle yüklemeniz azure-quantum gerekir.

    pip install --upgrade azure-quantum[qiskit] 
    

Oturum nedir?

Oturum, tek targetbir iş için gönderilen bir veya daha fazla işin mantıksal gruplandırılmasıdır. Her oturumun, bu oturumdaki her işe eklenmiş benzersiz bir kimliği vardır.

Oturumlar, kuantum işleri arasında klasik kod çalıştırma özelliğiyle birden çok kuantum bilgi işlem işini düzenlemenize olanak tanır. Tek tek kuantum bilişimi işlerinizi daha iyi düzenlemek ve izlemek için karmaşık algoritmalar çalıştırabileceksiniz.

Bir oturumdaki işleri birleştirmek isteyebileceğiniz önemli bir kullanıcı senaryosu, bir kuantum bilgi işlem işinin çıkışının bir sonraki kuantum bilgi işlem işinin parametrelerini bilgilendirdiği parametreleştirilmiş kuantum algoritmalarıdır. Bu algoritma türünün en yaygın örnekleri şunlardır Variational Quantum Eigensolvers : (VQE) ve Quantum Approximate Optimization Algorithms (QAOA).

Desteklenen donanım

Oturumlar şu anda IonQ, Quantinuum ve Rigetti gibi tüm kuantum bilgi işlem donanım sağlayıcılarında desteklenir. Bazı durumlarda, bir oturum içinde gönderilen işler, bu kuyruğunda targetönceliklendirilir. Daha fazla bilgi için bkz . Hedef davranışı.

Oturumları kullanmaya başlama

Oturumlar Python ile yönetilir ve , Qiskit ve Cirq programları dahil olmak üzere Q#tüm QIR kuantum programları için oluşturulabilir.

Bu örnekte, Visual Studio Code'da Jupyter Not Defteri kullanarak satır içi kodla Q# oturum oluşturma gösterilmektedir. Bitişik bir programı çağıran bir Python programı kullanarak oturumlar Q# da oluşturabilirsiniz.

Not

Oturumlar, satır içi kod çalıştırılırken Q# bile Python ile yönetilir.

  1. VS Code'da Komut paleti Görüntüle'yi > ve ardından Oluştur: Yeni Jupyter Not Defteri'ni seçin.

  2. Sağ üst kısımda VS Code, not defteri için seçilen Python sürümünü ve sanal Python ortamı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.

  3. Not defterinin ilk hücresinde komutunu çalıştırın

    import azure.quantum
    
    workspace = azure.quantum.Workspace(
        resource_id = "", # add your resource ID
        location = "", # add your location, for example "westus"
    )
    
  4. Not defterine yeni bir hücre eklemek ve Python SDK'sını içeri aktarmak qsharp için + Kod'a tıklayın.

    import qsharp
    
  5. İstediğiniz kuantumu target seçin. Bu örnekte IonQ simülatörünü olarak targetkullanıyorsunuz.

    target = workspace.get_targets("ionq.simulator")
    
  6. Profilin BaseAdaptive_RItarget, veya Unrestrictedyapılandırmalarını seçin.

    qsharp.init(target_profile=qsharp.TargetProfile.Base) # or qsharp.TargetProfile.Adaptive_RI, qsharp.TargetProfile.Unrestricted
    

    Not

    Adaptive_RItarget profil işleri şu anda Quantinuum üzerinde desteklenmektedir targets. Daha fazla bilgi için bkz . Tümleşik hibrit kuantum bilişimi.

  7. Programınızı Q# yazın. Örneğin, aşağıdaki Q# program rastgele bir bit oluşturur. Giriş bağımsız değişkenlerinin kullanımını göstermek için, bu program giriş olarak bir tamsayı, nve bir açı angledizisi alır.

    %%qsharp
    open Microsoft.Quantum.Measurement;
    open Microsoft.Quantum.Arrays;
    
    operation GenerateRandomBits(n: Int, angle: Double[]) : Result[] {
       use qubits = Qubit[n]; // n parameter as the size of the qubit array
       for q in qubits {
           H(q);
       }
       R(PauliZ, angle[0], qubits[0]); // arrays as entry-points parameters
       R(PauliZ, angle[1], qubits[1]);
       let results = MeasureEachZ(qubits);
       ResetAll(qubits);
       return results;
    }
    
  8. Ardından bir oturum oluşturacaksınız. İşlemi üç kez çalıştırmak GenerateRandomBit istediğinizi varsayalım; bu nedenle işlemi verilerle birlikte target göndermek Q# için kullanırsınız target.submit ve kodu üç kez yinelersiniz. Gerçek bir dünya senaryosunda, aynı kod yerine farklı programlar göndermek isteyebilirsiniz.

    angle = [0.0, 0.0]
    with target.open_session(name="Q# session of three jobs") as session:
        target.submit(input_data=qsharp.compile(f"GenerateRandomBits(2, {angle})"), name="Job 1", shots=100) # First job submission
        angle[0] += 1
        target.submit(input_data=qsharp.compile(f"GenerateRandomBits(2, {angle})"), name="Job 2", shots=100) # Second job submission
        angle[1] += 1
        target.submit(input_data=qsharp.compile(f"GenerateRandomBits(2, {angle})"), name="Job 3", shots=100) # Third job submission
    
    session_jobs = session.list_jobs()
    [session_job.details.name for session_job in session_jobs]
    

    Önemli

    Bağımsız değişkenler işe parametre olarak geçirilirken, çağrılırken qsharp.compileifadeye Q# biçimlendirilirler. Bu, bağımsız değişkenlerinizi nesne olarak Q# biçimlendirmeye dikkat etmeniz gerektiği anlamına gelir. Bu örnekte, Python'daki diziler zaten [item0, item1, ...] olarak yazdırıldığından, giriş bağımsız değişkenleri biçimlendirmeyle Q# eşleşir. Diğer Python veri yapılarında, içine eklenen Q# dize değerlerini uyumlu bir şekilde almak için daha fazla işlemeye ihtiyacınız olabilir.

  9. Oturum oluşturduktan sonra, oturumdaki tüm işlerin listesini almak için kullanabilirsiniz workspace.list_session_jobs . Daha fazla bilgi için bkz . Oturumları yönetme.

İzleme oturumları

Kuantum çalışma alanınızdaki İş yönetimi dikey penceresini kullanarak oturumlar ve herhangi bir oturumla ilişkilendirilmeyen tek tek işler de dahil olmak üzere en üst düzey gönderilen tüm öğeleri görüntüleyebilirsiniz.

  1. Kuantum çalışma alanınızda İş yönetimi dikey penceresini seçin.
  2. Oturum türündeki işleri tanımlayın. Bu görünümde, bir Oturumun Benzersiz Kimliğini sütun kimliğinde görebilir ve Durumunu izleyebilirsiniz. Oturumun durumları şunlardır:
    • Bekleme: Oturumdaki işler yürütülüyor.
    • Başarılı: Oturum başarıyla sona erdi.
    • Zaman Aşımı: Oturumda 10 dakika boyunca yeni bir iş gönderilmezse, bu oturum zaman aşımına uğradı. Daha fazla bilgi için bkz . Oturum zaman aşımları.
    • Başarısız: Oturumdaki bir iş başarısız olursa, bu oturum sona erer ve Başarısız durumunu bildirir. Daha fazla bilgi için bkz . Oturumlar içinde iş hatası ilkesi.
  3. Diğer ayrıntılar için oturumun adına tıklayın.
  4. Oturumdaki Tüm işler listesini görebilir ve durumlarını izleyebilirsiniz.

Hedef davranış

Her kuantum donanım sağlayıcısı, bir oturumdaki işlerin öncelik belirlemesini en iyi şekilde yönetmek için kendi buluşsal yöntemlerini tanımlar.

Quantinuum

Bir oturum içindeki işleri Quantinuum'a targetgöndermeyi seçerseniz, işleri birbirlerinden bir dakika içinde kuyruğa eklediğiniz sürece oturumunuzun donanıma özel erişimi olur. Bundan sonra işleriniz kabul edilir ve standart kuyruğa alma ve öncelik belirleme mantığıyla işlenir.