#!/usr/bin/env python # coding=utf-8 """ Script to install requirements in the correct order for the Phi-4 training project. This ensures base requirements are installed first, followed by additional requirements. """ import os import sys import subprocess import argparse import logging from pathlib import Path # Configure logging logging.basicConfig( level=logging.INFO, format="%(asctime)s - %(levelname)s - %(message)s", handlers=[logging.StreamHandler(sys.stdout)] ) logger = logging.getLogger(__name__) def install_requirements(include_flash=False): """Install requirements in the correct order.""" current_dir = Path(__file__).parent base_req_path = current_dir / "requirements-base.txt" main_req_path = current_dir / "requirements.txt" flash_req_path = current_dir / "requirements-flash.txt" if not base_req_path.exists(): logger.error(f"Base requirements file not found: {base_req_path}") return False if not main_req_path.exists(): logger.error(f"Main requirements file not found: {main_req_path}") return False logger.info("Installing dependencies in sequential order...") try: # Step 1: Install base requirements logger.info(f"Step 1: Installing base requirements from {base_req_path}") subprocess.run([sys.executable, "-m", "pip", "install", "-r", str(base_req_path)], check=True) logger.info("Base requirements installed successfully") # Step 2: Install main requirements logger.info(f"Step 2: Installing additional requirements from {main_req_path}") subprocess.run([sys.executable, "-m", "pip", "install", "-r", str(main_req_path)], check=True) logger.info("Additional requirements installed successfully") # Step 3: Optionally install flash-attention if include_flash and flash_req_path.exists(): logger.info(f"Step 3: Installing flash-attention from {flash_req_path}") subprocess.run([sys.executable, "-m", "pip", "install", "-r", str(flash_req_path), "--no-build-isolation"], check=True) logger.info("Flash-attention installed successfully") elif include_flash: logger.warning(f"Flash requirements file not found: {flash_req_path}") logger.info("All required packages installed successfully!") return True except subprocess.CalledProcessError as e: logger.error(f"Error installing dependencies: {str(e)}") return False def main(): parser = argparse.ArgumentParser(description="Install requirements for Phi-4 training") parser.add_argument("--flash", action="store_true", help="Also install flash-attention (optional)") args = parser.parse_args() success = install_requirements(include_flash=args.flash) if success: logger.info("Installation completed successfully!") else: logger.error("Installation failed. Please check the logs for details.") sys.exit(1) if __name__ == "__main__": main()