«[Figlio dell'uomo] Porgi l'orecchio e ascolta le parole di KGB
e applica la tua mente alla SUA istruzione
» Pv. 22,17

Qui si straparla di vari argomenti:
1. Il genere dei pezzi è segnalato da varie immagini, vedi Legenda
2. Per contattarmi e istruzioni per i nuovi lettori (occasionali e non) qui
3. L'ultimo corto è questo
4. Molti articoli di questo blog fanno riferimento a definizioni e concetti che ho enunciato nella mia Epitome gratuitamente scaricabile QUI. Tali riferimenti sono identificati da una “E” fra parentesi quadre e uno o più capitoli. Per esempio: ([E] 5.1 e 5.4)

venerdì 23 novembre 2018

Scarsa memoria

Come ho scritto nel corto Warawow ho finalmente iniziato a leggere dei libri sul Deep Learning comprati tempo fa.

Ero partito con uno molto teorico ma dopo quattro capitoli senza una linea di codice mi sono stufato. Sono così passato all’estremo opposto: Deep Learning Cookbook di Douwe Osinga, Ed. O’Reilly, 2018.
Qui ho letto due capitoli di introduzione, molto più leggeri e comprensibili rispetto all’altro libro, e nel terzo si passa subito alla pratica.
La filosofia del libro è infatti quella di utilizzare dati e strumenti già esistenti (*1) e di mettere rapidamente tutto insieme per, eventualmente, adattarlo alle proprie necessità.

Prima di tutto c’è da installare l’ambiente di lavoro basato su Python (che non conosco): i passaggi sono pochi e fortunatamente… non funzionano!
Non so: probabilmente è perché uso linux ma ho trovato due problemi che bloccavano la procedura indicata dal libro. Pur non conoscendo Python, grazie a delle ricerche su Google, e anche al mio fiuto per trovare soluzioni (!), ho risolto installando una libreria Python aggiuntiva con “pip install wheel” e una libreria (beh, un header per la precisione) C++ usando semplicemente Synaptic per aggiungere l’archivio Python-develop al mio sistema...

La prima “esercitazione” sfrutta il “Word embeddings”: se ho ben capito, nell’analisi del linguaggio naturale, adesso si usano delle specie di vocabolari dove, a ogni parola, corrisponde un vettore multidimensionale basato sulle sue caratteristiche (*2). Google ha gentilmente messo a disposizione un enorme archivio (vedi, ad esempio, qui) formato da 3 milioni di parole in inglese, ognuna col suo corrispondente vettore di 300 dimensioni (!) calcolato analizzando vari miliardi di testi in inglese estratti da Google News...

Il primo problema è che l’archivio compresso di Google è 1,6Gb. Siccome la mia linea ADSL (grazie TELECOM!!) è lentissima, l’ho scaricato da mio padre e messo su una chiavetta.
Scompattato l’archivio diventa di 3,4Gb ma il problema è quando viene caricato in memoria nel modello Python che lo contiene: va a prendere oltre 5Gb di memoria RAM…
Ora il mio calcolatore di 10 anni fa (!!) ha “solamente” 8Gb (che nella realtà corrispondono a 7,8Gb) e il solo sistema operativo (Linux Mint 19) se ne prende 1,8Gb. Ciò significa che rimango con 6Gb di memoria disponibile ma se 5,5Gb sono occupati solo dal vocabolario allora rimango con appena 500Mb che mi vengono subito mangiati dalle applicazioni che mi servono (almeno l'interprete Python e un navigatore come interfaccia grafica).
Insomma, alla fine ho calcolato che mi servirebbero almeno 10Gb, da 12 in su per stare tranquillo…

Infatti quando ho provato il codice fornito, alla prima operazione, il SO ha dovuto salvare un 4Gb di dati sull’Hard Disk per far posto in memoria ed eseguire altre operazioni (qualche minuto di tempo). A onor del vero le operazioni seguenti sono state tutte fatte in memoria prendendo solo pochi secondi ma ogni volta che dovevo usare un’altra applicazione occorrevano MOLTI secondi: insomma una tortura.
La soluzione più semplice sarebbe comprare altri 8Gb per arrivare a 16: il problema è che su questo calcolatore non vorrei spendere molto perché presto (pensavo nel giro di un paio di anni) lo cambierò. Inoltre facendo qualche ricerca ho scoperto che i miei 8Gb sono ottenuti usando 4 banchi da 2Gb e non credo ce ne siano altri liberi: questo significa (ammesso che sia possibile usare insieme memorie di dimensioni diverse!) che dovrei buttare 4Gb per aggiungerne 8 arrivando così a 12Gb. Sempre che si possa fare (dovrei verificare in rete) l’idea non mi entusiasma.
Ho guardato poi i prezzi e mentre le vecchie memorie DDR2 da 2Gb le tirano dietro, le schede da 4 sono molto più costose (ben più del doppio: suppongo che all’epoca ne fecero molte meno)…

Insomma non so che fare!
Con i miei 8Gb e Linux non avevo mai avuto problemi di memoria e mi secca intervenire sulla RAM proprio alla fine della vita del mio calcolatore…
Dovrei capire di quanta RAM avrò bisogno nelle prossime esercitazioni: il testo definiva l’archivio “quite large” ma non “very large” quindi magari ci sarà di peggio nel prosieguo: dopo tutto le applicazioni con le reti neurali hanno bisogno di molte risorse…
Ah, eventualmente ho visto che c’è una versione ridotta del vocabolario da 3 milioni di parole che ne contiene appena un decimo (300.000): per questo esercizio potrei usare quello e nel futuro vedere cosa potrò fare.
Oppure anticipo l’acquisto del nuovo calcolatore: ma anche questo mi secca. L’attuale va benissimo e, a parte qualche gioco che posso solo sognare, non mi aveva mai dato problemi di prestazioni…

Conclusione: mi sa che ho scritto uno dei miei pezzi meno interessanti in assoluto! Ma è da due giorni che penso solo a questo problema e quindi...

Nota (*1): ad esempio per lavorare sulle reti neurali si usa una libreria (Keras) che facilita che fa da interfaccia a un'altra libreria (TensorFlow) che si occupa della gestione delle reti!
Nota (*2): parole ricavate automaticamente tramite reti neurali basandosi sull’analisi di testi: in pratica non vi è una comprensione della parola ma si individua il contesto nel quale è usata.

Nessun commento:

Posta un commento