ThomasTheMaker's picture
Upload folder using huggingface_hub
feba2ad verified
#!/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