Pengenalan kepada Qiskit Functions
- Qiskit Functions adalah ciri eksperimental yang hanya tersedia untuk pengguna Pelan Premium, Pelan Flex, dan Pelan On-Prem (melalui API IBM Quantum Platform) IBM Quantum®. Ia berada dalam status keluaran pratonton dan tertakluk kepada perubahan.
Versi pakej
Kod pada halaman ini dibangunkan menggunakan keperluan berikut. Kami mengesyorkan penggunaan versi ini atau lebih baharu.
qiskit[all]~=1.4.1
qiskit-ibm-runtime~=0.37.0
qiskit-ibm-catalog~=0.4
Qiskit Functions memudahkan dan mempercepatkan penemuan algoritma berskala utiliti dan pembangunan aplikasi, dengan mengabstrakkan bahagian-bahagian aliran kerja pembangunan perisian kuantum. Dengan cara ini, Qiskit Functions membebaskan masa yang biasanya dihabiskan untuk menulis kod secara manual dan menala eksperimen.
Fungsi hadir dalam dua bentuk:
| Jenis | Apa yang dilakukannya? | Contoh input dan output | Untuk siapa? |
|---|---|---|---|
| Fungsi Circuit | Antara muka yang dipermudah untuk menjalankan Circuit. Mengabstrak transpilasi, penindasan ralat, dan mitigasi ralat | Input: Objek PUB abstrak Output: Nilai jangkaan yang dimitigasi | Penyelidik yang menggunakan Qiskit untuk menemui algoritma dan aplikasi baharu, tanpa perlu memberi tumpuan kepada pengoptimuman untuk perkakasan atau pengendalian ralat. Fungsi Circuit boleh digunakan untuk membina fungsi aplikasi tersuai. |
| Fungsi aplikasi | Meliputi tugas peringkat lebih tinggi, seperti meneroka algoritma dan kes penggunaan khusus domain. Mengabstrak aliran kerja kuantum untuk menyelesaikan tugas, dengan input dan output klasik | Input: Molekul, graf Output: Tenaga keadaan asas + teruja, nilai optimum untuk fungsi kos | Penyelidik dalam domain bukan kuantum, mengintegrasikan kuantum ke dalam aliran kerja klasik berskala besar sedia ada, tanpa perlu memetakan data klasik ke Circuit kuantum. |
# Added by doQumentation — required packages for this notebook
!pip install -q qiskit qiskit-ibm-catalog qiskit-ibm-runtime
Fungsi disediakan oleh IBM® dan rakan kongsi pihak ketiga. Setiap satu berprestasi tinggi untuk ciri beban kerja tertentu dan mempunyai pilihan penalaan prestasi yang unik.
Gambaran keseluruhan fungsi yang tersedia​
Fungsi Circuit​
| Nama | Penyedia | Penggunaan yang disyorkan | Kelebihan unik |
|---|---|---|---|
| Tensor-Network Error Mitigation | Algorithmiq | Beban kerja yang mempunyai boleh jadi berpemberat rendah dan Circuit bebas gelung. | Mengurangkan overhed pengukuran dan varians, mengatasi garis asas mitigasi ralat standard seperti Zero Noise Extrapolation (ZNE) dan Probabilistic Error Cancellation (PEC) untuk kelas Circuit yang berkaitan. |
| QESEM: Penindasan Ralat dan Mitigasi Ralat | Qedma | Beban kerja yang merangkumi Circuit dengan gate pecahan atau berparameter, boleh jadi berpemberat tinggi, dan aliran kerja yang memerlukan nilai jangkaan tidak berat sebelah serta anggaran masa jalan yang tepat. | Menghasilkan nilai jangkaan tidak berat sebelah dengan varians dan overhed sumber yang lebih rendah, mengatasi ZNE dan PEC untuk kelas Circuit yang berkaitan. |
| Pengurusan Prestasi | Q-CTRL | Beban kerja yang mengandungi Circuit berparametrik, Circuit dalam, atau memerlukan banyak pelaksanaan Circuit. | Secara automatik menerapkan penindasan ralat dipacu AI pada algoritma kuantum, memaksimumkan prestasi peranti IBM untuk menghasilkan keputusan yang tepat sambil mengurangkan bilangan tembakan, masa pengiraan, dan kos yang diperlukan. Kaedah sifar-overhed yang meningkatkan ketepatan pelaksanaan untuk primitif Sampler dan Estimator, serasi dengan sebarang berat boleh jadi. |
Fungsi aplikasi​
| Nama | Penyedia | Penggunaan yang disyorkan | Kelebihan unik |
|---|---|---|---|
| QUICK-PDE | ColibriTD | Gunakan pengiraan kuantum untuk PDE berbilang fizik. Sediakan aliran kerja simulasi untuk perkakasan kuantum, sambil mengekalkan kawalan penuh ke atas parameter pemodelan kuantum dan fizikal. | Menawarkan rangka kerja VQA hibrid yang mantap yang menghasilkan penyelesaian PDE yang tepat dan berskala melalui pengekodan penyelesaian lanjutan dan kaedah spektral, menjadikannya titik masuk yang ideal bagi pasukan yang cuba membina keupayaan simulasi bersedia kuantum. |
| Pengoptimum Portfolio Kuantum | Global Data Quantum | Beban kerja untuk pengoptimuman kewangan, mencari strategi portfolio optimum dari masa ke masa sambil meminimumkan risiko dan memaksimumkan pulangan, membolehkan ujian balik strategi perdagangan. | Menyelesaikan masalah pengoptimuman kombinatorial melalui adaptasi khusus algoritma kuantum VQE untuk kes penggunaan kewangan ini, menggunakan strategi pelaksanaan dan pengoptimum yang dioptimumkan, bersama teknik mitigasi ralat peka hingar yang disesuaikan untuk pengoptimuman portfolio. |
| Kimia HI-VQE | Qunova Computing | Beban kerja dalam kimia pengiraan, simulasi molekul, sains bahan, atau sebarang simulasi Hamiltonian yang memerlukan penyelesaian masalah struktur elektronik banyak jasad. | Menyelesaikan struktur elektronik molekul dengan menggunakan SQD yang dipertingkatkan untuk mencapai ketepatan kimia (1 kcal/mol, 1.6 mHa) bagi masalah yang dimodelkan dengan 40 hingga 60 Qubit, mengatasi beberapa penyelesaian klasik pada superkomputer atau SQD standard dalam kelajuan penumpuan atau ketepatan, masing-masing mengikut magnitud. |
| Pengoptimum Kuantum Iskay | Kipu Quantum | Beban kerja pengoptimuman seperti penjadualan, logistik, penghalaan, dan masalah QUBO/HUBO. | Kaedah pra dan pasca-pemprosesan klasik boleh laras yang bersepadu untuk rutin pengoptimuman kuantum. Menyampaikan kelebihan masa jalan berbanding penyelesai klasik (CPLEX, simulasi penyepuhlindapan, dan carian tabu) pada penanda aras HUBO terpilih. Market Split ms_5_100, cabaran sukar, diselesaikan dalam masa beberapa jam (lihat tutorial ini). |
| Pembelajaran Mesin Singularity | Multiverse Computing | Aliran kerja pengelasan pembelajaran mesin klasik yang boleh mendapat manfaat daripada ketepatan yang lebih baik atau kecekapan pengiraan dengan memanfaatkan pengoptimuman kuantum yang dilaksanakan pada perkakasan IBM. | Menghasilkan ketepatan yang setanding atau melebihi model klasik seperti Random Forest atau XGBoost, sambil beroperasi dengan bilangan pemelajar yang jauh lebih sedikit dan ensembel yang lebih padat. Dikuasakan oleh pengundian yang dioptimumkan secara kuantum, ia memilih pemelajar yang paling bermaklumat dan memperhalusi sempadan keputusan, menghasilkan kecekapan yang lebih tinggi, kerumitan model yang berkurang, dan prestasi yang lebih kukuh. |
| Penyelesai Pengoptimuman | Q-CTRL | Masalah pengoptimuman binari atau sebarang masalah kombinatorial yang boleh dipetakan ke fungsi kos binari. Fungsi kos sebarang peringkat dan saiz masalah sehingga skala peranti maksimum disokong. | Penyelesaian pengoptimuman kuantum hujung ke hujung yang peka hingar yang membolehkan input definisi masalah peringkat tinggi dan secara automatik mencari penyelesaian tepat untuk masalah kombinatorial yang mencabar secara klasik pada perkakasan kuantum berskala utiliti. Ia mengabstrak kerumitan dengan mengendalikan penindasan ralat, pemetaan cekap, dan pengoptimuman kuantum-klasik hibrid untuk menyelesaikan tugas pengoptimuman pada skala peranti penuh tanpa kepakaran kuantum mendalam. |
Mula menggunakan Qiskit Functions​
Pengguna Pelan Premium, Flex, dan On-Prem (melalui API IBM Quantum Platform) boleh mula menggunakan IBM Qiskit Functions secara percuma, atau boleh mendapatkan lesen daripada salah satu rakan kongsi yang telah menyumbangkan fungsi ke katalog.
Minta percubaan percuma untuk Qiskit Functions pihak ketiga​
Untuk meminta percubaan percuma baharu, navigasi ke Katalog Qiskit Functions, dan terokai panel butiran. Klik Request a free trial dan isi maklumat yang diperlukan oleh rakan kongsi Functions, termasuk IBM Cloud AccessGroupId:
- Navigasi ke IBM Cloud IAM.
- Sahkan kelayakan.
- Tukar akaun anda di bar atas ke akaun dengan format berikut:
XXXXXXX - [Nama Organisasi] - Pastikan organisasi adalah sama dengan yang dikaitkan dengan akaun Premium anda.
- Jika anda melihat "Akaun [Nama Anda]", anda menggunakan akaun peribadi anda, yang tidak layak untuk akses premium.
- Tukar akaun anda di bar atas ke akaun dengan format berikut:
- Cari ID kumpulan akses anda.
- Klik nama kumpulan.
- Klik Butiran.
- Salin ID kumpulan akses. Ia harus bermula dengan
AccessGroup-.
Pasang klien Katalog Qiskit Functions​
-
Untuk mula menggunakan Qiskit Functions, pasang klien IBM Qiskit Functions Catalog:
pip install qiskit-ibm-catalog -
Dapatkan semula kunci API anda dari papan pemuka IBM Quantum Platform, dan aktifkan persekitaran maya Python anda. Lihat arahan pemasangan jika anda belum menyediakan persekitaran maya.
Jika anda bekerja dalam persekitaran Python yang dipercayai (seperti pada komputer riba atau stesen kerja peribadi), gunakan kaedah
save_account()untuk menyimpan kelayakan anda secara tempatan. (Langkau ke langkah seterusnya jika anda tidak menggunakan persekitaran yang dipercayai, seperti komputer dikongsi atau awam, untuk mengesahkan jati diri ke IBM Quantum Platform.)Untuk menggunakan
save_account(), jalankanpythondalam shell anda, kemudian masukkan yang berikut:from qiskit_ibm_catalog import QiskitFunctionsCatalog
QiskitFunctionsCatalog.save_account(channel="ibm_quantum_platform", token="<your-token>", instance="<instance-crn>")Taip
exit(). Mulai sekarang, setiap kali anda perlu mengesahkan jati diri ke perkhidmatan, anda boleh memuatkan kelayakan anda denganfrom qiskit_ibm_catalog import QiskitFunctionsCatalog
catalog = QiskitFunctionsCatalog()
# Load saved credentials
from qiskit_ibm_catalog import QiskitFunctionsCatalog
catalog = QiskitFunctionsCatalog(channel="ibm_quantum_platform")
-
Elakkan melaksanakan kod pada mesin yang tidak dipercayai atau persekitaran Python awan luaran untuk meminimumkan risiko keselamatan. Jika anda terpaksa menggunakan persekitaran yang tidak dipercayai (misalnya, pada komputer awam), tukar kunci API anda selepas setiap penggunaan dengan memadamnya pada halaman kunci API IBM Cloud untuk mengurangkan risiko. Ketahui lebih lanjut dalam topik Mengurus kunci API pengguna. Untuk memulakan perkhidmatan dalam situasi ini, kembangkan bahagian berikut untuk melihat kod yang boleh anda gunakan:
Mulakan perkhidmatan dalam persekitaran yang tidak dipercayai
from qiskit_ibm_catalog import QiskitFunctionsCatalog
# After using the following code, delete your API key on the IBM Quantum Platform home dashboard
catalog = QiskitFunctionsCatalog(token="<YOUR_API_KEY>") # Use the 44-character API_KEY you created and saved from the IBM Quantum Platform Home dashboardawasLindungi kunci API anda! Jangan sekali-kali masukkan kunci anda dalam kod sumber, skrip Python, atau fail notebook. Apabila berkongsi kod dengan orang lain, pastikan kunci API anda tidak tertanam terus dalam skrip Python. Sebaliknya, kongsi skrip tanpa kunci dan berikan arahan untuk menyediakanya dengan selamat.
Jika anda tidak sengaja berkongsi kunci anda dengan seseorang atau memasukkannya dalam kawalan versi seperti Git, segera batalkan kunci anda dengan memadamnya pada halaman kunci API IBM Cloud untuk mengurangkan risiko. Ketahui lebih lanjut dalam topik Mengurus kunci API pengguna.
-
Setelah anda mengesahkan jati diri, anda boleh menyenaraikan fungsi dari Katalog Qiskit Functions yang anda mempunyai akses:
catalog.list()
[QiskitFunction(qunova/hivqe-chemistry),
QiskitFunction(global-data-quantum/quantum-portfolio-optimizer),
QiskitFunction(algorithmiq/tem),
QiskitFunction(qedma/qesem),
QiskitFunction(multiverse/singularity),
QiskitFunction(ibm/circuit-function),
QiskitFunction(q-ctrl/optimization-solver),
QiskitFunction(colibritd/quick-pde),
QiskitFunction(q-ctrl/performance-management),
QiskitFunction(kipu-quantum/iskay-quantum-optimizer)]
Jalankan fungsi yang diaktifkan​
Setelah objek katalog dijana, anda boleh memilih fungsi menggunakan catalog.load(provider/function-name):
ibm_cf = catalog.load("ibm/circuit-function")
Setiap Qiskit Function mempunyai input, pilihan, dan output tersuai. Semak halaman dokumentasi khusus untuk fungsi yang ingin anda jalankan bagi maklumat lanjut. Secara lalai, semua pengguna hanya boleh menjalankan satu kerja fungsi pada satu masa:
# This cell is hidden from users
# It gets these details programmatically so we can test this notebook
from qiskit_ibm_runtime import QiskitRuntimeService
from qiskit.circuit.random import random_circuit
service = QiskitRuntimeService()
instance = service.active_account()["instance"]
backend_name = service.least_busy().name
circuit = random_circuit(num_qubits=2, depth=2, seed=42)
observable = "Z" * circuit.num_qubits
job = ibm_cf.run(
pubs=[(circuit, observable)],
instance=instance,
backend_name=backend_name, # E.g. "ibm_fez"
)
job.job_id
'7f08c9d5-471b-4da2-92e7-4f2cb94c23a8'
Semak status kerja​
Pada masa ini, jadual beban kerja IBM Quantum hanya mencerminkan beban kerja Qiskit Runtime. Gunakan job.status() untuk melihat status semasa beban kerja Qiskit Function anda.
Dengan job_id Qiskit Function anda, anda boleh menyemak status kerja yang sedang berjalan. Ini termasuk status berikut:
QUEUED: Program jauh berada dalam baris gilir Qiskit Function. Keutamaan baris gilir adalah berdasarkan berapa banyak anda telah menggunakan Qiskit Functions.INITIALIZING: Program jauh sedang dimulakan; ini termasuk menyediakan persekitaran jauh dan memasang kebergantungan.RUNNING: Program sedang berjalan. Ini juga termasuk beberapa status yang lebih terperinci jika disokong oleh fungsi tertentuRUNNING: MAPPING": Fungsi sedang memetakan input klasik anda ke input kuantumRUNNING: OPTIMIZING_FOR_HARDWARE": Fungsi sedang mengoptimumkan untuk QPU yang dipilih. Ini boleh termasuk transpilasi Circuit, pencirian QPU, back-propagation boleh jadi, dan sebagainyaRUNNING: WAITING_FOR_QPU: Fungsi telah menghantar kerja ke Qiskit Runtime, dan sedang menunggu dalam baris gilirRUNNING: EXECUTING_QPU: Fungsi mempunyai kerja Qiskit Runtime yang aktifRUNNING: POST_PROCESSING: Fungsi sedang memproses keputusan selepas. Ini boleh termasuk mitigasi ralat, memetakan keputusan kuantum ke klasik, dan sebagainya
DONE: Program selesai, dan anda boleh mendapatkan semula data keputusan denganjob.results().ERROR: Program berhenti berjalan kerana masalah. Gunakanjob.result()untuk mendapatkan mesej ralat.CANCELED: Program dibatalkan; sama ada oleh pengguna, perkhidmatan, atau pelayan.
job.status()
'QUEUED'
Dapatkan semula keputusan​
Setelah program DONE, anda boleh menggunakan job.results() untuk mengambil keputusan. Format output ini berbeza mengikut setiap fungsi, jadi pastikan untuk mengikuti dokumentasi khusus:
result = job.result()
print(result)
PrimitiveResult([PubResult(data=DataBin(evs=np.ndarray(<shape=(), dtype=float64>), stds=np.ndarray(<shape=(), dtype=float64>), ensemble_standard_error=np.ndarray(<shape=(), dtype=float64>)), metadata={'shots': 4096, 'target_precision': 0.015625, 'circuit_metadata': {}, 'resilience': {}, 'num_randomizations': 32})], metadata={'dynamical_decoupling': {'enable': True, 'sequence_type': 'XX', 'extra_slack_distribution': 'middle', 'scheduling_method': 'alap'}, 'twirling': {'enable_gates': False, 'enable_measure': True, 'num_randomizations': 'auto', 'shots_per_randomization': 'auto', 'interleave_randomizations': True, 'strategy': 'active-accum'}, 'resilience': {'measure_mitigation': True, 'zne_mitigation': False, 'pec_mitigation': False}, 'version': 2})
Anda juga boleh membatalkan kerja pada bila-bila masa:
job.stop()
'Job has been stopped.'
Senaraikan kerja yang telah dijalankan sebelum ini dengan Qiskit Functions​
Anda boleh menggunakan jobs() untuk menyenaraikan semua kerja yang dihantar ke Qiskit Functions:
old_jobs = catalog.jobs()
old_jobs
[<Job | f6c29f49-4d5f-4fff-aca6-2e9a115b9763>,
<Job | 7f08c9d5-471b-4da2-92e7-4f2cb94c23a8>,
<Job | 62fe9176-d1e5-467e-b2bd-7a3f3c7be4e5>,
<Job | af525b2e-16b1-45a1-80bb-dbd94ce30258>,
<Job | b95a7a57-c1ad-4958-b7ac-953e4e1ee824>,
<Job | 7bfa33da-0f17-4e67-84b6-f556f7eeb436>,
<Job | ca46c191-9eb9-4de6-bfa7-b60d7eb29b5e>,
<Job | 6ac0ba93-3831-43fb-9fb9-760da2225e06>,
<Job | f0e38071-060d-47e8-988d-9cc1f69358e3>,
<Job | 629cf110-e490-4675-8a07-f6d298d166b0>]
Jika anda sudah mempunyai ID kerja untuk kerja tertentu, anda boleh mendapatkan semula kerja tersebut dengan catalog.get_job_by_id():
# First, get the most recent job that has been executed.
latest_job = old_jobs[0]
# We can also get that same job with get_job_by_id
job_by_id = catalog.get_job_by_id(latest_job.job_id)
# Verify that the job is the same using both retrieval methods.
assert job_by_id.job_id == latest_job.job_id
# Print the job_id for this job.
print(job_by_id.job_id)
f6c29f49-4d5f-4fff-aca6-2e9a115b9763
Ambil mesej ralat​
Jika status program adalah ERROR, gunakan job.error_message() untuk mengambil mesej ralat seperti berikut:
job.error_message()
qiskit.exceptions.QiskitError: 'Workflow execution failed -- https://docs.quantum.ibm.com/errors#9999'
Langkah seterusnya​
- Terokai fungsi Circuit untuk membina algoritma dan aplikasi baharu, tanpa perlu mengurus transpilasi atau pengendalian ralat.
- Terokai fungsi aplikasi untuk menyelesaikan tugas khusus domain, dengan input dan output klasik.