L'idea folle: combinare la potenza dei dispositivi locali per eseguire modelli generativi

Presentiamo l'innovativo progetto exo, un programma aperto basato su codice Python che permette di eseguire i migliori modelli generativi per l'intelligenza artificiale in ambito locale, combinando la potenza dei singoli dispositivi Linux, macOS, Android e iOS.
L'idea folle: combinare la potenza dei dispositivi locali per eseguire modelli generativi

Oggi è piuttosto economico, e in alcuni casi addirittura gratuito, eseguire i principali modelli generativi sul cloud. Non è però pensabile che la situazione resti invariata per lungo tempo. I costi per l’addestramento dei modelli e le attività di inferenza sono elevati e i principali player stanno studiando soluzioni alternative per ridurre i consumi energetici senza impattare sulle performance.

In passato abbiamo messo in evidenza come sia possibile utilizzare GPU dedicate e schede “ad hoc” come quelle della gamma NVIDIA Jetson per utilizzare l’intelligenza artificiale generativi e, addirittura, per addestrare nuovi modelli o fare fine-tuning.

Avete mai pensato, tuttavia, di poter combinare la potenza di calcolo dei vostri dispositivi per supportare l’esecuzione dei migliori modelli, senza appoggiarsi al cloud?

exo: come combinare le risorse hardware per eseguire modelli generativi in locale

Per alcuni utenti, determinati a provare in locale i migliori modelli per l’intelligenza artificiale, l’acquisto di schede NVIDIA non è una soluzione praticabile. Il progetto aperto exo, pubblicato su GitHub, aiuta a sfruttare al massimo le risorse hardware esistenti, senza la necessità di configurazioni complesse o investimenti impegnativi.

exo permette di combinare le abilità computazionali di sistemi Linux, macOS, Android e iOS in un’unica unità di elaborazione grafica (GPU) distribuita e “virtuale”.

Una volta impostato il cluster di risorse, gli utenti possono attivare con exo il supporto di vari modelli, tra cui LLaMA, uno dei più apprezzati e utilizzati in assoluto. Una delle caratteristiche più innovative di exo è la capacità di partizionare dinamicamente i modelli. Ciò significa che il sistema suddivide i carichi di lavoro in base alla topologia di rete e alle risorse disponibili sui dispositivi. In questo modo è ovviamente possibile eseguire modelli generativi molto più grandi rispetto a quanto sarebbe possibile fare su un singolo dispositivo.

A differenza di altri framework di inferenza distribuita, exo non utilizza un’architettura master-worker. I dispositivi si collegano in modalità peer-to-peer (P2P): ogni host connesso alla rete può contribuire all’esecuzione dei modelli. Lo schema utilizzato da exo consente agli utenti di integrare facilmente il software nei flussi di lavoro esistenti.

Installazione di exo

L’installazione e la configurazione di exo sono incredibilmente semplici. Il software integra una procedura di discovery automatico che provvede a cercare altri dispositivi nella rete, riducendo al minimo le necessità di intervento manuale.

La strategia di partizionamento predefinita è chiamata ring memory weighted partitioning: ciò significa che ciascun nodo o peer, come accennato in precedenza, gestisce un numero di layer del modello proporzionale alla memoria disponibile.

Gli sviluppatori di exo al momento raccomandano di installare Python 3.12.0 o superiore, per evitare qualunque problema con la libreria asyncio. L’installazione si riduce all’utilizzo di 3 comandi:

git clone https://github.com/exo-explore/exo.git
cd exo
pip install -r requirements.txt

Per avviare exo su più dispositivi, è sufficiente eseguire il seguente comando su ognuno di essi:

python3 main.py

Accesso ai modelli e compatibilità con le API ChatGPT

L’accesso ai modelli in esecuzione su exo può avvenire tramite la libreria exo utilizzando i cosiddetti peer handle. Il programma rende tuttavia disponibile anche un’API endpoint, compatibile con la sintassi usata nel caso di ChatGPT, all’indirizzo localhost:8000. Un esempio di richiesta inviata a exo tramite API è il seguente:

curl http://localhost:8000/v1/chat/completions \
-H "Content-Type: application/json" \
-d '{
"model": "llama-3-70b",
"messages": [{"role": "user", "content": "Perché il cielo è azzurro?"}],
"temperature": 0.7
}'

Il progetto è aperto ai contributi della comunità; sono inoltre disponibili dei riconoscimenti per coloro che desiderassero partecipare attivamente al miglioramento del software.

In definitiva, exo rappresenta una svolta nell’approccio alla distribuzione dei carichi di lavoro AI, permettendo di sfruttare al meglio le risorse hardware preesistenti e di creare una rete di dispositivi che lavorano in maniera cooperativa.

L’immagine in apertura è stata generata con Playground.

Ti consigliamo anche

Link copiato negli appunti