File size: 2,718 Bytes
1cecbce
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
#!/bin/bash
set -e  # Exit on error

# Function to show usage
show_usage() {
    echo "Usage: $0 [MODE]"
    echo ""
    echo "MODE options:"
    echo "  gpu     - Force GPU mode (requires nvidia-container-toolkit)"
    echo "  cpu     - Force CPU-only mode"
    echo "  auto    - Automatically detect and use GPU if available (default)"
    echo ""
    echo "Examples:"
    echo "  $0          # Auto-detect (default)"
    echo "  $0 gpu      # Force GPU mode"
    echo "  $0 cpu      # Force CPU-only mode"
    echo ""
}

# Parse command line arguments
MODE="auto"
if [ $# -gt 0 ]; then
    case "$1" in
        gpu|GPU)
            MODE="gpu"
            ;;
        cpu|CPU)
            MODE="cpu"
            ;;
        auto|AUTO)
            MODE="auto"
            ;;
        -h|--help|help)
            show_usage
            exit 0
            ;;
        *)
            echo "Error: Unknown mode '$1'"
            echo ""
            show_usage
            exit 1
            ;;
    esac
fi

# Common Docker run arguments
DOCKER_ARGS="--rm -p 7860:7860 --user 1000:1000 \
    -e ENABLE_DEBUG_TAB=true \
    -e VOCAB_SOURCE=norvig \
    -e DIFFICULTY_WEIGHT=0.2"

IMAGE_NAME="crossword-py-ai:hf"

# Function to run with GPU
run_gpu() {
    echo "πŸš€ Running in GPU mode..."
    docker run --gpus all $DOCKER_ARGS $IMAGE_NAME
}

# Function to run with CPU only
run_cpu() {
    echo "πŸ–₯️ Running in CPU-only mode..."
    docker run $DOCKER_ARGS $IMAGE_NAME
}

# Function to check GPU availability
check_gpu_available() {
    if ! command -v nvidia-smi &> /dev/null; then
        return 1
    fi
    
    if ! docker run --rm --gpus all nvidia/cuda:12.1.0-base-ubuntu22.04 nvidia-smi &> /dev/null; then
        return 1
    fi
    
    return 0
}

# Execute based on mode
case "$MODE" in
    gpu)
        echo "πŸ” Checking GPU support..."
        if check_gpu_available; then
            run_gpu
        else
            echo "❌ Error: GPU mode requested but GPU support not available!"
            echo ""
            echo "To enable GPU support:"
            echo "1. Install nvidia-container-toolkit:"
            echo "   sudo apt-get update"
            echo "   sudo apt-get install -y nvidia-container-toolkit"
            echo "   sudo systemctl restart docker"
            echo ""
            echo "2. Or use CPU mode: $0 cpu"
            exit 1
        fi
        ;;
    cpu)
        run_cpu
        ;;
    auto)
        echo "πŸ” Auto-detecting GPU support..."
        if check_gpu_available; then
            echo "βœ… GPU support detected"
            run_gpu
        else
            echo "ℹ️ GPU not available, falling back to CPU mode"
            run_cpu
        fi
        ;;
esac