Nunca trató de un lenguaje de programación diferente para la IA
Son una AI entusiasta?
Sí?
Entonces responde a esta pregunta: ¿Qué lenguaje de programación usas para desarrollar cosas para IA?
Tu respuesta es Python. ¡Ves! Lo sabíamos.
Bien, no somos magos, pero es un hecho bien conocido. Python es uno de los lenguajes más populares en este momento, no solo en Aprendizaje automático, sino también para fines de desarrollo normal. A octubre de 2019, más de 8,2 millones de desarrolladores utilizan Python. Que es 1 millón más que Java y más de 6 millones más que Swift.
Python ocupa el primer lugar cuando se trata de desarrollo en el dominio de la inteligencia artificial.
Para demostrarlo simplemente, la mayoría de los entusiastas ni siquiera conocerán ningún otro lenguaje que no sea Python (y R en su mayoría), que se puede usar para el Aprendizaje automático. Y es solo porque parece desalentador codificar algoritmos de ML en C o Java.
Python se usa ampliamente debido a su simplicidad y comunidad. Pero todos conocemos un gran inconveniente de Python.
Sí. La velocidad de ejecución.
Python es 400 veces más lento que C++. Pero podemos evitar todo esto en el Aprendizaje automático mediante el uso de bibliotecas escritas en lenguajes más eficientes como C.
Pero aún así, la carga computacional es más pesada. Y también, Python es un cerdo de la memoria.
Entonces, ¿qué podemos hacer? ¡No podemos conseguir lo mejor de ambos mundos!
Bueno, antes de sacar conclusiones precipitadas, permítanos mostrarle lo que la gente del MIT tiene para ofrecer.
Presentamos a Julia.
no, no es otro humanoide o chatbot. Es un lenguaje de programación.
Al igual que Python, Julia se puede usar para programación general, pero muchas de las características son adecuadas para cálculos científicos y análisis numérico. Apareció por primera vez en 2012. Con su lanzamiento estable en 2020.
Pero, ¿qué tiene Julia para ofrecer? Bueno, primero que nada, Julia es rápida. Al igual que Java, Julia usa un compilador justo a tiempo. En segundo lugar, Julia también es más fácil de aprender que otros lenguajes computacionalmente eficientes. Y antes de preguntar, sí, Julia es tan simple en términos de sintaxis como Python.
Pero es mejor que Python? En caso afirmativo, ¿en qué términos?
Hagamos un experimento y veamos.
Estaríamos entrenando a una CNN simple tanto en Python como en Julia. Estaríamos utilizando las implementaciones más estables y eficientes de CNN en ambos idiomas, con la misma arquitectura.
Para Python, estamos usando Tensorflow. Y para Julia, estamos usando Flux.jl, que es pura Julia Stack. Aquí hay algunas referencias para usted, para llevar a cabo el experimento usted mismo.
Vamos a comprobar el tiempo para cada época, así como los tiempos de implementación para las tareas de preprocesamiento.
Vamos a implementar ambos CNNs en el conjunto de datos MNIST y ver los resultados. Puede intentar usar un conjunto de datos diferente y ver si nuestros resultados se relacionan con ellos.
Para calcular los tiempos de ejecución utilizamos el módulo de tiempo en Python, sin embargo, solo es necesario para el cálculo del tiempo de preprocesamiento, ya que el tiempo de entrenamiento del modelo se puede ver fácilmente en la salida del modelo.función fit() en sí misma.
import time
start_time = time.time()#Code
print("The time elapsed: ",time.time()-start_time)
Para Julia, utilizaremos una macro muy útil: @time. Lo usamos en el código de procesamiento previo general, así como en la función de tren que usamos para cada época.
Algo como esto:
@time begin#Preprocessing codeend
Al usar en un solo paso, podemos usar el micro directamente como prefijo, como:
@time Flux.train!(loss, params(model), train_set, opt)
No te preocupes si aún no puedes comprender la sintaxis de Julia. Solo entiende que estamos tratando de medir los tiempos de ejecución.
Algunos resultados
Las especificaciones del sistema utilizado para el experimento:
Intel Core-i78550U – 16 GB RAM
- El tiempo total de preprocesamiento de Python fue de 2,6 segundos.
- El tiempo total de preprocesamiento de Julia fue de 4.2 segundos, incluido el tiempo de pre-compilación del modelo.
- El tiempo por iteración en Python era de 20 segundos por época.
- El tiempo por iteración en Julia fue de 16 segundos por época.
Ahora puede pensar que no es tan diferente y mejor en términos de eficiencia.
Bueno, hay una diferencia crucial entre los criterios de ejecución. Al ejecutar código Python, el consumo total de CPU fue del 87 por ciento. Pero al ejecutar Julia, el consumo total de CPU fue del 18 por ciento.
Por lo tanto, si usamos los cálculos paralelos en Julia y aprovechamos al máximo la CPU, podemos obtener el tiempo por iteración tan bajo como 3,6 segundos.
Sí, podemos ver que Julia es bastante rápida en comparación con Python. Pero eso no significa necesariamente que vaya a hacerse cargo de Python en el corto plazo.
La razón por la que Python es tan fácilmente adaptable se debe a su enorme comunidad. Julia no tiene una comunidad tan grande como Python. Una cosa más es que Julia no usa por defecto toda la potencia computacional de la máquina en la que se está ejecutando. Necesita usar ciertos comandos y una forma de ejecución específica para que lo haga.
Python está ahora mismo en esta posición debido a su simplicidad y a las bibliotecas y módulos sobre los que trabaja. Y Python ha estado con nosotros por tanto tiempo. Julia acaba de llegar. Puede que aún no veamos todo su potencial. Pero promete convertirse en uno de los lenguajes más utilizados en los cálculos de datos.
Julia es más rápida. Julia es tan simple como Python. Pero la única pregunta es, qué tan rápido la comunidad de desarrolladores adopta esto y lo hace aún mejor. ¿Realmente vale la pena hacer ese cambio? Supongo que necesitaremos más datos y estudios de casos para responder a eso.
Esperamos que este artículo despierte la curiosidad de ver otros lenguajes más allá de Python en IA.
Referencias y lecturas complementarias:
- Lauwens, B., & Downey, A. (n. d.). Recuperado de https://benlauwens.github.io/ThinkJulia.jl/latest/book.html
- Flux: La Biblioteca de Aprendizaje automático de Julia. (n. d.). Recuperado de https://fluxml.ai/Flux.jl/stable/
- Convolutional Neural Network (CNN) : TensorFlow Core. (n. d.). Recuperado de https://www.tensorflow.org/tutorials/images/cnn
- Computación paralela. (n. d.). Recuperado de https://docs.julialang.org/en/v1/manual/parallel-computing/