Files
foxhunt/.gitlab-ci-training.yml
jgrusewski 6e339316cf feat(ml): add manually-triggered GitLab CI training pipeline
Adds a parent/child GitLab CI pipeline for ML model training:

- Generator script produces per-model hyperopt/train/evaluate jobs
- Parent pipeline (.gitlab-ci-training.yml) with manual trigger
- NFS-backed ReadWriteMany PVC for shared training outputs
- Hyperopt params wired into training binaries (DQN, PPO, TFT, Mamba2)
- Shared DBN loader eliminates duplicate code across hyperopt adapters
- Supervised hyperopt unified to DBN data (was parquet-only)

Pipeline: hyperopt (4 models) → train (10 models) → evaluate ensemble

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-26 09:04:58 +01:00

62 lines
1.4 KiB
YAML

# ML Training Pipeline — manually triggered
#
# Trigger via GitLab UI: CI/CD → Pipelines → Run pipeline
# Set CI configuration file to: .gitlab-ci-training.yml
# Set variables as needed (MODELS, SYMBOLS, PHASE, etc.)
#
# Or via API:
# curl -X POST --fail \
# -F "token=$TRIGGER_TOKEN" \
# -F "ref=main" \
# -F "variables[MODELS]=all" \
# -F "variables[SYMBOLS]=ES.FUT" \
# -F "variables[PHASE]=full" \
# "$CI_API_V4_URL/projects/$CI_PROJECT_ID/trigger/pipeline"
stages:
- prepare
- trigger
variables:
SYMBOLS: "ES.FUT"
MODELS: "all"
PHASE: "full"
MAX_PARALLEL: "10"
EPOCHS: "50"
HYPEROPT_TRIALS: "20"
RUN_ID: ""
REGISTRY: rg.fr-par.scw.cloud/foxhunt-ci
workflow:
rules:
- if: $CI_PIPELINE_SOURCE == "web"
- if: $CI_PIPELINE_SOURCE == "trigger"
- if: $CI_PIPELINE_SOURCE == "api"
generate-jobs:
stage: prepare
image: alpine:3.19
tags:
- kapsule
script:
- apk add --no-cache bash coreutils
- |
if [ -z "$RUN_ID" ]; then
export RUN_ID=$(date +%Y%m%d-%H%M%S)
fi
- bash scripts/generate-training-pipeline.sh
- echo "--- Generated pipeline ---"
- cat .training-generated.yml
artifacts:
paths:
- .training-generated.yml
expire_in: 1 day
run-training:
stage: trigger
trigger:
include:
- artifact: .training-generated.yml
job: generate-jobs
strategy: depend