---
name: gliner_load_model
kind: function
lang: py
domain: datascience
version: "1.0.0"
purity: impure
signature: "def gliner_load_model(model_name: str = 'urchade/gliner_multi-v2.1', device: str = 'auto') -> Any"
description: "Carga (y cachea por (model_name, device)) un modelo GLiNER zero-shot NER. La primera llamada descarga ~200 MB desde HuggingFace; sucesivas devuelven la instancia cacheada. device='auto' usa CUDA si esta disponible, o CPU."
tags: [gliner, ner, nlp, model, huggingface, zero-shot, datascience, python]
uses_functions: []
uses_types: []
returns: []
returns_optional: false
error_type: "error_go_core"
imports: []
params:
  - name: model_name
    desc: "ID del modelo en HuggingFace Hub (defecto: urchade/gliner_multi-v2.1, multilingue ES/EN)"
  - name: device
    desc: "'auto' (CUDA si disponible, sino CPU), 'cpu', 'cuda', 'cuda:N'"
output: "instancia GLiNER lista para predict_entities, cacheada por (model_name, device)"
tested: true
tests:
  - "ImportError si gliner no esta instalado"
  - "Cache devuelve la misma instancia con los mismos parametros"
  - "device='auto' resuelve a cpu o cuda segun torch.cuda.is_available"
test_file_path: "python/functions/datascience/tests/test_extract_entities_gliner.py"
file_path: "python/functions/datascience/gliner_load_model.py"
---

## Ejemplo

```python
from python.functions.datascience import gliner_load_model

# Primera llamada descarga el modelo (~200 MB, una vez)
model = gliner_load_model(device="auto")

# Llamadas sucesivas con mismos params devuelven el cache
model_again = gliner_load_model(device="auto")
assert model is model_again
```

## Instalacion

GLiNER no esta en las dependencias principales del registry. Para usarlo:

```bash
cd python && uv pip install gliner            # solo gliner
cd python && uv pip install -e '.[nlp]'       # extra completo
```

## Tamaño y latencia

- `urchade/gliner_multi-v2.1`: ~210 MB en disco (modelo + tokenizer).
- Primera carga: 5-15 s en CPU, depende del disco y red.
- Inferencia CPU: 1-5 KB texto/s con 8 labels (Apple M2 / i7 moderno).
- Inferencia GPU (CUDA T4): 50-200 KB texto/s — 50-200x mas rapido.

## Notas

- El cache es por (model_name, device): cargar el mismo modelo en CPU y CUDA crea dos instancias. Es intencional para permitir A/B.
- Si `torch` no esta instalado y `device='auto'`, cae a `'cpu'` sin error.
- Para limpiar el cache (memoria GPU): borrar entradas de `_MODEL_CACHE` directamente o reiniciar el proceso.
- impure: lee disco/red la primera vez y mantiene estado en `_MODEL_CACHE`.
