Distribuisci LLAMA-3 locale con NVIDIA NIM: una guida completa

Distribuisci LLAMA-3 locale con NVIDIA NIM: una guida completa - Impara come distribuire un modello LLAMA-3 utilizzando NVIDIA NIM per un'inferenza efficiente sulla tua macchina cloud o locale. Copre l'installazione, i test delle prestazioni e l'integrazione con l'API OpenAI.

24 febbraio 2025

party-gif

Sblocca il potere dei grandi modelli linguistici con la nostra guida sull'auto-hosting e la distribuzione del modello LLAMA-3 utilizzando NIM di NVIDIA. Scopri come sfruttare questa tecnologia all'avanguardia per accelerare i tuoi progetti di IA e ottenere prestazioni senza pari.

Come distribuire NVIDIA NIM per l'inferenza di modelli di linguaggio su larga scala

Per distribuire una famiglia di modelli Lama utilizzando NVIDIA NIM sul tuo cloud o sulla tua macchina locale, segui questi passaggi:

  1. Imposta l'ambiente: Se esegui il programma sulla tua macchina locale, installa il motore Docker e il toolkit per container NVIDIA. I link a questi sono forniti nella descrizione del video.

  2. Ottieni la chiave API: Registrati a un account NVIDIA per generare la tua chiave API e la tua chiave personale. Questi saranno necessari per interagire con il server remoto.

  3. Esegui il container Docker: Utilizza il comando Docker fornito per eseguire il container, specificando il nome del container, l'utilizzo della GPU, la chiave API, la posizione della cache del modello e la porta. Questo scaricherà e configurerà il modello Lama 3 da 8 miliardi di istruzioni.

  4. Interagisci con il modello: Utilizza il comando cURL fornito per interagire con il modello distribuito. Questo comando segue lo standard API di OpenAI, consentendoti di utilizzare il client OpenAI per l'interazione.

  5. Stress test dell'API: Utilizza uno script Python con la libreria requests per inviare più richieste simultanee al endpoint API e monitorare l'utilizzo della GPU e il throughput.

  6. Utilizza il client API di OpenAI: Dimostra come utilizzare il client API di OpenAI con NVIDIA NIM, aggiornando l'URL di base e altri parametri per adattarli al modello distribuito.

NVIDIA NIM fornisce un modo conveniente e ottimizzato per distribuire modelli di linguaggio di grandi dimensioni per l'inferenza, con la possibilità di raggiungere prestazioni fino a 3 volte migliori rispetto ad altre opzioni di distribuzione. Il periodo di prova gratuito di 90 giorni ti consente di esplorare ulteriormente questa soluzione.

Accesso a NVIDIA Launchpad e al dashboard delle metriche GPU

Per accedere a NVIDIA Launchpad e al dashboard delle metriche GPU, segui questi passaggi:

  1. Come parte di NVIDIA Launchpad, ottieni l'accesso a un IDE di codice, che è Visual Studio Code. Puoi utilizzare questo IDE per interagire con l'istanza GPU e distribuire il modello Llama 3 da 8 miliardi di istruzioni.

  2. Il dashboard delle metriche GPU è un dashboard Grafana che fornisce informazioni dettagliate sull'utilizzo e sulle prestazioni della GPU. Puoi accedere a questo dashboard per monitorare l'utilizzo della GPU, la versione CUDA, i driver GPU e altre metriche rilevanti.

  3. Il dashboard Grafana ti offre una rappresentazione visiva dell'utilizzo della GPU nel tempo, consentendoti di monitorare le prestazioni e ottimizzare di conseguenza la distribuzione.

  4. Puoi utilizzare il comando watch nel terminale per monitorare l'utilizzo della GPU in tempo reale. Il comando watch -n 1 nvidia-smi aggiornerà l'utilizzo della GPU ogni secondo, fornendoti una vista in tempo reale dell'utilizzo della GPU.

  5. Il dashboard delle metriche GPU e gli strumenti di monitoraggio in tempo reale ti consentono di comprendere le caratteristiche di prestazione della distribuzione del modello Llama 3 da 8 miliardi di istruzioni, aiutandoti a ottimizzare l'utilizzo delle risorse e garantire un'inferenza efficiente.

Configurazione del container Docker NVIDIA NIM

Per distribuire il modello Llama 3 da 8 miliardi di istruzioni utilizzando NVIDIA NIM, segui questi passaggi:

  1. Apri l'IDE fornito e assicurati di avere accesso a una GPU H100.
  2. Imposta la tua chiave API registrandoti a un account NVIDIA e generando le chiavi necessarie.
  3. Esegui il seguente comando Docker per avviare il container NVIDIA NIM:
docker run -it --gpus all -e NVIDIA_API_KEY=$NVIDIA_API_KEY -p 8000:8000 --name llama-3-8b-instruct nvcr.io/nvidia/nim:latest --model-name llama-3-8b-instruct

Questo comando:

  • Creerà un container Docker chiamato "llama-3-8b-instruct"
  • Utilizzerà tutte le GPU disponibili sul sistema
  • Imposterà la variabile d'ambiente NVIDIA_API_KEY
  • Esporrà la porta 8000 per il server NIM
  • Utilizzerà il modello "llama-3-8b-instruct" dal catalogo NVIDIA NIM
  1. Una volta in esecuzione il container, puoi utilizzare il comando cURL fornito per interagire con il modello:
curl -X POST -H "Content-Type: application/json" -d '{"model": "llama-3-8b-instruct", "prompt": "Dimmi una barzelletta.", "max_tokens": 1000, "temperature": 0.7, "top_p": 0.95, "stop": ["\n"]}' http://localhost:8000/v1/completions

Questo comando cURL invia una richiesta al server NIM in esecuzione su localhost:8000 per generare una risposta per il prompt "Dimmi una barzelletta".

  1. Per eseguire lo stress test dell'endpoint API, puoi eseguire lo script Python fornito test_server.py. Questo script invierà più richieste simultanee al server NIM e monitorerà l'utilizzo della GPU.

  2. Infine, puoi anche utilizzare il client API di OpenAI per interagire con il server NIM aggiornando l'URL di base per puntare all'indirizzo e alla porta del server NIM.

Seguendo questi passaggi, puoi distribuire con successo il modello Llama 3 da 8 miliardi di istruzioni utilizzando il container Docker NVIDIA NIM e testarne le prestazioni.

Interazione con l'API NVIDIA NIM

Per interagire con l'API NVIDIA NIM, possiamo utilizzare un semplice comando cURL. Il comando cURL fornisce quanto segue:

  • Effettua una richiesta POST all'host locale sulla porta 8000, dove è in esecuzione il server NVIDIA NIM.
  • Utilizza l'API compatibile con OpenAI, in modo da poter utilizzare il client OpenAI per interagire con il server NIM.
  • Specifica il modello Llama 3 da 8 miliardi di istruzioni da utilizzare.
  • Imposta la struttura del messaggio in modo simile a quanto previsto da OpenAI.
  • Consente di impostare parametri aggiuntivi come max_tokens e temperature.

Ecco il comando cURL:

curl -X POST -H "Content-Type: application/json" -d '{"model": "nlp/lama-3-8b-instruct", "messages": [{"role": "user", "content": "Dimmi una barzelletta"}], "max_tokens": 1000, "temperature": 0.7}' http://localhost:8000/v1/chat/completions

Questo comando cURL invierà una richiesta al server NVIDIA NIM, che genererà quindi una risposta dal modello Llama 3 da 8 miliardi di istruzioni. La risposta verrà trasmessa in streaming, con ogni token visualizzato man mano che viene generato.

Per eseguire ulteriormente lo stress test dell'endpoint API, possiamo utilizzare uno script Python che utilizza la libreria requests per effettuare più richieste simultanee. Questo script invierà 50 richieste di generazione di barzellette in parallelo e monitorerà l'utilizzo della GPU e il throughput.

import requests
import threading

url = "http://localhost:8000/v1/chat/completions"
headers = {"Content-Type": "application/json"}
payload = {
    "model": "nlp/lama-3-8b-instruct",
    "messages": [{"role": "user", "content": "Dimmi 50 barzellette"}],
    "max_tokens": 1000,
    "temperature": 0.7,
    "stream": False
}

def send_requests():
    for _ in range(50):
        response = requests.post(url, headers=headers, json=payload)
        print(response.json())

threads = []
for _ in range(10):
    t = threading.Thread(target=send_requests)
    t.start()
    threads.append(t)

for thread in threads:
    thread.join()

Questo script dimostra come utilizzare l'API compatibile con OpenAI con il server NVIDIA NIM. Mostra che il server NVIDIA NIM può fornire un'inferenza ad alte prestazioni per i modelli di linguaggio di grandi dimensioni, con la possibilità di ottenere fino a 3 volte migliori prestazioni rispetto ad altre opzioni di distribuzione.

Test di stress dell'endpoint API NVIDIA NIM

Per eseguire lo stress test dell'endpoint API NVIDIA NIM, utilizzeremo uno script Python semplice che sfrutta la libreria requests per effettuare più richieste simultanee all'API. Ecco come funziona:

  1. Definiamo l'URL dell'endpoint API, che in questo caso è l'host locale poiché stiamo eseguendo il server localmente. Se lo distribuissi su un server remoto, dovresti utilizzare l'indirizzo IP esterno e abilitare il port forwarding.

  2. Impostiamo gli header necessari, incluso l'header Content-Type su application/json.

  3. Creiamo il payload, che include il nome del modello ("model": "llama-3-8b-instruct"), il prompt ("prompt": "Dimmi 50 barzellette."), e altri parametri come max_tokens, temperature e stop.

  4. Definiamo una funzione send_requests() che invia le richieste utilizzando il metodo requests.post() e l'URL, gli header e il payload che abbiamo definito in precedenza.

  5. Utilizziamo il multithreading per eseguire più istanze della funzione send_requests() in modo concorrente, simulando un elevato volume di richieste all'endpoint API.

  6. Monitoriamo l'utilizzo della GPU in tempo reale utilizzando il comando watch e lo strumento nvidia-smi, che fornisce informazioni sull'utilizzo della GPU.

L'output mostra che l'endpoint API è in grado di gestire un numero significativo di richieste simultanee, con una media di circa 2.500 token al secondo. L'utilizzo della GPU rimane anche relativamente elevato, indicando che NVIDIA NIM sta sfruttando efficacemente le risorse hardware per fornire un'inferenza ad alte prestazioni.

Questo stress test dimostra la scalabilità e le prestazioni della soluzione NVIDIA NIM, rendendola un'opzione convincente per distribuire modelli di linguaggio di grandi dimensioni in un ambiente di produzione.

Utilizzo di NVIDIA NIM con il client API di OpenAI

Per utilizzare il client API di OpenAI con NVIDIA NIM, segui questi passaggi:

  1. Modifica l'URL di base all'URL della tua istanza NVIDIA NIM. In questo esempio, la stiamo eseguendo su localhost:8000:
openai.api_base = "http://localhost:8000"
  1. Non è necessario fornire la chiave API, poiché NVIDIA NIM gestisce l'autenticazione.

  2. Imposta il modello sul modello ospitato da NVIDIA NIM, in questo caso "meta-llama-38b-instruct":

model = "meta-llama-38b-instruct"
  1. Imposta gli altri parametri, come il numero massimo di token da generare, la temperatura e se trasmettere in streaming le risposte:
response = openai.ChatCompletion.create(
    model=model,
    messages=[{"role": "user", "content": "Dimmi 50 barzellette diverse"}],
    max_tokens=1024,
    temperature=0.7,
    stream=True,
)
  1. Itera attraverso la risposta in streaming e stampa il testo generato:
for chunk in response:
    print(chunk.choices[0].text, end="")

Questo approccio ti consente di sfruttare le prestazioni e la facilità di distribuzione fornite da NVIDIA NIM, utilizzando allo stesso tempo il familiare client API di OpenAI. La risposta in streaming garantisce di ottenere il testo generato in tempo reale, fornendo un'esperienza utente reattiva.

Conclusione

In questo video, abbiamo esplorato come distribuire un modello Lama 3 da 8 miliardi di istruzioni utilizzando NVIDIA NIM sul tuo cloud o sulla tua macchina locale. NVIDIA NIM è un insieme di microservizi sviluppati da NVIDIA che accelera la distribuzione di modelli di base, inclusi i modelli di linguaggio e altri modelli AI.

Abbiamo percorso i passaggi per impostare l'ambiente NVIDIA NIM, inclusa la generazione della chiave API ed esecuzione del container Docker per distribuire il modello Lama 3. Abbiamo anche testato le prestazioni del modello distribuito inviando più richieste simultaneamente e monitorando l'utilizzo della GPU e il throughput.

Inoltre, abbiamo mostrato come utilizzare il client API di OpenAI per interagire con il modello distribuito da NVIDIA NIM, dimostrando la compatibilità con lo standard API di OpenAI.

Complessivamente, NVIDIA NIM fornisce un modo conveniente ed efficiente per distribuire modelli di linguaggio di grandi dimensioni in un ambiente di produzione. La possibilità di sfruttare l'hardware e il software stack di NVIDIA può portare a miglioramenti significativi delle prestazioni rispetto ad altre opzioni di distribuzione. Se sei interessato a esplorare ulteriori opzioni di distribuzione per i tuoi progetti, assicurati di iscriverti al canale per i prossimi contenuti su VLLM e altri argomenti correlati.

FAQ