09-03-02 — Modelos multimodais locais, Azure Local (edge/sovereign), NVIDIA GPU
TL;DR
Além do Foundry Local para laptops/mobile, existem dois outros cenários de "IA fora do cloud público": Azure Local (hardware Dell/HPE/Lenovo no data center do cliente com stack Azure completo) para sovereign cloud e regulados, e aceleração via NVIDIA GPU em máquinas locais ou edge para workloads pesados. Phi-4-multimodal é o modelo multimodal da Microsoft que roda nos três cenários.
Modelos multimodais locais: Phi-4-multimodal
Phi-4-multimodal (5.6B parâmetros) é o primeiro modelo da família Phi com capacidade multimodal nativa — processa texto, imagens e áudio em um único modelo. Pode rodar localmente via Foundry Local em hardware adequado.
| Modelo | Parâmetros | Modalidades | RAM mínima | GPU recomendada |
|---|---|---|---|---|
| Phi-4-mini | 3.8B | Texto | 4 GB | Qualquer GPU dedicada ou NPU |
| Phi-4 | 14B | Texto | 16 GB | RTX 3080+ / A100 |
| Phi-4-multimodal | 5.6B | Texto + Imagem + Áudio | 8 GB | RTX 3060+ / NPU avançada |
# Phi-4-multimodal com análise de imagem (Foundry Local)
from openai import OpenAI
import base64
client = OpenAI(base_url="http://localhost:5272/v1", api_key="not-needed")
# Encode imagem em base64
with open("nota_fiscal.jpg", "rb") as f:
img_b64 = base64.b64encode(f.read()).decode()
response = client.chat.completions.create(
model="phi-4-multimodal",
messages=[{
"role": "user",
"content": [
{"type": "text", "text": "Extraia os campos: fornecedor, CNPJ, valor total, data."},
{"type": "image_url", "image_url": {"url": f"data:image/jpeg;base64,{img_b64}"}}
]
}]
)
print(response.choices[0].message.content)
Azure Local: sovereign cloud on-premises
Azure Local (antes Azure Stack HCI) é o Azure rodando em hardware físico no data center do cliente. Não é "Azure privado" — é literalmente o mesmo software Azure em máquinas Dell, HPE ou Lenovo no seu rack.
Para quê serve no contexto de IA:
- Dados que não podem sair do país (bancos, governo, defesa)
- Latência ultra-baixa para sistemas industriais (manufatura, utilities)
- Conectividade intermitente — opera sem internet por períodos prolongados
- Compliance regulatório (LGPD com localização de dados exigida por contrato)
O AI Foundry pode ser deployado no Azure Local — você tem o mesmo portal (ai.azure.com), mesma API, mas os modelos rodam em hardware físico no seu data center. Os modelos disponíveis no Azure Local são o subconjunto que cabe em hardware on-prem (família Phi, alguns Llama compactos).
Aceleração NVIDIA GPU local
Para Foundry Local em máquinas com GPU NVIDIA, a aceleração é automática via CUDA:
# Foundry Local detecta GPU automaticamente
# Verifique aceleração disponível
import subprocess
result = subprocess.run(["foundry", "system", "info"], capture_output=True, text=True)
print(result.stdout)
# Output esperado:
# GPU: NVIDIA RTX 4090 (CUDA 12.3) — ENABLED
# NPU: Not detected
# CPU: AMD Ryzen 9 7950X — fallback
# Para forçar GPU específica (múltiplas GPUs)
# foundry service start --device cuda:0
Benchmarks indicativos (Phi-4-mini, Q4 quantization):
| Hardware | Tokens/s (geração) | Latência 1ª token |
|---|---|---|
| CPU Intel Core i9 (sem GPU) | ~8 tok/s | ~500ms |
| NPU Snapdragon X Elite | ~25 tok/s | ~200ms |
| NVIDIA RTX 4060 | ~60 tok/s | ~80ms |
| NVIDIA RTX 4090 | ~150 tok/s | ~30ms |
| NVIDIA A100 (data center) | ~300 tok/s | ~15ms |
Hybrid: local + cloud
O padrão mais robusto combina os dois:
- Local (Phi-4-mini): tasks simples, alta frequência, dados sensíveis — Q&A, classificação, extração
- Cloud (GPT-4o): tasks complexas, raciocínio, geração longa — apenas quando necessário
// Hybrid router: decide qual modelo usar
public class HybridLLMRouter
{
private readonly OpenAIClient _localClient;
private readonly AzureOpenAIClient _cloudClient;
public async Task<string> CompleteAsync(string prompt, bool isComplex = false)
{
if (isComplex || prompt.Length > 2000)
{
// Task complexa → cloud (GPT-4o)
var cloud = _cloudClient.GetChatClient("gpt-4o");
var r = await cloud.CompleteChatAsync(prompt);
return r.Value.Content[0].Text;
}
else
{
// Task simples → local (Phi-4-mini, custo zero)
var local = _localClient.GetChatClient("phi-4-mini");
var r = await local.CompleteChatAsync(prompt);
return r.Value.Content[0].Text;
}
}
}