Differences
This shows you the differences between two versions of the page.
Both sides previous revisionPrevious revisionNext revision | Previous revision | ||
projects:quantum:distributed [2024/12/05 14:44] – kymki | projects:quantum:distributed [2024/12/06 16:05] (current) – kymki | ||
---|---|---|---|
Line 1: | Line 1: | ||
- | {{ : | ||
- | |||
- | Massive investments are being made in the European landscape of quantum computing. The question is what frameworks that enable orchestration of calculations to only deploy the most optimal problem formulation on the most suitable piece of hardware. | ||
- | |||
- | ==== Problem statement ==== | ||
< | < | ||
< | < | ||
- | <link href="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.7.0/styles/monokai-sublime.min.css" rel=" | + | <meta charset="UTF-8"> |
- | < | + | <meta name=" |
- | < | + | < |
+ | < | ||
+ | /* Container for the entire Ramble Meter */ | ||
+ | .ramble-meter-container { | ||
+ | display: flex; | ||
+ | align-items: | ||
+ | justify-content: | ||
+ | margin: 20px 0; | ||
+ | } | ||
+ | |||
+ | | ||
+ | | ||
+ | position: relative; | ||
+ | width: 200px; | ||
+ | height: 40px; /* Scaled down */ | ||
+ | background: linear-gradient(to right, green, yellow, orange, red); | ||
+ | border-radius: | ||
+ | overflow: hidden; | ||
+ | box-shadow: 0 2px 8px rgba(0, 0, 0, 0.3); | ||
+ | } | ||
+ | |||
+ | | ||
+ | | ||
+ | position: absolute; | ||
+ | top: 5px; /* Adjust for centering */ | ||
+ | left: 50%; /* Default position */ | ||
+ | width: 4px; /* Visible width */ | ||
+ | height: 30px; | ||
+ | background: black; | ||
+ | border-radius: 2px; | ||
+ | z-index: 2; | ||
+ | box-shadow: 0 0 10px rgba(0, 0, 0, 0.5); /* Glow effect */ | ||
+ | } | ||
+ | |||
+ | /* Label in the middle of the meter */ | ||
+ | | ||
+ | | ||
+ | top: 50%; | ||
+ | left: 50%; | ||
+ | transform: translate(-50%, | ||
+ | font-family: | ||
+ | font-size: 12px; /* Adjusted for smaller size */ | ||
+ | font-weight: | ||
+ | color: #fff; | ||
+ | text-shadow: | ||
+ | z-index: 3; | ||
+ | } | ||
+ | |||
+ | /* Tooltip styling */ | ||
+ | | ||
+ | visibility: hidden; | ||
+ | width: 250px; | ||
+ | background-color: | ||
+ | color: #fff; | ||
+ | text-align: center; | ||
+ | padding: 10px; | ||
+ | border-radius: | ||
+ | position: absolute; | ||
+ | top: 50%; /* Vertically aligned */ | ||
+ | left: 110%; /* Position to the right of the meter */ | ||
+ | transform: translateY(-50%); | ||
+ | font-size: 12px; | ||
+ | z-index: 10; | ||
+ | box-shadow: 0 2px 5px rgba(0, 0, 0, 0.3); | ||
+ | } | ||
+ | |||
+ | | ||
+ | | ||
+ | visibility: visible; | ||
+ | } | ||
+ | |||
+ | | ||
+ | | ||
+ | position: relative; | ||
+ | display: flex; | ||
+ | align-items: | ||
+ | } | ||
+ | | ||
+ | < | ||
+ | document.addEventListener(" | ||
+ | const needle = document.querySelector(" | ||
+ | const rambleMeter = document.querySelector(" | ||
+ | const level = rambleMeter.getAttribute(" | ||
+ | needle.style.left = `${Math.min(Math.max(level, | ||
+ | }); | ||
+ | | ||
</ | </ | ||
< | < | ||
- | <pre><code class=" | + | <!-- Ramble Meter --> |
- | def build_workflow(): | + | |
- | | + | |
- | | + | < |
- | | + | < |
- | </code></pre> | + | <div class=" |
+ | </div> | ||
+ | <div class=" | ||
+ | </ | ||
+ | | ||
</ | </ | ||
</ | </ | ||
+ | {{ : | ||
+ | |||
+ | Massive investments are being made in the European landscape of quantum computing. The question is what frameworks that enable orchestration of calculations to only deploy the most optimal problem formulation on the most suitable piece of hardware. | ||
+ | |||
+ | ==== Problem statement ==== | ||
As a researcher and innovator in the quantum life-science area, I want to be able to develop or test an algorithm locally on my laptop and iteratively expand on it in terms of parameters, noise models used, systems analysed etc. I want to define a grid of parameters, something like: | As a researcher and innovator in the quantum life-science area, I want to be able to develop or test an algorithm locally on my laptop and iteratively expand on it in terms of parameters, noise models used, systems analysed etc. I want to define a grid of parameters, something like: | ||
Line 63: | Line 152: | ||
Create and append noise_spec (function: apply_noise_model, | Create and append noise_spec (function: apply_noise_model, | ||
- | Workflow | + | Which yields a workflow |
" | " | ||
Line 262: | Line 352: | ||
As mentioned earlier, we use ColonyOS features to create and schedule workflows of processes. This can be done in one go through using the Python interface ** pycolonies **: | As mentioned earlier, we use ColonyOS features to create and schedule workflows of processes. This can be done in one go through using the Python interface ** pycolonies **: | ||
- | <code python> | + | < |
+ | < | ||
+ | <link href=" | ||
+ | <script src=" | ||
+ | < | ||
+ | </ | ||
+ | < | ||
+ | <pre>< | ||
def build_workflow(): | def build_workflow(): | ||
step_name = " | step_name = " | ||
Line 357: | Line 453: | ||
workflow_graph = colonies.submit_workflow(workflow, | workflow_graph = colonies.submit_workflow(workflow, | ||
print(f" | print(f" | ||
- | </ | + | |
+ | </ | ||
+ | </ | ||
+ | </ | ||
This workflow generates a graph much like the one described earlier. Each function spec takes a node identified and generates data for instantiating a FuncSpec object, like for instance the one electron integral: | This workflow generates a graph much like the one described earlier. Each function spec takes a node identified and generates data for instantiating a FuncSpec object, like for instance the one electron integral: | ||
- | <code python> | + | < |
+ | < | ||
+ | <link href=" | ||
+ | <script src=" | ||
+ | < | ||
+ | </ | ||
+ | < | ||
+ | <pre>< | ||
def generate_one_electron_integrals_spec(nodename): | def generate_one_electron_integrals_spec(nodename): | ||
one_electron_uuid = str(uuid.uuid4()) | one_electron_uuid = str(uuid.uuid4()) | ||
Line 373: | Line 480: | ||
) | ) | ||
) | ) | ||
- | </ | + | </ |
+ | |||
+ | </ | ||
+ | </html> | ||
The executor used in this example, in turn, imports the required functions and calls them with appropriate arguments: | The executor used in this example, in turn, imports the required functions and calls them with appropriate arguments: | ||
- | <code python> | + | < |
+ | < | ||
+ | <link href=" | ||
+ | <script src=" | ||
+ | < | ||
+ | </ | ||
+ | < | ||
+ | <pre>< | ||
from quantum_workflow.hamiltonian import ( | from quantum_workflow.hamiltonian import ( | ||
calculate_one_electron_integrals, | calculate_one_electron_integrals, | ||
Line 465: | Line 582: | ||
| | ||
etc.. | etc.. | ||
+ | </ | ||
+ | </ | ||
+ | </ | ||
- | </ | ||
calculate_one_electron_integrals and other functions under the executor is what contains the actual qiskit implementation: | calculate_one_electron_integrals and other functions under the executor is what contains the actual qiskit implementation: | ||
- | <code python> | + | < |
+ | < | ||
+ | <link href=" | ||
+ | <script src=" | ||
+ | < | ||
+ | </ | ||
+ | < | ||
+ | <pre>< | ||
from pyscf import gto, scf, ao2mo | from pyscf import gto, scf, ao2mo | ||
Line 515: | Line 641: | ||
raise e | raise e | ||
return uuid | return uuid | ||
+ | </ | ||
+ | </ | ||
+ | </ | ||
- | </ | ||
Clearly, for simplicity here I'm using PySCF to do my integral calculations, | Clearly, for simplicity here I'm using PySCF to do my integral calculations, |