Back to blog
    Ejecutando Ollama para Preparación de Datos Asistida por IA en Entornos Empresariales Air-Gapped
    ollamaair-gappedon-premiselocal-llmdata-preparationenterprisesecurityofflinesegment:service-provider

    Ejecutando Ollama para Preparación de Datos Asistida por IA en Entornos Empresariales Air-Gapped

    Guía paso a paso para desplegar Ollama para etiquetado de datos asistido por IA en entornos air-gapped — transferencia de modelos, configuración offline, configuración de GPU y modos de falla comunes.

    EErtas Team·

    El flujo de trabajo normal de Ollama asume acceso a internet: ollama pull mistral descarga pesos del modelo desde un registro. En un entorno air-gapped, no hay internet. Sin acceso al registro, sin descargas de dependencias, sin telemetría de comunicación. Todo lo necesario para ejecutar debe transferirse físicamente a través de un proceso aprobado.

    Esta es la realidad para proyectos de preparación de datos en defensa, inteligencia, infraestructura crítica y entornos financieros de alta seguridad. El flujo de trabajo de etiquetado asistido por IA que funciona en tu laptop con ollama run necesita una ruta de despliegue diferente cuando la máquina destino nunca ha visto internet.

    Esta guía cubre el flujo completo de despliegue air-gapped de Ollama: desde la preparación del modelo en una máquina conectada a internet hasta la operación validada en el destino aislado.


    Prerrequisitos

    Antes de iniciar el proceso de transferencia, confirma lo siguiente en la máquina destino air-gapped:

    Sistema operativo: Linux (Ubuntu 22.04/24.04, RHEL 8/9, Rocky Linux) o Windows 10/11. macOS es posible pero menos común en entornos empresariales air-gapped.

    Controladores GPU: Los controladores NVIDIA deben estar ya instalados y funcionales en el destino. Ejecuta nvidia-smi para verificar. Si los controladores GPU no están instalados, ese es un proceso de instalación offline separado (y frecuentemente doloroso) — los paquetes de controladores NVIDIA tienen su propia cadena de dependencias.

    Toolkit CUDA: Requerido para inferencia GPU. Debe coincidir con la versión del controlador. Verifica con nvcc --version o revisa /usr/local/cuda/version.txt.

    Espacio en disco: El almacenamiento de modelos de Ollama por defecto está en ~/.ollama/models. Un modelo 7B Q4 ocupa ~4 GB. Un modelo 14B Q4 ocupa ~8 GB. Presupuesta 50–100 GB para almacenamiento de modelos si mantendrás múltiples modelos y variantes de cuantización.

    Medios de transferencia aprobados: Unidades USB, medios ópticos o lo que la política de transferencia de información de la instalación permita. Algunos entornos requieren tipos de medios específicos con protección contra escritura o cifrado.


    Paso 1: Preparar Modelos en una Máquina Conectada a Internet

    En una máquina con acceso a internet (tu estación de trabajo de desarrollo o una máquina de staging designada):

    Instalar Ollama

    curl -fsSL https://ollama.ai/install.sh | sh
    

    Descargar Modelos Objetivo

    Descarga cada modelo y variante de cuantización que necesitarás. No puedes descargar modelos adicionales después de la transferencia.

    # Modelos principales de etiquetado
    ollama pull mistral:7b-instruct-v0.3-q4_K_M
    ollama pull mistral:7b-instruct-v0.3-q8_0
    ollama pull qwen2.5:14b-instruct-q4_K_M
    ollama pull qwen2.5:14b-instruct-q5_K_M
    
    # Modelo más pequeño para tareas ligeras
    ollama pull phi3:3.8b-mini-instruct-4k-q4_K_M
    
    # Modelo de embeddings (si es necesario para dedup/similitud)
    ollama pull nomic-embed-text
    

    Verificar que los Modelos Funcionan

    Ejecuta una inferencia de prueba para cada modelo para confirmar que cargan y generan correctamente:

    ollama run mistral:7b-instruct-v0.3-q4_K_M "Classify this text as positive or negative: The product arrived on time."
    

    Localizar Archivos del Modelo

    Ollama almacena los blobs del modelo en su directorio de modelos:

    # Ubicaciones por defecto
    # Linux: ~/.ollama/models
    # macOS: ~/.ollama/models
    # Windows: C:\Users\<user>\.ollama\models
    
    ls ~/.ollama/models/manifests/registry.ollama.ai/library/
    ls ~/.ollama/models/blobs/
    

    El directorio manifests contiene metadatos (archivos JSON que mapean nombres de modelos a hashes de blobs). El directorio blobs contiene los pesos reales del modelo y archivos de configuración.


    Paso 2: Empaquetar para Transferencia

    Opción A: Copiar el Directorio Completo de Ollama

    El enfoque más simple — copiar el directorio completo ~/.ollama al medio de transferencia.

    # Calcular el tamaño total
    du -sh ~/.ollama/models
    
    # Copiar al medio de transferencia (ej. unidad USB cifrada)
    cp -r ~/.ollama/models /media/transfer-drive/ollama-models/
    

    Ventaja: Garantiza incluir todo — manifiestos, blobs y metadatos. Desventaja: Incluye todos los modelos, incluso los que podrías no necesitar en el destino. Puede ser muy grande si has descargado muchos modelos.

    Opción B: Exportación Selectiva de Modelos

    Para entornos con límites estrictos de tamaño de transferencia, exporta solo los modelos que necesitas.

    # Crear un directorio limpio de exportación
    mkdir -p /media/transfer-drive/ollama-export
    
    # Copiar manifiestos para modelos específicos
    for model in mistral qwen2.5 phi3 nomic-embed-text; do
      cp -r ~/.ollama/models/manifests/registry.ollama.ai/library/$model \
        /media/transfer-drive/ollama-export/manifests/registry.ollama.ai/library/
    done
    
    # Leer los manifiestos para identificar blobs requeridos, luego copiar esos blobs
    # (Cada manifiesto referencia hashes SHA256 de blobs)
    

    Esto es más complejo pero produce un paquete de transferencia más pequeño. Se recomienda un enfoque con scripts para evitar perder blobs que los manifiestos referencian.

    Opción C: Usar Archivos GGUF Directamente (Fallback llama.cpp)

    Si el enfoque de copia del directorio de Ollama no funciona limpiamente, descarga archivos GGUF directamente de HuggingFace y planea usar llama.cpp en el destino:

    # Descargar archivos GGUF
    wget https://huggingface.co/TheBloke/Mistral-7B-Instruct-v0.3-GGUF/resolve/main/mistral-7b-instruct-v0.3.Q4_K_M.gguf
    

    Los archivos GGUF son autocontenidos — un solo archivo tiene los pesos del modelo, tokenizador y configuración. Este es el formato más portable para despliegue air-gapped.

    Preparar el Binario de Ollama

    También transfiere el binario de Ollama:

    # Descargar el binario de Ollama para el SO/arquitectura destino
    # Linux x86_64:
    curl -L https://ollama.ai/download/ollama-linux-amd64 -o ollama
    chmod +x ollama
    
    # Copiar al medio de transferencia
    cp ollama /media/transfer-drive/ollama-binary/
    

    Calcular y Registrar Checksums

    Verifica la integridad de la transferencia:

    sha256sum /media/transfer-drive/ollama-binary/ollama > /media/transfer-drive/checksums.txt
    find /media/transfer-drive/ollama-models/ -type f -exec sha256sum {} + >> /media/transfer-drive/checksums.txt
    

    Paso 3: Transferir a la Máquina Air-Gapped

    Este paso sigue la política de transferencia de información de tu organización. Patrones comunes:

    1. Unidad USB: Copia archivos a una unidad USB aprobada. Algunos entornos requieren unidades cifradas o unidades que hayan sido escaneadas por un diodo de datos.
    2. Medios ópticos: Grabar en DVD o Blu-ray. Los medios de solo lectura a veces se prefieren por seguridad — no pueden ser escritos por el sistema receptor.
    3. Transferencia por diodo de datos: Algunos entornos de alta seguridad usan diodos de datos de hardware que permiten transferencia de datos unidireccional de redes de baja seguridad a redes de alta seguridad.

    Cualquiera que sea el mecanismo, verifica los checksums después de la transferencia:

    sha256sum -c checksums.txt
    

    Cualquier discrepancia de checksum significa que el archivo se corrompió durante la transferencia. No procedas con archivos de modelo corruptos — o fallarán al cargar o producirán salidas incorrectas.


    Paso 4: Instalar y Configurar en la Máquina Destino

    Instalar el Binario de Ollama

    # Copiar binario a la ruta del sistema
    sudo cp /media/transfer/ollama-binary/ollama /usr/local/bin/
    sudo chmod +x /usr/local/bin/ollama
    

    Configurar el Directorio de Modelos

    # Si usas la Opción A (copia completa del directorio):
    mkdir -p ~/.ollama
    cp -r /media/transfer/ollama-models ~/.ollama/models
    
    # Verificar que Ollama puede ver los modelos
    ollama list
    

    La salida esperada debe mostrar todos los modelos transferidos con sus tamaños.

    Configurar el Entorno

    # Prevenir que Ollama intente cualquier acceso a red
    export OLLAMA_HOST=127.0.0.1:11434
    export OLLAMA_ORIGINS=*
    
    # Opcional: ubicación personalizada de almacenamiento de modelos
    export OLLAMA_MODELS=/path/to/custom/model/directory
    
    # Para sistemas con múltiples GPUs, especificar cuál usar
    export CUDA_VISIBLE_DEVICES=0
    
    # Establecer conteo de solicitudes paralelas
    export OLLAMA_NUM_PARALLEL=2
    

    Iniciar y Validar

    # Iniciar servidor Ollama
    ollama serve &
    
    # Verificar que el modelo carga y ejecuta
    ollama run mistral:7b-instruct-v0.3-q4_K_M "Respond with 'OK' if you are working."
    

    Si el modelo carga y genera una respuesta, el despliegue es funcional.


    Selección de Modelos para Tareas de Preparación de Datos

    Para entornos air-gapped, la selección de modelos requiere más reflexión porque no puedes intercambiar modelos fácilmente después del despliegue. Transfiere los modelos correctos desde el inicio.

    Clasificación y Etiquetado

    Primario: Mistral 7B Instruct o Llama 3.1 8B Instruct en Q4_K_M. Rápido, preciso para clasificación binaria y multi-clase. Maneja la mayoría de tareas de categorización de documentos.

    Respaldo: El mismo modelo en Q8_0 para mayor precisión si Q4 resulta insuficiente. Transfiere ambas cuantizaciones para tener la opción.

    Extracción de Entidades

    Primario: Qwen 2.5 14B Instruct en Q4_K_M o Q5_K_M. El modelo más grande proporciona mejor precisión en la extracción de entidades específicas (nombres, fechas, montos, citas legales) de documentos complejos.

    Generación de Datos Sintéticos

    Primario: Qwen 2.5 14B Instruct en Q5_K_M. La calidad de generación se beneficia más de una cuantización más alta que la clasificación.

    Tareas Ligeras

    Primario: Phi-3 Mini 3.8B en Q4_K_M. Para clasificación binaria simple, detección de formato o identificación de idioma donde un modelo 7B es excesivo y un modelo 3.8B ejecuta más rápido.

    Paquete de Transferencia Recomendado

    Para un despliegue de preparación de datos de propósito general, transfiere:

    ModeloCuantizaciónTamañoPropósito
    Mistral 7B Instruct v0.3Q4_K_M~4 GBClasificación/etiquetado primario
    Mistral 7B Instruct v0.3Q8_0~7.5 GBRespaldo de alta precisión
    Qwen 2.5 14B InstructQ4_K_M~8 GBExtracción de entidades, generación
    Qwen 2.5 14B InstructQ5_K_M~10 GBGeneración de alta calidad
    Phi-3 Mini 3.8BQ4_K_M~2.3 GBTareas ligeras
    nomic-embed-textDefault~275 MBEmbeddings (dedup/similitud)
    Total~32 GB

    Este paquete cabe en una sola unidad USB de 64 GB con espacio para el binario de Ollama y documentación.


    Consideraciones Operacionales

    Actualizaciones de Modelos Sin Internet

    Cuando se lanza una nueva versión de modelo que mejora la precisión del etiquetado, el ciclo de actualización es:

    1. Descargar el nuevo modelo en la máquina de staging conectada a internet
    2. Verificar que funcione con datos de prueba representativos
    3. Transferir mediante el proceso aprobado
    4. Instalar en la máquina air-gapped
    5. Validar contra un conjunto de prueba reservado para confirmar la mejora

    Este ciclo toma días a semanas dependiendo del proceso de aprobación de transferencia de la organización. Planifícalo. No prometas iteración rápida de modelos en entornos air-gapped.

    Gestión de Múltiples Versiones de Modelos

    Mantén versiones anteriores de modelos en la máquina destino hasta que la nueva versión esté validada. El costo de espacio en disco es mínimo comparado con el riesgo de desplegar un modelo que rinde peor en tu tarea específica.

    # Ollama maneja el versionado por tag
    # Ambas versiones coexisten
    ollama list
    # mistral:7b-instruct-v0.3-q4_K_M    4.1 GB
    # mistral:7b-instruct-v0.2-q4_K_M    4.0 GB
    

    Gestión de Memoria GPU

    Ollama carga el modelo en memoria GPU en la primera solicitud y lo mantiene ahí. En una máquina con VRAM limitada sirviendo múltiples tamaños de modelo:

    # Establecer timeout para descargar modelos inactivos (en minutos)
    export OLLAMA_KEEP_ALIVE=5m
    

    Con un keep-alive de 5 minutos, cambiar entre un modelo 7B y 14B toma ~10–15 segundos (tiempo de carga del modelo) después de que el modelo anterior es desalojado.


    Modos de Falla Comunes

    Bibliotecas CUDA Faltantes

    Síntoma: Ollama inicia pero la inferencia ejecuta en CPU (extremadamente lento) o falla con un error de CUDA.

    Causa: Toolkit CUDA o bibliotecas cuDNN no instaladas, o la versión instalada no coincide con el controlador GPU.

    Solución: Verifica que nvidia-smi muestre la GPU. Verifica que nvcc --version muestre el toolkit CUDA. Asegúrate de que la versión del toolkit CUDA sea compatible con la versión del controlador instalado. NVIDIA mantiene una matriz de compatibilidad.

    Corrupción de Pesos del Modelo Durante la Transferencia

    Síntoma: El modelo falla al cargar con un error críptico sobre header GGUF inválido o incompatibilidad de forma de tensor.

    Causa: Archivo corrupto durante el proceso de transferencia — copia incompleta, sector defectuoso en medio USB o interrupción de transferencia.

    Solución: Compara checksums contra el original. Re-transfiere los archivos corruptos.

    VRAM Insuficiente

    Síntoma: El modelo carga parcialmente, luego falla con un error de memoria insuficiente.

    Causa: El modelo (incluyendo caché KV para la ventana de contexto configurada) no cabe en la VRAM de la GPU.

    Solución: Usa un modelo más pequeño o cuantización más baja. O reduce OLLAMA_NUM_PARALLEL a 1 (menos ventanas de contexto concurrentes). O reduce el tamaño de la ventana de contexto.

    Ollama No Encuentra Modelos

    Síntoma: ollama list no muestra modelos a pesar de que los archivos están presentes en disco.

    Causa: La estructura del directorio de modelos no coincide con lo que Ollama espera. Los manifiestos referencian hashes de blobs que deben existir en el directorio de blobs.

    Solución: Asegúrate de que la estructura del directorio bajo ~/.ollama/models/ esté intacta: manifests/registry.ollama.ai/library/<nombre-modelo>/<tag> debe apuntar a blobs en blobs/sha256-<hash>.

    Errores de DNS/Red al Inicio

    Síntoma: Los logs de Ollama muestran fallos de resolución DNS o timeouts de conexión.

    Causa: Ollama intenta verificar actualizaciones o resolver el hostname de su registro.

    Solución: Establece OLLAMA_HOST=127.0.0.1:11434 y asegúrate de que no haya variables de entorno de proxy establecidas (unset http_proxy https_proxy HTTP_PROXY HTTPS_PROXY). Ollama debería funcionar sin acceso a red, pero configuraciones de proxy obsoletas pueden causar timeouts que retrasan el inicio.


    Integración con Herramientas de Preparación de Datos

    Ollama expone una API compatible con OpenAI en localhost:11434. Cualquier herramienta que pueda llamar a la API de OpenAI puede apuntarse a Ollama cambiando la URL base.

    Ertas Data Suite se integra con Ollama y llama.cpp nativamente. En un despliegue air-gapped, la aplicación detecta Ollama ejecutándose en localhost y presenta los modelos disponibles en la interfaz de etiquetado. El usuario selecciona un modelo, configura plantillas de prompt para su esquema de etiquetado y comienza la anotación asistida por IA — todo sin ninguna conectividad de red.

    La arquitectura de escritorio nativa significa que la herramienta de preparación de datos en sí tampoco requiere acceso a red. No hay servidor de licencias que contactar, no hay telemetría que enviar, no hay servicio en la nube contra el cual autenticarse. Toda la pila — aplicación, backend de inferencia y datos — opera en una sola máquina air-gapped.


    Lista de Verificación de Despliegue

    Antes de declarar el despliegue air-gapped operacional:

    • nvidia-smi muestra la(s) GPU(s) correcta(s)
    • ollama list muestra todos los modelos esperados
    • Cada modelo ejecuta inferencia exitosamente
    • La utilización de GPU durante la inferencia es mayor a 0% (confirmando GPU, no CPU, en ejecución)
    • La velocidad de inferencia coincide con las expectativas (~30–60 tok/s para 7B Q4 en GPU de consumo)
    • Sin errores de red en los logs de Ollama
    • Checksums de todos los archivos transferidos verificados
    • Salidas del modelo validadas contra ejemplos conocidos del entorno de staging

    Resuelve esto antes de que llegue el equipo de engagement. Depurar controladores GPU en un SCIF air-gapped no es cómo nadie quiere gastar horas facturables.

    Ship AI that runs on your users' devices.

    Early bird pricing starts at $14.50/mo — locked in for life. Plans for builders and agencies.

    Keep reading