Oturumlarla başlayın

Oturumlar, birden çok kuantum bilgi işlem işini birlikte gruplandırmanıza olanak sağlayan hibrit kuantum bilişiminin önemli bir özelliğidir. Oturum, tek bir target öğesine gönderdiğiniz 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, birden çok kuantum bilgi işlem işini sırayla çalıştırmak ve kuantum işleri arasında klasik kod çalıştırmak istediğinizde kullanışlıdır.

Bu makalede hibrit kuantum bilişimindeki oturumların mimarisi ve 'de Azure Quantumyeni bir oturumun nasıl oluşturulacağı açıklanmaktadır.

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

  • Çalışma Azure Quantum alanı. Daha fazla bilgi için bkz. Çalışma alanı oluşturmaAzure Quantum.

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

  • En son Visual Studio CodeVS Code) sürümü, QDK, Python ve Jupyter yüklü.

  • Kitaplık qdkPython . Qiskit ve Cirq programlarını göndermek için azure, qiskit ve cirq ekstralarını yükleyin.

    pip install --upgrade "qdk[azure,qiskit,cirq]" 
    

Oturum nedir?

Oturumlarda, daha düşük gecikme süresi ve kuantum programınızı farklı parametrelerle birden çok kez çalıştırabilmek için istemci işlem kaynağını buluta taşıyabilirsiniz. İşleri mantıksal olarak tek bir oturumda gruplandırabilir ve bu oturumdaki işlerin önceliğini oturum dışı işlere göre ayarlayabilirsiniz. Kubit durumları işler arasında kalıcı olmaz, ancak bir oturumdaki işler daha kısa kuyruk sürelerine sahiptir. Daha kısa kuyruk süreleri, tek tek kuantum bilgi işlem işlerinizi daha iyi düzenlemek ve izlemek için karmaşık algoritmalar çalıştırmanızı sağlar.

Oturumlar, bir kuantum bilişim işinin çıktısının bir sonraki kuantum bilişim işi için giriş parametrelerini tanımlamak için kullanıldığı parametreleştirilmiş kuantum algoritmaları için kullanışlı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 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 targetkuyruğunda önceliklendirilir. Daha fazla bilgi için bkz . Hedef davranışı.

Oturum oluşturma

Oturum oluşturmak için şu adımları izleyin:

Bu örnek, Q# içindeki bir Jupyter not defterinde VS Code satır içi kodla bir oturum nasıl oluşturulacağını gösterir.

Not

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

  1. içinde VS CodeGörünüm menüsünü açın ve Komut Paleti'ni seçin.

  2. Yeni oluşturun: Jupyter Notebook yazın ve seçin.

  3. Sağ üst köşede, VS Code not defteri için seçilen sanal Python ortamını ve Python sürümü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. Eğer herhangi bir envanter algılanmadıysa, kurulum bilgileri için Jupyter Notebook'ya bakın.VS Code.

  4. Not defterinin ilk hücresinde aşağıdaki kodu çalıştırın:

    from qdk.azure import Workspace
    
    workspace = Workspace(resource_id="") # add your resource ID
    
  5. Not defterine yeni bir hücre ekleyin ve paketi içeri aktarın qsharpPython :

    from qdk import qsharp
    
  6. Kuantumunuzu targetseçin. Bu örnekte, targetIonQ simülatörüdür.

    target = workspace.get_targets("ionq.simulator")
    
  7. target profilinin yapılandırmalarını seçin; ya Base, Adaptive_RI veya Unrestricted.

    qsharp.init(target_profile=qsharp.TargetProfile.Base)
    

    Not

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

  8. 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
    import Std.Measurement.*;
    import Std.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;
    }
    
  9. Ardından bir oturum oluşturacaksınız. İşlemi GenerateRandomBit üç kez çalıştırmak istediğinizi varsayalım; bu nedenle target.submit işlemi Q# verilerle birlikte target göndermek için kullanırsınız ve bu kodu üç kez yinelersiniz. Gerçek bir dünya senaryosunda, aynı kodu tekrarlamak 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şkenleri işe parametre olarak geçirdiğinizde, bağımsız değişkenler çağrıldığında Q# ifadeye qsharp.compile biçimlendirilir. Bu, bağımsız değişkenlerinizi nesne olarak Q# biçimlendirmeniz gerektiği anlamına gelir. Bu örnekte, Python içindeki diziler zaten [item0, item1, ...] olarak yazdırılmış olduğundan, giriş bağımsız değişkenleri Q# biçimlendirmesiyle 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.

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

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 oturumdaki işleri Quantinuum'a targetgöndermeyi seçerseniz, işleri bir dakika içinde sıraya aldığınız 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.