From 3901bc737c337b75ac8fcb4d6e775f076c92d24b Mon Sep 17 00:00:00 2001 From: Aleksander Wennersteen Date: Sat, 14 Feb 2026 09:58:10 +0100 Subject: [PATCH 1/7] [Pasqal] add example and instructions for CUDA-Q jobs push --- demo/qrmi/jobs/run_cudaq_pasqal.sh | 12 ++++++++++++ demo/qrmi/jobs/run_local_backend.sh | 9 +++++++++ demo/qrmi/jobs/run_pulser_backend.sh | 2 +- demo/qrmi/slurm-docker-cluster/INSTALL.md | 17 ++++++++++++++++- 4 files changed, 38 insertions(+), 2 deletions(-) create mode 100755 demo/qrmi/jobs/run_cudaq_pasqal.sh create mode 100644 demo/qrmi/jobs/run_local_backend.sh diff --git a/demo/qrmi/jobs/run_cudaq_pasqal.sh b/demo/qrmi/jobs/run_cudaq_pasqal.sh new file mode 100755 index 00000000..2741aed3 --- /dev/null +++ b/demo/qrmi/jobs/run_cudaq_pasqal.sh @@ -0,0 +1,12 @@ +#!/bin/bash + +#SBATCH --job-name=cudaq_pasqal_job +#SBATCH --output=/data/job_%j.out +#SBATCH --error=/data/job_%j.out +#SBATCH --ntasks=1 +#SBATCH --cpus-per-task=1 +#SBATCH --qpu=EMU_FREE + +source /shared/pyenv/bin/activate + +srun python /shared/qrmi/examples/qrmi/python/cudaq/pasqal.py diff --git a/demo/qrmi/jobs/run_local_backend.sh b/demo/qrmi/jobs/run_local_backend.sh new file mode 100644 index 00000000..c18ea120 --- /dev/null +++ b/demo/qrmi/jobs/run_local_backend.sh @@ -0,0 +1,9 @@ +#!/bin/bash + +#SBATCH --job-name=pasqal_job +#SBATCH --ntasks=1 +#SBATCH --cpus-per-task=1 +#SBATCH --qpu=PASQAL_LOCAL + +# Your script goes here +echo "Success" diff --git a/demo/qrmi/jobs/run_pulser_backend.sh b/demo/qrmi/jobs/run_pulser_backend.sh index 3e221de9..cf74f58f 100644 --- a/demo/qrmi/jobs/run_pulser_backend.sh +++ b/demo/qrmi/jobs/run_pulser_backend.sh @@ -7,4 +7,4 @@ # Your script goes here source /shared/pyenv/bin/activate -srun python /shared/qrmi/examples/pulser_backend/pulser_backend.py +srun python /shared/qrmi/examples/pulser_backend/pasqal/pulser_backend.py diff --git a/demo/qrmi/slurm-docker-cluster/INSTALL.md b/demo/qrmi/slurm-docker-cluster/INSTALL.md index 27393d61..29590b5e 100644 --- a/demo/qrmi/slurm-docker-cluster/INSTALL.md +++ b/demo/qrmi/slurm-docker-cluster/INSTALL.md @@ -186,6 +186,15 @@ Options provided by plugins: ### Running examples of primitive job in Slurm Cluster +> [!NOTE] +> The CUDA-Q Pasqal QRMI example below requires: +> - CUDA-Q installed in `/shared/pyenv` with `libcudaq-pasqal-qpu.so` +> - QRMI built at `/shared/qrmi/target/release/libqrmi.so` +> - Pasqal cloud credentials configured (for example `/root/.pasqal/config`) +> - `qrmi_config.json` resource name matching `--qpu=EMU_FREE` +> - Optional per-resource override in `qrmi_config.json` `environment`: +> `CUDAQ_QRMI_RESOURCE_TYPE=pasqal-cloud` + 1. Loging in to login node ```bash @@ -210,7 +219,13 @@ Options provided by plugins: [root@login /]# sbatch /shared/spank-plugins/demo/qrmi/jobs/run_pulser_backend.sh ``` -5. Checking primitive results +5. Running CUDA-Q Pasqal Cloud QRMI job + +```bash +[root@login /]# sbatch /shared/spank-plugins/demo/qrmi/jobs/run_cudaq_pasqal.sh +``` + +6. Checking primitive results Once above scripts are completed, you must find `slurm-{job_id}.out` in the current directory. From f365fe3137c7a8feb890b9203999ee9efd3ed6a9 Mon Sep 17 00:00:00 2001 From: Aleksander Wennersteen Date: Fri, 27 Feb 2026 14:55:25 +0100 Subject: [PATCH 2/7] Improve uneeded files and notice --- demo/qrmi/jobs/run_local_backend.sh | 9 --------- demo/qrmi/slurm-docker-cluster/INSTALL.md | 11 ++--------- 2 files changed, 2 insertions(+), 18 deletions(-) delete mode 100644 demo/qrmi/jobs/run_local_backend.sh diff --git a/demo/qrmi/jobs/run_local_backend.sh b/demo/qrmi/jobs/run_local_backend.sh deleted file mode 100644 index c18ea120..00000000 --- a/demo/qrmi/jobs/run_local_backend.sh +++ /dev/null @@ -1,9 +0,0 @@ -#!/bin/bash - -#SBATCH --job-name=pasqal_job -#SBATCH --ntasks=1 -#SBATCH --cpus-per-task=1 -#SBATCH --qpu=PASQAL_LOCAL - -# Your script goes here -echo "Success" diff --git a/demo/qrmi/slurm-docker-cluster/INSTALL.md b/demo/qrmi/slurm-docker-cluster/INSTALL.md index 29590b5e..ccc5c5b2 100644 --- a/demo/qrmi/slurm-docker-cluster/INSTALL.md +++ b/demo/qrmi/slurm-docker-cluster/INSTALL.md @@ -186,15 +186,6 @@ Options provided by plugins: ### Running examples of primitive job in Slurm Cluster -> [!NOTE] -> The CUDA-Q Pasqal QRMI example below requires: -> - CUDA-Q installed in `/shared/pyenv` with `libcudaq-pasqal-qpu.so` -> - QRMI built at `/shared/qrmi/target/release/libqrmi.so` -> - Pasqal cloud credentials configured (for example `/root/.pasqal/config`) -> - `qrmi_config.json` resource name matching `--qpu=EMU_FREE` -> - Optional per-resource override in `qrmi_config.json` `environment`: -> `CUDAQ_QRMI_RESOURCE_TYPE=pasqal-cloud` - 1. Loging in to login node ```bash @@ -221,6 +212,8 @@ Options provided by plugins: 5. Running CUDA-Q Pasqal Cloud QRMI job +Requires additionally installing CUDA-Q with QRMI support. + ```bash [root@login /]# sbatch /shared/spank-plugins/demo/qrmi/jobs/run_cudaq_pasqal.sh ``` From 53908cac92ff0ee099723630dbf899377eab2f8b Mon Sep 17 00:00:00 2001 From: Munetaka Ohtani Date: Fri, 27 Feb 2026 23:07:58 +0900 Subject: [PATCH 3/7] Removal of openssl dependencies --- plugins/spank_qrmi/CMakeLists.txt | 10 +--------- 1 file changed, 1 insertion(+), 9 deletions(-) diff --git a/plugins/spank_qrmi/CMakeLists.txt b/plugins/spank_qrmi/CMakeLists.txt index 08b28508..8f025d6a 100644 --- a/plugins/spank_qrmi/CMakeLists.txt +++ b/plugins/spank_qrmi/CMakeLists.txt @@ -112,16 +112,8 @@ add_library (spank_qrmi MODULE spank_qrmi.c buf.c strbuf.c) add_dependencies(spank_qrmi QRMI) set_target_properties (spank_qrmi PROPERTIES PREFIX "" SUFFIX "" OUTPUT_NAME "spank_qrmi.so") - -if(ENABLE_MUNGE) - find_library(MUNGE_LIB NAMES munge REQUIRED) - set(MUNGE_LINK_LIB ${MUNGE_LIB}) -else() - set(MUNGE_LINK_LIB "") -endif() - target_link_libraries(spank_qrmi - PRIVATE dl pthread m ${MUNGE_LINK_LIB} ${QRMI_SOURCE_DIR}/target/release/libqrmi.a + PRIVATE dl pthread m ${QRMI_SOURCE_DIR}/target/release/libqrmi.a ) target_include_directories(spank_qrmi PRIVATE ${QRMI_SOURCE_DIR} From bc90255784b8a02c2a450c49c8e11d5caa99550b Mon Sep 17 00:00:00 2001 From: Aleksander Wennersteen Date: Thu, 9 Apr 2026 16:48:41 +0200 Subject: [PATCH 4/7] stash --- demo/qrmi/jobs/run_cudaq_pasqal.sh | 2 ++ demo/qrmi/jobs/run_pulser_backend.sh | 7 ++--- demo/qrmi/slurm-docker-cluster/INSTALL.md | 19 ++++++++++--- plugins/spank_qrmi/spank_qrmi.c | 33 ++++++++--------------- 4 files changed, 32 insertions(+), 29 deletions(-) diff --git a/demo/qrmi/jobs/run_cudaq_pasqal.sh b/demo/qrmi/jobs/run_cudaq_pasqal.sh index 2741aed3..a9180f58 100755 --- a/demo/qrmi/jobs/run_cudaq_pasqal.sh +++ b/demo/qrmi/jobs/run_cudaq_pasqal.sh @@ -8,5 +8,7 @@ #SBATCH --qpu=EMU_FREE source /shared/pyenv/bin/activate +source /root/.cudaq/set_env.sh +export PYTHONPATH="/root/.cudaq${PYTHONPATH:+:${PYTHONPATH}}" srun python /shared/qrmi/examples/qrmi/python/cudaq/pasqal.py diff --git a/demo/qrmi/jobs/run_pulser_backend.sh b/demo/qrmi/jobs/run_pulser_backend.sh index cf74f58f..21c039f7 100644 --- a/demo/qrmi/jobs/run_pulser_backend.sh +++ b/demo/qrmi/jobs/run_pulser_backend.sh @@ -1,10 +1,11 @@ #!/bin/bash #SBATCH --job-name=pasqal_job +#SBATCH --output=/data/job_%j.out +#SBATCH --error=/data/job_%j.out #SBATCH --ntasks=1 #SBATCH --cpus-per-task=1 -#SBATCH --qpu=FRESNEL +#SBATCH --qpu=EMU_FREE -# Your script goes here source /shared/pyenv/bin/activate -srun python /shared/qrmi/examples/pulser_backend/pasqal/pulser_backend.py +srun python /shared/qrmi/examples/pulser/pasqal/pulser.py diff --git a/demo/qrmi/slurm-docker-cluster/INSTALL.md b/demo/qrmi/slurm-docker-cluster/INSTALL.md index ccc5c5b2..dab90c06 100644 --- a/demo/qrmi/slurm-docker-cluster/INSTALL.md +++ b/demo/qrmi/slurm-docker-cluster/INSTALL.md @@ -210,7 +210,18 @@ Options provided by plugins: [root@login /]# sbatch /shared/spank-plugins/demo/qrmi/jobs/run_pulser_backend.sh ``` -5. Running CUDA-Q Pasqal Cloud QRMI job +5. Running Pasqal Qiskit Provider `SamplerV2` job via QRMI + +```bash +[root@login /]# sbatch /shared/spank-plugins/demo/qrmi/jobs/run_pasqal_qpp_sampler_v2.sh +``` + +Expected output in `/data/job_.out` includes final counts, e.g.: +```text +{'100010': 10, '000100': 2, ...} +``` + +6. Running CUDA-Q Pasqal Cloud QRMI job Requires additionally installing CUDA-Q with QRMI support. @@ -218,7 +229,7 @@ Requires additionally installing CUDA-Q with QRMI support. [root@login /]# sbatch /shared/spank-plugins/demo/qrmi/jobs/run_cudaq_pasqal.sh ``` -6. Checking primitive results +7. Checking primitive results Once above scripts are completed, you must find `slurm-{job_id}.out` in the current directory. @@ -251,8 +262,8 @@ For example, ### Running serialized jobs using the qrmi_task_runner Slurm Cluster -It is possible to run JSON-serialized jobs directly using a commandline utility called qrmi_task runner. -See [the docs](https://github.com/qiskit-community/qrmi/blob/main/bin/task_runner/README.md) for that tool for details. +It is possible to run JSON-serialized jobs directly using a commandline utility called `qrmi_task_runner`. +See [the docs](https://github.com/qiskit-community/qrmi/blob/main/python/qrmi/tools/task_runner/README.md) for that tool for details. ```bash [root@login /]# sbatch /shared/spank-plugins/demo/qrmi/jobs/run_task.sh diff --git a/plugins/spank_qrmi/spank_qrmi.c b/plugins/spank_qrmi/spank_qrmi.c index 7ba47ec6..78ec49a2 100644 --- a/plugins/spank_qrmi/spank_qrmi.c +++ b/plugins/spank_qrmi/spank_qrmi.c @@ -56,22 +56,6 @@ static void acquired_resource_destroy(void *object); static qpu_resource_t *_acquire_qpu(spank_t spank_ctxt, char *name, QrmiResourceType type); static void _release_qpu(qpu_resource_t *res); -/* - * @function _dump_environ - * - * Dumps all environment variables set for the current process. - */ -static void _dump_environ() { - char **s = environ; - int pid = (int)getpid(); - int uid = (int)getuid(); - - slurm_debug("%s(%d, %d): environment variables ---", plugin_name, pid, uid); - for (; *s; s++) { - slurm_debug("%s(%d, %d): %s", plugin_name, pid, uid, *s); - } -} - /* * @function _starts_with * @@ -192,7 +176,7 @@ int slurm_spank_init_post_opt(spank_t spank_ctxt, int argc, char **argv) { if (g_qpu_names_opt == NULL) { /* noop if this is not QPU job */ - return SLURM_ERROR; + return SLURM_SUCCESS; } /* @@ -329,8 +313,6 @@ int slurm_spank_init_post_opt(spank_t spank_ctxt, int argc, char **argv) { spank_setenv(spank_ctxt, keybuf.buffer, envvar.value, KEEP_IF_EXISTS); } - _dump_environ(); - /* * Acquire QPU resource. */ @@ -419,11 +401,15 @@ int slurm_spank_task_init(spank_t spank_ctxt, int argc, char **argv) { char *optargp = NULL; if (spank_option_getopt(spank_ctxt, &spank_qrmi_options[0], &optargp) != ESPANK_SUCCESS) { - /* if spank_qrmi plugin is not registered, simply returns an error. */ - return SLURM_ERROR; + /* noop if this is not QPU job */ + return SLURM_SUCCESS; + } + if (optargp == NULL) { + /* noop if this is not QPU job */ + return SLURM_SUCCESS; } size_t optlen = strlen(optargp); - if ((optargp == NULL) || optlen == 0) { + if (optlen == 0) { /* noop if this is not QPU job */ return SLURM_SUCCESS; } @@ -568,6 +554,9 @@ int slurm_spank_exit(spank_t spank_ctxt, int argc, char **argv) { */ static qpu_resource_t *_acquired_resource_create(char *name, QrmiResourceType type, const char *token) { + if (token == NULL) { + return NULL; + } /* * use strcpy() to fix the error - ‘strncpy’ specified bound depends on the length of the * source argument - caused by some C compilers. From ef0b8ac0d8d3afe0c81575d69dec9c96d0c1a37f Mon Sep 17 00:00:00 2001 From: Aleksander Wennersteen Date: Fri, 17 Apr 2026 14:12:52 +0200 Subject: [PATCH 5/7] Update example files to match qrmi repo --- demo/qrmi/jobs/run_local.sh | 2 +- demo/qrmi/jobs/run_pulser_backend.sh | 2 +- demo/qrmi/jobs/run_qpp_sampler.sh | 11 +++++++++++ 3 files changed, 13 insertions(+), 2 deletions(-) create mode 100755 demo/qrmi/jobs/run_qpp_sampler.sh diff --git a/demo/qrmi/jobs/run_local.sh b/demo/qrmi/jobs/run_local.sh index 61624256..c2428794 100644 --- a/demo/qrmi/jobs/run_local.sh +++ b/demo/qrmi/jobs/run_local.sh @@ -9,4 +9,4 @@ # Your script goes here source /shared/pyenv/bin/activate -python /shared/qrmi/examples/pulser_backend/pasqal/send_pasqal_job_local.py +python /shared/qrmi/examples/pulser/pasqal/send_pasqal_job_local.py diff --git a/demo/qrmi/jobs/run_pulser_backend.sh b/demo/qrmi/jobs/run_pulser_backend.sh index 21c039f7..bcca9640 100644 --- a/demo/qrmi/jobs/run_pulser_backend.sh +++ b/demo/qrmi/jobs/run_pulser_backend.sh @@ -8,4 +8,4 @@ #SBATCH --qpu=EMU_FREE source /shared/pyenv/bin/activate -srun python /shared/qrmi/examples/pulser/pasqal/pulser.py +srun python /shared/qrmi/examples/pulser/pasqal/pulser_qrmi.py diff --git a/demo/qrmi/jobs/run_qpp_sampler.sh b/demo/qrmi/jobs/run_qpp_sampler.sh new file mode 100755 index 00000000..bb81e120 --- /dev/null +++ b/demo/qrmi/jobs/run_qpp_sampler.sh @@ -0,0 +1,11 @@ +#!/bin/bash + +#SBATCH --job-name=pasqal_qpp_sampler_v2 +#SBATCH --output=/data/job_%j.out +#SBATCH --error=/data/job_%j.out +#SBATCH --ntasks=1 +#SBATCH --cpus-per-task=1 +#SBATCH --qpu=EMU_FREE + +source /shared/pyenv/bin/activate +srun python /shared/qrmi/examples/qiskit_primitives/pasqal/sampler.py From c19308c6dc419810ad77444765190415e2c50528 Mon Sep 17 00:00:00 2001 From: Aleksander Wennersteen Date: Fri, 17 Apr 2026 18:37:28 +0200 Subject: [PATCH 6/7] Clean up environment setup in run_cudaq_pasqal.sh Remove unnecessary environment variable exports. --- demo/qrmi/jobs/run_cudaq_pasqal.sh | 2 -- 1 file changed, 2 deletions(-) diff --git a/demo/qrmi/jobs/run_cudaq_pasqal.sh b/demo/qrmi/jobs/run_cudaq_pasqal.sh index a9180f58..2741aed3 100755 --- a/demo/qrmi/jobs/run_cudaq_pasqal.sh +++ b/demo/qrmi/jobs/run_cudaq_pasqal.sh @@ -8,7 +8,5 @@ #SBATCH --qpu=EMU_FREE source /shared/pyenv/bin/activate -source /root/.cudaq/set_env.sh -export PYTHONPATH="/root/.cudaq${PYTHONPATH:+:${PYTHONPATH}}" srun python /shared/qrmi/examples/qrmi/python/cudaq/pasqal.py From 19dbe8d6934115f2e3b272b84c0f20095c57e35b Mon Sep 17 00:00:00 2001 From: Aleksander Wennersteen Date: Fri, 17 Apr 2026 18:39:27 +0200 Subject: [PATCH 7/7] Change sbatch command for Pasqal Qiskit job Updated the command for running Pasqal Qiskit Provider job. --- demo/qrmi/slurm-docker-cluster/INSTALL.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/demo/qrmi/slurm-docker-cluster/INSTALL.md b/demo/qrmi/slurm-docker-cluster/INSTALL.md index dab90c06..622d856a 100644 --- a/demo/qrmi/slurm-docker-cluster/INSTALL.md +++ b/demo/qrmi/slurm-docker-cluster/INSTALL.md @@ -213,7 +213,7 @@ Options provided by plugins: 5. Running Pasqal Qiskit Provider `SamplerV2` job via QRMI ```bash -[root@login /]# sbatch /shared/spank-plugins/demo/qrmi/jobs/run_pasqal_qpp_sampler_v2.sh +[root@login /]# sbatch /shared/spank-plugins/demo/qrmi/jobs/run_qpp_sampler.sh ``` Expected output in `/data/job_.out` includes final counts, e.g.: