Mai provato un diverso linguaggio di programmazione per l’AI
sei un AI appassionato?
Sì?
Quindi rispondi a questa domanda: quale linguaggio di programmazione usi per sviluppare roba per AI?
La tua risposta è Python. Vedi! Lo sapevamo.
Va bene, non siamo maghi, ma è un fatto ben noto. Python è uno dei linguaggi più popolari in questo momento, non solo nell’apprendimento automatico ma anche per i normali scopi di sviluppo. A partire da ottobre 2019, oltre 8,2 milioni di sviluppatori utilizzano Python. Che è 1 milione in più di Java e oltre 6 milioni in più di Swift.
Python è al primo posto quando si tratta di sviluppo nel campo dell’intelligenza artificiale.
Per dimostrarlo semplicemente, la maggior parte degli appassionati non conosce nemmeno alcun linguaggio diverso da Python (e R principalmente), che può essere utilizzato per l’apprendimento automatico. Ed è solo perché sembra scoraggiante codificare gli algoritmi ML in C o Java.
Python è ampiamente utilizzato per la sua semplicità e comunità. Ma sappiamo tutti un grande svantaggio di Python.
Sì. La velocità di esecuzione.
Python è 400 volte più lento di C++. Ma aggiriamo tutto questo nell’apprendimento automatico usando le librerie scritte in linguaggi più efficienti come C.
Ma ancora, il carico computazionale è più pesante. E anche, Python è un maiale di memoria.
Quindi, cosa possiamo fare? Non possiamo ottenere il meglio da entrambi i mondi!
Bene, prima di saltare alle conclusioni, cerchiamo di mostrarvi ciò che la gente del MIT hanno da offrire.
Presentazione di Julia.
No, non è un altro umanoide o chatbot. È un linguaggio di programmazione.
Proprio come Python, Julia può essere utilizzata per la programmazione generale, ma molte delle funzionalità sono adatte per calcoli scientifici e analisi numeriche. È apparso per la prima volta nel 2012. Con il suo rilascio stabile nel 2020.
Ma cosa ha da offrire Julia? Beh, prima di tutto, Julia e ‘ veloce. Proprio come Java, Julia utilizza un compilatore just-in-time. In secondo luogo, Julia è anche più facile da imparare rispetto ad altri linguaggi computazionalmente efficienti. E prima di chiedere, sì, Julia è semplice in termini di sintassi come Python.
Ma è meglio di Python? Se sì, allora in quali termini?
Conduciamo un esperimento e vediamo.
Addestreremmo una semplice CNN sia su Python che su Julia. Useremmo le implementazioni più stabili ed efficienti della CNN in entrambe le lingue, con la stessa architettura.
Per Python, stiamo usando Tensorflow. E per Julia, stiamo usando Flux.jl, che è un puro stack Julia. Ecco alcuni riferimenti per te, per condurre l’esperimento da solo.
Controlleremo il tempo per ogni epoca e i tempi di implementazione per le attività di pre-elaborazione.
Implementeremo entrambi i CNN sul set di dati MNIST e vedremo i risultati. Puoi provare a utilizzare un set di dati diverso e vedere se i nostri risultati si riferiscono a loro.
Per calcolare i tempi di esecuzione usiamo il modulo time in Python, tuttavia, è richiesto solo per il calcolo del tempo di pre-elaborazione, in quanto il tempo di allenamento del modello può essere facilmente visualizzato nell’output del modello.fit () funzione stessa.
import time
start_time = time.time()#Code
print("The time elapsed: ",time.time()-start_time)
Per Julia, useremo una macro molto utile: @time. Lo usiamo sul codice complessivo di pre-elaborazione e sulla funzione del treno che usiamo per ogni epoca.
Qualcosa del genere:
@time begin#Preprocessing codeend
Durante l’utilizzo su un singolo passaggio, possiamo semplicemente utilizzare il micro direttamente come prefisso, come:
@time Flux.train!(loss, params(model), train_set, opt)
Non preoccuparti se non riesci ancora a comprendere la sintassi di Julia. Basta capire che stiamo cercando di misurare i tempi di esecuzione.
Alcuni risultati
Le specifiche del sistema utilizzato per l’esperimento:
Intel Core-i78550U — 16 GB RAM
- Il tempo complessivo di pre-elaborazione di Python era di 2,6 secondi.
- Il tempo complessivo di pre-elaborazione di Julia era 4.2 secondi, compreso il tempo per la pre-compilazione del modello.
- Il tempo per iterazione in Python era di 20 secondi per epoca.
- Il tempo per iterazione in Julia era di 16 secondi per epoca.
Ora potresti pensare che non sia tanto diverso e migliore in termini di efficienza.
Bene, c’è una differenza cruciale tra i criteri di esecuzione. Durante l’esecuzione di codice Python, il consumo complessivo della CPU era 87 per cento. Ma durante l’esecuzione di Julia, il consumo complessivo della CPU è stato del 18 per cento.
Quindi, se usiamo i calcoli paralleli in Julia e sfruttiamo appieno la CPU, possiamo ottenere il tempo per iterazione a partire da 3,6 secondi.
Sì, possiamo vedere che Julia è piuttosto veloce rispetto a Python. Ma questo non significa necessariamente che prenderà il controllo di Python in qualunque momento presto.
Il motivo per cui Python è così facilmente adattabile è dovuto alla sua enorme comunità. Julia non ha una comunità così grande come Python. Un’altra cosa è che Julia non utilizza di default l’intera potenza computazionale della macchina su cui è in esecuzione. È necessario utilizzare determinati comandi e un modo specifico di esecuzione per farlo farlo.
Python è in questo momento in questa posizione a causa della sua semplicità e delle librerie e dei moduli su cui funziona. E Python è stato con noi per così tanto tempo. Julia e ‘ appena arrivata. Potremmo non vedere ancora tutto il suo potenziale. Ma mostra la promessa di diventare uno dei linguaggi più utilizzati nei calcoli dei dati.
Julia è più veloce. Julia è semplice come Python. Ma l’unica domanda è: quanto velocemente la comunità degli sviluppatori adotta questo e lo rende ancora migliore. Vale davvero la pena di fare quel turno? Immagino che avremo bisogno di più dati e casi di studio per rispondere a questo.
Speriamo che questo articolo instilli una curiosità per guardare altri linguaggi oltre Python in AI.
Riferimenti e approfondimenti:
- Lauwens, B., & Downey, A. (n. d.). Estratto da https://benlauwens.github.io/ThinkJulia.jl/latest/book.html
- Flux: la libreria di apprendimento automatico Julia. (n. d.). Estratto da https://fluxml.ai/Flux.jl/stable/
- Rete neurale convoluzionale (CNN) : TensorFlow Core. (n. d.). Estratto da https://www.tensorflow.org/tutorials/images/cnn
- Calcolo parallelo. (n. d.). Estratto da https://docs.julialang.org/en/v1/manual/parallel-computing/