talón Evitar los peligros ocultos: navegar por trampas no obvias en ML en iOS - Unite.AI
Contáctanos

Líderes del pensamiento

Evitar los peligros ocultos: navegar por trampas no obvias en ML en iOS

mm

Publicado

 on

¿Necesitas ML?

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

Cuando esté listo para resolver algunos de sus problemas comerciales con ML, debe considerar dónde se ejecutarán sus modelos de ML. Para algunos, tiene sentido ejecutar una infraestructura de servidor. Esto tiene la ventaja de mantener sus modelos ML privados, por lo que es más difícil para los competidores ponerse al día. Además de eso, los servidores pueden ejecutar una variedad más amplia de modelos. Por ejemplo, los modelos GPT (que se hicieron famosos con ChatGPT) actualmente requieren GPU modernas, por lo que los dispositivos de consumo están fuera de discusió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, también puede haber problemas de privacidad en los que no puede enviar datos de usuario a un servidor remoto para su procesamiento.

Sin embargo, supongamos que tiene sentido usar los dispositivos iOS de sus clientes para ejecutar un modelo ML. ¿Qué puede 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". Como 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 elimine la aplicación para asegurarse de que el sistema operativo siga respondiendo. Esto significa que solo puede contar con tener 2-3 GB de memoria disponible para la inferencia de redes neuronales.

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

Soporte de capas de red (operaciones)

La mayoría de las redes neuronales y de aprendizaje automático provienen de marcos de aprendizaje profundo conocidos y luego se convierten en CoreML modelos con Herramientas básicas de aprendizaje automático. 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, otras opciones como Tensorflow Lite También están disponibles.

La mejor manera de ver lo que es posible con CoreML es mirar algunos modelos ya convertidos usando visores como Netrón. Apple enumera algunos de los modelos compatibles oficialmente, pero también hay zoológicos modelo 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 esta página.

Además, ciertas arquitecturas nuevas 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. No obstante, puede proporcionar su propia implementación si tiene un ingeniero experto familiarizado con la escritura de código 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 marco de DL o en el código fuente del convertidor de Core ML Tools para generar un modelo CoreML válido sin 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 circunvoluciones dilatadas que usan demasiada memoria con CoreML, lo que probablemente indica una implementación mal escrita con un núcleo grande relleno con 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 influir. 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 deseado y comparar el resultado con una versión de escritorio. Para esta prueba, es útil tener al menos un modelo semi-entrenado disponible, de lo contrario, el error numérico puede acumularse para modelos mal inicializados aleatoriamente. Aunque el modelo entrenado final funcionará bien, los resultados pueden ser bastante diferentes entre el dispositivo y el escritorio para un modelo inicializado aleatoriamente.

Pérdida de precisión

iPhone usa la precisión de precisión media ampliamente para la inferencia. Mientras que algunos modelos no tienen ninguna degradación de precisión notable debido a la menor cantidad de 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 precisión media y calculando una métrica de prueba para su modelo. Un método aún mejor es ejecutarlo en un dispositivo real para averiguar si el modelo es tan preciso como se esperaba.

Perfilado

Los diferentes modelos de iPhone tienen diversas capacidades de hardware. Los últimos tienen unidades de procesamiento Neural Engine mejoradas que pueden elevar significativamente el rendimiento general. Están optimizados para ciertas operaciones y CoreML puede distribuir el trabajo de manera inteligente entre la CPU, la GPU y el 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 mínimamente compatibles para garantizar la máxima compatibilidad y un rendimiento aceptable para dispositivos más antiguos.

También vale la pena mencionar que CoreML puede optimizar algunas de las capas intermedias y los cálculos en el lugar, lo que puede mejorar drásticamente el rendimiento. Otro factor a considerar es que, a veces, un modelo que funciona peor en una computadora de escritorio puede hacer inferencias más rápido en iOS. Esto significa que vale la pena pasar un tiempo experimentando con diferentes arquitecturas.

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

Conclusión

Nadie puede prever todos los peligros posibles al desarrollar modelos ML para iOS. Sin embargo, hay algunos errores que se pueden evitar si sabes qué buscar. Comience a convertir, validar y crear perfiles de sus modelos 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 garantizar el éxito lo más rápido posible.

Konstantin Semianov, es CTO de Limpio.AI, la primera aplicación del mundo que detecta problemas de salud ortopédicos y de 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.