Nello scenario degli LLM (Large Laguage Model), Google ha presentato a fine 2023 un’interessante innovazione fornendo il modello di intelligenza artificiale generativa Gemini, declinato in una serie di varianti.

Tale LLM succede a LaMDA e PaLM2, entrambi basati su architettura Transformer decoder-only ed il secondo utilizzato ampiamente come motore di risposta del servizio Bard.

Novità e versioni di Gemini

Cosa distingue Gemini rispetto agli altri modelli? Perché è così tanto innovativo? Innanzitutto, è multimodale. Ciò significa che è in grado di ricevere dati in formati diversi e su questi formulare delle risposte: non si tratta quindi di un modello semplicemente testo-testo, ma può trattare testi, immagini e anche video. Inoltre, persegue gli scopi dell’attuale ricerca nel campo dell’Intelligenza Artificiale, basandosi su processi di ampie dimensioni, sia in termini di numero di parametri (fino a 540 miliardi), sia in termini di dataset su cui basa la propria fase di learning, che sembra essere non solo estremamente ampio ma anche grandemente variegato in termini di dati e formati di origine.

Un altro aspetto interessante di Gemini  è che viene distribuito in tre versioni:

  • Gemini Ultra è il modello più ampio, arriva a 1,6 trilioni di parametri ed è adatto a lavori di generazione, traduzione e comprensione svolti al massimo della potenza;
  • Gemini Pro è il livello intermedio, si ferma a 100 miliardi parametri (entità comunque ragguardevole) e permette di ottenere risultati molto buoni su incarichi complessi permettendo però di essere messo al lavoro anche in ambienti locali;
  • Gemini Nano che arriva a 10 miliardi di parametri pensato per l’attivazione su dispositivi mobili.

Il modello appare quindi, sin da subito, estremamente valido e tanto flessibile come concezione da poter essere impiegato in scopi e contesti estremamente diversi.

Lavorare con Gemini Pro

Al di là delle caratteristiche, sappiamo che questi modelli vanno però messi al lavoro per potersi rendere conto delle loro capacità applicate a casi concreti. Trattandosi di un prodotto Google, è stato subito integrato nella Google Cloud Platform e noi l’abbiamo provato su Vertex AI, servizio Cloud specializzato nell’utilizzo di Intelligenza Artificiale.

Ricordiamo che nei servizi Cloud si pagano le risorse che si utilizzano pertanto i costi sono rapportabili al proprio business che cresce e soprattutto le fasi di formazione aziendale e sperimentazione spesso possono essere svolte senza grossi dispendi di capitali. Inoltre, la Google Cloud Platform offre un free tier, uno strato di servizi gratuiti per tutta l’utenza valido in ogni momento, e, non appena iscritti, si ha la possibilità di sfruttare 300 dollari di credito per le risorse cloud.

Dando uno sguardo alla documentazione di Vertex AI troviamo il listino prezzi di questo modello multimodale e lo riportiamo nella figura seguente:

GeminiProVertexAIpricing

Vediamo che viene chiaramente distinto il costo per dati in input e dati in output. Possiamo saggiare inoltre con mano cosa realmente significhi essere un modello multimodale. Infatti, come tipologia in input abbiamo tre possibili formati (video, testo, immagini) mentre in output vediamo comparire solo il testo. Anche la tariffazione è diversificata, non solo come importi ma anche come unità di misura. Infatti, le immagini in input vengono contabilizzate “a immagine” singola, il video in secondi mentre il testo (sia in input sia generato in output) in migliaia di caratteri, intesi come UTF-8 ma spazi bianchi esclusi.

Per interagire con Gemini Pro, dobbiamo passare per le sue API (Application Programming Interface) disponibili in almeno due modalità: interazione con lo storico strumento da riga di comando, curl, e libreria per il linguaggio Python, grande protagonista del mondo dell’Intelligenza Artificiale.

Noi abbiamo scelto quest’ultima via.

Provare Gemini sulla Google Cloud Platform

Dotati del nostro account Google Cloud e configurato gli aspetti di fatturazione (progetto Google legato ad un Billing account), abbiamo installato la libreria in un ambiente di lavoro dotato di Python (va bene anche l’ottimo strumento Colab):

pip3 install --upgrade --user google-cloud-aiplatform

A questo punto siamo pronti per iniziare a interagire con le API.

I passaggi sono essenzialmente i seguenti:

  1. importiamo la libreria di riferimento e le classi necessarie:
    
    import vertexai
    # impostiamo, in base al nostro account e preferenze, i valori di PROJECT_ID e REGION
    vertexai.init(project=PROJECT_ID, location=REGION)
    
    # queste sono le librerie necessarie al nostro esperimento, le si adatti al proprio
    from vertexai.preview.generative_models import (
        GenerationConfig,
        GenerativeModel
    )
    
  2. creiamo un oggetto che rappresenti il modello Gemini Pro tramite apposita costante:
    
    model = GenerativeModel("gemini-pro")
    
  3. impostiamo le configurazioni principali:
    
    config = GenerationConfig(
        temperature=0.9,
        top_p=1.0,
        top_k=32,
        candidate_count=1,
        max_output_tokens=2000,
    )
    
  4. effettuiamo la nostra richiesta che, in questo caso, sarà una domanda volta a conoscere gli alimenti caratterizzati da più fibre:
    
    responses = model.generate_content(
        "Quali alimenti contengono più fibre?",
        generation_config=config,
        stream=True,
    )
    

Passando alla scansione delle risposte nell’oggetto responses troviamo il risultato generato:

* **Frutta:** bacche, mele, pere, banane, arance, pompelmi
* **Verdure:** broccoli, cavolfiori, cavoli, carote, barbabietole, patate dolci
* **Legumi:** fagioli, lenticchie, piselli, ceci
* **Cereali integrali:** avena, riso integrale, quinoa, orzo, grano saraceno
* **Semi e noci:** semi di lino, semi di chia, semi di girasole, noci, mandorle, pistacchi
* **Altri alimenti ricchi di fibre:** crusca di grano, semi di psillio, polvere di baobab

Come possiamo vedere, l’approccio seguito è simile a quanto già visto per altre API.

La complessità del modello viene nascosta dietro poche semplici interazioni in linguaggio Python. I parametri che vediamo apparire in configurazione sono quelli che derivano dalla stessa architettura degli LLM (top_p, top_k, temperature) che, senza entrare nei dettagli, permettono di regolare la generazione di risultati bilanciando creatività e attendibilità: come si può immaginare, una serie di sperimentazioni passerebbe da una molteplicità di interazioni impostando diversamente questi parametri a parità di domanda richiesta.