Ctrl K
ComunidadGuías…

tests/integration/activate_model.py

Rama main · réplica de lectura del repositorio original.

Archivo original ↗Preguntar a KiBot
import os

from dotenv import load_dotenv
from projectdavid import Entity

# Load environment variables
load_dotenv(".tests.env")

# ---------------------------------------------
# This is provided by the user after
# a successful fine tuning run
# ---------------------------------------------
FINE_TUNED_MODEL_ID = "ftm_G05BERHAEvSRr2KTyUqWIJ"

# ----------------------------------------
# Confirm existence of fine-tuned adapters
# Fine-tuned models are user scoped
# ------------------------------------------
client = Entity(
    api_key=os.getenv("DEV_PROJECT_DAVID_CORE_TEST_USER_KEY"),
)

model = client.models.retrieve(FINE_TUNED_MODEL_ID)
print(model)

# ----------------------------------------
# Model activations are admin scoped
# ------------------------------------------
admin_client = Entity(
    api_key=os.getenv("DEV_PROJECT_DAVID_CORE_ADMIN_KEY"),
)

# -------------------------------------------------------------
# Register base model in the catalog (admin, idempotent)
# The server-side activation will resolve this HF path → bm_...
# before creating the InferenceDeployment record.
# -------------------------------------------------------------
registered = admin_client.registry.register(
    hf_model_id="unsloth/qwen2.5-1.5b-instruct-unsloth-bnb-4bit",
    name="Qwen2.5 1.5B Instruct (Unsloth 4bit)",
    family="qwen",
    parameter_count="1.5B",
)
print(f"📦 Base model registered: {registered.id}")

# -------------------------------------------------------------
# Activate the fine-tuned model using its ftm_... ID
# -------------------------------------------------------------
print(f"🎯 Activating model: {FINE_TUNED_MODEL_ID}")
result = admin_client.models.activate(FINE_TUNED_MODEL_ID)
print(f"✅ Result: {result}")

# =============================================================================
# DUAL INFERENCE NOTE — for documentation
# =============================================================================
#
# After activation, vLLM serves TWO inference routes from the same GPU:
#
#   1. Base model (raw backbone):
#      {"model": "unsloth/qwen2.5-1.5b-instruct-unsloth-bnb-4bit", ...}
#
#   2. Fine-tuned adapter (LoRA on top of base):
#      {"model": "ftm_G05BERHAEvSRr2KTyUqWIJ", ...}
#
# vLLM loads the base weights once and dynamically swaps LoRA adapters
# per request. Both routes share the same GPU memory footprint — the
# adapter costs no additional VRAM to serve alongside the base model.
#
# This means an admin can register a single base model and serve multiple
# fine-tuned adapters from the same vLLM instance simultaneously, provided
# --max-lora-rank and --max-cpu-loras are configured appropriately in the
# DeploymentSupervisor spawn command.
#
# Practical implication: users can compare base vs fine-tuned behaviour
# on identical prompts by switching the model parameter — no additional
# deployment required.
# =============================================================================