Skip to content

Commit 29a59b8

Browse files
committed
Prepare calibrated Montage campaign examples
1 parent c130e7f commit 29a59b8

33 files changed

Lines changed: 16115 additions & 68 deletions

‎connections/plafrim-execution-environment.yaml‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ connections:
1919
type: ssh
2020
endpoint: plafrim
2121
username: wferreir
22-
credentialRef: file:/app/storage/credentials/ssh/plafrim-engine
22+
credentialRef: file:storage/credentials/ssh/plafrim-engine
2323
configuration:
2424
scheduler: slurm
2525
port: 22

‎real/montage-cloud-local/README.md‎

Lines changed: 10 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -13,9 +13,14 @@ needed to preserve these commands. The SIF is an additional representation for
1313
environments that use Apptainer. Docker workers use the pinned OCI image.
1414

1515
`reference-runtimes.csv` is a historical profile measured on `c3d-standard-16`.
16-
Its times are **not** measurements on `e2-medium` or the local resource. The
17-
imported plan's predicted time and cost are illustrative metadata, not a
18-
calibrated forecast or an observed result.
16+
Each workflow activity carries its corresponding value as a deterministic
17+
`simulation.durationSeconds` profile, so planning and SimGrid use the measured
18+
duration of that specific activity rather than a stage-wide default. The source
19+
timestamps have one-second resolution; the single zero-second observation is
20+
represented as one second so that every schedulable activity has a positive
21+
duration. These times are **not** measurements on `e2-medium` or the local
22+
resource. The imported plan's predicted time and cost are illustrative metadata,
23+
not a calibrated forecast or an observed result.
1924

2025
## Requirements
2126

@@ -67,8 +72,8 @@ sh "$base/submit-run.sh" montage-58-four-vm-local-050d-run-v1
6772
Set `AKOFLOW_SSH_CIDR` to the daemon's approved public egress address before
6873
creating capacity targets. The target uses the connected environment's project,
6974
the catalog's `e2-medium` offering, a catalog Ubuntu `amd64` image, and a
70-
30 GiB balanced boot disk. The scope references `gcp-environment-initial`
71-
and `local-environment-initial`. If the daemon's egress IP changes, update the
75+
30 GiB balanced boot disk. The scope references `gcp-environment-v1`
76+
and `local-environment-v1`. If the daemon's egress IP changes, update the
7277
target's SSH source range before running; the current script rejects existing
7378
targets with a different SSH range, machine type, project, instance limit, or
7479
lifecycle.

‎real/montage-cloud-local/generate.rb‎

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,12 @@
1414
abort 'source image does not match the pinned Montage release' unless source.fetch('spec').fetch('image') == 'ovvesley/akoflow-wf-montage:050d'
1515
original = source.fetch('spec').fetch('activities')
1616
runtimes = CSV.read(File.join(ROOT, 'reference-runtimes.csv'), headers: true)
17-
seconds = runtimes.to_h { |row| [row.fetch('activity_id'), row.fetch('duration_seconds').to_f] }
17+
# The source timestamps have one-second resolution. One activity completed
18+
# within the same timestamp second; model it as one second instead of a zero
19+
# duration, which is not a meaningful schedulable task.
20+
seconds = runtimes.to_h do |row|
21+
[row.fetch('activity_id'), [row.fetch('duration_seconds').to_f, 1.0].max]
22+
end
1823
abort 'expected 58 distinct activities with reference runtimes' unless original.length == 58 && original.map { |a| a.fetch('name') }.uniq.length == 58 && (original.map { |a| a['name'] } - seconds.keys).empty?
1924

2025
def output_files(command)
@@ -60,7 +65,14 @@ def output_files(command)
6065
{ 'name' => activity['name'], 'runtime' => runtime, 'run' => command,
6166
'workspaceSeedPath' => '/akoflow-wfa-shared',
6267
'cpuLimit' => activity.fetch('cpuLimit'), 'memoryLimit' => activity.fetch('memoryLimit'),
63-
'dependsOn' => activity.fetch('dependsOn', []) }
68+
'dependsOn' => activity.fetch('dependsOn', []),
69+
# Preserve the per-activity duration observed in the completed Montage
70+
# reference run. Planning and SimGrid use this deterministic baseline;
71+
# real execution still records its own observed duration independently.
72+
'simulation' => {
73+
'model' => 'deterministic',
74+
'durationSeconds' => seconds.fetch(activity.fetch('name'))
75+
} }
6476
end
6577

6678
workflow = { 'name' => NAME, 'spec' => { 'namespace' => 'showcase', 'image' => IMAGE,

‎real/montage-cloud-local/plan.json‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99
"algorithmVersion": "1",
1010
"objective": "custom",
1111
"predicted": {
12-
"makespanSeconds": 12577.0,
12+
"makespanSeconds": 12578.0,
1313
"cost": 0.183961,
1414
"feasible": true
1515
},

‎real/montage-cloud-local/scope.json‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,5 +2,5 @@
22
"id": "montage-58-four-vm-local-050d-gcp-scope-v1",
33
"name": "Montage 58 four GCP e2-medium machines and local",
44
"networkTopologyId": "montage-58-four-vm-local-050d-gcp-network-v1",
5-
"environmentVersionIds": ["gcp-environment-initial", "local-environment-initial"]
5+
"environmentVersionIds": ["gcp-environment-v1", "local-environment-v1"]
66
}

0 commit comments

Comments
 (0)