Add train_launcher.sh that detects local GPU VRAM and routes training to local or Scaleway cloud. Auto-selects batch size per model based on available VRAM tier. Maps model names to actual ml/examples/train_*.rs cargo targets. Document Scaleway GPU instance types, setup procedure, batch size tables, and cost estimates. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
4.5 KiB
4.5 KiB
Scaleway GPU Training Infrastructure
Instance Types
| Instance | GPU | VRAM | vCPUs | RAM | Cost/hr |
|---|---|---|---|---|---|
| GPU-3070-S | RTX 3070 | 8GB | 8 | 32GB | ~EUR 0.90 |
| L4-1-24G | L4 | 24GB | 8 | 48GB | ~EUR 1.20 |
| L4-2-48G | 2x L4 | 48GB | 16 | 96GB | ~EUR 2.40 |
Recommendation: GPU-3070-S for single-model training runs. L4-1-24G for hyperopt parallel trials and large batch training.
Setup
1. Instance provisioning
# Create GPU instance via Scaleway CLI
scw instance server create \
type=GPU-3070-S \
image=ubuntu_jammy \
name=foxhunt-training \
root-volume=l:100G
2. Initial setup (run once after provisioning)
# Install Rust toolchain
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y
source ~/.cargo/env
# Install CUDA toolkit (Ubuntu 22.04)
wget https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2204/x86_64/cuda-keyring_1.1-1_all.deb
sudo dpkg -i cuda-keyring_1.1-1_all.deb
sudo apt-get update
sudo apt-get -y install cuda-toolkit-12-4
# Clone and build
git clone ssh://gitea@git.fxhnt.ai:2222/foxhunt/foxhunt.git /opt/foxhunt
cd /opt/foxhunt
SQLX_OFFLINE=true cargo build --release -p ml --features cuda
3. Tailscale access
# Install Tailscale for secure access
curl -fsSL https://tailscale.com/install.sh | sh
sudo tailscale up --ssh
# Add to Tailscale ACL: tag:gpu-training
4. DNS (optional)
Add a Tailscale MagicDNS entry or Scaleway DNS record:
gpu.fxhnt.ai -> <tailscale-ip>
The train_launcher.sh script defaults to FOXHUNT_GPU_HOST=gpu.fxhnt.ai.
Training workflow
Local development then cloud production
# 1. Develop and test locally (RTX 3050 Ti, 4GB)
./scripts/train_launcher.sh --model dqn --epochs 5
# 2. Push code to Gitea
git push origin feat/model-improvements
# 3. Train on cloud GPU
./scripts/train_launcher.sh --model dqn --epochs 100 --cloud
# 4. Sync trained model back
rsync -avz training@gpu.fxhnt.ai:/opt/foxhunt/checkpoints/ ./checkpoints/
rsync -avz training@gpu.fxhnt.ai:/opt/foxhunt/ml/trained_models/ ./ml/trained_models/
Model artifact sync
# Upload training data to cloud
rsync -avz ./data/databento/ training@gpu.fxhnt.ai:/opt/foxhunt/data/databento/
rsync -avz ./test_data/ training@gpu.fxhnt.ai:/opt/foxhunt/test_data/
# Download trained models
rsync -avz training@gpu.fxhnt.ai:/opt/foxhunt/checkpoints/ ./checkpoints/
rsync -avz training@gpu.fxhnt.ai:/opt/foxhunt/ml/trained_models/ ./ml/trained_models/
Batch sizes by model and GPU
These values are used by scripts/train_launcher.sh auto-detection.
See scripts/measure_vram.sh for VRAM profiling methodology.
| Model | RTX 3050 Ti (4GB) | RTX 3070 (8GB) | L4 (24GB) |
|---|---|---|---|
| DQN | 128 | 256 | 512 |
| PPO | 230 (max) | 512 | 1024 |
| TFT | 32 | 64 | 256 |
| Mamba2 | 64 | 128 | 512 |
| CfC | 128 | 256 | 512 |
Notes:
- PPO on 4GB is capped at 230 batches (empirically verified, see MEMORY.md).
- TFT and Mamba2 are memory-intensive due to attention/state-space layers.
- All values assume
--features cudaand--releasebuilds.
Cargo example targets
The launcher maps model names to these ml crate examples:
| Model | Cargo example | Source |
|---|---|---|
| dqn | train_dqn |
ml/examples/train_dqn.rs |
| ppo | train_ppo_parquet |
ml/examples/train_ppo_parquet.rs |
| tft | train_tft_parquet |
ml/examples/train_tft_parquet.rs |
| mamba2 | train_mamba2_parquet |
ml/examples/train_mamba2_parquet.rs |
| cfc | train_liquid_dbn |
ml/examples/train_liquid_dbn.rs |
Cost estimates
| Training run | Instance | Duration | Est. cost |
|---|---|---|---|
| DQN 100 epochs | GPU-3070-S | ~2 hours | ~EUR 1.80 |
| PPO 100 epochs | GPU-3070-S | ~3 hours | ~EUR 2.70 |
| TFT 100 epochs | L4-1-24G | ~4 hours | ~EUR 4.80 |
| Full hyperopt (50 trials) | L4-1-24G | ~12 hours | ~EUR 14.40 |
| All 5 models training | L4-1-24G | ~8 hours | ~EUR 9.60 |
Environment variables
| Variable | Default | Description |
|---|---|---|
FOXHUNT_GPU_HOST |
gpu.fxhnt.ai |
Cloud GPU hostname |
FOXHUNT_CLOUD_DIR |
/opt/foxhunt |
Remote project directory |
SQLX_OFFLINE |
true |
Required (no PostgreSQL on GPU instances) |
Shutdown procedure
GPU instances are billed per hour. Always stop when not training:
# From local machine
scw instance server stop foxhunt-training
# Or from the instance itself
sudo shutdown -h now