Anche quest'anno un posto in prima fila (omino con giacca celeste)
giovedì 2 dicembre 2021
martedì 30 novembre 2021
Mandelbrot M1 Metal Python
Dopo il test di Cuda e' arrivato il momento di Metal, il linguaggio per la GPU di Apple
Gli ersempi in C++ sono un po' complicati per una semplice prova ed ho optato per la versione in Python in cui il kernel e' comunque scritto in C++ MetalCompute (negli esempi della libreria c'e' gia' una implementazione di Mandelbrot, l'ho scritta da zero per imparare...sicuramente la mia versione e' meno efficiente)
La logica seguita e' quella di Cuda, ogni thread si occupa di una riga
Si puo' solo passare un solo parametro come array di float al kernel e si ha in uscita un solo array di float. L'array di input e' generato con NumPy con le coordinate X,Y dei punti dell'insieme
lunedì 29 novembre 2021
Twitter query API 2
Con un account sviluppatore di Twitter si possono effettuare query sul DB Twitter
Vi sono limitazioni temporrali (non si puo' andare piu' indietro di una settimana con l'account base) e si possono richiedere da 10 a 100 risultati (questa limitazione si supera utilizzando il valore di next_token contenuto nel risultato della query che permette di effettuare una ulteriori query sui risultati successivi)
mercoledì 24 novembre 2021
Tensorflow su Apple M1 Metal
Ho provato Tensorflow su M1 ed ha una velocita' imbarazzante...ci sono ancora alcuni problemi da risolvere ma la velocita' di M1 e' comparabile se non migliore delle GPU NVidia
Per installarlo si puo' usare le istruzioni a questo link
python3 -m venv ~/tensorflow-metalchmod +x ~/Downloads/Miniforge3-MacOSX-arm64.sh sh
martedì 23 novembre 2021
Foraminifera tensorflow retraining inception
Un tentativo con risultati migliori di effettuare il riconoscimento di foraminiferi mediante rete neurale
Stavolta ho usato il retraining di Inception V3 usando le immagini che possono essere scaricate da qui (fonte http://endlessforams.org/)
Si tratta di 24 specie con foto a risoluzione di 1 pixel/micron
in totale il dataset e' formato da 3685 immagini di cui 80% di training e 20% di validazione
giovedì 18 novembre 2021
Mandelbrot Cuda su Nvidia Jetson Nano
Ho ripreso in mano la scheda Jetson Nano per iniziare a programmare in CUDA
Gli esempi di CUDA hanno gia' un sorgente per l'insieme di Mandelbrot ma visto che era a scopo didattico sono partito da zero
L'idea e' quella di usare la GPU per i calcoli. Ogni thread calcola una riga dell'immagine. Visto che ogni block della Nvidia puo' gestire al massimo 1024 thread la massima dimensione che il sorgente puo' generare e' 1024x1024
Per condividere una memoria tra la GPU e la CPU (ognuna puo' accere solo alle proprie risorse) si usa cudaMallocManaged. CudaMemset port i valori della matrice tutti a zero
la funzione kernel e'e quella che viene eseguita dalla GPU. Una volta lanciato il kernel la GPU restituisce il controllo alla CPU solo quando tutti i threads sono terminati. La variabile threadIdx viene utilizzate come indice di colonna dell'immagine
al termine l'array viene convertito in una immagine ppm a scala di grigio (nello specifico si sono solo due colori)
per compilare si usa nvcc con gli switch per indicano la compilazione sull'architettura 50 (relativa alla GPU sulla Jetson) con l'ottimizzazione fast_math
Ho usato VSCode con il terminale ma per programmare Cuda si puo' usare NSight (una versione di Eclipse con plugin NVidia) contenuto nei Cuda Tools
questo il codice
sabato 13 novembre 2021
Foraminifera tensorflow retraining
docker pull tensorflow:latest-jupyter
dato che nel docker non e' presente la libreria tensorflow-hub ho modificato il docker creando il Dockerfile
----------------------------------------
RUN pip install --upgrade tensorflow-hub
----------------------------------------
in seguito
docker build . -t tensorflor/tensorflow:latest-jupiter-hub
la rete neurale ha necessita' di occupare piu' Ram possibile ed ho disabilitato i controlli del kernel su docker in modo da non andare in OOM (Out of Memory)
La home directory della macchina e' inoltre mappata su /tf/notebook del container in modo da salvare i modelli. Infine si mappa la porta 8888 del container sulla 8888 del localhost per interagire con i notebook
sudo docker run --oom-kill-disable -m="6g" --memory-swap="10g" -it -v $PWD:/tf/notebooks -w /tmp -p 8888:8888 tensorflow/tensorflow:latest-jupyter-hub
in alcuni casi puo' essere necessario aggiungere al file /etc/default /grub la stringa
GRUB_CMDLINE_LINUX="cgroup_enable=memory swapaccount=1"
lanciare un update-grub e riavviare la macchina
per abilitare la GPU NVidia si aggiunge lo switch --gpus all ma in questo caso la memoria utilizzabile sara' solo quella della GPU (e sui portatili di solito e' difficile avere schede grafiche con generose dotazioni di ram) e deve essere presente docker-nvidia
Le immagini dei foarminifei sono relativi a 15 classi (dati)
Usando come base efficientnetv2-s-21k-ft1k (dimensione immagine 384 pixel) con il risultato di 80% di risultati corrispondenti sul modello originale e 68% sul dataset di validazione
il notebook puo' essere scaricato da qui
Debugger integrato ESP32S3
Aggiornamento In realta' il Jtag USB funziona anche sui moduli cinesi Il problema risiede nell'ID USB della porta Jtag. Nel modulo...
-
In questo post viene indicato come creare uno scatterplot dinamico basato da dati ripresi da un file csv (nel dettaglio il file csv e' c...
-
Questo post e' a seguito di quanto gia' visto nella precedente prova Lo scopo e' sempre il solito: creare un sistema che permet...
-
La scheda ESP32-2432S028R monta un Esp Dev Module con uno schermo TFT a driver ILI9341 di 320x240 pixels 16 bit colore.Il sito di riferiment...