Una implementación de codificación en Phi-4-Mini de Microsoft para la herramienta de razonamiento de inferencia cuantificada utiliza el ajuste fino RAG y LoRA
importar subproceso, sys, os,shutil, glob def pip_install(args): subprocess.run([sys.executable, “-m”, “pip”, “install”, “-q”, *args]marcar = Verdadero) pip_install ([“huggingface_hub>=0.26,<1.0”]) pip_install([
“-U”,
“transformers>=4.49,<4.57”,
“accelerate>=0.33.0”,
“bitsandbytes>=0.43.0”,
“peft>=0.11.0”,
“datasets>=2.20.0,<3.0”,
“sentence-transformers>=3.0.0,<4.0”,
“faiss-cpu”,
]) para p en glob.glob(os.path.expanduser( “~/.cache/huggingface/modules/transformers_modules/microsoft/Phi-4*”)):shutil.rmtree(p, ignore_errors=True) para _m en list(sys.modules): if _m.startswith((“transformers”, “huggingface_hub”, “tokenizers”, “accelerate”, “peft”, “conjuntos de datos”, “sentence_transformers”)): del sys.modules[_m]

importar json, re, textwrap, advertencias, torchwarnings.filterwarnings(“ignorar”) desde transformadores importar (AutoModelForCausalLM, AutoTokenizer, BitsAndBytesConfig, TextStreamer, TrainingArguments, Trainer, DataCollatorForLanguageModeling,) importar transformadores print(f”Usando transformadores {transformers.__version__}”) PHI_MODEL_ID = “microsoft/Phi-4-mini-instruct” afirmar torch.cuda.is_available(), (“No se detectó GPU. En Colab: Tiempo de ejecución > Cambiar tipo de tiempo de ejecución > GPU T4.” ) print(f”GPU detectada: {torch.cuda.get_device_name(0)}”) print(f”Cargando modelo Phi (arco phi3 nativo, sin código remoto): {PHI_MODEL_ID}\n”) bnb_cfg = BitsAndBytesConfig( load_in_4bit=True, bnb_4bit_quant_type=”nf4″, bnb_4bit_compute_dtype=torch.bfloat16, bnb_4bit_use_double_quant=True, ) phi_tokenizer = AutoTokenizer.from_pretrained(PHI_MODEL_ID) si phi_tokenizer.pad_token_id es Ninguno: phi_tokenizer.pad_token = phi_tokenizer.eos_token phi_model = AutoModelForCausalLM.from_pretrained( PHI_MODEL_ID, quantization_config=bnb_cfg, device_map=”auto”, torch_dtype=torch.bfloat16, ) phi_model.config.use_cache = True print(f”\n ✓ Phi-4-mini cargado en 4 bits ” f”Memoria de GPU: {torch.cuda.memory_allocated()/1e9:.2f} GB”) print(f” Arquitectura: {phi_model.config.model_type} ” f”(usando {type(phi_model).__name__})”) print(f” Parámetros: ~{sum(p.numel() for p in phi_model.parameters())/1e9:.2f}B”) def Ask_phi(messages, *, tools=None, max_new_tokens=512, Temperature=0.3, stream=False): “””Punto de entrada único para todas las llamadas de inferencia Phi-4-mini a continuación.””” Prompt_ids = phi_tokenizer.apply_chat_template( mensajes, herramientas=herramientas, add_generación_prompt=True, return_tensors=”pt”, ).to(phi_model.device) streamer = (TextStreamer(phi_tokenizer, skip_prompt=True, skip_special_tokens=True) if stream else Ninguno) con torch.inference_mode(): out = phi_model.generate( Prompt_ids, max_new_tokens=max_new_tokens, do_sample=temperatura > 0, temperatura=max(temperatura, 1e-5), top_p=0.9, pad_token_id=phi_tokenizer.pad_token_id, eos_token_id=phi_tokenizer.eos_token_id, streamer=streamer,) devuelve phi_tokenizer.decode( fuera[0][prompt_ids.shape[1]:], skip_special_tokens=True ).strip() def banner(título): print(“\n” + “=” * 78 + f”\n {título}\n” + “=” * 78)