Distribuire Open LLMs con il server LLAMA-CPP: una guida passo passo

Distribuire Open LLMs con il server LLAMA-CPP: una guida passo passo. Impara come installare e configurare il server LLAMA-CPP per servire modelli di linguaggio open-source, effettuando richieste tramite cURL, il client OpenAI e il pacchetto Python's requests. Ottimizza per la distribuzione locale e remota.

14 febbraio 2025

party-gif

Sblocca il potere dei modelli di linguaggio open-source su larga scala (LLM) con questa guida completa sulla distribuzione del server LLAMA-CPP. Scopri come servire in modo efficiente più utenti con un singolo LLM, ottimizzando le prestazioni e l'accessibilità per le tue applicazioni alimentate dall'intelligenza artificiale.

Installazione di LLAMA-CPP

Il modo più semplice per iniziare con LLAMA-CPP è utilizzare il gestore di pacchetti Homebrew per installarlo. Questo funzionerà nativamente sia su macOS che su macchine Linux. Per installare LLAMA-CPP su una macchina Windows, sarà necessario utilizzare Windows Subsystem for Linux (WSL).

Per installare LLAMA-CPP utilizzando Homebrew, esegui il seguente comando nel tuo terminale:

brew install llama-cpp

Questo comando scaricherà e installerà il pacchetto LLAMA-CPP sul tuo sistema. Una volta completata l'installazione, puoi iniziare a utilizzare il comando llama-server per servire i tuoi modelli LLM.

Avvio del server LLAMA-CPP

Per avviare il server LLAMA-CPP, segui questi passaggi:

  1. Installa LLAMA-CPP utilizzando il gestore di pacchetti Homebrew:

    brew install llama.cpp
    

    Questo comando installerà LLAMA-CPP sul tuo Mac o sulla tua macchina Linux. Per gli utenti Windows, dovrai utilizzare WSL (Windows Subsystem for Linux) per installare LLAMA-CPP.

  2. Avvia il server LLAMA-CPP eseguendo il seguente comando:

    llama-server --model <hugging-face-repo-id> --model-file <quantization-file>
    

    Sostituisci <hugging-face-repo-id> con l'ID del repository Hugging Face del modello che vuoi servire e <quantization-file> con il file di quantizzazione specifico che vuoi utilizzare (ad esempio, la versione quantizzata a 4 bit in formato GGML).

  3. Il server LLAMA-CPP inizierà ad ascoltare le richieste in arrivo su localhost:8080 per impostazione predefinita. Puoi personalizzare l'indirizzo host e la porta utilizzando le opzioni disponibili, come --host e --port.

  4. Il server supporta varie opzioni di configurazione, tra cui l'impostazione della finestra di contesto massima, la dimensione del batch e altro ancora. Puoi esplorare queste opzioni eseguendo llama-server --help.

  5. Una volta in esecuzione, puoi interagire con il server utilizzando diversi metodi, come cURL, il client OpenAI o il pacchetto Python requests, come dimostrato nelle sezioni precedenti.

Effettuare richieste al server LLAMA-CPP

Esistono diversi modi per interagire con il server LLAMA-CPP e inviare richieste al modello servito:

  1. Utilizzo del comando cURL:

    curl -X POST -H "Content-Type: application/json" -d '{"prompt": "Hello, how are you?", "max_tokens": 50}' http://localhost:8080/v1/chat/completions
    

    Questo effettuerà una richiesta POST all'endpoint di completamento della chat in esecuzione sul localhost alla porta 8080.

  2. Utilizzo del client OpenAI:

    import openai
    
    openai.api_base = "http://localhost:8080/v1"
    openai.Model.list()
    
    response = openai.ChatCompletion.create(
        model="chat-gpt-3.5",
        messages=[
            {"role": "system", "content": "You are a helpful assistant."},
            {"role": "user", "content": "Hello, how are you?"}
        ]
    )
    
    print(response.choices[0].message.content)
    

    Questo utilizza il client OpenAI per interagire con il server LLAMA-CPP, che è compatibile con l'API OpenAI.

  3. Utilizzo del pacchetto Python Requests:

    import requests
    
    url = "http://localhost:8080/v1/chat/completions"
    headers = {"Content-Type": "application/json"}
    data = {
        "prompt": "Hello, how are you?",
        "max_tokens": 50
    }
    
    response = requests.post(url, headers=headers, json=data)
    print(response.json())
    

    Questo utilizza il pacchetto Python Requests per effettuare una richiesta POST all'endpoint di completamento della chat.

Personalizzazione del server LLAMA-CPP

LLAMA-CPP fornisce un server altamente personalizzabile che ti permette di perfezionare il comportamento della tua distribuzione LLM. Ecco alcune delle principali opzioni di configurazione:

  1. Finestra di Contesto Massima: Puoi definire la dimensione massima della finestra di contesto per l'LLM, che determina la lunghezza massima della sequenza di input che il modello può elaborare.

  2. Dimensione del Batch: LLAMA-CPP supporta l'elaborazione batch dei prompt, consentendoti di elaborare più input simultaneamente per migliorare il throughput. Puoi configurare la dimensione del batch per ottimizzare le prestazioni.

  3. Indirizzo Host: Per impostazione predefinita, il server LLAMA-CPP ascolta su localhost, ma puoi modificare l'indirizzo host per rendere il server accessibile da altre macchine della tua rete.

  4. Porta: Il server ascolta sulla porta 8080 per impostazione predefinita, ma puoi specificare una porta diversa se necessario.

  5. Percorso del Modello: LLAMA-CPP ti consente di personalizzare il percorso da cui carica i file del modello LLM, offrendoti flessibilità nell'organizzazione dei tuoi asset di modello.

  6. Modelli di Embedding: Oltre ai modelli di linguaggio, LLAMA-CPP può anche servire modelli di embedding, consentendoti di integrare sia le capacità di generazione di testo che di codifica del testo nelle tue applicazioni.

  7. Monitoraggio delle Metriche: Il server LLAMA-CPP può tenere traccia di varie metriche, come la latenza e il throughput delle richieste, per aiutarti a monitorare e ottimizzare le prestazioni della tua distribuzione.

Interazione con il server LLAMA-CPP utilizzando diversi metodi

Per interagire con il server LLAMA-CPP, possiamo utilizzare vari metodi:

  1. Utilizzo del Comando cURL:

    • Effettuare una richiesta POST all'endpoint chat completion in esecuzione su localhost.
    • Fornire gli header necessari e l'oggetto dati contenente il prompt e il numero desiderato di token da generare.
    • La risposta includerà il testo generato, nonché informazioni sul processo di generazione, come temperatura, top-P, top-K e token previsti al secondo.
  2. Utilizzo del Client OpenAI:

    • Creare un client OpenAI con l'URL di base impostato sull'URL del server LLAMA-CPP locale.
    • Utilizzare il client dell'endpoint di completamento della chat e fornire il nome del modello (ad esempio, chat-gpt-3.5).
    • Impostare il prompt di sistema e il prompt utente, quindi effettuare la richiesta al server.
    • La risposta verrà restituita nello stesso formato dell'API OpenAI.
  3. Utilizzo del Pacchetto Requests (Python):

    • Definire l'URL e gli header per la richiesta POST.
    • Passare più messaggi diversi al server e osservare come elabora le richieste in parallelo.
    • Il server metterà in coda le richieste ed le elaborerà una alla volta, senza essere sopraffatto.

Utilizzando questi diversi metodi, puoi interagire con il server LLAMA-CPP e servire più utenti con un singolo LLM e una singola GPU. Il server fornisce un modo flessibile e personalizzabile per distribuire modelli di linguaggio open-source, consentendoti di regolare vari parametri per soddisfare le tue esigenze specifiche.

Conclusione

In questo video, abbiamo esplorato l'installazione e l'utilizzo di LlamaCPP, un potente progetto open-source per servire modelli di linguaggio open-source su larga scala. Abbiamo imparato come installare LlamaCPP sulla nostra macchina locale, avviare il server e interagire con esso utilizzando vari metodi, tra cui cURL, il client OpenAI e il pacchetto Python Requests.

Abbiamo anche discusso delle varie opzioni di configurazione disponibili in LlamaCPP, che ci permettono di personalizzare il server in base alle nostre esigenze specifiche, come impostare la finestra di contesto massima, la dimensione del batch e l'indirizzo host. Inoltre, abbiamo visto come LlamaCPP possa tenere traccia delle metriche, rendendolo una scelta adatta per gli ambienti di produzione.

Infine, abbiamo accennato alle applicazioni pratiche di LlamaCPP, in particolare nel contesto della distribuzione di modelli di linguaggio su larga scala per vari casi d'uso. Abbiamo menzionato il framework Rasa come potenziale applicazione e fornito un link a un corso correlato nella descrizione del video.

Complessivamente, questo video ha fornito una introduzione completa a LlamaCPP e alle sue capacità, dotandoti delle conoscenze necessarie per iniziare a servire modelli di linguaggio open-source sulla tua macchina locale o in un ambiente di produzione.

FAQ