forked from physionetchallenges/python-example-2026
-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathrun.sh
More file actions
139 lines (111 loc) · 3.46 KB
/
Copy pathrun.sh
File metadata and controls
139 lines (111 loc) · 3.46 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
#!/usr/bin/env bash
set -euo pipefail
if [[ $# -lt 1 ]]; then
echo "Usage: $0 <build|train|train-dev|clean>"
exit 1
fi
COMMAND="$1"
# ============================================
# CONFIGURATION
# ============================================
TRAIN_DATA_REL="D:/data/training_set"
IMAGE_NAME="cinc2026"
MODEL_FULL_REL="model"
FEATURE_CACHE_REL=".feature_cache"
# ============================================
# HELPERS
# ============================================
get_absolute_path() {
local target_path="$1"
# Si la ruta ya es absoluta (empieza por C:, D:, X:, etc.) la dejamos tal cual
if [[ "$target_path" =~ ^[A-Za-z]: ]]; then
echo "$target_path"
else
(cd "$target_path" && pwd)
fi
}
ensure_directory() {
local dir_path="$1"
mkdir -p "$dir_path"
}
to_docker_path() {
local host_path="$1"
if command -v cygpath >/dev/null 2>&1; then
cygpath -m "$host_path"
else
echo "$host_path"
fi
}
docker_cli() {
MSYS_NO_PATHCONV=1 MSYS2_ARG_CONV_EXCL="*" docker "$@"
}
GPU_ARGS=()
configure_gpu_args() {
if docker_cli run --rm --gpus all \
"$IMAGE_NAME" \
python -c "import sys, torch; sys.exit(0 if torch.cuda.is_available() else 1)" \
>/dev/null 2>&1; then
echo "CUDA GPU detected. Using GPU."
GPU_ARGS=(--gpus all)
else
echo "CUDA GPU not available. Using CPU."
GPU_ARGS=()
fi
}
build_image() {
docker_cli build -t "$IMAGE_NAME" .
}
train_full() {
local full_data model_full
local feature_cache
local full_data_docker model_full_docker feature_cache_docker
full_data="$(get_absolute_path "$TRAIN_DATA_REL")"
model_full="$(get_absolute_path ".")/${MODEL_FULL_REL}"
feature_cache="$(get_absolute_path ".")/${FEATURE_CACHE_REL}"
full_data_docker="$(to_docker_path "$full_data")"
model_full_docker="$(to_docker_path "$model_full")"
feature_cache_docker="$(to_docker_path "$feature_cache")"
ensure_directory "$model_full"
ensure_directory "$feature_cache"
configure_gpu_args
docker_cli run --rm "${GPU_ARGS[@]}" \
-v "${full_data_docker}:/challenge/training_data:ro" \
-v "${model_full_docker}:/challenge/model" \
-v "${feature_cache_docker}:/challenge/.feature_cache" \
"$IMAGE_NAME" \
python train_model.py -d training_data -m model -v
}
# =====================
# DEVELOPMENT MODE (NO REBUILD, FULL DATASETS)
# =====================
train_dev() {
local code_path full_data model_full
local code_path_docker full_data_docker
code_path="$(get_absolute_path ".")"
full_data="$(get_absolute_path "$TRAIN_DATA_REL")"
model_full="${code_path}/${MODEL_FULL_REL}"
code_path_docker="$(to_docker_path "$code_path")"
full_data_docker="$(to_docker_path "$full_data")"
ensure_directory "$model_full"
configure_gpu_args
docker_cli run --rm "${GPU_ARGS[@]}" \
-v "${code_path_docker}:/challenge" \
-v "${full_data_docker}:/challenge/training_data:ro" \
"$IMAGE_NAME" \
python train_model.py -d /challenge/training_data -m /challenge/model -v
}
clean_all() {
rm -rf "$MODEL_FULL_REL"
echo "Models and outputs removed."
}
case "$COMMAND" in
build) build_image ;;
train) train_full ;;
train-dev) train_dev ;;
clean) clean_all ;;
*)
echo "Invalid command: $COMMAND"
echo "Valid commands: build, train, train-dev, clean"
exit 1
;;
esac