Pengantar managed workflow
Qiskit Functions dan managed workflow adalah fitur beta yang hanya tersedia untuk pengguna paket Premium, Flex, dan On-Prem (melalui API IBM Quantum® Platform).
Managed workflow menjalankan kode Python kustom milikmu di komputasi klasik yang dikelola IBM Quantum Platform untukmu. Gunakan managed workflow untuk menjalankan workflow hibrida kuantum-klasik, diagonalisasi skala besar, dan tugas paralel yang berjalan lama tanpa perlu mengelola infrastruktur komputasi atau penyimpanan.
Kapan menggunakan managed workflow
Gunakan managed workflow ketika tidak ada Catalog Function siap pakai yang mencakup tugasmu, atau ketika kamu ingin mengemas metodemu sendiri sebagai fungsi yang bisa dipakai ulang. Managed workflow cocok ketika kamu ingin melakukan hal-hal berikut:
-
Menjalankan job panjang di cloud. Managed workflow tetap berjalan saat kamu menutup laptop, dan kamu bisa tersambung kembali ke job-nya nanti.
-
Menggunakan node dengan memori besar dan GPU. Pilih sumber daya memori, CPU, dan GPU yang dibutuhkan beban kerjamu.
-
Menjalankan tugas secara paralel. Mulai banyak job single-node pada saat yang sama.
Kamu menyediakan kode workflow, dependensinya, dan ukuran komputasi yang didukungnya. Managed workflow menjalankan workflow di komputasi yang dikelola IBM® dalam lingkungan siap pakai dengan paket-paketmu yang sudah terinstal, dan menyediakan penyimpanan cloud untuk file yang dibaca dan ditulis workflow.
Cara kerja managed workflow
Kamu mengunggah workflow satu kali dan menjalankan job sebanyak yang kamu butuhkan. Setiap job bekerja dengan cara berikut:
-
Job dimulai di lingkungan baru dengan disk lokal kosong. Managed workflow mematikan lingkungan tersebut setelah job selesai.
-
Job berjalan pada salah satu ukuran komputasi yang kamu tentukan saat mengunggah workflow. Kamu bisa memilih ukuran yang berbeda untuk setiap run.
-
Job bisa membaca dan menulis penyimpanan file milik workflow. File di penyimpanan file tetap ada setelah job selesai.
Karena setiap job dimulai dengan disk lokal kosong, job berikutnya hanya bisa menemukan file yang disimpan oleh job sebelumnya ke penyimpanan file.
Siklus hidup sebuah run
Setiap job berjalan secara asinkron hingga 24 jam. Kamu bisa memiliki hingga 50 job aktif pada saat yang sama jika instance-mu punya alokasi yang cukup.
Tabel berikut menjelaskan setiap tahap dalam diagram dan status job yang kamu lihat selama tahap tersebut:
| Tahap | Yang terjadi | Status job |
|---|---|---|
| Upload | Kamu mengunggah kode, dependensi, dan ukuran workflow. Workflow menolak upload yang tidak valid sebelum job apa pun berjalan. | Tidak ada (belum ada job) |
| Antrean | Kamu memanggil run(). Workflow memeriksa apakah instance-mu punya alokasi yang cukup, lalu menjadwalkan job saat komputasi tersedia. | QUEUED |
| Mulai | Workflow membuat lingkungan dengan compute profile yang kamu pilih. | INITIALIZING |
| Run | Entrypoint workflow-mu berjalan. Entrypoint bisa melaporkan progresnya dengan update_status(), dan kamu bisa membaca lognya dengan logs() selagi berjalan. | RUNNING, atau tahap yang kamu atur, seperti RUNNING: WAITING_FOR_QPU |
| Hasil | Job selesai, dan workflow mematikan lingkungannya sambil tetap menyimpan hasil dan log. | DONE, ERROR, atau CANCELED |
Apa yang bisa diakses job yang sedang berjalan
Setiap job berjalan di lingkungan yang terisolasi. Diagram dan tabel berikut menunjukkan sumber daya yang bisa dipakai job yang sedang berjalan.
| Sumber daya | Yang bisa dipakai job |
|---|---|
| Komputasi | CPU, memori, dan GPU dari compute profile yang kamu pilih untuk job. |
| Kode dan paket | File yang kamu unggah bersama workflow, dan paket yang didukung yang terinstal di lingkungan. |
| Argumen | Argumen yang kamu berikan ke run(). Baca dengan get_arguments(). |
| Akses QPU | Kredensial dan instance yang kamu gunakan untuk memanggil run(). Job QPU yang dikirim workflow berjalan di instance-mu dan dihitung ke penggunaanmu. |
| Output | Hasil yang disimpan job dengan save_result(), log yang dicetak job, dan pembaruan status yang diatur job dengan update_status(). |
| Penyimpanan file | File yang dibagikan bersama oleh semua run workflow-mu. File tetap ada di penyimpanan setelah job selesai. |
| Internet | Tidak ada akses. Job tidak bisa membuat koneksi keluar. Deklarasikan paket saat mengunggah workflow, dan sediakan data sebagai argumen atau file. |
Keamanan dan isolasi
Managed workflow mengisolasi setiap job dari job lain dan membatasi hak istimewa kode yang berjalan di dalamnya. Batas akses pada tabel sebelumnya adalah bagian dari isolasi ini. Managed workflow juga menerapkan perlindungan berikut:
-
Isolasi job. Tidak ada job lain yang berjalan di lingkungan job-mu. Ini termasuk job pengguna lain dan job-mu sendiri yang berjalan pada saat yang sama.
-
Hasil, log, dan penyimpanan. Hanya pengguna yang menjalankan job yang bisa membaca hasil dan lognya.
-
Kredensial. Managed workflow mengenkripsi kredensial yang dipakai job, termasuk API token-mu, saat menyimpannya. Kode workflow-mu bisa membaca kredensial ini selama job berjalan.
-
Hak istimewa. Managed workflow menghapus hak istimewa tingkat administrator dari lingkungan sebelum entrypoint-mu dimulai.
Perbandingan dengan HPC on-premises
Managed workflow berbeda dari cluster HPC on-premises dalam hal cara mendapatkan waktu komputasi, menyiapkan software, dan mengirim job. Tabel berikut membandingkan tugas-tugas umum.
| Tugas | Cluster HPC on-premises | Managed workflow |
|---|---|---|
| Mendapatkan waktu komputasi | Meminta alokasi atau reservasi dari administrator cluster. | Gunakan alokasi instance IBM Quantum-mu. Workflow mengantrekan setiap job saat kamu memanggil run(). |
| Mengakses sistem | Terhubung ke login node dengan SSH. | Gunakan klien Python di komputer lokalmu. Managed workflow tidak menyediakan login node. |
| Menginstal software | Build software, muat modul, atau minta administrator menginstal paket. | Gunakan paket yang didukung yang terinstal di setiap lingkungan, atau unggah wheel untuk paket lainnya. |
| Mengirim job | Tulis batch script dan kirim ke scheduler. | Panggil run() dengan argumen job. |
| Meminta sumber daya | Meminta node, CPU, memori, dan GPU. | Pilih salah satu ukuran komputasi yang didefinisikan untuk workflow. Setiap job berjalan di satu node. |
| Menjalankan parameter sweep | Kirim job array. | Panggil run() satu kali untuk setiap set argumen. |
| Menyimpan file bersama | Menulis ke file system scratch bersama. | Tulis ke penyimpanan file milik workflow. |
| Membatasi waktu run | Atur batas wall-time. | Workflow membatalkan job setelah 24 jam. |
| Checkpoint untuk job panjang | Tulis checkpoint ke penyimpanan scratch. | Simpan hasil perantara ke penyimpanan file. |
| Menjalankan ulang job yang gagal | Kirim ulang job. | Panggil run() lagi. Workflow tidak mencoba ulang job yang gagal secara otomatis. |
| Memantau job | Periksa antrean dan file log dari login node. | Periksa status, log, dan hasil setiap job dari sesi Python lokalmu. |
Langkah selanjutnya
- Instal paket klien dan lakukan autentikasi.
- Deploy managed workflow pertamamu untuk mengunggah workflow, menjalankannya, dan mendapatkan hasilnya.