Přeskočit na hlavní obsah
Tento projekt je v betě. Našel jsi chybu? Otevřít issue na GitHubu. Máš otázku nebo nápad? Zeptej se v Discussions — rádi si poslechneme tvou zpětnou vazbu!
Jaká je kvalita překladu na této stránce?

Dry-run joby

Dry-run job spustí tvoji úlohu v IBM Quantum® Compute Service, aniž by spotřeboval jakýkoli čas QPU. Dry-run job použij k následujícímu ještě před tím, než se pustíš do skutečného běhu:

  • **Zjisti spotřebu, kterou by job způsobil na skutečném QPU.

  • Ověř job. Quantum Compute zkontroluje parametry jobu stejným způsobem jako u skutečného jobu.

  • Získej časový plán obvodu, pokud o něj požádáš, a odlaď job dříve, než ho spustíš doopravdy.

Na rozdíl od dry-run jobů se lokální testování (fake backendy a Qiskit Aer) spouští na tvém vlastním počítači, a proto nemůže poskytnout údaje o spotřebě, validaci na straně služby ani informace o časování ze služby. Porovnání obou přístupů najdeš v části Mock zařízení v porovnání s fake backendy.

poznámka
  • Pro dry-run joby je vyžadován qiskit-ibm-runtime ve verzi v0.51.0 nebo novější.
  • Dry-run joby jsou dostupné ve všech regionech a pouze v plánech Flex, Premium a On-Prem. V plánech Open ani Pay-As-You-Go dostupné nejsou.

Jak to funguje​

Chceš-li spustit dry-run job, předej metodě run() primitivy argument dry_run=True:

backend = service.backend("ibm_phoenix")
isa_circuit = pm.run(circuit) # transpiled for ibm_phoenix
sampler = Sampler(mode=backend)
job = sampler.run([isa_circuit], dry_run=True)
job.result() # wait for completion
print(job.usage())

dry_run je argument metody run() (výchozí hodnota je False), nikoli runtime volba. Je dostupný pro všechny primitivy.

Dry-run job má následující vlastnosti:

  • Běží v IBM Quantum Compute Service v cloudu, ne na tvém počítači.

  • Používá kalibrační data ze skutečného QPU, nejen jejich snímek.

  • Jeho výsledky zachovávají očekávané schéma a odpovídají očekávanému tvaru výsledků ze skutečného QPU, ale obsahují náhodně vygenerovaná mock data. Nejsou to skutečné ani simulované výsledky měření, proto je nepoužívej ke kontrole fyzikální správnosti.

  • Zpracování probíhá na serveru, takže job nemusí skončit okamžitě.

Velikost obvodu, počet shotů a další limity jsou stejné jako u kteréhokoli jobu daného programu.

dry_run=True funguje také tehdy, když je backend již mock zařízení.

Zjištění spotřeby​

Spotřeba dokončeného dry-run jobu odpovídá spotřebě, kterou by stejný job způsobil na skutečném QPU, s výjimkou vzácných situací, kdy se kalibrační data výrazně změní po dry-run jobu a před jobem na skutečném QPU.

  • job.usage() vrací spotřebu v sekundách.

  • job.metrics()["usage"] vrací stejná data spolu se stavem spotřeby.

Spotřeba dry-run jobů se neúčtuje, nečerpá alokaci tvého plánu a nezapočítává se do žádných limitů.

Nepoužívej job.usage_estimation u dry-run jobů

Nepoužívej job.usage_estimation u dry-run jobu. Použij job.usage().

job.usage() vrací 0, dokud není výpočet spotřeby konečný, proto před jeho přečtením počkej, až job skončí.

Časový plán obvodu​

Chceš-li si vyžádat časový plán obvodu, použij stejnou volbu jako u skutečného jobu. Podrobnosti najdeš v části Vizualizace časování obvodu.

Omezení​

  • Pouze job mode a batch mode. Dry-run joby lze spouštět pouze v job mode a batch mode.

  • Pouze plány Flex, Premium a On-Prem. Dry-run joby nejsou dostupné v plánech Open ani Pay-As-You-Go.

Mock zařízení​

Mock zařízení jsou implementací, na které dry-run joby stojí. Dry-run joby mock zařízení ve výchozím stavu skrývají, ale setkáš se s nimi v těchto případech:

  • Instance nakonfigurované pouze pro přístup k mock zařízením. Příklad: pokud pomocí service.backend("ibm_phoenix") odesíláš dry-run job na ibm_phoenix, ale tvoje instance k ibm_phoenix přístup nemá, dostaneš chybu QiskitBackendNotFoundError. Místo toho vyber mock zařízení přímo pomocí service.backend("mock_phoenix").

  • Compute resources. Mock zařízení jsou na stránce Compute resources ve výchozím stavu skrytá. Tabulka na stránce má volbu filtru, která je zobrazí, ale k mock zařízením mají přístup pouze plány Flex, Premium a On-Prem.

  • Tabulka Workloads. Joby z mock zařízení jsou na stránce Workloads ve výchozím stavu skryté. Tabulka má volbu filtru (ikona nálevky), která je zobrazí.

  • Python API. service.backends() a service.jobs() mock zařízení vynechávají, pokud je nezavoláš s include_mocks=True. IBMBackend.is_mock říká, zda je backend mock zařízení. service.least_busy() mock zařízení nikdy nevrací.

Mock zařízení v porovnání s fake backendy​

Názvy jsou podobné, ale mock zařízení a fake backend jsou různé věci. Fake backend je lokální objekt v tvém prostředí Pythonu. Mock zařízení je cloudový zdroj v IBM Quantum Compute Service.

Mock zařízení (například mock_phoenix)Fake backend (například FakeManilaV2)
Co to jeZařízení v IBM Quantum Compute ServiceTřída Pythonu v qiskit_ibm_runtime.fake_provider
Kde běžíV cloudu, ve služběLokálně na tvém počítači
Jak ho získášservice.backend("mock_phoenix") nebo automaticky pomocí run(..., dry_run=True)from qiskit_ibm_runtime.fake_provider import ...
Účet a instancePouze vybrané plány (Flex, Premium nebo On-Prem)Všechny instance a plány
KalibraceŽivá, v každém okamžiku odpovídá skutečnému zařízeníPevný snímek dodávaný s nainstalovaným balíčkem
VýsledkyNáhodná data s očekávaným schématem. Není to simulaceZašumělá simulace využívající model šumu ze snímku
Fyzikálně smysluplné výsledkyNe. Nikdy je nepoužívej ke kontrole správnostiPřibližně, v mezích modelu šumu
Hlášená spotřebaAnoŽádná
Účtováno nebo započítáno do alokace plánu či limitůNeNe
Validace jobuProvádí služba, stejně jako u skutečného jobuOmezena na to, co kontroluje klient
Časový plánDostupný na vyžádáníNení dostupný
Režimy prováděníPouze job mode a batch mode. Session jsou blokoványSyntaxe Session je přijata, ale ignorována (lokální režim nemá skutečné Session ani batche)
DokončeníAsynchronní, na serveruBěží lokálně a vrací výsledek po dokončení
Zobrazení v rozhraní platformy a v seznamech APIVe výchozím stavu skryto (Compute resources, tabulka Workloads, backends(), jobs()). Zobrazení je na výběrNikdy, protože se službě nic neodesílá

Jak vybírat​

  • Chceš-li zjistit, kolik spotřeby job vyčerpá nebo zda ho služba přijme, použij dry-run job.

  • Chceš-li zjistit, jak by mohl výstup vypadat, nebo chceš pracovat offline, použij fake backend nebo Aer.

  • Chceš-li obojí, iteruj nad obvody a výsledky s fake backendem a dry-run použij jako poslední kontrolu před skutečným QPU.

Časté zdroje nejasností​

  • Mock zařízení není simulátor. Jeho výstup je náhodný, takže vzorkování Bellova obvodu na mock_phoenix nevrátí Bellovo rozdělení. Pokud chceš realistický zašuměný výstup, použij fake backend.

  • Fake backend není živé zařízení. Jeho kalibrace je snímek a může být zastaralá. Mock zařízení sleduje skutečnou kalibraci, takže transpilované obvody a časování odpovídají tomu, co QPU vidí dnes.

  • Ani jedno neběží na skutečném hardwaru. Ani jedno nespotřebovává čas QPU, ale přes službu prochází pouze dry-run job.

  • usage_estimation není odhad z dry-run. U dry-run jobu vrací job.usage() počet sekund spotřeby, která by ti byla na skutečném QPU naúčtována.

Případy použití​

Studenti a kurzy​

Správce omezí instanci pouze na mock zařízení pomocí přepínače přizpůsobení QPU při vytváření nebo úpravě instance. Studenti pak mohou validovat své úlohy od začátku do konce, aniž by spotřebovávali skutečný čas QPU nebo RU. Protože má instance přístup pouze k mock zařízením, studenti vybírají backend podle jeho mock názvu:

backend = service.backend("mock_phoenix")
sampler = Sampler(mode=backend)
job = sampler.run([isa_circuit], dry_run=True)

Plánování projektu​

Tým, který se chystá zahájit projekt, spustí reprezentativní joby jako dry-run, aby zjistil, kolik RU projekt potřebuje, ještě před výběrem plánu nebo alokace:

backend = service.backend("ibm_phoenix")
sampler = Sampler(mode=backend)
job = sampler.run([isa_circuit], dry_run=True)
job.result()
print(job.usage())

Poslední kontrola před spuštěním na skutečném QPU​

Pomocí dry_run=True ověř parametry a prohlédni si časový plán, pak argument odstraň a spusť na skutečném QPU. Nic jiného ve tvém kódu se nemění:

sampler = Sampler(mode=backend)

# Pre-flight check
job = sampler.run([isa_circuit], dry_run=True)
job.result()

# Real run - same code, without dry_run
job = sampler.run([isa_circuit])

Další kroky​

Doporučení