Spaces:
Sleeping
Sleeping
#!/usr/bin/env python3 | |
""" | |
Quick setup script to optimize your existing ML microservice. | |
Run this to set up caching and pre-download the model. | |
""" | |
import os | |
import sys | |
import logging | |
from pathlib import Path | |
# Configure logging | |
logging.basicConfig(level=logging.INFO) | |
logger = logging.getLogger(__name__) | |
def setup_cache_directory(): | |
"""Create cache directory for models""" | |
cache_dir = Path("./model_cache") | |
cache_dir.mkdir(exist_ok=True) | |
logger.info(f"β Cache directory created: {cache_dir.absolute()}") | |
return cache_dir | |
def set_environment_variables(): | |
"""Set environment variables for optimization""" | |
env_vars = { | |
"TRANSFORMERS_CACHE": "./model_cache", | |
"HF_HOME": "./model_cache", | |
"TORCH_HOME": "./model_cache", | |
"TOKENIZERS_PARALLELISM": "false", | |
"OMP_NUM_THREADS": "4" | |
} | |
for key, value in env_vars.items(): | |
os.environ[key] = value | |
logger.info(f"Set {key}={value}") | |
def pre_download_model(): | |
"""Pre-download the model to cache""" | |
try: | |
from transformers import AutoTokenizer, AutoModelForCausalLM | |
model_id = "deepseek-ai/deepseek-coder-1.3b-instruct" | |
cache_dir = "./model_cache" | |
logger.info(f"π§ Pre-downloading model: {model_id}") | |
logger.info("This may take a few minutes on first run...") | |
# Download tokenizer | |
logger.info("π Downloading tokenizer...") | |
tokenizer = AutoTokenizer.from_pretrained( | |
model_id, | |
cache_dir=cache_dir, | |
trust_remote_code=True | |
) | |
# Download model | |
logger.info("π§ Downloading model...") | |
model = AutoModelForCausalLM.from_pretrained( | |
model_id, | |
cache_dir=cache_dir, | |
trust_remote_code=True, | |
torch_dtype="auto", # Let it choose the best dtype | |
low_cpu_mem_usage=True, | |
) | |
logger.info("β Model downloaded and cached successfully!") | |
logger.info(f"π Model cached in: {Path(cache_dir).absolute()}") | |
# Test that everything works | |
logger.info("π§ͺ Testing model loading...") | |
del model, tokenizer # Free memory | |
return True | |
except Exception as e: | |
logger.error(f"β Failed to pre-download model: {e}") | |
return False | |
def main(): | |
"""Main setup function""" | |
logger.info("π Setting up ML Microservice Optimizations") | |
logger.info("=" * 50) | |
# Step 1: Setup cache directory | |
setup_cache_directory() | |
# Step 2: Set environment variables | |
set_environment_variables() | |
# Step 3: Pre-download model | |
success = pre_download_model() | |
if success: | |
logger.info("\nβ Setup completed successfully!") | |
logger.info("π Next steps:") | |
logger.info("1. Replace your main.py with the optimized version") | |
logger.info("2. Replace your model.py with the optimized version") | |
logger.info("3. Run: python main.py") | |
logger.info("\nπ Your server will now start much faster!") | |
else: | |
logger.error("\nβ Setup failed!") | |
logger.error("Please check your internet connection and try again.") | |
sys.exit(1) | |
if __name__ == "__main__": | |
main() |