NVIDIA CUDA-Q 0.12, araştırmacıların kuantum uygulamalarını geliştirmelerini hızlandırmak ve yüksek performanslı kuantum donanımları tasarlamalarını sağlamak için yeni simülasyon araçları sunuyor.
Yeni run API’si ile kullanıcılar, bir simülasyonun bireysel çalışmaları (veya “shot” olarak adlandırılan denemeleri) hakkında daha fazla detaylı istatistiki veri alabiliyorlar. Bu, araştırmacılar için gürültü korrelasyonu analizi, sonuç ön seçimleri, hassas devre testleri gibi birçok kullanım durumu için kritik öneme sahip. Böylece kullanıcılar yalnızca simülasyonların toplam istatistiksel çıktılarına bağlı kalmak zorunda kalmıyorlar.
0.12 sürümü ayrıca CUDA-Q dynamics backend için ek özellikler de içeriyor. Bu, kullanıcıların kuantum sistemlerinin evrimlerini simüle etmelerini sağlıyor ve kuantum donanımlarının geliştirilmesi için önemli bir yetenek sunuyor. Bu sürüm, daha iyi multidiagonal seyrek matris desteği ve durumlar ile operatörlerin gruplandırılmasını ekleyerek dinamik teknikleri ölçeklendirmelerine olanak tanıyor. CUDA-Q Dynamics ayrıca genel super-operator denklemlerini desteklemeye başladı ve bu sayede araştırmacılara daha fazla esneklik sunuyor.
CUDA-Q, açık kaynaklı bir projedir ve bu sürüm, unitaryHACK etkinliğinden topluluk katkılarını da içermektedir. Ayrıca Python 3.13 desteği de sağlanmıştır. Bu yazı, bu yeni özelliklerin bazılarını detaylı olarak açıklamaktadır. Daha fazla bilgi için, CUDA-Q 0.12 sürüm notları‘na göz atabilirsiniz.
Yazılım Geliştirmeyi Kolaylaştırma
CUDA-Q, kuantum klasik uygulamaların yazılmasını desteklemek için sıfırdan tasarlanmıştır. Bu, QPUs, GPUs ve CPUs senkronizasyonunu sağlamak için bir çekirdek programlama modeli kullanır. Kuantum cihazında çalışacak mantık, kuantum çekirdekleri içinde kapsüllenmiştir. Kullanıcılar, çekirdeklerini çalıştırmanın çeşitli yollarını bulabilirler. Bunlardan biri, çekirdek içindeki qubitlerin ölçüm sayılarının toplu istatistiklerini döndüren sample API’sidir.
Örneğin, üç qubit alan ve onlara GHZ durumu uygulayan bir çekirdek için sample çağrısı yapmak, belirli bir sayı olan 1.000 deneme ile yapılan ölçümlerin nasıl dağıldığını gösteren istatistikleri döndürür: { 000:492 111:508 }. GHZ durumu için beklediğimiz üzere, 000 ve 111 sonuçları yaklaşık eşit bir olasılıkla gözlemlenir. Ancak, her bir deneme hakkında daha fazla detay öğrenmek mümkün değildir.
import cudaq
@cudaq.kernel
def simple_ghz(num_qubits: int) -> int:
qubits = cudaq.qvector(num_qubits)
# GHZ durumu oluştur
h(qubits[0])
for i in range(1, num_qubits):
x.ctrl(qubits[0], qubits[i])
result = 0
for i in range(num_qubits):
if mz(qubits[i]):
result += 1
return result
shots = 20 # basitlik için az sayıda deneme kullanıyoruz
sample_results = cudaq.sample(simple_ghz, 3, shots_count=shots)
print(f"Örnek sonuçlar: {sample_results}")
run_results = cudaq.run(simple_ghz, 3, shots_count=shots)
print(f"Çalıştır sonuçları: {run_results}")
$ python3 test.py
Örnek sonuçlar: { 000:11 111:9 }
Çalıştır sonuçları: [0, 3, 0, 0, 0, 0, 3, 0, 0, 3, 3, 3, 3, 3, 0, 3, 0, 3, 3, 3]
Sample API’sinin aksine, run API’si her bir denemenin geri dönüş değerlerini korur ve bu durum uygulamanın dönen sonuçların dağılımını incelemesi gerektiğinde çok faydalıdır. Run ile çekirdekler daha ifade edici olabilir ve belirli qubitlerin koşullu ölçümlerini gerçekleştirebilir. Bu çekirdeklerin dönüş değeri açık olacaktır ve Python veri sınıfları gibi birden fazla veri türünü içerebilir.
Ayrıca run‘un senkronizasyonlu versiyonu run_async, uzun süren işlemler için kullanışlıdır. Şu anda run ve run_async yalnızca simülasyon backend’leri için desteklenmektedir. Daha fazla bilgi ve kod örnekleri için CUDA-Q belgeleri‘ne göz atabilirsiniz.
Dinamikte Daha İyi Performans Elde Etme
CUDA-Q dynamics backend, kuantum dinamik sistemlerin tasarımını, simülasyonunu ve yürütülmesini sağlar. 0.12 sürümü, bu backend’e birçok geliştirme eklemektedir.
Önceden, sistem dinamikleri yalnızca Hamiltonyen operatörü ve çöküş operatörleri ile belirtilen Lindblad ana denklemi ile sınırlıydı. Şimdi kullanıcılar, herhangi bir rastgele durum evrim denklemini simüle edebiliyorlar ve evrimi genel super-operator olarak belirtebiliyorlar. Bir super-operator, operatör örneklerinin sol ve/veya sağ çarpan eylemlerinin lineer kombinasyonu olarak inşa edilebilir.
Güncellenmiş destek, multidiagonal seyrek matrislerle de sağlanmıştır. Operatör matrisinin seyrekliği veya alt sistem boyutuna bağlı olarak, CUDA-Q, optimal performans için yoğun veya multidiagonal veri formatlarını otomatik olarak kullanacaktır.
CUDA-Q evolve API’si, birden fazla başlangıç durumunu ve birden fazla Hamiltonyeni zaman içinde evrimleştirebilir. 0.12 sürümüyle hem durumlar hem de Hamiltonyenler, birden fazla GPU‘da gruplandırılabilir. Bu, çoğu küçük özdeş sistem dinamiğini simüle ederken performansı önemli ölçüde artırabilir. Çöküş operatörleri ve süper-operatörler de benzer şekilde gruplandırılabilir.
Örneğin, elektrikle sürülen bir silikon spin qbitinin dinamik simülasyonu, amplitüt değerleri parametre taraması içerir. Amplitüt değerleri için ayrı Hamiltonyenler oluşturmak amacıyla gruplama yöntemi kullanılabilir. Aşağıda, 1.024 farklı parametre değeri ile bir Hamiltonyen grubu oluşturma süreci yer almaktadır:
# Amplitütleri tarama
amplitudes = np.linspace(0.0, 0.5, 1024)
# Her amplitüt için Hamiltonyen operatörleri oluştur
batched_hamiltonian = []
for amplitude in amplitudes:
# Elektrik dipol spin rezonansı (`EDSR`) Hamiltonyeni
H = 0.5 * resonance_frequency * spin.z(0) + amplitude * ScalarOperator(
lambda t: 0.5 * np.sin(resonance_frequency * t)) * spin.x(0)
# Hamiltonyeni gruplu listeye ekleyin
# Bu, tüm amplitütler için dinamikleri tek bir simülasyon çağrısında hesaplamamızı sağlar
batched_hamiltonian.append(H)
Ve bunu tek bir evolve çağrısında kullanmak için:
results = cudaq.evolve(
batched_hamiltonian,
dimensions,
schedule,
psi0,
observables=[boson.number(0)],
collapse_operators=[],
store_intermediate_results=cudaq.IntermediateResultSave.EXPECTATION_VALUE,
integrator=ScipyZvodeIntegrator())
Bu örneği farklı grup boyutları ile bir NVIDIA H100 GPU üzerinde çalıştırarak, farklı parametre değerlerinde elde edilen sonuçlar için sürelerin grafiksel gösterimi Şekil 1‘de sunulmaktadır. Birden fazla Hamiltonyen gruplandıkça, toplam çalışma süresi azalır. 1.024 Hamiltonyenin tamamını tek bir evolve çağrısı ile çalıştırmak, gruplama yapılmadığında sağlanan süreye göre 18 kat hız artışı göstermektedir.

Daha fazla detay ve kod örnekleri için CUDA-Q belgeleri‘ni inceleyebilirsiniz.
unitaryHACK Topluluk Katkıları
unitaryHACK, açık kaynak kuantum bilgisayar yazılım projesi hackathonudur. Unitary Foundation tarafından düzenlenmekte olup, açık kaynak projelerine destek veren bir sivil toplum kuruluşudur. NVIDIA, bu etkinliğin bir sponsoruydu ve CUDA-Q ile ilgili beş ödül sunarak, aşağıdaki üç topluluk katkısını teşvik etti.
- Gopal-Dahale, tuzağa düşmüş iyonlarla GHZ durumu hazırlamayı gösteren bir kod örneği ekledi. Bu örnek, Çoklu Parçacık Karşıtlığı İlkesi başlıklı makaleye dayanmaktadır.
- ACE07-Sev, MPS Sıralı Kodlama Kullanarak Yaklaşık Durum Hazırlama başlıklı bir eğitim ekledi. Bu yöntem, karmaşık bir giriş durumunu kuantum donanımında çalıştırmak için faydalıdır. Matriks ürün durumu ile önceden belirlenmiş durum vektörünü böler.
- Randl, kuantum çekirdeği ile ilişkili matris alma işleminin ilk uygulamasını ekledi. Bu yeni API, sağlanan çekirdek yolunun birim matrisini döndürmektedir.
CUDA-Q, açık kaynaklı bir proje olup topluluk katkılarını yıl boyunca kabul etmektedir. Daha fazla bilgi için, NVIDIA/cuda-quantum‘un GitHub sayfasını ziyaret edebilirsiniz.
CUDA-Q ile Başlamaya Hazırlanın
CUDA-Q ile tanışmak ve başlangıç yapmak için CUDA-Q Hızlı Başlangıç‘ı ziyaret edin. CUDA-Q uygulamaları ve dynamics örnekleri keşfedin; ayrıca ekiple NVIDIA/cuda-quantum GitHub reposunda iletişim kurabilirsiniz. Hızlandırılmış kuantum süperbilgisayarları sağlamak için diğer araçlar hakkında bilgi almak için ise NVIDIA Quantum’ı kontrol edebilirsiniz.