target Kaynak Tahmin Aracı'nın parametrelerini özelleştirme
Bu makalede, Azure Quantum Kaynak Tahmin Aracı'nın parametrelerini hedeflediğiniz makine özellikleriyle eşleşecek şekilde nasıl özelleştirebileceğiniz target gösterilmektedir. Kaynak Tahmin Aracı, kuantum bilgisayarda kuantum algoritması çalıştırmak için gereken kaynakları tahmin etmek için bu parametreleri kullanır.
Not
Kaynak Tahmin Aracı ile çalışırken herhangi bir sorunla karşılaşırsanız Sorun Giderme sayfasına göz atın.
Önkoşullar
Python ve Pip'in yüklü olduğu bir Python ortamı.
Visual Studio Code'un en son sürümü veya Vs Code'un Web'de açılması.
Azure Quantum Geliştirme Seti, Python ve Jupyter uzantılarının yüklü olduğu VS Code.
En son Azure Quantum
qsharp
veqsharp-widgets
paketleri.python -m pip install --upgrade qsharp qsharp-widgets
Target Parametre
Kaynak Tahmin Aracı, belirli bir kubit teknolojisini kullanarak ve sabit bir mimari seçenek kümesiyle belirli bir kuantum algoritması uygulamak için gerekli olan kubit sayısı ve çalışma süresi gibi kaynakların tahminini hesaplar.
Bu nedenle Kaynak Tahmin Aracı, kolayca kullanmaya başlamanızı sağlamak için önceden tanımlanmış değerler içeren bir dizi giriş alır:
- Temel alınan fiziksel kubitlerin özelliklerini tanımlayan fiziksel kubit modeli.
- Varsayılan kuantum hata düzeltme düzeni olan Kuantum Hata Düzeltmesi (QEC) şeması.
- Genel olarak izin verilen hata olan bir hata bütçesi, yani programın başarısız olması için izin verilen süre.
- Mantıksal döngü sayısı ve T fabrika kopyalarının sayısı olan bileşen düzeyindeki kısıtlamalar.
- T fabrikaları damıtma algoritmalarını belirtmek için damıtma birimleri .
- Aynı algoritma için kubit sayısı ve çalışma zamanı için birden fazla tahmin çalıştırmak için Pareto sınır tahmini .
İpucu
Bir işlem için önceden hesaplanmış bazı tahminleri zaten biliyorsanız bunları birleştirebilir ve Kaynak Tahmin Aracı'nın yürütülmesini iyileştirebilirsiniz. Daha fazla bilgi için bkz . Kaynak Tahmin Aracı ile bilinen tahminleri kullanma.
Fiziksel kubit parametreleri
Kaynak Tahmin Aracı fiziksel kubit varsayımlarını modellediğinde, kubitleri çalıştırmak için iki farklı fiziksel yönerge kümesi kullanır. Fiziksel yönerge kümesi, geçit tabanlı veya Majorana olabilir. Geçit tabanlı yönerge kümesi tek kubitli ölçüm, tek kubitli geçitler (T geçitleri dahil) ve iki kubitli geçitler sağlar. Majorana yönerge kümesi fiziksel T kapısı, tek kubitli ölçüm ve iki kubitli ortak ölçüm işlemleri sağlar.
Dört tane kapı tabanlı yönerge kümesi ve ikisi Majorana yönerge kümesine sahip olmak üzere önceden tanımlanmış altı kubit parametresi arasından seçim yapabilirsiniz. Bu kubit modelleri çeşitli işlem sürelerini ve hata oranlarını kapsar ve pratik kuantum uygulamalarını etkinleştirmek için gereken kaynak maliyetlerinin yeterince araştırılmasını sağlar.
Qubit parametresi | Python API sınıfı | Açıklama |
---|---|---|
"qubit_gate_ns_e3" , "qubit_gate_ns_e4" |
GATE_NS_E3 , GATE_NS_E4 |
İşlem süreleri ve aslına uygunluklar, süper iletken transmon kubitlerinin gelecekteki sürümlerine veya genellikle nanosaniye rejiminde işlem sürelerine sahip olan spin kubitlerine karşılık gelebilir. Bu kubitler için geçit ve ölçüm işlemlerinin sırasıyla 50 ns ve 100 ns olduğu varsayılır. Tek kubitli ve iki kubitli kapı hata oranlarının gerçekçi targetolarak $10^{-3}$ ve ölçeklendirilmiş bir sistem için iyimser target olarak $10^{-4}$ olduğu varsayılır. |
"qubit_gate_us_e3" , "qubit_gate_us_e4" |
GATE_US_E3 , GATE_US_E4 |
İşlem süreleri ve aslına uygunlukları, genellikle mikrosaniye rejiminde operasyon süreleri olan iyonları temel alan kubitlerin gelecekteki sürümlerine karşılık gelebilir. İyon kubitleri için tipik varsayımlara göre, geçit ve ölçüm işlemlerinin 100 μs olduğu varsayılır. Tek kubitli Clifford geçitleri için hata oranı gerçekçi target olarak $10^{-3}$ ve iyimser targetolarak $10^{-4}$ olurken, Tek kubitli clifford olmayan geçitler (T kapısı) için hata oranı $10^{-6}$'tır. İki kubitli geçitler için hata oranı gerçekçi target olarak $10^{-3}$ ve iyimser targetolarak $10^{-4}$ olur. |
"qubit_maj_ns_e4" , "qubit_maj_ns_e6" |
MAJ_NS_E4 , MAJ_NS_E6 |
İşlem süreleri ve uygunlukları, Majorana kubitlerinin gelecekteki geliştirilmiş sürümlerine karşılık gelebilir. Bu kubitler için geçit ve ölçüm işlemlerinin 100 ns olduğu varsayılır. Donanımda topolojik korumayı hesaba katmak için, tek kubitli ve iki kubitli ortak ölçüm hata oranlarının (Clifford hata oranları) gerçekçi targetolarak $10^{-4}$ ve iyimser targetolarak $10^{-6}$ olduğu varsayılır. Bu mimarideki Clifford dışı işlemlerin topolojik koruması yoktur, Clifford olmayan fiziksel T geçitleri için hata oranı %5'tir. |
Not
Başka bir değer belirtilmediği sürece kubit modelinin varsayılan değeri şeklindedir "qubit_gate_ns_e3"
.
Önceden tanımlanmış kubit parametreleri için parametreler
Başvuru için, önceden tanımlanmış kubit parametrelerinin tamamı aşağıdaki gibidir:
{
"qubitParams": {
"name": "qubit_gate_ns_e3",
"instructionSet": "GateBased",
"oneQubitMeasurementTime": "100 ns",
"oneQubitGateTime": "50 ns",
"twoQubitGateTime": "50 ns",
"tGateTime": "50 ns",
"oneQubitMeasurementErrorRate": 1e-3,
"oneQubitGateErrorRate": 1e-3,
"twoQubitGateErrorRate": 1e-3,
"tGateErrorRate": 1e-3
}
}
{
"qubitParams": {
"name": "qubit_gate_ns_e4",
"instructionSet": "GateBased",
"oneQubitMeasurementTime": "100 ns",
"oneQubitGateTime": "50 ns",
"twoQubitGateTime": "50 ns",
"tGateTime": "50 ns",
"oneQubitMeasurementErrorRate": 1e-4,
"oneQubitGateErrorRate": 1e-4,
"twoQubitGateErrorRate": 1e-4,
"tGateErrorRate": 1e-4
}
}
{
"qubitParams": {
"name": "qubit_gate_us_e3",
"instructionSet": "GateBased",
"oneQubitMeasurementTime": "100 µs",
"oneQubitGateTime": "100 µs",
"twoQubitGateTime": "100 µs",
"tGateTime": "100 µs",
"oneQubitMeasurementErrorRate": 1e-3,
"oneQubitGateErrorRate": 1e-3,
"twoQubitGateErrorRate": 1e-3,
"tGateErrorRate": 1e-6
}
}
{
"qubitParams": {
"name": "qubit_gate_us_e4",
"instructionSet": "GateBased",
"oneQubitMeasurementTime": "100 µs",
"oneQubitGateTime": "100 µs",
"twoQubitGateTime": "100 µs",
"tGateTime": "100 µs",
"oneQubitMeasurementErrorRate": 1e-4,
"oneQubitGateErrorRate": 1e-4,
"twoQubitGateErrorRate": 1e-4,
"tGateErrorRate": 1e-6
}
}
{
"qubitParams": {
"name": "qubit_maj_ns_e4",
"instructionSet": "Majorana",
"oneQubitMeasurementTime": "100 ns",
"twoQubitJointMeasurementTime": "100 ns",
"tGateTime": "100 ns",
"oneQubitMeasurementErrorRate": 1e-4,
"twoQubitJointMeasurementErrorRate": 1e-4,
"tGateErrorRate": 0.05
}
}
{
"qubitParams": {
"name": "qubit_maj_ns_e6",
"instructionSet": "Majorana",
"oneQubitMeasurementTime": "100 ns",
"twoQubitJointMeasurementTime": "100 ns",
"tGateTime": "100 ns",
"oneQubitMeasurementErrorRate": 1e-6,
"twoQubitJointMeasurementErrorRate": 1e-6,
"tGateErrorRate": 0.01
}
}
Önceden tanımlanmış kubit parametrelerini geçirme
Program aracılığıyla önceden tanımlanmış kubit parametrelerini belirtmenin iki yolu vardır. komutunu çalıştırırken qsharp.estimate
sınıfı için qubitParams
kubit modeli adını seçebilirsiniz. Örneğin, kubit parametresini seçmek "qubit_maj_ns_e6"
için şunu yazın:
qsharp.estimate("RunProgram()", params=
{"qubitParams": {
"name": "qubit_maj_ns_e6"
},
})
Ayrıca kullanarak kubit parametrelerini sınıfına EstimatorParams
QubitParams
geçirebilirsiniz. Örneğin, kubit parametresini seçmek MAJ_NS_E6
için şunu yazın:
from qsharp.estimator import EstimatorParams, QubitParams
params = EstimatorParams()
params.qubit_params.name = QubitParams.MAJ_NS_E6 # qubit_maj_ns_e6 qubit parameter
qsharp.estimate("RunProgram()", params=params)
Önceden tanımlanmış kubit parametrelerini özelleştirme
Önceden tanımlanmış kubit parametrelerini, adı belirtip diğer değerlerden herhangi birini güncelleştirerek özelleştirebilirsiniz. Örneğin, "qubit_maj_ns_e4" içinde iki kubitli birleştirme ölçümünün hata oranını azaltmak için şunu yazın:
qsharp.estimate("RunProgram()", params=
{"qubitParams": {
"name": "qubit_maj_ns_e4",
"twoQubitJointMeasurementErrorRate": 1e-5,
},
})
İsterseniz, yönergeleri liste biçiminde de geçirebilirsiniz.
from qsharp.estimator import EstimatorParams, QubitParams
params = MicrosoftEstimatorParams()
params.qubit_params.name = QubitParams.MAJ_NS_E4
params.qubit_params.two_qubit_joint_measurement_error_rate = 1e-5
Geçit tabanlı kubitler için Kubit parametreleri
Python tanımlayıcısı | Veri türü | Açıklama |
---|---|---|
name |
Dize | Kubit modelinin adı |
instruction_set |
"gate_based" | Temel kubit teknolojisi |
one_qubit_measurement_time |
zaman dizesi | Ns cinsinden tek kubitli ölçüm ($t_{\rm meas}$) için işlem süresi |
one_qubit_gate_time |
zaman dizesi | Ns cinsinden tek kubitli kapı ($t_{\rm gate}$) için işlem süresi |
two_qubit_gate_time |
zaman dizesi | ns olarak iki kubitli kapı için işlem süresi |
t_gate_time |
zaman dizesi | Ns olarak Clifford olmayan tek kubitli kapı için işlem süresi |
one_qubit_measurement_error_rate |
kayan noktalı sayı | Tek kubitli ölçüm için hata oranı |
one_qubit_gate_error_rate |
kayan noktalı sayı | Tek kubitli Clifford kapısı ($p$) için hata oranı |
two_qubit_gate_error_rate |
kayan noktalı sayı | İki kubitli Clifford kapısı için hata oranı |
t_gate_error_rate |
kayan noktalı sayı | Clifford olmayan tek kubitli durumu ($p_T$) hazırlamak için hata oranı |
idle_error_rate |
kayan noktalı sayı | Aylaklık için karşılık gelen hata oranı |
Aşağıdaki kod, geçit tabanlı yönerge kümesi için özel kubit parametrelerinin nasıl belirtileceğini gösterir:
from qsharp.estimator import EstimatorParams, QubitParams,
params = EstimatorParams()
params.qubit_params.name = "your_custom_name"
params.qubit_params.instruction_set = "gate_based"
params.qubit_params.t_gate_error_rate = 0.03
params.qubit_params.t_gate_time = "10 ns"
params.qubit_params.idle_error_rate = 0.02
Not
Belirtilmediğinde, için ve varsayılan değerleritwo_qubit_gate_time
, için ve t_gate_error_rate
varsayılan one_qubit_gate_error_rate
değerleri two_qubit_gate_error_rate
ile varsayılan idle_error_rate
değeri olarak one_qubit_measurement_error_rate
one_qubit_gate_time
belirlenir.t_gate_time
Majorana kubitleri için kubit parametreleri
Python tanımlayıcısı | Veri türü | Açıklama |
---|---|---|
name |
Dize | Kubit modelinin adı |
instruction_set |
"majorana" | Temel kubit teknolojisi |
one_qubit_measurement_time |
zaman dizesi | Ns cinsinden tek kubitli ölçüm ($t_{\rm meas}$) için işlem süresi |
two-qubit_joint_measurement_time |
zaman dizesi | n cinsinden iki kubitli ölçüm için işlem süresi |
t_gate_time |
zaman dizesi | Ns olarak Clifford olmayan tek kubitli kapı için işlem süresi |
one_qubit_measurement_error_rate |
kayan noktalı sayı | Tek kubitli ölçüm için hata oranı |
two_qubit_joint_measurement_error_rate |
kayan noktalı sayı | İki kubitli ölçüm için hata oranı |
t_gate_error_rate |
kayan noktalı sayı | Clifford olmayan tek kubitli durumu ($p_T$) hazırlamak için hata oranı |
idle_error_rate |
kayan noktalı sayı | Aylaklık için karşılık gelen hata oranı |
Tüm gerekli değerleri içeren Majorana tabanlı yönerge kümesi için en düşük şablon:
from qsharp.estimator import EstimatorParams, QubitParams,
params = EstimatorParams()
params.qubit_params.name = "your_custom_name"
params.qubit_params.instruction_set = "majorana"
params.qubit_params.one_qubit_measurement_time = "10 ns"
params.qubit_params.one_qubit_measurement_error_rate = 0.01
Not
Belirtilmediğinde, için ve varsayılan değerleritwo_qubitJointMeasurementTime
, için ve t_gate_error_rate
varsayılan one_qubit_measurement_error_rate
değerleri two_qubit_joint_measurement_error_rate
ile varsayılan idle_error_rate
değeri olarak one_qubit_measurement_error_rate
one_qubit_measurement_time
belirlenir.t_gate_time
ve two_qubit_joint_measurement_error_rate
içinone_qubit_measurement_error_rate
, ölçüm okumalarınareadout
, ve ölçüm işlemeye process
karşılık gelen hata oranlarını belirtebilirsiniz. Bu değerler sayı veya sayı çifti olabilir <double>
. Örneğin:
params.qubit_params.two_qubit_joint_measurement_error_rate = \
MeasurementErrorRate(process=0.00005, readout=0.00007)
Not
Majorana kubit ölçümünde tek kubit ve iki kubit hata oranları için tek bir sayısal değer belirtirseniz, hem okuma hem de işlem hata oranları eşit olabilir.
Önemli
Belirtilmeyen tüm değerler varsayılan bir değer alır, örneğin belirtme işlemi, "qubit": {"oneQubitGateTime":"200 ns"}
hem iki kubitli kapı zamanının hem de tek kubitli kapı süresinin 200 ns olduğu bir geçit tabanlı kubit modelleyecek. Birimler için, çift duyarlıklı kayan nokta sayıları olan zaman dizelerini ve ardından bir boşluk ve bu tür değerler için zaman birimini belirtmeniz gerekir; burada olası zaman sonekleri , µs
(veya us
), ms
ve s
olurns
.
Kuantum hata düzeltme düzenleri
Pratik ölçekli kuantum uygulamalarını yürütmek için kuantum işlemleri düşük hata oranlarına sahip olmalıdır. Bu hata oranı targets genellikle ham fiziksel kubitlerin özelliklerinin ötesindedir. Bu sınırlamayı aşmak için kuantum hata düzeltmesi (QEC) ve hataya dayanıklı hesaplama, büyük ölçekli kuantum bilgisayarların yapı taşları oluşturan iki önemli tekniktir. İlk olarak, QEC birden çok hataya açık fiziksel kubit oluşturmamıza ve kuantum bilgilerini temel alınan fiziksel kubitlerden daha iyi koruyan daha güvenilir bir mantıksal kubit oluşturmamıza olanak tanır.
Kaynak Tahmin Aracı, üstel bir model kullanarak mantıksal hata oranlarını modellemek için aşağıdaki formülü kullanır.
$$ P = a\left(\frac{p}{p^*}\right)^{\frac{d+1}{2}} $$
burada $a$ bir geçiş ön faktörüdür, $d$ kod uzaklığıdır, $p$ fiziksel hata oranıdır ve $p^*$ kuantum hata düzeltme eşiğidir. Çapraz ön faktör $a$ simülasyonlar için sayısal olarak ayıklanabilir.
$d$ kod uzaklığı, düzeltilebilen hata sayısını denetleen bir parametredir. Bu nedenle, kod uzaklığı mantıksal kubitlerin hata oranını ve bunları kodlamak için gereken fiziksel kubit sayısını tanımlar. Kod uzaklığı ile hem doğruluk hem de fiziksel kubit sayısı artar. QEC şemasının amacı, belirli bir uygulama için ayarlanan gerekli hata oranına ulaşabilecek en düşük kod uzaklığı bulmaktır.
$p$ fiziksel hata oranı, kubit parametrelerinden, cihazda gerçekleştirilen fiziksel Clifford işleminin en kötü durum hata oranı olarak ayıklanır. Özellikle, geçit tabanlı yönerge kümesine sahip kubit parametreleri için $p = {}$ max(one_qubit_measurement_error_rate
, one_qubit_gate_error_rate
, two_qubit_gate_error_rate
), Majorana yönerge kümesine sahip kubit parametreleri için $p = {}$ max(one_qubit_measurement_error_rate
, two_qubit_joint_measurement_error_rate
) . QEC düzenleri genellikle hata düzeltmenin hataları gizlediği^*$ $p bir hata oranı eşiğine sahiptir.
Azure Quantum Kaynak Tahmin Aracı önceden tanımlanmış iki QEC şemasını destekler: bir yüzey kodu ve bir floquet kodu.
QEC protokolü | Python API sınıfı | Açıklama |
---|---|---|
"surface_code " |
SURFACE_CODE |
Geçit tabanlı yüzey kodu arXiv:1208.0928 ve arXiv:1009.3686'ya dayanır. Majorana yüzey kodu arXiv:1909.03002 ve arXiv:2007.00307'yi temel alır. |
"floquet_code " |
FLOQUET_CODE |
Sadece Majorana kubitleri için. Floquet kodu arXiv:2202.11829'a dayanır. |
Not
Başka bir değer belirtilmediği sürece, QEC şeması için varsayılan değer "surface_code" olur.
Önceden tanımlanmış QEC düzenleri için parametreler
Önceden tanımlanmış her QEC şeması için tam parametreler şunlardır.
{
"qubitParams": {
"instructionSet": "GateBased",
}
"qecScheme": {
"name": "surface_code",
"errorCorrectionThreshold": 0.01,
"crossingPrefactor": 0.03,
"logicalCycleTime": "(4 * twoQubitGateTime + 2 * oneQubitMeasurementTime) * codeDistance",
"physicalQubitsPerLogicalQubit": "2 * codeDistance * codeDistance"
}
}
{
"qubitParams": {
"instructionSet": "Majorana",
}
"qecScheme": {
"name": "surface_code",
"errorCorrectionThreshold": 0.0015,
"crossingPrefactor": 0.08,
"logicalCycleTime": "20 * oneQubitMeasurementTime * codeDistance",
"physicalQubitsPerLogicalQubit": "2 * codeDistance * codeDistance"
}
}
{
"qubitParams": {
"instructionSet": "Majorana",
}
"qecScheme": {
"name": "floquet_code",
"errorCorrectionThreshold": 0.01,
"crossingPrefactor": 0.07,
"logicalCycleTime": "3 * oneQubitMeasurementTime * codeDistance",
"physicalQubitsPerLogicalQubit": "4 * codeDistance * codeDistance + 8 * (codeDistance - 1)"
}
}
Önceden tanımlanmış QEC düzenlerini geçirme
Önceden tanımlanmış QEC düzenlerini belirtmenin iki yolu vardır. çalıştırırken qsharp.estimate
sınıfı için "qecScheme"
QEC modeli adını seçebilirsiniz. Örneğin, floquet kodunu seçmek için şunu yazın:
qsharp.estimate("RunProgram()", params=
{"qecScheme": {
"name": "floquet_code"
}
})
Ayrıca, sınıfını kullanarak tahmin parametrelerinin listesini sınıfına EstimatorParams
QECScheme
geçirebilirsiniz. Örneğin, floquet kodunu seçmek için şunu yazın:
from qsharp.estimator import EstimatorParams, QubitParams, QECScheme,
params = EstimatorParams()
params.items.qec_scheme.name = QECScheme.FLOQUET_CODE # floquet code QEC scheme
qsharp.estimate("RunProgram()", params=params)
Önceden tanımlanmış QEC düzenlerini özelleştirme
Önceden tanımlanmış QEC düzenlerini, adı belirtip diğer değerlerden herhangi birini güncelleştirerek özelleştirebilirsiniz. Örneğin, floquet kodunda geçiş ön faktörünü artırmak için şunu yazın:
qsharp.estimate("RunProgram()", params=
{"qecScheme": {
"name": "floquet_code",
"crossingPrefactor": 0.07,
}
})
Not
Belirtilmediğinde, için ve varsayılan değeri, için 0.01
"errorCorrectionThreshold"
varsayılan değer olarak, için ise varsayılan değeri "crossingPrefactor"
olarak 0.03
belirlenir."oneQubitMeasurementTime"
"physicalQubitsPerLogicalQubit"
"logicalCycleTime"
QEC şemalarınızı özelleştirme
Kaynak Tahmin Aracı, $a$ ve $p^*$ değerlerini "crossingPrefactor"
sağlayarak yukarıdaki formüle göre özelleştirilmiş bir QEC şemasını "errorCorrectionThreshold"
soyutlayabilir. Ayrıca, kod uzaklığı ve temel alınan fiziksel kubitlerin fiziksel işlem süresi varsayımlarına bağlı olarak tek bir mantıksal işlem yürütme süresini belirtmeniz "logicalCycleTime"
gerekir. Son olarak, ikinci bir formül, bir mantıksal kubiti kod uzaklığı temelinde kodlamak için gereken fiziksel kubit sayısını hesaplar "physicalQubitsPerLogicalQubit"
.
QEC düzenleri için şablon olarak aşağıdaki kodu kullanabilirsiniz:
qsharp.estimate("RunProgram()", params=
{"qecScheme": {
"crossingPrefactor": <double>,
"errorCorrectionThreshold": <double>,
"logicalCycleTime": <formula string>,
"physicalQubitsPerLogicalQubit": <formula string>
}
})
Formüllerin içinde, değerleri fiziksel kubit parametrelerinden karşılık gelen alandan alınan , two_qubit_gate_time
one_qubit_measurement_time
, ve two_qubit_joint_measurement_time
değişkenlerininone_qubit_gate_time
yanı sıra fiziksel kubit özelliklerine, hata düzeltme eşiğine ve geçiş ön düzenlemesine göre mantıksal kubit için hesaplanan kod uzaklığı değişkenini eccDistance
kullanabilirsiniz. ve zaman değişkenleri eccDistance
formülü açıklamak logicalCycleTime
için kullanılabilir. Formül physicalQubitsPerLogicalQubit
için yalnızca eccDistance
öğesini kullanabilirsiniz.
Hata bütçesi
Toplam hata bütçesi $\epsilon$ algoritma için genel tolere edilen hatayı, yani algoritmanın izin verilen hata olasılığını ayarlar. Genel değeri 0 ile 1 arasında olmalıdır ve varsayılan değer %0,1'e karşılık gelen 0,001'dir. Başka bir deyişle algoritmanın 1000 yürütmede en fazla bir kez başarısız olmasına izin verilir. Bu parametre yüksek oranda uygulamaya özgüdür.
Örneğin, Shor'un tamsayıları çarpanlara ayırma algoritmasını çalıştırıyorsanız, çıktıların gerçekten girişin en önemli faktörleri olup olmadığını denetleyebildiği için hata bütçesi için büyük bir değere tolerans gösterilebilir. Öte yandan, etkili bir şekilde doğrulanabilen bir çözümle ilgili bir sorunu çözen bir algoritma için daha küçük bir hata bütçesi gerekebilir.
Hata bütçesi üç bölümün toplamına karşılık gelir:
$$ \epsilon = \epsilon_{\log} + \epsilon_{\rm dis} + \epsilon_{\rm syn} $$
Mantıksal hatalar $\epsilon_{\log}$ mantıksal kubit uygulama hatasıdır, T durumu hatası $\epsilon_{\rm dis}$ damıtma yoluyla T durumları oluşturma hatasıdır ve döndürme kapısı hatası $\epsilon_{\rm syn}$ döndürme geçitlerini rastgele açılarla sentezleme hatasıdır.
Not
Başka bir değer belirtilmediği sürece, $\epsilon$ hata bütçesi mantıksal hata, T durumu hatası ve döndürme kapısı hatası arasında tekdüzen olarak dağıtılır.
Distilasyon ve döndürme sentezi için ilgili $\epsilon_{\rm dis}$ ve $\epsilon_{\rm syn}$ hata bütçelerinin sırasıyla tüm gerekli T durumları ve tüm gerekli döndürme geçitleri arasında eşit olarak dağıtıldığını unutmayın. Giriş algoritmasında döndürme kapıları yoksa, hata bütçesi mantıksal hatalara ve T durumu hatalarına eşit olarak dağıtılır.
Hata bütçesini geçirme
0 ile 1 arasında bir sayı ayarlayarak hata bütçesini belirtmenin iki yolu vardır. komutunu çalıştırırken qsharp.estimate
hata bütçesini geçirebilirsiniz. Örneğin, 1/3 hata bütçesini seçmek için şunu yazın:
qsharp.estimate("RunProgram()", params=
{'errorBudget': 0.333
})
Hata bütçesi parametrelerini sınıfına EstimatorParams
da geçirebilirsiniz.
from qsharp.estimator import EstimatorParams, QubitParams, QECScheme,
params = EstimatorParams()
params.items.error_budget = 0.333 # error budget of 1/3
qsharp.estimate("RunProgram()", params=params)
Ayrıca, hata bütçesinin her bileşenini ayrı ayrı belirtebilirsiniz. Tüm değerlerin toplamı toplam hata bütçesidir ve 0 ile 1 arasında olmalıdır. Kuantum algoritması T durumları veya döndürmeleri içermiyorsa ve rotations
değerleri t_states
sırasıyla 0 olabilir.
Aşağıdaki kod, T durumları ve döndürmeleri ile hata bütçesi parametresinin nasıl belirtileceğini gösterir:
from qsharp.estimator import EstimatorParams, QubitParams,
params = EstimatorParams()
params.error_budget.logical = 0.01
params.error_budget.t_states = 0.02
params.error_budget.rotations = 0.03
Sınırlamalar
T fabrikası bileşen düzeyinde kısıtlamalar uygulamak için sınıfını kullanabilirsiniz"constraints"
. Kısıtlamaları ayarlayarak, kubit sayısını azaltmaya veya çalışma zamanını azaltmaya yönelik tahminleri iyileştirebilirsiniz.
Parametre | Veri türü | Açıklama |
---|---|---|
logical_depth_factor |
kayan noktalı sayı | Yürütme süresini denetleme. Değeri 1'den büyükse, mantıksal derinlik olarak da adlandırılan ilk mantıksal döngü sayısı bu sayı ile çarpılır. değerini azaltarak logical_depth_factor , belirli bir süre içinde T fabrikasının çağrı sayısını artırarak aynı sayıda T durumu üretmek için gereken T fabrika kopyasının daha az olmasına neden olabilirsiniz. T fabrika kopyalarının sayısını azalttığınızda algoritma çalışma zamanı buna göre artar. Ek döngü sayısı nedeniyle gerekli mantıksal hata oranı arttığından toplam çalışma zamanı için ölçeklendirme faktörü daha büyük olabilir. |
max_t_factories |
integer | En fazla T fabrika kopyası sayısı. Kaynak Tahmin Aracı, zaman ek yükünü dikkate almadan kullanılan fiziksel kubit sayısını en aza indiren en uygun T fabrika kopyası sayısını seçerek gerekli kaynakları belirler. max_t_factories parametresi maksimum kopya sayısını sınırlar ve bu nedenle mantıksal döngü sayısını buna göre ayarlar. Daha fazla bilgi için bkz . T factory fiziksel tahmini. |
max_duration |
zaman dizesi | Algoritma için en yüksek çalışma zamanı. Kaynak Tahmin Aracı, aynı anda yalnızca birini max_duration veya max_physical_qubits kısıtlamalarını kabul eder, ancak ikisini kabul etmemektedir. Belirtilirse max_duration , Kaynak Tahmin Aracı belirtilen en yüksek sayı ile kısıtlanmış çözümler arasında en iyi tahmini max_physical_qubits bulmaya çalışır. |
max_physical_qubits |
integer | Algoritma için en fazla fiziksel kubit sayısı. Kaynak Tahmin Aracı, aynı anda yalnızca birini max_duration veya max_physical_qubits kısıtlamalarını kabul eder, ancak ikisini kabul etmemektedir. Belirtilirse max_physical_qubits , Kaynak Tahmin Aracı belirtilen en yüksek sayı ile kısıtlanmış çözümler arasında en iyi tahmini max_duration bulmaya çalışır. |
Aşağıdaki kod, kuantum algoritması için kısıtlamaların nasıl belirtileceğini gösterir:
from qsharp.estimator import EstimatorParams
params = EstimatorParams()
params.constraints.max_duration = "1 s"
params.constraints.logical_depth_factor = 1.5
params.constraints.max_t_factories = 10
Not
sağlanan max_duration
veya max_physical_qubits
değeri uygulanabilir bir çözüm bulmak için çok küçükse, Kaynak Tahmin Aracı bir hata döndürür. Ne de max_duration
max_physical_qubits
kısıtlamaları belirtilmezse, Kaynak Tahmin Aracı en kısa sürede bir çözüm bulmayı amaçlar.
İpucu
çözüm alanını etkileyip daha uzun çalışma zamanına ancak bu kısıtlamalara sahip olmayan çözümlere kıyasla daha az sayıda kubite sahip çözümler bulmak için ve max_physical_qubits
kullanabilirsinizmax_duration
. Çalışma zamanı ile kubit sayısı arasında bir denge vardır ve bu dengeleme bazı algoritmalar için verimli bir şekilde yönetilebilir ve farklı algoritmalar üzerinde değişen etkilere sahiptir. [arXiv:2211.07629] içindeki Tablo IV, kuantum dinamiği algoritmaları için kubit sayısı ve çalışma zamanı arasındaki dengenin etkin kullanımını göstermektedir. Daha fazla bilgi için bkz . Zaman veya kubit sayısı sınırlamalarıyla kuantum kaynağı tahmini örneği.
Damıtma birimleri
Sınıfıyla DistillationUnitSpecification
T fabrikaları damıtma algoritmaları için belirtimler sağlayabilirsiniz. Belirtim önceden tanımlanmış veya özel olabilir. Damıtma birimi adını seçerek önceden tanımlanmış bir belirtim belirtebilirsiniz: 15-1 RM
veya 15-1 space-efficient
.
from qsharp.estimator import EstimatorParams, DistillationUnitSpecification
params = EstimatorParams()
unit = DistillationUnitSpecification()
unit.name = "15-1 RM" # predefined distillation unit
params.distillation_unit_specifications.append(unit)
Her iki durumda da, 15-1 gösterimi 15 giriş T durumu ve 1 çıkış T durumu anlamına gelir. 15-1 space-efficient
Damıtma birimi daha 15-1 RM
az kubit kullanır ancak daha fazla çalışma zamanı gerektirir. Daha fazla bilgi için bkz . Tablo VI.
İpucu
Önceden tanımlanmış damıtma birimlerinin kullanılması, özel olanlarla karşılaştırıldığında daha iyi performans sağlar.
Damıtma birimlerinizi özelleştirme
Kendi damıtma birimlerinizi özelleştirebilirsiniz. Damıtma birimleri için tam parametreler şunlardır.
qsharp.estimate("RunProgram()", params=
{"distillationUnitSpecifications": {
"displayName": <string>,
"numInputTs": <int>,
"numOutputTs": <int>,
"failureProbabilityFormula": <string>,
"outputErrorRateFormula": <string>,
"physicalQubitSpecification": <protocol specific parameters>,
"logicalQubitSpecification": <protocol specific parameters>,
"logicalQubitSpecificationFirstRoundOverride": <protocol specific parameters>, # Only if "logicalQubitSpecification"
}
})
Tüm sayısal parametrelerin pozitif olması beklenir. , displayName
distilasyon biriminin çıkış sonuçlarında nasıl görüntüleneceğini belirtir.
Aşağıdaki kod, sınıfını ve sınıfını kullanarak bir kuantum algoritması için distilasyon birimi parametrelerinin DistillationUnitSpecification
ProtocolSpecificDistillationUnitSpecification
nasıl belirtileceğini gösterir.
from qsharp.estimator import EstimatorParams, DistillationUnitSpecification, ProtocolSpecificDistillationUnitSpecification
params = EstimatorParams()
unit = DistillationUnitSpecification()
unit.display_name = "T"
unit.failure_probability_formula = "c"
unit.output_error_rate_formula = "r"
unit.num_input_ts = 1
unit.num_output_ts = 2
physical_qubit_specification = ProtocolSpecificDistillationUnitSpecification()
physical_qubit_specification.num_unit_qubits = 1
physical_qubit_specification.duration_in_qubit_cycle_time = 2
unit.physical_qubit_specification = physical_qubit_specification
ve output_error_rate_formula
formüllerifailure_probability_formula
, temel aritmetik işlemler, sabitler ve yalnızca üç parametre içeren özel formüllerdir:
clifford_error_rate
olarak da belirtilirc
.readout_error_rate
olarak da belirtilirr
.input_error_rate
olarak da belirtilirz
.
Uzun ve kısa gösterimi kullanan aşağıdaki özel formül örneklerine bakın. Bu örnekler, standart uygulama içinde varsayılan olarak kullanılan formülleri gösterir.
Parametre | Uzun formül | Kısa formül |
---|---|---|
failure_probability_formula |
"15.0 * input_error_rate + 356.0 * clifford_error_rate" | "15.0 * z + 356.0 * c" |
output_error_rate_formula |
"35.0 * input_error_rate ^ 3 + 7.1 * clifford_error_rate" | "35.0 * z ^ 3 + 7.1 * c" |
Parametrelerden physical_qubit_specification
en az biri veya logical_qubit_specification
sağlanmalıdır. Yalnızca önceki sağlanırsa, damıtma birimi fiziksel kubitlere uygulanabilir. Yalnızca ikincisi sağlanmışsa, damıtma birimi mantıksal kubitlere uygulanabilir. Her ikisi de sağlanırsa, damıtma birimi her iki kubit türüne de uygulanabilir.
Parametre logical_qubit_specification_first_round_override
yalnızca belirtilirse logical_qubit_specification
sağlanabilir. Bu durumda, distilasyonun logical_qubit_specification
ilk turunda uygulanıp uygulanmaması durumunda değerlerini geçersiz kılar. için logical_qubit_specification_first_round_override
gereken değer <protocol specific parameters>
şemaya uygun olmalıdır:
{
"numUnitQubits": <int>,
"durationInQubitCycleTime": <double>
}
Pareto sınır tahmini
Bir algoritmanın kaynaklarını tahmin ederken, fiziksel kubit sayısı ile algoritmanın çalışma zamanı arasındaki dengeyi göz önünde bulundurmak önemlidir. Algoritmanın çalışma zamanını azaltmak için mümkün olduğunca çok fiziksel kubit ayırmayı düşünebilirsiniz. Ancak, fiziksel kubitlerin sayısı kuantum donanımında bulunan fiziksel kubit sayısıyla sınırlıdır. Çalışma zamanı ile sistem ölçeği arasındaki dengeyi anlamak, kaynak tahmininin en önemli yönlerinden biridir.
Pareto sınır tahmini, aynı algoritma için her biri kubit sayısı ile çalışma zamanı arasındaki dengeleri gösteren birden çok tahmin sağlar.
Not
Kaynak Tahmin Aracı'nı Visual Studio Code'da : Kaynak Tahminlerini Hesapla seçeneğini kullanarak Q#çalıştırırsanız, Pareto sınır tahmini varsayılan olarak etkinleştirilir.
Python'da Kaynak Tahmin Aracı'nı çalıştırırsanız parametresini "estimateType"
olarak "frontier"
belirtmeniz gerekir.
result = qsharp.estimate("RunProgram()", params=
{"qubitParams": { "name": "qubit_maj_ns_e4" },
"qecScheme": { "name": "surface_code" },
"estimateType": "frontier", # Pareto frontier estimation
}
)
Pareto sınır tahmininin sonuçlarını görselleştirmek istiyorsanız işlevini kullanabilirsiniz EstimatesOverview
. Bu işlevler, tablodaki sınır tahmininin sonuçlarını ve bir uzay-zaman diyagramını görüntüler. Daha fazla bilgi için bkz . Uzay-zaman diyagramı.
from qsharp_widgets import EstimatesOverview
EstimatesOverview(result)
Not
Kaynak Tahmin Aracı ile çalışırken herhangi bir sorunla karşılaşırsanız Sorun Giderme sayfasına bakın veya ile iletişime geçinAzureQuantumInfo@microsoft.com.