Connect with us

Líderes de opinión

Evitando los peligros ocultos: Navegando por las trampas no obvias en ML en iOS

mm

¿Necesita ML?

El aprendizaje automático es excelente para detectar patrones. Si logra recopilar un conjunto de datos limpio para su tarea, generalmente solo es cuestión de tiempo antes de que pueda construir un modelo de ML con un rendimiento superior al humano. Esto es especialmente cierto en tareas clásicas como la clasificación, la regresión y la detección de anomalías.

Cuando esté listo para resolver algunos de sus problemas comerciales con ML, debe considerar dónde ejecutarán sus modelos de ML. Para algunos, tiene sentido ejecutar una infraestructura de servidor. Esto tiene el beneficio de mantener sus modelos de ML privados, por lo que es más difícil para los competidores ponerse al día. Además, los servidores pueden ejecutar una variedad más amplia de modelos. Por ejemplo, los modelos GPT (hechos famosos con ChatGPT) actualmente requieren GPUs modernas, por lo que los dispositivos de consumo están fuera de consideración. Por otro lado, mantener su infraestructura es bastante costoso, y si un dispositivo de consumo puede ejecutar su modelo, ¿por qué pagar más? Además, puede haber preocupaciones de privacidad donde no pueda enviar datos de usuario a un servidor remoto para su procesamiento.

Sin embargo, supongamos que tiene sentido utilizar los dispositivos iOS de sus clientes para ejecutar un modelo de ML. ¿Qué podría salir mal?

Limitaciones de la plataforma

Límites de memoria

Los dispositivos iOS tienen mucha menos memoria de video disponible que sus contrapartes de escritorio. Por ejemplo, la reciente Nvidia RTX 4080 Ti tiene 20 GB de memoria disponible. Los iPhones, por otro lado, tienen memoria de video compartida con el resto de la RAM en lo que llaman “memoria unificada”. Para referencia, el iPhone 14 Pro tiene 6 GB de RAM. Además, si asigna más de la mitad de la memoria, es muy probable que iOS mate la aplicación para asegurarse de que el sistema operativo siga siendo receptivo. Esto significa que solo puede contar con tener 2-3 GB de memoria disponible para la inferencia de la red neuronal.

Los investigadores suelen entrenar sus modelos para optimizar la precisión sobre el uso de memoria. Sin embargo, también hay investigaciones disponibles sobre formas de optimizar para velocidad y huella de memoria, por lo que puede buscar modelos menos exigentes o entrenar uno usted mismo.

Capas de red (operaciones) de soporte

La mayoría de las redes neuronales y el aprendizaje automático provienen de frameworks de aprendizaje profundo bien conocidos y luego se convierten en CoreML con Core ML Tools. CoreML es un motor de inferencia escrito por Apple que puede ejecutar varios modelos en dispositivos Apple. Las capas están bien optimizadas para el hardware y la lista de capas admitidas es bastante larga, por lo que este es un excelente punto de partida. Sin embargo, también están disponibles otras opciones como Tensorflow Lite.

La mejor manera de ver qué es posible con CoreML es mirar algunos modelos ya convertidos utilizando visores como Netron. Apple enumera algunos de los modelos oficialmente admitidos, pero también hay zoológicos de modelos impulsados por la comunidad. La lista completa de operaciones admitidas cambia constantemente, por lo que mirar el código fuente de Core ML Tools puede ser útil como punto de partida. Por ejemplo, si desea convertir un modelo PyTorch, puede intentar encontrar la capa necesaria aquí.

Además, ciertas nuevas arquitecturas pueden contener código CUDA escrito a mano para algunas de las capas. En tales situaciones, no puede esperar que CoreML proporcione una capa predefinida. Sin embargo, puede proporcionar su propia implementación si tiene un ingeniero capacitado familiarizado con la escritura de código de GPU.

En general, el mejor consejo aquí es intentar convertir su modelo a CoreML temprano, incluso antes de entrenarlo. Si tiene un modelo que no se convirtió de inmediato, es posible modificar la definición de la red neuronal en su framework de aprendizaje profundo o en el código fuente del convertidor de Core ML Tools para generar un modelo CoreML válido sin la necesidad de escribir una capa personalizada para la inferencia de CoreML.

Validación

Errores del motor de inferencia

No hay forma de probar todas las combinaciones posibles de capas, por lo que el motor de inferencia siempre tendrá algunos errores. Por ejemplo, es común ver que las convoluciones dilatadas utilizan mucha memoria con CoreML, lo que probablemente indica una implementación mal escrita con un kernel grande relleno de ceros. Otro error común es la salida de modelo incorrecta para algunas arquitecturas de modelo.

En este caso, el orden de las operaciones puede ser un factor. Es posible obtener resultados incorrectos dependiendo de si la activación con convolución o la conexión residual viene primero. La única forma real de garantizar que todo funcione correctamente es tomar su modelo, ejecutarlo en el dispositivo destinado y comparar el resultado con una versión de escritorio. Para esta prueba, es útil tener al menos un modelo semi capacitado disponible, de lo contrario, el error numérico puede acumularse para modelos mal inicializados aleatoriamente. Aunque el modelo final entrenado funcionará bien, los resultados pueden ser bastante diferentes entre el dispositivo y el escritorio para un modelo inicializado aleatoriamente.

Pérdida de precisión

El iPhone utiliza la precisión de media precisión de manera extensiva para la inferencia. Si bien algunos modelos no tienen ninguna degradación de precisión notable debido a los menos bits en la representación de punto flotante, otros modelos pueden sufrir. Puede aproximar la pérdida de precisión evaluando su modelo en el escritorio con media precisión y calculando una métrica de prueba para su modelo. Un método aún mejor es ejecutarlo en un dispositivo real para descubrir si el modelo es tan preciso como se pretendía.

Perfiling

Los diferentes modelos de iPhone tienen capacidades de hardware variadas. Los últimos tienen unidades de procesamiento de Neural Engine mejoradas que pueden elevar el rendimiento general de manera significativa. Están optimizados para ciertas operaciones y CoreML puede distribuir inteligentemente el trabajo entre CPU, GPU y Neural Engine. Las GPU de Apple también han mejorado con el tiempo, por lo que es normal ver rendimientos fluctuantes en diferentes modelos de iPhone. Es una buena idea probar sus modelos en dispositivos con compatibilidad mínima para garantizar la compatibilidad máxima y el rendimiento aceptable para dispositivos más antiguos.

También vale la pena mencionar que CoreML puede optimizar algunas de las capas y cálculos intermedios en su lugar, lo que puede mejorar significativamente el rendimiento. Otro factor a considerar es que sometimes, un modelo que se desempeña peor en un escritorio puede en realidad hacer inferencia más rápido en iOS. Esto significa que vale la pena pasar algún tiempo experimentando con diferentes arquitecturas.

Para una optimización aún mayor, Xcode tiene una herramienta de Instruments agradable con una plantilla solo para modelos CoreML que puede proporcionar una visión más profunda de lo que está ralentizando la inferencia de su modelo.

Conclusión

Nadie puede prever todos los posibles peligros al desarrollar modelos de ML para iOS. Sin embargo, hay algunos errores que se pueden evitar si sabe qué buscar. Comience a convertir, validar y perfilar sus modelos de ML temprano para asegurarse de que su modelo funcione correctamente y se ajuste a los requisitos de su negocio, y siga los consejos descritos anteriormente para asegurar el éxito lo más rápido posible.

Konstantin Semianov, es CTO de Neatsy.AI, la primera aplicación del mundo que detecta problemas de salud ortopédica y podología, utilizando IA y AR, con solo una cámara de iPhone. Antes de Neatsy.AI, trabajó como ingeniero de I&D en Prisma Labs, creadores de la aplicación Lensa.