| #!/usr/bin/env bash |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| set -euo pipefail |
|
|
| SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" |
| PROJECT_DIR="$(dirname "$SCRIPT_DIR")" |
| cd "$PROJECT_DIR" |
|
|
| echo "βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ" |
| echo " Qwen SpeedLab β Definitive RTX 3090 Benchmark" |
| echo "βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ" |
| echo "" |
|
|
| |
| if ! python3 -c "import torch; assert torch.cuda.is_available(), 'CUDA not available'" 2>/dev/null; then |
| echo "β CUDA not available. Run fix_gpu_host.sh on the HOST first:" |
| echo " sudo apt-get remove --purge nvidia-dkms-580-open nvidia-driver-580-open" |
| echo " sudo apt-get install nvidia-driver-580" |
| echo " sudo reboot" |
| exit 1 |
| fi |
|
|
| GPU=$(python3 -c "import torch; print(torch.cuda.get_device_name(0))") |
| VRAM=$(python3 -c "import torch; print(f'{torch.cuda.get_device_properties(0).total_memory/1024**3:.1f}')") |
| echo "β
GPU: $GPU ($VRAM GB)" |
| echo "" |
|
|
| |
| echo "βββββββββββββββββββββββββββββββββββββββββββββββββββββββββ" |
| echo " Phase 1/4: Downloading best model for RTX 3090..." |
| echo "βββββββββββββββββββββββββββββββββββββββββββββββββββββββββ" |
|
|
| |
| python3 -c " |
| from huggingface_hub import snapshot_download |
| import os |
| |
| # AWQ 4-bit β best for Ampere (RTX 3090) |
| print('Downloading QuantTrio/Qwen3.6-27B-AWQ (15 GB)...') |
| snapshot_download('QuantTrio/Qwen3.6-27B-AWQ', |
| cache_dir='/workspace/models', |
| token=os.environ.get('HF_TOKEN')) |
| print('β
AWQ model ready') |
| |
| # FP8 β official, higher quality |
| print('Downloading Qwen/Qwen3.6-27B-FP8 (27 GB)...') |
| snapshot_download('Qwen/Qwen3.6-27B-FP8', |
| cache_dir='/workspace/models', |
| token=os.environ.get('HF_TOKEN')) |
| print('β
FP8 model ready') |
| " |
|
|
| echo "" |
|
|
| |
| echo "βββββββββββββββββββββββββββββββββββββββββββββββββββββββββ" |
| echo " Phase 2/4: Quick vLLM sweep (6 best configs)..." |
| echo "βββββββββββββββββββββββββββββββββββββββββββββββββββββββββ" |
| python3 scripts/sweep_vllm_configs.py --quick --port 8000 |
| echo "" |
|
|
| |
| echo "βββββββββββββββββββββββββββββββββββββββββββββββββββββββββ" |
| echo " Phase 3/4: Advanced optimization sweep..." |
| echo "βββββββββββββββββββββββββββββββββββββββββββββββββββββββββ" |
| python3 scripts/sweep_advanced.py --mode baseline --port 8000 |
| echo "" |
|
|
| |
| echo "βββββββββββββββββββββββββββββββββββββββββββββββββββββββββ" |
| echo " Phase 4/4: Final report" |
| echo "βββββββββββββββββββββββββββββββββββββββββββββββββββββββββ" |
| echo "" |
| echo "π Results files:" |
| ls -la reports/results.csv reports/results_advanced.csv reports/summary.md reports/summary_advanced.md 2>/dev/null || echo " (some reports not generated)" |
| echo "" |
|
|
| |
| if [[ -f reports/summary.md ]]; then |
| echo "Best results from sweep:" |
| grep -A15 "Best Configuration" reports/summary.md 2>/dev/null | head -20 || true |
| fi |
| if [[ -f reports/summary_advanced.md ]]; then |
| echo "" |
| echo "Optimization impact analysis:" |
| grep -A5 "Optimization Impact" reports/summary_advanced.md 2>/dev/null | head -10 || true |
| fi |
|
|
| echo "" |
| echo "βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ" |
| echo " Benchmark complete!" |
| echo " Full report: less reports/summary.md" |
| echo " Raw data: cat reports/results.csv" |
| echo "βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ" |
|
|