feat: add SLURM integration test workflow#28
Conversation
Add a GitHub Actions workflow that sets up a real SLURM cluster with Apptainer on a GPU runner to test the schedule_evals workflow end-to-end. - New workflow: slurm-integration.yml - Sets up SLURM (slurmctld + slurmd) on AWS GPU runner - Installs Apptainer and builds test container - Pre-downloads tiny-gpt2 model and arc_easy dataset - Runs integration test that validates full workflow - New test container: tests/integration/ci.def - Based on PyTorch with CUDA support - Includes lm_eval and dependencies - New integration test: tests/integration/test_slurm.py - Submits real SLURM job via schedule_evals - Waits for completion and validates results JSON - Updated clusters.yaml with CI cluster configuration
Switch to CPU instances (i7ie) since GPU quota is not available: - Remove GPU/GRES configuration from SLURM setup - Update test to support --dry-run mode for CPU-only testing - Validate sbatch script generation without actual job execution - Update CI cluster config to use debug partition Full GPU testing can be re-enabled later when quota is available.
|
@JeniaJitsev this is the base PR which #37 is built upon. Once this one is merged I'll merge #37 |
There was a problem hiding this comment.
Can you give the current cost of running the pipeline on AWS once? (I see that the time out is currently set to 45 min, for 45 min the cost would 0.4$ per commit which would be a bit annoying)
Do we need GPU at all for testing also? If we could run on a CPU machine, it would be much cheaper
| uv pip install --system --break-system-packages nltk | ||
|
|
||
| # Pre-load lighteval registry to trigger tinyBenchmarks data download at build time | ||
| /opt/uv-tools/lighteval/bin/python -c "from lighteval.tasks.registry import Registry; Registry.load_all_task_configs(load_multilingual=False)" |
There was a problem hiding this comment.
Cant we use uvx instead rather than hardcoding the path here?
There was a problem hiding this comment.
Best we can do is: $UV_TOOL_DIR/lighteval/bin/python -c "from lighteval.tasks.registry import Registry; Registry.load_all_task_configs(load_multilingual=True)"
@geoalgo one test run right now takes about 15 minutes. The instance that I use is about 0.3-0.72 USD per hour depending on whether we use spot or on-demand instances (spot is fine for now). 0,075-0,18USD + some service charge for the runs-on service so at most 0.25 USD per run |
|
Ok thanks, how hard is deactivating AWS? Is it enough to just comment the github action? I am a bit worried about the complexity hit that we are taking here including needing to manage an AWS account (compared to having a manual / semi automatic integration test that would run in our clusters for instance). We could merge it but we should have a very easy way to remove it. |
it now auto runs on PRs to main and for changes the paths I defined in the workflow file, it's very easy to disable. Yes, you can just do a semi-automatic thing where it runs on one of the clusters we have access to. I would say the overhead of having an AWS is quite minimal. |
Add a GitHub Actions workflow that sets up a real SLURM cluster with Apptainer on a GPU runner to test the schedule_evals workflow end-to-end.
Relevant files:
.github/workflows/build-and-push-apptainer.ymltests/integrationcontains all the stuff needed to understand our slurm integration testing. Tests (1) dry run sbatch script generation/setup of the run dir (2) dataset download for all datasets needed for the tasks intask-groups.yaml(3) end-to-end scheduling and running of the first task in every task group (to save time). The latter tests both lm-eval and lighteval tasksRegarding test suite support: this bumps
lightevalto the latest version (installed from the github repo) and adapts the launch args accordingly