diff --git a/docs/guides/save-credentials.mdx b/docs/guides/save-credentials.mdx index bf3ab8b7a9c..74fb6b4807b 100644 --- a/docs/guides/save-credentials.mdx +++ b/docs/guides/save-credentials.mdx @@ -14,10 +14,9 @@ If you are working in a trusted Python environment (such as on a personal laptop ## Before you begin -1. Ensure that you have an [IBM Cloud account.](https://quantum.cloud.ibm.com/registration) 1. Ensure you are working in an active Python environment with the [Qiskit SDK and Qiskit Runtime installed](/docs/guides/install-qiskit#local). 1. Activate the Python virtual environment and run Python in your virtual environment. -1. Log in to [IBM Quantum Platform](https://quantum.cloud.ibm.com) with an IBMid or Google account. +1. Log in to [IBM Quantum Platform](https://quantum.cloud.ibm.com). ## Find your access credentials diff --git a/docs/guides/serverless-first-program.ipynb b/docs/guides/serverless-first-program.ipynb index 4a95a9f7781..e94f4a30b2d 100644 --- a/docs/guides/serverless-first-program.ipynb +++ b/docs/guides/serverless-first-program.ipynb @@ -2,7 +2,7 @@ "cells": [ { "cell_type": "markdown", - "id": "e17b430a-ec17-4a88-9a71-9ce365059bea", + "id": "cdc8dc1e-0cff-46c1-94d0-97456d278e27", "metadata": {}, "source": [ "---\n", @@ -16,7 +16,7 @@ }, { "cell_type": "markdown", - "id": "90e824fb-dcf6-4a8b-9808-d66aa9bfb3b5", + "id": "b6d632cb-d884-4963-9c8d-8f3a3acd8a7d", "metadata": { "tags": [ "version-info" @@ -48,28 +48,16 @@ }, { "cell_type": "markdown", - "id": "b32bff85-1760-4296-8f5b-ea6e5c942bbe", + "id": "1cc46aeb-aff6-4fab-9d78-69f2bfe98d98", "metadata": {}, "source": [ "This example demonstrates how to use `qiskit-serverless` tools to create a parallel transpilation program, and then implement `qiskit-ibm-catalog` to deploy your program to IBM Quantum Platform to use as a reusable remote service." ] }, - { - "cell_type": "markdown", - "id": "e3603a5c-78f4-40ec-9568-7a45664acfc7", - "metadata": {}, - "source": [ - "## Example: remote transpilation with Qiskit Serverless\n", - "\n", - "Start with the following example that transpiles a `circuit` against a given `backend` and target `optimization_level`, and gradually add more elements to deploy your workload to Qiskit Serverless.\n", - "\n", - "Put the following code cell in the file `./source_files/transpile_remote.py`. This file is the program to upload to Qiskit Serverless." - ] - }, { "cell_type": "code", - "execution_count": 1, - "id": "21ea3269-1946-40b4-9c0f-9431003c2d0b", + "execution_count": 2, + "id": "b186515d-7686-43c3-94a6-187eba0808b9", "metadata": { "editable": true, "slideshow": { @@ -87,10 +75,36 @@ "Path(\"./source_files\").mkdir(exist_ok=True)" ] }, + { + "cell_type": "markdown", + "id": "cad16f43-8548-4849-a4b8-09059a8b747c", + "metadata": {}, + "source": [ + "## Example: remote transpilation with Qiskit Serverless\n", + "\n", + "Start with the following example that transpiles a `circuit` against a given `backend` and target `optimization_level`, and gradually add more elements to deploy your workload to Qiskit Serverless.\n", + "\n", + "Serverless uploads the contents of a specific directory (in this example, the `source_files` directory) to run remotely. Once these are set up, you can adjust `transpile_remote.py` to fetch inputs and return outputs.\n", + "\n", + "\n", + "Qiskit Serverless requires setting up your workload’s `.py` files into a dedicated directory. The following structure is an example of good practice:\n", + "\n", + "```text\n", + "serverless_program\n", + "├── program_uploader.ipynb\n", + "└── source_files\n", + " ├── transpile_remote.py\n", + " └── *.py\n", + "```\n", + "\n", + "\n", + "First, run the following code cell to create a program file, `./source_files/transpile_remote.py`, which you will upload to Qiskit Serverless." + ] + }, { "cell_type": "code", - "execution_count": 2, - "id": "4b550093-1d73-4c15-905a-0caa12f7dcbe", + "execution_count": 3, + "id": "64722041-22ed-42bd-8d83-d8e9f5e5b55b", "metadata": { "editable": true, "slideshow": { @@ -124,32 +138,20 @@ }, { "cell_type": "markdown", - "id": "ea182474-7566-4a13-96d8-cfcc8f16dd8f", + "id": "7e80b5bb-0f76-43d1-a68c-97b4b22cc88a", "metadata": {}, "source": [ - "## Set up your files\n", - "\n", - "Qiskit Serverless requires setting up your workload’s `.py` files into a dedicated directory. The following structure is an example of good practice:\n", - "\n", - "```text\n", - "serverless_program\n", - "├── program_uploader.ipynb\n", - "└── source_files\n", - " ├── transpile_remote.py\n", - " └── *.py\n", - "```\n", - "\n", - "Serverless uploads the contents of `source_files` to run remotely. Once these are set up, you can adjust `transpile_remote.py` to fetch inputs and return outputs.\n", - "\n", "### Get program arguments\n", "\n", - "Your initial `transpile_remote.py` has three inputs: `circuits`, `backend_name`, and `optimization_level`. Serverless is currently limited to only accept serializable inputs and outputs. For this reason, you cannot pass in `backend` directly, so use `backend_name` as a string instead." + "Your initial `transpile_remote.py` has three inputs: `circuits`, `backend_name`, and `optimization_level`. Serverless is currently limited to only accept serializable inputs and outputs. For this reason, you cannot pass in `backend` directly, so use `backend_name` as a string instead.\n", + "\n", + "The following cell appends code to your `transpile_remote.py` file." ] }, { "cell_type": "code", - "execution_count": 3, - "id": "54a8d2c6-a3f4-4169-9210-dd213e2273d2", + "execution_count": 4, + "id": "6819379b-d7b2-4fda-9e6b-459eec748a79", "metadata": {}, "outputs": [ { @@ -174,16 +176,18 @@ }, { "cell_type": "markdown", - "id": "bf57e8a8-4f64-4933-978d-c16bda4e0c0c", + "id": "5ae9fb12-f06f-4f7d-8f37-1d872285deab", "metadata": {}, "source": [ - "At this point, you can get your backend with `QiskitRuntimeService` and add your existing program with the following code. The following code requires that you have already [saved your credentials](/docs/guides/cloud-setup)." + "At this point, you can get your backend with `QiskitRuntimeService` and add your existing program with the following code.\n", + "\n", + "The following code assumes that you have already followed the process to save your credentials by using `QiskitRuntimeService.save_account`, and will load your default saved account unless you specify otherwise. See [Save your login credentials](/docs/guides/save-credentials) and [Initialize your Qiskit Runtime service account](/docs/guides/initialize-account) for more information." ] }, { "cell_type": "code", - "execution_count": 4, - "id": "7077ba00-1571-4f99-8c53-b1a9ac280987", + "execution_count": 5, + "id": "4b0c7d24-9b87-4e00-bb1d-f82aa967cb1d", "metadata": {}, "outputs": [ { @@ -205,7 +209,7 @@ }, { "cell_type": "markdown", - "id": "8bd63bfc-0da5-46de-ace5-8463b5ad92f3", + "id": "61e7cb3b-6d62-4b68-817a-39c0c1d95a9b", "metadata": {}, "source": [ "Finally, you can run `transpile_remote()` across all `circuits` passed in, and return the `transpiled_circuits` as a result:" @@ -213,8 +217,8 @@ }, { "cell_type": "code", - "execution_count": 5, - "id": "afdb6896-93b8-4006-b27b-49ebb16e7c1c", + "execution_count": 6, + "id": "041e7f85-e9e8-424d-8694-d54316225cc4", "metadata": {}, "outputs": [ { @@ -240,22 +244,20 @@ }, { "cell_type": "markdown", - "id": "a05fa201-aabb-43a5-8a6a-f53c5c664fc4", + "id": "dac118ab-e447-4ddd-a5f8-d13e3953db76", "metadata": {}, "source": [ "## Deploy to IBM Quantum Platform\n", "\n", - "The previous section created a program to be run remotely. The code cells in this section upload that program to Qiskit Serverless.\n", - "\n", - "Use `qiskit-ibm-catalog` to authenticate to `QiskitServerless` with your API key, which you can find on the [IBM Quantum dashboard](https://quantum.cloud.ibm.com), and upload the program.\n", + "The previous section created a program to be run remotely. The following code cells upload that program to Qiskit Serverless, before running the workload (which is demonstrated in the [Run your first Qiskit Serverless workload remotely](/docs/guides/serverless-run-first-workload) guide).\n", "\n", - "You can use `save_account()` to save your credentials (See the [Set up to use IBM Cloud](/docs/guides/cloud-setup#cloud-save) section). Note that this writes your credentials to the same file as [`QiskitRuntimeService.save_account()`](/docs/api/qiskit-ibm-runtime/qiskit-runtime-service#save_account)." + "Use `qiskit-ibm-catalog` to authenticate to `QiskitServerless` with your API key, which you can find on the [IBM Quantum dashboard](https://quantum.cloud.ibm.com), and upload the program." ] }, { "cell_type": "code", - "execution_count": 6, - "id": "cc9d5267-8019-4543-ab6a-679583d26340", + "execution_count": 13, + "id": "8d1385c3-09a5-42c6-a5bc-53f686d8410e", "metadata": {}, "outputs": [], "source": [ @@ -267,16 +269,16 @@ }, { "cell_type": "markdown", - "id": "7e8327dc-9105-4fb0-9cf0-c6e13ca32674", + "id": "a0f64820-5fb1-41b9-9cb4-5095d0b5db43", "metadata": {}, "source": [ - "Qiskit Serverless compresses the contents of `working_dir` (in this case, `source_files`) into a `tar`, which is uploaded and cleaned up after. The `entrypoint` identifies the main program executable for Qiskit Serverless to run. Additionally, if your program has custom `pip` dependencies, you can add them to a `dependencies` array:" + "Qiskit Serverless compresses the contents of `working_dir` (in this case, `source_files`) into a `tar`, which is uploaded and cleaned up after. The `entrypoint` identifies the main program executable for Qiskit Serverless to run." ] }, { "cell_type": "code", - "execution_count": 7, - "id": "62738969-b19c-484e-8591-4f89c99990ed", + "execution_count": 8, + "id": "c1cdd46d-71e9-4711-a09b-6eca569ede6a", "metadata": {}, "outputs": [], "source": [ @@ -289,8 +291,8 @@ }, { "cell_type": "code", - "execution_count": 8, - "id": "ed72ee48-a643-4d2e-b245-6e9ab3673ddb", + "execution_count": 9, + "id": "8b675d04-bde8-4b3d-b9e5-99982ef742e1", "metadata": {}, "outputs": [ { @@ -299,7 +301,7 @@ "QiskitFunction(transpile_remote_serverless)" ] }, - "execution_count": 8, + "execution_count": 9, "metadata": {}, "output_type": "execute_result" } @@ -310,7 +312,7 @@ }, { "cell_type": "markdown", - "id": "9a22d507-2489-4f2f-af78-c9249ed3fc3d", + "id": "3a840c18-3010-4d05-91cb-592e2692c1d7", "metadata": {}, "source": [ "To check if it successfully uploaded, use `serverless.list()`:" @@ -318,8 +320,8 @@ }, { "cell_type": "code", - "execution_count": 9, - "id": "ff7d8283-ee72-4167-8a8a-1f07367ba6ef", + "execution_count": 10, + "id": "afaa3935-adf7-4b28-a8f0-583a82bbe3f1", "metadata": {}, "outputs": [ { @@ -328,7 +330,7 @@ "QiskitFunction(transpile_remote_serverless)" ] }, - "execution_count": 9, + "execution_count": 10, "metadata": {}, "output_type": "execute_result" } @@ -344,8 +346,8 @@ }, { "cell_type": "code", - "execution_count": 10, - "id": "7fee3152-025d-4df6-8299-591fe0482dac", + "execution_count": 11, + "id": "484713e3-b6ac-4a7a-9425-e9ac34b1bb6e", "metadata": { "tags": [ "remove-cell" @@ -359,8 +361,8 @@ }, { "cell_type": "code", - "execution_count": 11, - "id": "f0730886-1d67-4d1b-9ab2-133cbcfc7e49", + "execution_count": 12, + "id": "413e5d94-00f6-4c47-80d0-b5c4441934fc", "metadata": { "tags": [ "remove-cell" @@ -394,7 +396,17 @@ }, { "cell_type": "markdown", - "id": "f8940b98-33f7-4029-ac77-60058c4aee78", + "id": "6ff556c1-64bb-41ae-9c6c-9019a3cab9ca", + "metadata": {}, + "source": [ + "\n", + "Currently, the [Workloads table](https://quantum.cloud.ibm.com/workloads) on IBM Quantum Platform only reflects Qiskit Runtime workloads. To see the status of your Qiskit Serverless workloads, use `job.status()`. Find an example in the [Run your first Qiskit Serverless workload remotely](/docs/guides/serverless-run-first-workload#serverless-job-status) guide.\n", + "" + ] + }, + { + "cell_type": "markdown", + "id": "a416b143-6f70-49dc-ab2f-ad66f042cab1", "metadata": {}, "source": [ "## Next steps\n", @@ -427,5 +439,5 @@ } }, "nbformat": 4, - "nbformat_minor": 2 + "nbformat_minor": 4 } diff --git a/docs/guides/serverless-run-first-workload.ipynb b/docs/guides/serverless-run-first-workload.ipynb index f4b6142bb6d..58489ac29f4 100644 --- a/docs/guides/serverless-run-first-workload.ipynb +++ b/docs/guides/serverless-run-first-workload.ipynb @@ -225,6 +225,7 @@ "id": "87dbb375-cd24-4d0f-a2fc-c653db8345e3", "metadata": {}, "source": [ + "\n", "## Check job status\n", "\n", "With your Qiskit Serverless `job_id`, you can check the status of running jobs. This includes the following statuses:\n", diff --git a/docs/guides/serverless.mdx b/docs/guides/serverless.mdx index cf59cbbdbf4..5346fbc8747 100644 --- a/docs/guides/serverless.mdx +++ b/docs/guides/serverless.mdx @@ -9,13 +9,17 @@ Qiskit Serverless provides a simple interface to run workloads across quantum-cl Premium users can build, deploy, and run their workloads remotely on classical compute made available through IBM Quantum Platform. + + **Qiskit Serverless is getting an upgrade, and its features are changing fast.** During this development phase, find release notes and the most recent documentation at the [Qiskit Serverless GitHub](https://qiskit.github.io/qiskit-serverless/index.html) page. + + This is an experimental feature available only for IBM Quantum Premium Plan, Flex Plan, and On-Prem (via IBM Quantum Platform API) Plan users. ## When should I use Qiskit Serverless? -Qiskit Serverless helps manage classical and quantum resources across the entire [Qiskit patterns](./intro-to-patterns) workflow. This includes some of the following examples: +Qiskit Serverless helps manage classical and quantum resources across the entire [Qiskit patterns](/docs/guides/intro-to-patterns) workflow. This includes some of the following examples: - Parallelizing classical tasks, such as pre-processing and post-processing - Persisting long-running workloads in the cloud, even if your laptop is turned off @@ -40,14 +44,14 @@ pip install qiskit-ibm-catalog qiskit_serverless `qiskit_ibm_catalog` provides the client-side tools to upload and run remote programs, while `qiskit_serverless` provides server-side tools to distribute compute and manage data. These packages require `python` 3.11+. For users and organizations who want to run Qiskit Serverless on custom infrastructure, follow the [Cloud infrastructure setup](https://qiskit.github.io/qiskit-serverless/) guide. -Currently, the IBM Quantum workloads table only reflects Qiskit Runtime workloads. Use `job.status()` to see your Qiskit Serverless workload's current status. +Currently, the IBM Quantum workloads table only reflects Qiskit Runtime workloads. Use `job.status()` to see your Qiskit Serverless workload's current status. Find an example in the [Run your first Qiskit Serverless workload remotely](/docs/guides/serverless-run-first-workload#serverless-job-status) guide. ## Next steps -- Explore how to [write your first Qiskit Serverless program](./serverless-first-program). +- Explore how to [write your first Qiskit Serverless program](/docs/guides/serverless-first-program). - Try out some [tutorials](/docs/tutorials). \ No newline at end of file