File size: 7,040 Bytes
feba2ad |
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 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 |
#!/bin/bash
# This script sets up the project by installing dependencies, checking for a poetry environment,
# and installing pre-commit hooks.
# Add color and formatting variables at the top
GREEN='\033[0;32m'
BLUE='\033[0;34m'
YELLOW='\033[1;33m'
RED='\033[0;31m'
NC='\033[0m' # No Color
BOLD='\033[1m'
# Initialize error tracking
ERRORS_FOUND=0
# Function for section headers
print_section() {
echo -e "\n${BOLD}${BLUE}=== $1 ===${NC}\n"
}
# Function for success messages
print_success() {
echo -e "${GREEN}✓ $1${NC}"
}
# Function for warnings
print_warning() {
echo -e "${YELLOW}⚠ $1${NC}"
}
# --- GIT LFS SETUP --- #
print_section "Git LFS Setup"
if ! command -v git-lfs &> /dev/null; then
print_warning "git-lfs is not installed. Some model checkpointing functionality may not work correctly."
ERRORS_FOUND=$((ERRORS_FOUND + 1))
# Check the operating system
if [[ "$OSTYPE" == "darwin"* ]]; then
# macOS
echo -e "${YELLOW} You can install it using Homebrew:${NC}"
echo " brew install git-lfs"
elif [[ "$OSTYPE" == "linux-gnu"* ]]; then
# Linux
echo -e "${YELLOW} You can install it using your package manager:${NC}"
if command -v apt-get &> /dev/null; then
# Ubuntu/Debian
echo " curl -s https://packagecloud.io/install/repositories/github/git-lfs/script.deb.sh | sudo bash"
echo " sudo apt-get install git-lfs"
elif command -v yum &> /dev/null; then
# CentOS/RHEL
echo " curl -s https://packagecloud.io/install/repositories/github/git-lfs/script.rpm.sh | sudo bash"
echo " sudo yum install git-lfs"
else
print_warning "Could not detect package manager. Please install git-lfs manually."
fi
else
print_warning "Unsupported operating system. Please install git-lfs manually."
fi
else
git-lfs install
print_success "git-lfs installed and initialized"
fi
# --- CUDA VERSION CHECK --- #
print_section "CUDA Version Check"
if command -v nvidia-smi &> /dev/null; then
CUDA_VERSION=$(nvidia-smi | sed -n 's/.*CUDA Version: \([0-9.]*\).*/\1/p')
if [[ -z "$CUDA_VERSION" ]]; then
ERRORS_FOUND=$((ERRORS_FOUND + 1))
print_warning "nvidia-smi failed to communicate with the NVIDIA driver."
echo -e "${YELLOW} Ensure that the latest NVIDIA driver is installed and running.${NC}"
else
MAJOR_VERSION=${CUDA_VERSION%.*}
MINOR_VERSION=${CUDA_VERSION#*.}
if [ "$MAJOR_VERSION" -lt 12 ] || ([ "$MAJOR_VERSION" -eq 12 ] && [ "$MINOR_VERSION" -lt 1 ]); then
ERRORS_FOUND=$((ERRORS_FOUND + 1))
print_warning "CUDA version ${MAJOR_VERSION}.${MINOR_VERSION} detected."
echo -e "${YELLOW} Some multi-node communication GPU features may not work properly.${NC}"
echo -e "${YELLOW} CUDA version 12.1 or newer is recommended.${NC}"
else
print_success "CUDA version ${MAJOR_VERSION}.${MINOR_VERSION} detected"
fi
fi
else
ERRORS_FOUND=$((ERRORS_FOUND + 1))
print_warning "nvidia-smi not found. Unable to check CUDA version."
echo -e "${YELLOW} Ensure that NVIDIA drivers and CUDA version at 12.1 or newer are installed for GPU support.${NC}"
fi
# ---- ENVIRONMENT VARIABLES ---- #
print_section "Environment Variables"
if [ -f .env ]; then
print_success "Loading environment variables from .env..."
source .env
if [[ -n "$HF_TOKEN" && -n "$WANDB_API_KEY" ]]; then
print_success "Both HF_TOKEN and WANDB_API_KEY are set and loaded!"
else
print_warning "One or both of HF_TOKEN and WANDB_API_KEY are not set."
fi
else
print_warning "No .env file found."
echo -e "${YELLOW} You might need to create one with HF_TOKEN and WANDB_API_KEY${NC}"
echo -e "${YELLOW} Example .env contents:${NC}"
echo " export HF_TOKEN=your_huggingface_token"
echo " export WANDB_API_KEY=your_wandb_key"
ERRORS_FOUND=$((ERRORS_FOUND + 1))
fi
# ---- POETRY SETUP ---- #
print_section "Poetry Setup"
# First check if Poetry is installed
if ! command -v poetry &> /dev/null; then
echo "Poetry not found. Installing..."
# Run the installation command
curl -sSL https://install.python-poetry.org | python3 -
POETRY_INSTALL_STATUS=$?
if [ $POETRY_INSTALL_STATUS -ne 0 ]; then
print_warning "Poetry installation failed!"
ERRORS_FOUND=$((ERRORS_FOUND + 1))
else
export PATH="$HOME/.local/bin:$PATH"
# Verify installation succeeded
if ! command -v poetry &> /dev/null; then
print_warning "Poetry was installed but cannot be found in PATH!"
echo -e "${YELLOW} Try adding this to your shell profile:${NC}"
echo " export PATH=\"\$HOME/.local/bin:\$PATH\""
ERRORS_FOUND=$((ERRORS_FOUND + 1))
else
print_success "Poetry installed successfully"
fi
fi
else
print_success "Poetry already installed"
fi
# Then check for virtual environment
if [ ! -d ".venv" ]; then
echo "No virtual environment found. Creating one..."
poetry config virtualenvs.in-project true
# Create virtual environment and install dependencies
poetry install --with dev
POETRY_VENV_STATUS=$?
if [ $POETRY_VENV_STATUS -ne 0 ]; then
print_warning "Failed to create Poetry virtual environment!"
ERRORS_FOUND=$((ERRORS_FOUND + 1))
else
print_success "Poetry environment created successfully"
fi
else
print_success "Poetry environment already exists"
fi
# ---- PRE-COMMIT SETUP ---- #
print_section "Pre-commit Setup"
# Install pre-commit hooks
echo "Installing pre-commit hooks..."
poetry run pre-commit install
if [ $? -ne 0 ]; then
print_warning "Failed to install pre-commit hooks!"
ERRORS_FOUND=$((ERRORS_FOUND + 1))
else
print_success "Pre-commit hooks installed"
fi
# Run pre-commit hooks on all files
echo "Running pre-commit hooks on all files..."
poetry run pre-commit run --all-files
if [ $? -ne 0 ]; then
print_warning "Pre-commit encountered issues with some files"
ERRORS_FOUND=$((ERRORS_FOUND + 1))
else
print_success "Pre-commit initial run complete"
fi
# --- Final Status Message --- #
# Final status message
print_section "Setup Status"
if [ $ERRORS_FOUND -eq 0 ]; then
print_success "Setup Complete! 🎉"
print_success "To activate the virtual environment, run: poetry env activate"
else
print_warning "Setup completed with warnings and errors! Please check the messages above."
echo -e "${YELLOW} ${ERRORS_FOUND} issue(s) were detected that may affect functionality.${NC}"
if [ -d ".venv" ]; then
echo -e "${YELLOW} You can still activate the environment with: poetry env activate${NC}"
else
echo -e "${RED} The virtual environment setup failed. Fix the issues before proceeding.${NC}"
fi
fi |