forked from physionetchallenges/python-example-2026
-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathrun.ps1
More file actions
155 lines (121 loc) · 4.37 KB
/
Copy pathrun.ps1
File metadata and controls
155 lines (121 loc) · 4.37 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
param(
[Parameter(Mandatory=$true)]
[ValidateSet(
"build",
"train",
"train-dev",
"supplementary",
"clean"
)]
[string]$Command
)
# ============================================
# CONFIGURACIÓN
# ============================================
# >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
# IMPORTANTE:
# Si tu dataset no está en data/training_set o data/supplementary_set,
# modifica estas rutas.
# >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
$TRAIN_DATA_REL = "data/training_set"
$SUPPLEMENTARY_DATA_REL = "data/supplementary_set"
$IMAGE_NAME = "cinc2026"
$MODEL_FULL_REL = "model"
$FEATURE_CACHE_REL = ".feature_cache"
$OUT_SUPPLEMENTARY_REL = "outputs_supplementary"
# ============================================
# FUNCIONES AUXILIARES
# ============================================
function Get-AbsolutePath($relativePath) {
return (Resolve-Path $relativePath).Path
}
function Ensure-Directory($path) {
if (!(Test-Path $path)) {
New-Item -ItemType Directory -Force -Path $path | Out-Null
}
}
function Get-DockerGpuArgs {
$null = docker run --rm --gpus all `
$IMAGE_NAME `
python -c "import sys, torch; sys.exit(0 if torch.cuda.is_available() else 1)" `
2>$null
if ($LASTEXITCODE -eq 0) {
Write-Host "CUDA GPU detected. Using GPU."
return @("--gpus", "all")
}
Write-Host "CUDA GPU not available. Using CPU."
return @()
}
# ============================================
# COMANDOS
# ============================================
function Build-Image {
docker build -t $IMAGE_NAME .
}
function Train-Full {
$FULL_DATA = Get-AbsolutePath $TRAIN_DATA_REL
$MODEL_FULL = Join-Path (Get-AbsolutePath ".") $MODEL_FULL_REL
$FEATURE_CACHE = Join-Path (Get-AbsolutePath ".") $FEATURE_CACHE_REL
Ensure-Directory $MODEL_FULL
Ensure-Directory $FEATURE_CACHE
$GPU_ARGS = Get-DockerGpuArgs
docker run --rm $GPU_ARGS `
-v "${FULL_DATA}:/challenge/training_data:ro" `
-v "${MODEL_FULL}:/challenge/model" `
-v "${FEATURE_CACHE}:/challenge/.feature_cache" `
$IMAGE_NAME `
python train_model.py -d training_data -m model -v
}
# ======================
# MODO DESARROLLO (SIN REBUILD, DATASETS COMPLETOS)
# ======================
function Train-Dev {
$CODE_PATH = Get-AbsolutePath "."
$FULL_DATA = Get-AbsolutePath $TRAIN_DATA_REL
$MODEL_FULL = Join-Path $CODE_PATH $MODEL_FULL_REL
$FEATURE_CACHE = Join-Path $CODE_PATH $FEATURE_CACHE_REL
Ensure-Directory $MODEL_FULL
Ensure-Directory $FEATURE_CACHE
$GPU_ARGS = Get-DockerGpuArgs
docker run --rm $GPU_ARGS `
-v "${CODE_PATH}:/challenge" `
-v "${FULL_DATA}:/challenge/training_data:ro" `
-v "${MODEL_FULL}:/challenge/model" `
$IMAGE_NAME `
python train_model.py -d training_data -m model -v
}
function Run-Supplementary {
$MODEL_FILE = Join-Path $MODEL_FULL_REL "model.sav"
if (!(Test-Path $MODEL_FILE)) {
throw "A trained model is required at $MODEL_FILE. Run '.\run.ps1 train' first."
}
$SUPPLEMENTARY_DATA = Get-AbsolutePath $SUPPLEMENTARY_DATA_REL
$MODEL_FULL = Get-AbsolutePath $MODEL_FULL_REL
$OUT_SUPPLEMENTARY = Join-Path (Get-AbsolutePath ".") $OUT_SUPPLEMENTARY_REL
$FEATURE_CACHE = Join-Path (Get-AbsolutePath ".") $FEATURE_CACHE_REL
Ensure-Directory $OUT_SUPPLEMENTARY
Ensure-Directory $FEATURE_CACHE
$GPU_ARGS = Get-DockerGpuArgs
docker run --rm $GPU_ARGS `
-v "${SUPPLEMENTARY_DATA}:/challenge/supplementary_data:ro" `
-v "${MODEL_FULL}:/challenge/model:ro" `
-v "${OUT_SUPPLEMENTARY}:/challenge/supplementary_outputs" `
-v "${FEATURE_CACHE}:/challenge/.feature_cache" `
$IMAGE_NAME `
python run_model.py -d supplementary_data -m model -o supplementary_outputs -v
}
function Clean-All {
Remove-Item -Recurse -Force $MODEL_FULL_REL -ErrorAction SilentlyContinue
Remove-Item -Recurse -Force $OUT_SUPPLEMENTARY_REL -ErrorAction SilentlyContinue
Write-Host "Modelos y outputs eliminados."
}
# ============================================
# SWITCH PRINCIPAL
# ============================================
switch ($Command) {
"build" { Build-Image }
"train" { Train-Full }
"train-dev" { Train-Dev }
"supplementary" { Run-Supplementary }
"clean" { Clean-All }
}