He estado buscando en algunos de los paquetes de la Alta Potencia tarea vista trato con los cálculos de la GPU, y dado que la mayor parte de la GPU parece ser un orden de magnitud más fuerte en la realización de la aritmética de precisión simple de DP los , me preguntaba:
- ¿Por qué ninguno de los paquetes le da más control al usuario sobre el tipo de precisión requerida? Puedo ver muchas aplicaciones en estadísticas donde la aritmética SP (es decir, un número codificado con una precisión de 7 dígitos) es lo suficientemente buena para un uso práctico (si estoy sobreestimando las ganancias involucradas, hágamelo saber).
- ¿Python es más flexible en esto? Si es así, ¿por qué? No veo por qué la ausencia de un tipo 'único' en R haría que incluir esa opción (junto con una advertencia) en digamos GPUtools o magma sea imposible (aunque estaré feliz de que me muestren mal).
PD: Estoy pensando específicamente en aplicaciones donde los números ya están dimensionados y centrados en cuanto a dimensiones (de modo que la desigualdad de Chebychev es vinculante) en cuanto a dimensiones.
Respuestas:
Desde el archivo de ayuda GPUtools , parece que
useSingle=TRUE
es el valor predeterminado para las funciones.fuente
fuente
Supongo que por programación de GPU, ¿te refieres a programar tarjetas nvidia? En cuyo caso, las llamadas de código subyacentes de R y python son a C / CUDA .
La simple razón de que solo se ofrece una precisión única es porque eso es lo que admite la mayoría de las tarjetas GPU.
Sin embargo, la nueva arquitectura nvidia Fermi admite doble precisión. Si compró una tarjeta gráfica nvidia este año, entonces probablemente sea una Fermi. Incluso aquí las cosas no son simples:
Para responder a la pregunta en su título, "¿Está bien la precisión simple?", Depende de su aplicación (¡perdón por la respuesta!). Supongo que ahora todos usan doble precisión porque ya no da un golpe de rendimiento.
Cuando incursioné en las GPU, la programación de repente se volvió mucho más complicada. Tienes que preocuparte por cosas como:
fuente
useSingle=TRUE
es el valor predeterminado en las funciones. ¿Me estoy perdiendo de algo?La gran mayoría de las GPU en circulación solo admiten punto flotante de precisión simple.
En cuanto a la pregunta del título, debe mirar los datos que manejará para determinar si la precisión única es suficiente para usted. A menudo, encontrará que los solteros son perfectamente aceptables para> 90% de los datos que maneja, pero fallarán espectacularmente en ese último 10%; a menos que tenga una manera fácil de determinar si su conjunto de datos en particular fallará o no, está atascado con doble precisión para todo.
fuente
OK, una nueva respuesta a una vieja pregunta pero aún más relevante ahora. La pregunta que está haciendo tiene que ver con precisión finita, normalmente el dominio del análisis de señales y las matemáticas experimentales.
Los flotadores de doble precisión (DP) nos permiten pretender que no existen problemas de precisión finita, al igual que lo hacemos con la mayoría de los problemas matemáticos del mundo real. En matemáticas experimentales no hay pretensiones.
Los flotadores de precisión simple (SP) nos obligan a considerar el ruido de cuantización. Si nuestros modelos de aprendizaje automático rechazan inherentemente el ruido, como las redes neuronales (NN), las redes convolucionales (CNN), las redes residuales (ResN), etc., entonces SP generalmente da resultados similares a DP.
Los flotadores de media precisión (HP) (ahora compatibles con el kit de herramientas cuda 7.5) requieren que se consideren los efectos de cuantificación (ruido y redondeo). Lo más probable es que pronto veamos flotantes de HP en los kits de herramientas de aprendizaje automático comunes.
Hay trabajo reciente para crear cálculos de menor precisión en flotantes, así como números de precisión fijos. El redondeo estocástico ha permitido que la convergencia proceda con CNN mientras que la solución diverge sin ella. Estos documentos lo ayudarán a mejorar su comprensión de los problemas con el uso de números de precisión finita en el aprendizaje automático.
Para responder a sus preguntas:
SP no es tan malo. Como señala, es el doble de rápido, pero también le permite poner más capas en la memoria. Una ventaja adicional es ahorrar gastos generales para obtener datos dentro y fuera de la GPU. Los cálculos más rápidos y la sobrecarga más baja resultan en tiempos de convergencia más bajos. Dicho esto, HP, para algunos problemas, será mejor en algunas partes de la red y no en otras.
Tenga en cuenta que la tendencia en las redes neuronales ahora es ir con capas muy profundas, con ejecuciones de más de unos días comunes en los clústeres de gpu más rápidos.
fuente