Phi-4-mini ve Gemma 3n: Edge AI için Microsoft ve Google
İki teknoloji devi, iki farklı felsefe; her ikisinin de hedefi en iyiyi yaratmak 5 milyar parametre altında model. Microsoft veri kalitesine güveniyor Phi-4-mini ile eğitim: küçük bir modele onun gibi düşünmeyi öğretebilirsiniz "ders kitabı kalitesinde" verilerle eğitirseniz harika. Google mimariye odaklandı Gemma 3n ile donanım farkındalığı: başından itibaren verimli çalışacak şekilde tasarlanmış bir model mobil NPU'larda. Bu doğrudan karşılaştırma, ne zaman birini, ne zaman diğerini seçeceğinizi ortaya koyuyor.
Ne Öğreneceksiniz
- Phi-4-mini mimarisi: ders kitabı kalitesinde veriler neden işe yarıyor?
- Gemma 3n E4B: MatFormer mimarisi ve "etkili 4B" kavramı
- İtalyanca kodlama, akıl yürütme ve konuşmayla ilgili yan yana karşılaştırmalar
- Her model için en iyi donanım
- Phi-4-mini ne zaman ve Gemma 3n ne zaman seçilmeli
Phi-4-mini: Kaliteli Veri Felsefesi
Phi-4-mini (Microsoft, Aralık 2024) ve basit ama güçlü bir teze dayanmaktadır: sorun Küçük modellerde önemli olan eğitim verilerinin boyutu değil kalitesidir. Phi serisinin kullanım alanları Daha büyük modellerden oluşturulan, pedagojik kalite için filtrelenen sentetik veriler - örneğin i Ders kitapları ve ders notları. Sonuç olarak Phi-4-mini (3.8B) geçer Akıl yürütme kıyaslamasında Mixtral 8x7B (46B, on iki kat daha büyük).
# Phi-4-mini: setup iniziale con transformers
from transformers import AutoModelForCausalLM, AutoTokenizer
import torch
model_id = "microsoft/Phi-4-mini-instruct"
tokenizer = AutoTokenizer.from_pretrained(model_id)
model = AutoModelForCausalLM.from_pretrained(
model_id,
torch_dtype=torch.float16, # 7.6 GB VRAM
device_map="auto",
trust_remote_code=True # richiesto per Phi-4
)
# Phi-4-mini usa il formato chat con messaggi strutturati
messages = [
{
"role": "system",
"content": "Sei un assistente tecnico esperto in database PostgreSQL. "
"Rispondi sempre in italiano con esempi pratici."
},
{
"role": "user",
"content": "Spiega quando usare un partial index invece di un indice normale."
}
]
# Applicare il template di chat
input_text = tokenizer.apply_chat_template(
messages,
tokenize=False,
add_generation_prompt=True
)
inputs = tokenizer(input_text, return_tensors="pt").to(model.device)
with torch.no_grad():
outputs = model.generate(
**inputs,
max_new_tokens=512,
temperature=0.3,
do_sample=True,
top_p=0.9,
repetition_penalty=1.1
)
response = tokenizer.decode(
outputs[0][inputs.input_ids.shape[1]:],
skip_special_tokens=True
)
print(response)
Phi-4-mini'nin güçlü yönleri
# Test 1: Ragionamento matematico (dove Phi eccelle)
math_problem = """
Un treno parte da Milano alle 8:00 a 120 km/h.
Un secondo treno parte da Roma (570 km di distanza) alle 9:30 verso Milano a 90 km/h.
A che ora si incontrano e a che distanza da Milano?
Mostra tutti i passaggi.
"""
# Phi-4-mini risolve questo correttamente (>70% accuracy su MATH benchmark)
# vs Mixtral 8x7B che spesso sbaglia i calcoli multi-step
# Test 2: Coding Python (buono ma non il migliore nella categoria)
coding_task = """
Scrivi una funzione Python che dato un testo in italiano:
1. Rimuova le stopwords italiane
2. Applichi lemmatizzazione con spaCy
3. Ritorni i top-10 token per frequenza con il loro count
Usa typing e docstring.
"""
# Test 3: Istruzione following in italiano
instruction_task = """
Rispondimi SOLO con un JSON valido in questo formato:
{"risposta": "si" o "no", "motivo": "stringa di max 50 parole"}
PostgreSQL 18 supporta OAuth 2.0 nativamente?
"""
# Phi-4-mini segue le istruzioni di formato con alta fedeltà
Gemma 3n E4B: Donanıma Duyarlı Mimari
Gemma 3n E4B (Google, Nisan 2025) tamamen farklı bir mimari sunuyor: MatFormer, Verimli alt modeller oluşturmak için iç içe geçmiş bir transformatör yapısı kullanır. son ek "E4B", "Etkili 4 Milyar" anlamına gelir; model teknik olarak daha fazla parametreye sahiptir, ancak 4B parametrelerinin hesaplamalı eşdeğeriyle çalışabilen bir "matryoshka" sistemi.
# Gemma 3n E4B: richiede Keras 3 o transformers >= 4.49
from transformers import AutoModelForCausalLM, AutoTokenizer, BitsAndBytesConfig
import torch
model_id = "google/gemma-3n-E4B-it" # variante instruction-tuned
# Per dispositivi con 8GB VRAM: usare int4 quantization
bnb_config = BitsAndBytesConfig(
load_in_4bit=True,
bnb_4bit_use_double_quant=True,
bnb_4bit_quant_type="nf4",
bnb_4bit_compute_dtype=torch.bfloat16
)
tokenizer = AutoTokenizer.from_pretrained(model_id)
model = AutoModelForCausalLM.from_pretrained(
model_id,
quantization_config=bnb_config,
device_map="auto"
)
# Gemma 3n usa il formato chat standard
messages = [
{"role": "user", "content": "Come funziona il partial index in PostgreSQL?"}
]
input_ids = tokenizer.apply_chat_template(
messages,
add_generation_prompt=True,
return_tensors="pt"
).to(model.device)
with torch.no_grad():
outputs = model.generate(
input_ids,
max_new_tokens=512,
do_sample=True,
temperature=0.7
)
print(tokenizer.decode(outputs[0][input_ids.shape[1]:], skip_special_tokens=True))
Mobil Cihazlar için 3n Gem (Gücü)
# Gemma 3n e progettato per NPU mobili con MediaPipe LLM Inference API
# Per Android con Snapdragon 8 Gen 3/4/5 NPU:
# 1. Esportare il modello in formato MediaPipe (LiteRT)
# Questa operazione si fa una volta offline
"""
# requirements: pip install ai-edge-torch
import ai_edge_torch
from transformers import AutoModelForCausalLM, AutoTokenizer
model_id = "google/gemma-3n-E4B-it"
model = AutoModelForCausalLM.from_pretrained(model_id, torch_dtype=torch.float32)
# Esportare per MediaPipe (dispositivi Android)
edge_model = ai_edge_torch.convert(
model,
sample_inputs=(torch.ones(1, 512, dtype=torch.long),),
quant_config=ai_edge_torch.quantize.QuantConfig(
generative_weights_dtype=ai_edge_torch.quantize.QuantDtype.AI_EDGE_TORCH_INT4
)
)
edge_model.export("gemma3n_android.tflite")
"""
# 2. Usare nel codice Android (Kotlin)
"""
// build.gradle.kts
dependencies {
implementation("com.google.mediapipe:tasks-genai:0.10.22")
}
// LlmInference.kt
val options = LlmInference.LlmInferenceOptions.builder()
.setModelPath("/data/local/tmp/gemma3n_android.tflite")
.setMaxTokens(512)
.setPreferredBackend(LlmInference.Backend.GPU) // usa NPU/GPU
.build()
val llmInference = LlmInference.createFromOptions(context, options)
val response = llmInference.generateResponse("Come ottimizzare PostgreSQL?")
"""
Yan Yana Karşılaştırmalı Karşılaştırma
Fp16 ile RTX 4070 (12 GB VRAM) üzerinde gerçekleştirilen testler. Her görev 50 kez test edildi İstatistiksel olarak anlamlı ortalamalara sahip olmak.
import time
from transformers import pipeline
def benchmark_models(models: dict, tasks: list[dict]) -> dict:
"""Benchmark comparativo su task specifici."""
results = {}
for model_name, model_pipeline in models.items():
model_results = {"tasks": {}}
for task in tasks:
times = []
scores = []
for _ in range(task.get("repetitions", 10)):
start = time.time()
output = model_pipeline(
task["prompt"],
max_new_tokens=task.get("max_tokens", 256),
temperature=0.1
)
elapsed = time.time() - start
generated = output[0]["generated_text"]
score = task["eval_fn"](generated)
times.append(elapsed * 1000)
scores.append(score)
model_results["tasks"][task["name"]] = {
"avg_score": sum(scores) / len(scores),
"avg_latency_ms": sum(times) / len(times),
"p95_latency_ms": sorted(times)[int(0.95 * len(times))]
}
results[model_name] = model_results
return results
# Risultati osservati (hardware: RTX 4070 12GB, fp16):
benchmark_results = {
"Phi-4-mini": {
"math_reasoning": {"score": 0.72, "latency_ms": 1840},
"python_coding": {"score": 0.63, "latency_ms": 1650},
"italian_chat": {"score": 0.81, "latency_ms": 1200},
"instruction_following": {"score": 0.88, "latency_ms": 900},
"json_output": {"score": 0.92, "latency_ms": 850},
},
"Gemma-3n-E4B": {
"math_reasoning": {"score": 0.67, "latency_ms": 1620},
"python_coding": {"score": 0.61, "latency_ms": 1580},
"italian_chat": {"score": 0.84, "latency_ms": 1100},
"instruction_following": {"score": 0.85, "latency_ms": 870},
"json_output": {"score": 0.87, "latency_ms": 790},
}
}
# Analisi: Phi-4-mini vince su math e JSON, Gemma 3n su chat e velocita
Karşılaştırmanın Özet Tablosu
| karakteristik | Phi-4-mini (3.8B) | Gemma 3n E4B | Kazanan |
|---|---|---|---|
| Matematiksel akıl yürütme | %72 (MATEMATİK) | %67 (MATEMATİK) | Phi-4-mini |
| Python kod üretimi | %62,3 (İnsan Değerlendirmesi) | %58,7 (İnsan Değerlendirmesi) | Phi-4-mini |
| İtalyanca Konuşma | Harika | Harika | Gemma 3n |
| Hız (jeton/sn RTX 4070) | 55 tok/sn | 63 tok/sn | Gemma 3n |
| Mobil Verimlilik (NPU) | İyi | Mükemmel (MatFormer) | Gemma 3n |
| Lisans | MIT (ticari OK) | Gem Hizmet Şartları (kısıtlamalar) | Phi-4-mini |
| VRAM fp16 | 7,6 GB | 8GB (veya 4GB int4) | Benzer |
| Bağlam penceresi | 128 bin jeton | 128 bin jeton | Eşit |
Hangi Model Ne Zaman Seçilmeli
def choose_slm(use_case: str, constraints: dict) -> str:
"""
Framework di decisione per scegliere tra Phi-4-mini e Gemma 3n.
"""
# Vincoli hardware
if constraints.get("target_platform") == "android_npu":
return "gemma-3n-e4b" # progettato per NPU Qualcomm/MediaTek
if constraints.get("target_platform") == "ios_neural_engine":
return "gemma-3n-e4b" # ottimizzato per Apple Neural Engine
# Licenza
if constraints.get("commercial_use") and constraints.get("no_usage_restrictions"):
# Gemma ToS ha restrizioni; MIT di Phi e piu permissiva
return "phi-4-mini"
# Task-based selection
if use_case in ["coding", "math_reasoning", "json_extraction"]:
return "phi-4-mini"
if use_case in ["conversational_ai", "multilingual_chat"]:
return "gemma-3n-e4b"
if use_case == "fine_tuning_budget":
# Phi-4-mini: piu semplice da fine-tune con PEFT standard
return "phi-4-mini"
# Default per uso generico
return "phi-4-mini"
# Esempi di decisione:
print(choose_slm("coding", {"commercial_use": True})) # phi-4-mini
print(choose_slm("chat", {"target_platform": "android_npu"})) # gemma-3n-e4b
print(choose_slm("math_reasoning", {})) # phi-4-mini
Sonuçlar
Net bir kazanan yok: Phi-4-mini muhakeme gerektiren görevlerde üstündür ticari kullanım için daha hoşgörülü bir MIT lisansı ile yapılandırılmış, kod ve JSON çıktısı. Gemma 3n E4B İtalyanca konuşmada üstündür, üstün çıkarım hızına sahiptir ve ve Android/iOS mobil NPU'larda dağıtım için en uygun model.
Bir sonraki makale ince ayar ile ilgilidir: Phi-4-mini veya Qwen 3'ü kendinize nasıl uyarlayabilirsiniz? 8-12 GB VRAM tüketici GPU'larında QLoRA'lı alan adı ve uçtan uca eksiksiz iş akışı veri kümesinin alınmasından Hugging Face Hub'a yüklenmesine kadar.
Seri: Küçük Dil Modelleri
- Makale 1: 2026'da SLM - Genel Bakış ve Karşılaştırma
- Madde 2 (bu): Phi-4-mini ve Gemma 3n - Ayrıntılı Karşılaştırma
- Madde 3: LoRA ve QLoRA ile ince ayar yapma
- Madde 4: Kenar için Niceleme - GGUF, ONNX, INT4
- Madde 5: Ollama - 5 Dakikada Yerel Olarak SLM







