Q# programlarını ve Visual Studio Code kullanmaya başlama

Bu makalede, VS Code kullanarak Q#, Jupyter Notebook veya Python kuantum bilişim işlerini oluşturmak ve Azure Quantum'a göndermek için VC Code'u kullanma adımlarını bulacaksınız.

Q# işlerini Azure Quantum'a gönderme

Azure Quantum'da bir Q# programı çalıştırmak, hatalarını ayıklamak ve göndermek için VS Code'u kullanmayı öğrenin.

Önkoşullar

Yükleme ayrıntıları için bkz . VS Code'da Modern QDK'yi yükleme.

Q# örnek programını yükleme

  1. VS Code'da Dosya > Yeni Metin Dosyası'nı seçin ve dosyayı RandomNum.qs olarak kaydedin.

  2. RandomNum.qs dosyasını açın ve yazınsample, ardından seçenek listesinden Rastgele Bit örneği'ni seçin ve dosyayı kaydedin.

    dosyada örnek sözcüğü yazılırken kod örneklerinin listesini gösteren Visual Studio Code Q# dosyasının ekran görüntüsü.

Not

Kendi Q# dosyanızı da açabilirsiniz. Eski bir Q# programını çalıştırır ve hatayla karşılaşırsanız bkz . Test etme ve hata ayıklama veya Programlarınızı Modern QDK'ye geçirme.

Q# programı çalıştırma

  1. Programınızı yerleşik simülatörde yerel olarak çalıştırmak için, aşağıdaki @EntryPoint()komut listesinde Çalıştır'a tıklayın veya Ctrl+F5 tuşlarına basın. Çıkışınız hata ayıklama konsolunda görünür.

  2. Programınızı Azure Quantum'a göndermeden önce hata ayıklamak için aşağıdaki @EntryPoint()komut listesinden Hata Ayıkla'ya tıklayın veya F5 tuşuna basın. Kodun üzerine, içine ve dışına çıkmak için üstteki hata ayıklama denetimlerini kullanın. Q# programlarının hatalarını ayıklama hakkında daha fazla bilgi için bkz . Test etme ve hata ayıklama.

    çalıştırma ve hata ayıklama komutlarıyla kod merceğinin nerede bulunacağı Visual Studio Code Q# dosyasının ekran görüntüsü.

Sıklık histogramını görselleştirme

Sıklık histogramı, bir kuantum programını birden çok kez çalıştırmaktan elde edilen sonuçların dağılımını veya "çekimleri" temsil eder. Histogramdaki her çubuk olası bir sonuca karşılık gelir ve yüksekliği sonucun kaç kez gözlemlendiğini gösterir. Sıklık histogramı, bu sonuçların olasılık dağılımını görselleştirmeye yardımcı olur.

  1. Görünüm -> Komut Paleti'ni seçin ve Q#: Dosyayı çalıştır ve histogramı göster seçeneğini gösteren "histogram" yazın. Histogram'a aşağıdaki @EntryPoint()komut listesinden de tıklayabilirsiniz. Q# histogram penceresini açmak için bu seçeneği belirleyin.

    histogram komutuyla kod merceğinin bulunacağı yeri gösteren Visual Studio Code Q# dosyasının ekran görüntüsü.

  2. Programı yürütmek için 100 çekim gibi bir dizi çekim girin ve Enter tuşuna basın. Histogram, Q# histogram penceresinde görüntülenir.

  3. Seçenekleri görüntülemek için sol üst ayarlar simgesine tıklayın.

    Ayarların nasıl görüntüleneceğini gösteren Visual Studio Code Q# histogram penceresinin ekran görüntüsü.

  4. Bu sonucun yüzdesini görüntülemek için bir çıtaya tıklayın. Bu durumda 0 ve 1 olmak üzere iki olası sonuç vardır ve her sonucun yüzdesi %50'ye yakındır.

    Visual Studio Code'daki Q# histogram penceresinin ekran görüntüsü.

İpucu

Fare kaydırma tekerleğini veya izleme yüzeyi hareketini kullanarak histogramı yakınlaştırabilirsiniz. Yakınlaştırdığınızda, kaydırırken 'Alt' tuşuna basarak grafiği kaydırabilirsiniz.

Kuantum devresini görselleştirme

Kuantum devresi diyagramları, kuantum işlemlerinin görsel bir gösterimidir. Kubitlerin, kendilerine uygulanan geçitler ve ölçümler de dahil olmak üzere kuantum programı aracılığıyla akışını gösterirler. Daha fazla bilgi için bkz. Visual Studio Code kuantum devresi diyagramları.

  1. Görünüm -> Komut Paleti'ni seçin ve Q#: Bağlantı hattını göster seçeneğini ortaya çıkarması gereken "devre" yazın. Ayrıca, aşağıdaki @EntryPoint()komut listesinden Devre'ye tıklayabilirsiniz.

    kod merceği bağlantı hattı komutunun nerede bulunacağı Visual Studio Code Q# dosyasının ekran görüntüsü.

  2. Bağlantı hattı Q# bağlantı hattı penceresinde görüntülenir. Devre diyagramı, |0⟩ durumuna başlatıldığı bir kubit yazmaç gösterir. Ardından kubite bir Hadamard kapısı ( H) uygulanır ve ardından ölçüm simgesiyle temsil edilen bir ölçüm işlemi uygulanır. Daha fazla bilgi için bkz . Kuantum devreleri kuralları.

    Rastgele bit işlemi için sonuçta elde edilen devre diyagramını gösteren Q# devre penceresinin ekran görüntüsü.

Azure Quantum'a bağlanma ve işinizi gönderme

İşleri doğrudan VS Code'dan bağlayabilir ve gönderebilirsiniz. Bu örnekte Rigetti simülatörüne bir iş göndereceksiniz.

  1. Görünüm -> Komut Paleti'ne tıklayın ve Q#: Azure Quantum çalışma alanına bağlanma yazın. Enter tuşuna basın.

  2. Azure hesabı'nı seçin ve tercih ettiğiniz dizine, aboneliğe ve çalışma alanına bağlanmak için istemleri izleyin.

    Not

    bağlantı dizesi varsa Bağlantı dizesi'ni seçip Azure Quantum çalışma alanınıza karşılık gelen bağlantı dizesi yapıştırabilirsiniz. Daha fazla bilgi için bkz. bağlantı dizesi kullanarak Kuantum çalışma alanına bağlanma.

  3. Bağlandıktan sonra , Gezgin bölmesinde Kuantum Çalışma Alanları'nı genişletin.

  4. Çalışma alanınızı genişletin ve Rigetti sağlayıcısını genişletin.

    Not

    Azure Quantum'a bağlanırken bir sorun varsa, çalışma alanı adının yanında bir uyarı simgesi görüntülenir. Hata bilgilerini görüntülemek için çalışma alanı adının üzerine gelin.

  5. olarak rigetti.sim.qvmtargetöğesini seçin.

    Olarak targetRigetti simülatörünü seçmeyi gösteren Visual Studio Code ekran görüntüsü.

  6. Geçerli Q# programını göndermeye başlamak için adın target sağındaki oynat simgesini seçin. Bir açılır pencere alırsanız QIR target profilini değiştir'i seçin ve devam edin.

    Rigetti simülatörünü olarak targetçalıştırmayı gösteren Visual Studio Code ekran görüntüsü.

  7. İşi tanımlamak için bir ad ekleyin.

  8. Çekim sayısını veya programın kaç kez çalıştırıldığını ekleyin.

  9. İşi göndermek için Enter tuşuna basın. İş durumu ekranın en altında görüntülenir.

  10. İşler'i genişletin ve işinizin saatlerini ve durumunu görüntüleyen işinizin üzerine gelin.

  11. Sonuçları görüntülemek için iş adının yanındaki bulut simgesini seçerek çalışma alanı depolama alanınızdan sonuçları indirin ve VS Code'da görüntüleyin.

    Kuantum işinizin sonuçlarını indirmeyi ve görüntülemeyi gösteren Visual Studio Code ekran görüntüsü.

Jupyter Notebooks işlerini Azure Quantum'a gönderme

Azure Quantum'da Q# Jupyter Notebook çalıştırmak, hatalarını ayıklamak ve göndermek için VS Code'u kullanmayı öğrenin. Bu makaledeki adımlar yerel Jupyter sunucunuzdaki Jupyter Not Defterleri veya Azure Quantum portalındaki not defterleri için de geçerlidir.

Önkoşullar

Yükleme ayrıntıları için bkz . VS Code'da Modern QDK'yi yükleme.

Programınızı yerel simülatörde çalıştırma ve test etme

  1. VS Code'da Komut paleti Görüntüle'yi > seçin ve İçerik Oluşturucu: Yeni Jupyter Notebook'yi 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ğ üst kısımdaki çekirdek seçiciyi kullanarak bir çekirdek seçmeniz gerekebilir. Ortam algılanmadıysa kurulum bilgileri için VS Code'da Jupyter Notebooks bölümüne bakın.

  3. Not defterinin ilk hücresinde aşağıdaki Python kodunu çalıştırarak gerekli modülleri içeri aktarın:

    import qsharp
    import azure.quantum
    
    • Modül, qsharp Q# kodunu doğrudan bir hücreye girmenizi sağlayan sihirli komutu etkinleştirir %%qsharp .
    • Modül, azure-quantum Azure Quantum çalışma alanınıza bağlantı sağlar.

    Not

    Jupyter Python çekirdeği ipykernel algılanmazsa VS Code sizden bunu yüklemenizi ister.

  4. Başka bir hücre ekleyin ve kullanıcı tarafından belirtilen sayıda rastgele bit döndüren bu Q# kodunu girin:

    Not

    magic komutunu %%qsharpyazdığınız anda not defteri hücresinin Python'danQ# türüne değiştiğine dikkat edin.

    %%qsharp
    
    operation Random() : Result {
        use q = Qubit();
        H(q);
        let result = M(q);
        Reset(q);
        return result
    }
    
    operation RandomNBits(N: Int): Result[] {
        mutable results = [];
        for i in 0 .. N - 1 {
            let r = Random();
            set results += [r];
        }
        return results
    }
    
  5. İşleminizi test etmek için, daha önce not defterinde tanımlanan herhangi bir Q# işlemini çağırabilen yöntemini kullanabilirsiniz eval :

    qsharp.eval("RandomNBits(4)")
    
    [Zero, One, One, Zero]
    
  6. Programınızı yerel simülatörde çalıştırmak için yöntemini kullanın run . shotsProgramı çalıştırmak için değerini veya kaç kez çalıştırılacağını belirtin; simülatör sonuçları Python listesi olarak döndürür.

    qsharp.run("RandomNBits(4)", shots=10)
    
    [[One, One, One, One],
    [Zero, Zero, One, Zero],
    [One, Zero, Zero, One],
    [Zero, One, Zero, Zero],
    [One, Zero, One, One],
    [One, Zero, One, Zero],
    [One, One, One, Zero],
    [One, One, One, One],
    [Zero, Zero, Zero, One],
    [One, Zero, Zero, One]]
    

Kuantum devresini görselleştirme

Paketini kullanarak qsharp-widgets kuantum devrelerini görselleştirebilirsiniz. Bu paket, kuantum devresi diyagramını SVG görüntüsü olarak işleyen bir pencere öğesi sağlar. Daha fazla bilgi için bkz . Jupyter Notebooks ile kuantum devresi diyagramları.

Bağlantı hattını görselleştirmek için yeni bir hücreye aşağıdaki kodu ekleyin:

from qsharp_widgets import Circuit

Circuit(qsharp.circuit("RandomNBits(4)"))

Q# işlemi için bağlantı hattını görselleştirmeyi gösteren Jupyter Notebook ekran görüntüsü.

Daha fazla bilgi için bkz . Kuantum devreleri kuralları.

Temel profili kullanarak işinizi derleme

Programları yerel kuantum simülatöründe çalıştırdığınızda, her tür Q# programını gönderebilirsiniz. Ancak Azure Quantum donanımı targets henüz tüm Q# programlarını çalıştırmak için gereken tüm özellikleri desteklememektedir. Q# programlarını derlemek ve Azure Quantum'a göndermek için, profilinizi donanımınızın targettarget hangi özellikleri desteklediğini Q# ile bildirecek şekilde ayarlamanız gerekir. Şu anda bu, Temel profildir. Daha fazla bilgi için bkz. Azure Quantum'da profil türleri.

Q# yorumlayıcısını yeniden başlatıp programınızı temel profille derlemek için:

  1. init Profili ayarlamak için yöntemini kullanın:

    qsharp.init(target_profile=qsharp.TargetProfile.Base)
    
  2. Yorumlayıcıyı yeniden başlatmış olduğunuzdan kodunuzu yeni profille yeniden çalıştırmanız gerekir:

    %%qsharp
    
    operation Random() : Result {
        use q = Qubit();
        H(q);
        let result = M(q);
        Reset(q);
        return result
    }
    
    operation RandomNBits(N: Int): Result[] {
        mutable results = [];
        for i in 0 .. N - 1 {
            let r = Random();
            set results += [r];
        }
        return results
    }
    
  3. Ardından, programınızın giriş noktası olan işlemi veya işlevi belirtmek için yöntemini kullanın compile . Bu, kodunuzu QIR biçiminde derler ve daha sonra herhangi bir kuantum donanımına gönderilebilir:

    MyProgram = qsharp.compile("RandomNBits(4)")
    

Azure Quantum'a bağlanma ve işinizi gönderme

Programınızı doğru biçimde derlediğinize göre, Azure Quantum'a bağlanmak için bir azure.quantum.Workspace nesne oluşturun. Bağlanmak için Azure Quantum çalışma alanınızın Kaynak Kimliğini kullanacaksınız. Kaynak Kimliği ve konum, Azure portal çalışma alanınızın genel bakış sayfasından kopyalanabilir.

  1. Yeni bir hücrede, Azure Quantum çalışma alanınızdan kaynak kimliğinizi ve konumunuzu doldurun:

    MyWorkspace = azure.quantum.Workspace(
        resource_id = "MyResourceID",
        location = "MyLocation"
    )
    
  2. get_targets Çalışma alanınızdaki kullanılabilir donanımı targets görmek için yöntemini kullanın:

    MyTargets = MyWorkspace.get_targets()
    print("This workspace's targets:")
    MyTargets
    
  3. öğesini rigetti.sim.qvmtargetseçin:

    MyTarget = MyWorkspace.get_targets("rigetti.sim.qvm")
    
  4. Son olarak, programınızı parametreleriyle göndermek ve sonuçları görüntülemek için yöntemini kullanın submit :

    job = MyTarget.submit(MyProgram, "MyQuantumJob", shots=100)
    job.get_results()
    
    {'Histogram': ['[0, 0, 0, 0]',
      0.3,
      '[1, 0, 0, 0]',
      0.1,
      '[1, 1, 1, 1]',
      0.3,
      '[0, 1, 1, 1]',
      0.3]}
    
  5. İşin tüm özelliklerine uygulamasından job.detailserişilebilir, örneğin:

    print(job.details)
    print("\nJob name:", job.details.name)
    print("Job status:", job.details.status)
    print("Job ID:", job.details.id)
    
    {'additional_properties': {'isCancelling': False}, 'id': '0150202e-9638-11ee-be2f-b16153380354', 'name': 'MyQuantumJob', 'provider_id': 'rigetti'...}
    Job name: MyQuantumJob
    Job status: Succeeded
    Job ID: 0150202e-9638-11ee-be2f-b16153380354
    

Q# işleriyle Python'ı Azure Quantum'a gönderme

Q# işlemlerini çağıran bir Python programı yazmak, Python komutlarını veya Azure CLI'yı kullanarak Azure'a bağlanmak ve işinizi göndermek için VS Code kullanmayı öğrenin.

Önkoşullar

Yükleme ayrıntıları için bkz . VS Code'da Modern QDK'yi yükleme.

Q# işlemlerinizi İçerik Oluşturucu ve içeri aktarma

Paketi kullanarak qsharp işlevlerinizi ve işlemlerinizi Q# dosyalarında depolayabilir ve Python kodunuzdan herhangi birine çağrı yapmanızı sağlayan Q# projeleri oluşturabilirsiniz. Bu özellikle giriş parametrelerini alan bir program başlatmanız gerektiğinde yararlıdır.

  1. Q# projesi oluşturmak için adımları izleyin.

  2. Yeni bir metin dosyası açın, kullanıcı tarafından belirtilen sayıda rastgele bit döndüren aşağıdaki Q# kodunu ekleyin ve dosyayı projenize olarak source.qskaydedin.

    Not

    Bu Q# kodunun Q# programı gibi bir @EntryPoint işlevi olmadığını unutmayın (bkz. Q# işlerini Azure Quantum'a gönderme), ancak Jupyter Notebook farklı olarak bir ad alanı gerektirir (bkz. Jupyter Notebook işleri Azure Quantum'a gönderme).

    namespace Sample {
    
      operation Random() : Result {
            use q = Qubit();
            H(q);
            let result = M(q);
            Reset(q);
            return result
      }
    
      operation RandomNBits(N: Int): Result[] {
            mutable results = [];
            for i in 0 .. N - 1 {
               let r = Random();
               set results += [r];
            }
            return results
      }
    }
    
  3. Aynı klasörde başka bir dosya açın ve olarak randomNum.pykaydedin.

  4. ve azure.quantum modüllerini içeri aktarmak qsharp için aşağıdaki kodu ekleyin.

    import qsharp
    import azure.quantum
    
  5. Ardından, Q# proje kök klasörünü tanımlamak için kod ekleyin ve işlemi yerel simülatörde test target edin. İşlem ad alanı> tarafından< çağrılır.<operation_name( )> ve bu durumda, döndürülecek rastgele bit sayısını geçiriyorsunuz.

    qsharp.init(project_root = '/MyProjectRootFolder')
    print(qsharp.eval("Sample.RandomNBits(4)"))
    
    [Zero, One, One, Zero]
    
  6. Ayrıca ek bir parametre geçiren ve sonuçları python shots listesinde döndüren yöntemiyle run işlemi test edebilirsiniz. içinde randomNum.py, önceki print deyimini aşağıdakilerle değiştirin:

    result = qsharp.run("Sample.RandomNBits(4)", shots=10)
    for x in result:
        print(x)
    
    [[One, One, One, One],
    [Zero, Zero, One, Zero],
    [One, Zero, Zero, One],
    [Zero, One, Zero, Zero],
    [One, Zero, One, One],
    [One, Zero, One, Zero],
    [One, One, One, Zero],
    [One, One, One, One],
    [Zero, Zero, Zero, One],
    [One, Zero, Zero, One]]
    
  7. Komutunu çalıştırarak qsharp.circuit(entry_expr) kuantum devresini görselleştirebilir ve girdi ifadesini bağımsız değişken olarak geçirebilirsiniz. Daha fazla bilgi için bkz . Kuantum devreleri kuralları.

    result = qsharp.circuit("Sample.RandomNBits(4)")
    

    Kuantum devresinin ekran görüntüsü.

Temel profili kullanarak işinizi derleme

Programları yerel kuantum simülatöründe çalıştırdığınızda, her tür Q# programını gönderebilirsiniz. Ancak Azure Quantum donanımı targets henüz tüm Q# programlarını çalıştırmak için gereken tüm özellikleri desteklememektedir. Q# programlarını derlemek ve Azure Quantum'a göndermek için, profilinizi donanımınızın targettarget hangi özellikleri desteklediğini Q# ile bildirecek şekilde ayarlamanız gerekir. Şu anda bu, Temel profildir. Daha fazla bilgi için bkz. Azure Quantum'da profil türleri.

Not

YALNıZCA VS Code'daki Q# programları için VS Code, Temel profili otomatik olarak ayarlar.

  1. init Profili ayarlamak için yöntemini kullanın:

    qsharp.init(target_profile=qsharp.TargetProfile.Base)
    
  2. Ardından, programınıza giriş noktası olan işlemi veya işlevi belirtmek için yöntemini kullanın compile . Derlenen program daha sonra herhangi bir kuantum donanımına gönderilebilir:

    MyProgram = qsharp.compile("Sample.RandomNBits(4)")
    

Azure Quantum'a bağlanma ve işinizi gönderme

Azure Quantum'a bağlanıp Python tarafından oluşturulan Workspace bir nesne kullanarak işinizi gönderebilir veya Azure CLI kullanarak bağlanıp gönderebilirsiniz. Azure CLI'yı kullanmak için derlenmiş programı bir metin dosyası olarak kaydetmeniz ve cli komutu kullanarak bu dosyayı göndermeniz gerekir.

Programınızı doğru biçimde derlediğinize göre, Azure Quantum'a bağlanmak için bir azure.quantum.Workspace nesne oluşturun. Bağlanmak için Azure Quantum çalışma alanınızın Kaynak Kimliğini kullanacaksınız. Kaynak Kimliği ve konum, Azure portal çalışma alanınızın genel bakış sayfasından kopyalanabilir.

  1. Azure Quantum çalışma alanınızdan kaynak kimliğinizi ve konumunuzu doldurarak öğesine aşağıdaki kodu randomNum.pyekleyin:

    workspace = azure.quantum.Workspace(
        resource_id = "MyResourceID",
        location = "MyLocation"
    )
    
  2. get_targets Çalışma alanınızda kullanılabilir donanımı targets görüntülemek için yöntemini kullanın:

    MyTargets = workspace.get_targets()
    print("This workspace's targets:")
    for x in MyTargets:
        print(x)
    
  3. öğesini rigetti.sim.qvmtargetseçin:

    MyTarget = workspace.get_targets("rigetti.sim.qvm")
    
  4. Son olarak, programınızı parametreleriyle göndermek için yöntemini kullanın submit . İş sonuçları python sözlüğü olarak döndürülür.

    job = MyTarget.submit(MyProgram, "MyPythonJob", shots=100)
    results = job.get_results()
    print("\nResults: ", results)
    
  5. Yalnızca değerleri ayıklamak ve görüntülemek için:

    resultList = results.get("Histogram")
    for x in resultList:
        print(x)
    
    [0, 0, 0, 0]
    0.3
    [1, 0, 0, 0]
    0.1
    [1, 1, 1, 1]
    0.3
    [0, 1, 1, 1]
    0.3
    
  6. İşin tüm özelliklerine uygulamasından job.detailserişilebilir, örneğin:

    print(job.details)
    print("\nJob name:", job.details.name)
    print("Job status:", job.details.status)
    print("Job ID:", job.details.id)
    
    {'additional_properties': {'isCancelling': False}, 'id': '0fc396d2-97dd-11ee-9958-6ca1004ff31f', 'name': 'MyPythonJob', 'provider_id': 'rigetti'...}
    Job name: MyPythonJob
    Job status: Succeeded
    Job ID: fc396d2-97dd-11ee-9958-6ca1004ff31f
    

Sonraki adımlar