Dado que muchos algoritmos de aprendizaje automático se ejecutan en GPU, ¿Julia sigue siendo una buena opción para eso?

Responderé, sí con cautela * al menos el uso de GPU no debería ser un obstáculo para que Julia sea una buena opción.

A) Primero sobre el aprendizaje automático en general; Julia parece ser un lenguaje excelente para eso, mejor que la mayoría, para eso y otras matemáticas relacionadas, y no se limita a eso:

Los mejores proyectos de aprendizaje automático para Julia

“Julia está ganando terreno como un lenguaje de programación alternativo legítimo para las tareas de análisis. Obtenga más información sobre estos 5 proyectos relacionados con el aprendizaje automático “.

[Pensé que MXNet era una alternativa más reciente / mejor a, tal vez un enlace con esta información NO está desactualizado]: “Mocha es un marco de Deep Learning para Julia, inspirado en el marco de C ++ Caffe”.

Una que no había visto antes: parece estar usando Caffe, no “inspirado”: “Strada es una biblioteca de aprendizaje profundo para Julia, basada en el popular marco Caffe desarrollado por BVLC y la comunidad de visión por computadora de Berkeley. Admite la formación de redes neuronales convolucionales y recurrentes, tanto en la CPU como en la GPU. ”

Cuando digo un lenguaje excelente, estoy hablando del idioma principal, y aunque no soy experto en los paquetes disponibles (o en otros lugares, por ejemplo, de Python), incluyen al menos un contenedor para el Tensorflow de Google:

malmaud / TensorFlow.jl [No estoy seguro de si esto es solo una limitación en Julia (no con la API de Python); si es así, supongo que solo es temporal (o al menos no demasiado importante …?)]:

“Para habilitar la compatibilidad con el uso de GPU (solo Linux), configure una variable de entorno TF_USE_GPU en” 1 “y luego reconstruya el paquete. p.ej

ENV [“TF_USE_GPU”] = “1”
Pkg.build (“TensorFlow”)

CUDA 7.5 y cudnn son necesarios para el uso de GPU “.

MXNet.jl ofrece computación de GPU flexible y eficiente y aprendizaje profundo avanzado a Julia.

Mirando el código fuente, Windows parece ser compatible con las GPU, simplemente “La compilación automática de libxmnet en Windows todavía no es compatible”. Consulte: Guía de instalación

Al menos algo de soporte de Tourch (escrito en Lua): mrkulk / Julia-Torch “usando ZMQ”

“Torch es un marco de cómputo científico con amplio soporte para algoritmos de aprendizaje automático que pone a las GPU en primer lugar”.

JuliaStats.org: “Las estadísticas y el aprendizaje automático se hicieron fáciles en Julia”.

josephmisiti / awesome-machine-learning [Lista para muchos idiomas, apuntando a la sublista de Julia]

B) En el trabajo de GPU, he visto que el código de Julia se habilitó para GPU al agregar una macro (ejemplo más antiguo que con ArrayFire). Este parece ser uno de los paquetes principales en el mundo que no es de Julia (escrito en C ++):

ArrayFire | Faster Code “simplifica el proceso de desarrollo de software dirigido a arquitecturas paralelas y paralelas masivas, incluidas CPU, GPU y otros dispositivos de aceleración de hardware”.

JuliaComputing / ArrayFire.jl

“Hay tres backends en ArrayFire.jl :

  • Backend de CUDA
  • OpenCL Backend
  • CPU Backend

Existe otro backend que esencialmente permite al usuario cambiar los backends en tiempo de ejecución. Esto se llama el backend unificado “.

Incluso puede preferirse usar ArrayFire de Julia; Ya es rápido, pero leí el código de Julia mejorado en un 5% de su propio código de ejemplo.

* La gente no cree que la recolección de basura pueda ser tan rápida como la gestión manual de la memoria; ese no tiene por qué ser el caso, solo con GC; Un problema que surgió es que GC no funciona en todos los procesos (es decir, espacios de direcciones diferentes).

Ahora, las GPU tienen su propio espacio de direcciones; Creo que, en el peor de los casos, tendría una pérdida de memoria, pero creo que ese problema se ha resuelto. Y no es tampoco o. Puede usar la gestión manual de memoria directamente en Julia; No he visto eso hecho mucho … o indirectamente; llamando a C o C ++ que lo hace por usted, Julia puede hacerse cargo de esa memoria y llamar gratis por usted. Llamar gratis a la memoria de la GPU probablemente no sea tan automático, pero al menos todo esto funciona en conjunto, Julia, GPU, Python si es necesario, C ++, etc.

No puedo ver un problema que Python no tendría, y confía en que Julia es al menos un mejor lenguaje. Usted decide los paquetes necesarios; puedes usar todos los paquetes de Python (o C o C ++) de todos modos, de Julia ..

Si. La combinación de procesos distribuidos (ver ClusterManagers.jl) y paquetes CUDA (CUDArt.jl + amigos) es muy poderosa.