Hasta hace poco, los Modelos de Lenguaje Grande (LLM) eran demasiado grandes y costosos para ejecutarse localmente. La única opción viable era integrar las capacidades de LLM a través de sistemas remotos. Una solución que introduce latencia, dependencia de la red y el envío de datos sensibles desde el dispositivo.
Gracias a las recientes mejoras de hardware en CoreML y a la introducción del framework de Modelos Fundacionales (Foundation Models) para desarrolladores, se ha abierto un nuevo escenario. Este nuevo framework proporciona una API de alto nivel para interactuar con modelos generativos integrados en el sistema de Apple. Los procesadores modernos de Apple (series M y A) ahora permiten ejecutar estos modelos generativos localmente en el dispositivo, garantizando un rendimiento rápido y manteniendo la privacidad del usuario.
En este artículo, realizaremos un análisis técnico y conceptual de la integración de un LLM en un proyecto de iOS, centrándonos en escenarios de producción del mundo real.
Elegir un modelo compatible
El primer paso en la integración de un modelo LLM en iOS es una exploración profunda de un modelo compatible con los dispositivos Apple. Ese modelo debe respetar las dimensiones, la arquitectura y los requisitos del hardware. En términos de tamaño del modelo, no se trata solo del espacio de almacenamiento, sino también del consumo de memoria en tiempo de ejecución (RAM). Los modelos que van de 1 a 3 mil millones de parámetros son los más realistas para ejecutar en iOS, ya que maximizan el rendimiento en relación con su tamaño.
Los modelos disponibles en repositorios como Hugging Face y muchos otros suelen estar entrenados utilizando frameworks PyTorch u ONNX. Estos modelos deben convertirse al formato CoreML utilizando herramientas como coremltools, que traducen sus operaciones a una representación optimizada para iOS.
También es importante tener en cuenta que no todos los modelos son directamente compatibles. Algunas capas pueden no ser compatibles con CoreML. Algunas operaciones utilizadas en la arquitectura original no existen en el sistema de Apple. Por ejemplo, los mecanismos de atención optimizados como FlashAttention no se pueden convertir porque dependen de kernels de GPU fusionados que CoreML no admite. Lo mismo ocurre con ciertas capas de normalización personalizadas u operaciones tensoriales dinámicas que modifican las formas en tiempo de ejecución, que CoreML no puede representar directamente.
Por esta razón, la evaluación inicial del modelo es una fase crítica para identificar un modelo que pueda adaptarse perfectamente al dispositivo. Muchas de estas operaciones provienen de las capas personalizadas de PyTorch, que son fragmentos de código creados por los autores y que CoreML no sabe cómo interpretar automáticamente. Cuando esto sucede, esas capas deben reescribirse utilizando operaciones compatibles para que el modelo pueda ejecutarse correctamente en dispositivos Apple.
Traduciendo el modelo al formato de Apple
Una vez que se ha seleccionado un modelo compatible, comienza la fase técnica. Durante el proceso de conversión, el modelo original se traduce de frameworks como PyTorch al formato CoreML, adaptando sus operaciones internas para que puedan ejecutarse eficientemente en iOS. Este paso implica transformar capas complejas, reducir el tamaño del modelo y garantizar que las operaciones puedan ejecutarse eficientemente en el Neural Engine.
La optimización del tamaño del modelo es crítica. Utilizando la cuantización, los pesos del modelo se convierten en formatos numéricos más ligeros, como int8 o int4, en lugar de los valores de punto flotante de alta precisión utilizados durante el entrenamiento. Esto significa que el modelo almacena números usando menos bits, reduciendo la precisión, pero el comportamiento general del modelo permanece casi idéntico para las tareas generativas.
El formato más común para la implementación en dispositivos móviles es int8, que ofrece un buen equilibrio entre tamaño y precisión. En la mayoría de los casos, convertir de fp16 a int8 es fiable y preserva la eficacia del modelo para tareas generativas. Formatos como int4 son mucho más agresivos y pueden degradar significativamente el rendimiento del modelo.
Esta reducción en el tamaño del modelo es crucial para una distribución exitosa de la aplicación, ayudando a reducir el tiempo de carga y mejorar la compatibilidad con dispositivos de gama media. Una vez optimizado, este proceso genera archivos .mlpackage con metadatos que describen su arquitectura y capacidades.
El resultado final es un paquete CoreML listo para ser integrado en Xcode. Antes de incluirlo en el proyecto, se recomienda ejecutarlo en un entorno similar al de un dispositivo iOS, como un Mac con un chip de la serie M, para verificar que el rendimiento del modelo es aceptable.
Integración en Xcode
Una vez que el modelo ha sido convertido, el siguiente paso es integrarlo en Xcode, el entorno de desarrollo de Apple donde se crean aplicaciones para iOS, iPadOS y macOS. Cuando el modelo se añade al proyecto, Xcode genera automáticamente una interfaz Swift, facilitando y asegurando el uso del modelo en tu código.
Al ejecutar un LLM, el modelo no produce una respuesta completa en un solo paso. En su lugar, genera texto token por token, prediciendo el siguiente token basándose tanto en la entrada del usuario como en los tokens ya generados. Esto requiere llamar al modelo repetidamente en un bucle, donde cada token recién generado se convierte en parte de la entrada para la siguiente predicción. Este proceso iterativo continúa hasta que el modelo decide que la respuesta está completa.
Los desarrolladores pueden especificar en qué unidad de cómputo debe ejecutarse el modelo: CPU, GPU o el Apple Neural Engine. El Neural Engine es un componente especializado en los procesadores modernos de Apple diseñado para acelerar las operaciones de aprendizaje automático, por lo que es la opción más eficiente, pero no todos los componentes de un modelo pueden ser compatibles con él. En este caso, el runtime de CoreML distribuye automáticamente la ejecución entre las unidades disponibles, ejecutando cada operación en el hardware más adecuado para ella.
Interacción y diseño
Los desarrolladores deben decidir cómo interactuarán los usuarios con el modelo. Es importante tener en cuenta que los modelos LLM manejan instrucciones ambiguas, contexto conversacional y resultados potencialmente largos, por lo que la experiencia del usuario depende de cómo se gestione el contexto.
La interfaz de usuario debe estar diseñada para recibir entradas de forma incremental, manejar interrupciones, reformulaciones y proporcionar mecanismos de corrección. El desarrollador también debe determinar cómo se gestiona el estado de la conversación, si la información se almacena o se reinicia con cada nueva consulta.
Incluir un modelo grande directamente en el paquete de la aplicación puede no ser viable. Muchas aplicaciones descargan el modelo después de la instalación inicial, manteniendo la aplicación ligera y permitiendo actualizaciones sin necesidad de lanzar una nueva versión en la App Store.
Mantenimiento del modelo
El modelo es una parte viva del proyecto, que evoluciona rápidamente. Su mantenimiento es esencial para garantizar que permanezca completamente funcional a lo largo del tiempo.
Cada actualización del modelo puede requerir nuevas conversiones, ajustes o modificaciones estructurales. La seguridad juega un papel clave en este proceso. Cada modelo descargado debe ser verificado utilizando firmas digitales de servidores de confianza. Este paso garantiza la integridad del LLM que forma parte de la aplicación.
Conclusión
El desarrollo de aplicaciones que integran LLM en el dispositivo marca el comienzo de una nueva generación de aplicaciones, capaces de razonar, generar contenido y ayudar a los usuarios directamente desde sus propios dispositivos. Incorporar estos modelos en dispositivos iOS requiere una nueva perspectiva. Los desarrolladores deben traducir los modelos originales construidos en PyTorch a CoreML, optimizar su tamaño mediante cuantización y diseñar interfaces que soporten interacciones conversacionales en lugar de simples predicciones.
La introducción del framework de Modelos Fundacionales no pretende reemplazar a CoreML. En cambio, sirve como una herramienta para simplificar la integración con Apple Intelligence y permite a los desarrolladores adaptar las aplicaciones a las capacidades del sistema.
Este cambio redefine el papel del desarrollador, pasando de la integración de modelos estáticos a trabajar con sistemas generativos complejos y de alto rendimiento que pueden adaptarse en tiempo real. También ofrece a las empresas la oportunidad de redefinir productos existentes y crear nuevas experiencias con características que antes requerían una infraestructura mucho más compleja.
El futuro del desarrollo móvil apunta hacia aplicaciones más inteligentes, autónomas y centradas en la privacidad, donde el modelo vive directamente en el dispositivo del usuario, moldeado por sus propias capacidades y por la forma en que se convierte, optimiza y experimenta a través del diseño de interacción.