Nota
- Questa esercitazione richiede l'accesso a Oracle Cloud. Per iscriverti a un account gratuito, consulta Inizia a utilizzare Oracle Cloud Infrastructure Free Tier.
- Utilizza valori di esempio per le credenziali, la tenancy e i compartimenti di Oracle Cloud Infrastructure. Al termine del laboratorio, sostituisci questi valori con quelli specifici del tuo ambiente cloud.
Ottimizza e servi modelli di linguaggio di grandi dimensioni su Oracle Cloud Infrastructure con dstack
Introduzione
dstack
è uno strumento open source che semplifica l'orchestrazione dei container di intelligenza artificiale (AI) e rende più accessibile la formazione e l'implementazione distribuita di LLM (Large Language Models). La combinazione di dstack
e Oracle Cloud Infrastructure (OCI) sblocca un processo semplificato per la configurazione dell'infrastruttura cloud per la formazione distribuita e l'implementazione di modelli scalabili.
Come funziona dstack
?
dstack
offre un'interfaccia unificata per lo sviluppo, la formazione e la distribuzione di modelli AI in qualsiasi cloud o data center. Ad esempio, è possibile specificare una configurazione per un task di formazione o un modello da distribuire e dstack
si occuperà di impostare l'infrastruttura richiesta e di orchestrare i container. Uno dei vantaggi che dstack
offre è che consente l'uso di qualsiasi hardware, framework e script.
Obiettivi
-
Ottimizza un modello LLM utilizzando
dstack
su OCI, incorpora le best practice del manuale Hugging Face Alignment e distribuisci il modello utilizzando Hugging Face Text Generation Inference (TGI).Nota: l'esperimento descritto nell'esercitazione utilizza un cluster OCI di tre nodi, ciascuno con 2 GPU A10 x, per ottimizzare il modello Gemma 7B.
Prerequisiti
-
Accesso a una tenancy OCI.
-
Accesso alle forme con GPU NVIDIA, ad esempio le GPU A10 (ad esempio,
VM.GPU.A10.2
). Per ulteriori informazioni sulle richieste di aumento del limite, vedere Limiti del servizio. -
Un account Hugging Face con un token di accesso configurato per scaricare il modello Gemma 7B.
Task 1: impostare dstack
con OCI
-
Installare il pacchetto
dstack
Python utilizzando il comando seguente. Poichédstack
supporta più provider cloud, possiamo restringere l'ambito a OCI.pip install dstack[oci]
-
Configurare le credenziali specifiche OCI all'interno del file
~/.dstack/server/config.yml
. Il codice seguente presuppone che siano configurate le credenziali per l'interfaccia CLI (Command Line Interface) OCI. Per altre opzioni di configurazione, consultare la documentazione di dstack.projects: - name: main backends: - type: oci creds: type: default
-
Eseguire il server
dstack
utilizzando il comando seguente.dstack server INFO Applying ~/.dstack/server/config.yml... INFO Configured the main project in ~/.dstack/config.yml INFO The admin token is ab6e8759-9cd9-4e84-8d47-5b94ac877ebf INFO The dstack server 0.18.4 is running at http://127.0.0.1:3000
-
Passare alla cartella con gli script di progetto e inizializzare
dstack
utilizzando il comando seguente.dstack init
Task 2: Ottimizza il lavoro su OCI con dstack
Per perfezionare il modello Gemma 7B, utilizzeremo il manuale di allineamento facciale Hugging per garantire l'incorporazione delle migliori pratiche di messa a punto. Il codice sorgente di questa esercitazione può essere ottenuto da qui: GitHub. Immergiamoci nei passaggi pratici per perfezionare il tuo LLM.
Una volta passata la cartella del progetto, utilizzare i comandi seguenti per avviare il job di tuning su OCI con dstack
.
ACCEL_CONFIG_PATH=fsdp_qlora_full_shard.yaml \
FT_MODEL_CONFIG_PATH=qlora_finetune_config.yaml \
HUGGING_FACE_HUB_TOKEN=xxxx \
WANDB_API_KEY=xxxx \
dstack run . -f ft.task.dstack.yml
Le variabili di ambiente FT_MODEL_CONFIG_PATH
, ACCEL_CONFIG_PATH
, HUGGING_FACE_HUB_TOKEN
e WANDB_API_KEY
sono definite all'interno della configurazione del task ft.task.dstack.yml
. dstack run
sottomette il task definito in ft.task.dstack.yml
su OCI.
Nota:
dstack
copia automaticamente il contenuto della directory corrente durante l'esecuzione del task.
Esploriamo le parti chiave di ogni file YAML (per il contenuto completo, controlla il repository).
Il file qlora_finetune_config.yaml
è la configurazione della ricetta utilizzata dal manuale di allineamento per capire come si desidera ottimizzare un modello LLM (Large Language Model).
# Model arguments
model_name_or_path: google/gemma-7b
tokenizer_name_or_path: philschmid/gemma-tokenizer-chatml
torch_dtype: bfloat16
bnb_4bit_quant_storage: bfloat16
# LoRA arguments
load_in_4bit: true
use_peft: true
lora_r: 8
lora_alpha: 16
lora_dropout: 0.05
lora_target_modules:
- q_proj
- k_proj
# ...
# Data training arguments
dataset_mixer:
chansung/mental_health_counseling_conversations: 1.0
dataset_splits:
- train
- test
# ...
-
Argomenti modello:
model_name_or_path
: come modello di base viene scelto Gemma 7B di Google.tokenizer_name_or_path
: il manuale di allineamento utilizza il metodoapply_chat_template()
del tokenizer scelto. Questa esercitazione utilizza il modello ChatML al posto del modello di conversazione standard di Gemma 7B.torch_dtype
ebnb_4bit_quant_storage
: questi due valori devono essere definiti allo stesso modo se si desidera utilizzare il metodo di tuning FSDP+QLoRA. Poiché Gemma 7B è difficile da inserire in una singola GPU A10, questa esercitazione utilizza FSDP+QLoRA per suddividere un modello in 2 GPU A10 x sfruttando la tecnica QLoRA.
-
LoRA Argomenti: configurazioni specifiche di LoRA. Poiché questo post di esercitazione utilizza la tecnica FSDP+QLoRA,
load_in_4bit
è impostato sutrue
. Altre configurazioni potrebbero variare da esperimento a esperimento. -
Argomenti di formazione sui dati: abbiamo preparato un set di dati basato sul set di dati delle conversazioni di consulenza sulla salute mentale di Amod. Poiché il manuale di allineamento comprende solo i dati sotto forma di
[{"role": "user", "content": "..."}, {"role": "assistant", "content": "..."}, …]
che possono essere interpretati con il metodoapply_chat_template()
del tokenizer, il set di dati preparato è fondamentalmente la conversione del set di dati originale nel formato compatibile conapply_chat_template()
.
Il file fsdp_qlora_full_shard.yaml
configura come accelerare l'utilizzo dell'infrastruttura sottostante per il tuning dell'LLM.
compute_environment: LOCAL_MACHINE
distributed_type: FSDP # Use Fully Sharded Data Parallelism
fsdp_config:
fsdp_auto_wrap_policy: TRANSFORMER_BASED_WRAP
fsdp_backward_prefetch: BACKWARD_PRE
fsdp_cpu_ram_efficient_loading: true
fsdp_use_orig_params: false
fsdp_offload_params: true
fsdp_sharding_strategy: FULL_SHARD
# ... (other FSDP configurations)
# ... (other configurations)
distributed_type
:FSDP
indica l'uso di Full Sharded Data Parallel (FSDP), una tecnica che consente l'addestramento di modelli di grandi dimensioni che altrimenti non si adatterebbero a una singola GPU.fsdp_config
: vengono impostate le modalità di funzionamento di FSDP, ad esempio le modalità di partizionamento orizzontale del modello (fsdp_sharding_strategy
) e l'offload dei parametri sulla CPU (fsdp_offload_params
).
Con il valore FSDP
di distributed_type
e FULL_SHARD
del valore fsdp_sharding_strategy
di fsdp_config
, un modello verrà suddiviso in più GPU in un'unica macchina. Quando si tratta di più nodi di calcolo, ogni nodo ospiterà una copia identica del modello, che è a sua volta suddivisa tra più GPU all'interno di tale nodo. Ciò significa che ogni istanza di modello partizionata su ciascun nodo elabora sezioni o batch diversi del data set. Per distribuire un singolo modello su più GPU su più nodi, configurare il parametro fsdp_sharding_strategy
come HYBRID_SHARD
.
Ulteriori parametri come machine_rank
, num_machines
e num_processes
sono importanti per il coordinamento. Tuttavia, si consiglia di impostare questi valori in modo dinamico in fase di esecuzione, in quanto ciò offre flessibilità quando si passa da un'installazione all'altra dell'infrastruttura.
Task 3: indicare a dstack
di utilizzare la configurazione semplificata per eseguire il provisioning dell'infrastruttura
Esploriamo la configurazione fsdp_qlora_full_shard.yaml
che riunisce tutti gli elementi e fornisce istruzioni a dstack
su come eseguire il provisioning dell'infrastruttura ed eseguire il task.
type: task
nodes: 3
python: "3.11"
env:
- ACCEL_CONFIG_PATH
- FT_MODEL_CONFIG_PATH
- HUGGING_FACE_HUB_TOKEN
- WANDB_API_KEY
commands:
# ... (setup steps, cloning repo, installing requirements)
- ACCELERATE_LOG_LEVEL=info accelerate launch \
--config_file recipes/custom/accel_config.yaml \
--main_process_ip=$DSTACK_MASTER_NODE_IP \
--main_process_port=8008 \
--machine_rank=$DSTACK_NODE_RANK \
--num_processes=$DSTACK_GPUS_NUM \
--num_machines=$DSTACK_NODES_NUM \
scripts/run_sft.py recipes/custom/config.yaml
ports:
- 6006
resources:
gpu: 1..2
shm_size: 24GB
Punti chiave da evidenziare::
- Integrazione perfetta:
dstack
si integra facilmente con l'ecosistema open source di Hugging Face. In particolare, è possibile utilizzare semplicemente la libreria Accelerate con le configurazioni definite normalmente infsdp_qlora_full_shard.yaml
. - Configurazione automatica: le variabili
DSTACK_MASTER_NODE_IP
,DSTACK_NODE_RANK
,DSTACK_GPUS_NUM
eDSTACK_NODES_NUM
vengono gestite automaticamente dadstack
, riducendo l'impostazione manuale. - Allocazione risorse:
dstack
semplifica la specifica del numero di nodi e GPU (gpu: 1..2) per il job di fine tuning. Quindi, per questo tutorial, ci sono tre nodi ognuno dei quali è dotato di 2 GPU A10 (24 GB).
Task 4: Servire il tuo modello ottimizzato con dstack
Una volta che il modello è stato ottimizzato, dstack
semplifica la distribuzione su OCI utilizzando il framework TGI (Huggging Face Text Generation Inference).
Di seguito è riportato un esempio di come definire un servizio in dstack
.
type: service
image: ghcr.io/huggingface/text-generation-inference:latest
env:
- HUGGING_FACE_HUB_TOKEN
- MODEL_ID=chansung/mental_health_counseling_merged_v0.1
commands:
- text-generation-launcher \
--max-input-tokens 512 --max-total-tokens 1024 \
--max-batch-prefill-tokens 512 --port 8000
port: 8000
resources:
gpu:
memory: 48GB
# (Optional) Enable the OpenAI-compatible endpoint
model:
format: tgi
type: chat
name: chansung/mental_health_counseling_merged_v0.1
Vantaggi principali di questo approccio:
- Gateway HTTPS sicuro:
dstack
semplifica il processo di impostazione di una connessione HTTPS sicura attraverso un gateway, un aspetto cruciale del servizio di modelli a livello di produzione. - Ottimizzato per inferenza: il framework TGI è progettato per un'inferenza efficiente nella generazione del testo, garantendo che il modello offra risultati reattivi e affidabili.
- Ridimensionamento automatico:
dstack
consente di specificare il criterio di ridimensionamento automatico, incluso il numero minimo e massimo di repliche del modello.
A questo punto, è possibile interagire con il servizio utilizzando il comando curl
standard e le richieste Python, l'SDK OpenAI e le librerie client di inferenza di Hugging Face. Ad esempio, il seguente frammento di codice mostra un esempio di arricciatura.
curl -X POST https://black-octopus-1.mycustomdomain.com/generate \
-H "Authorization: Bearer <dstack-token>" \
-H 'Content-Type: application/json' \
-d '{"inputs": "I feel bad...", "parameters": {"max_new_tokens": 128}}'
Inoltre, per un modello distribuito, dstack
fornisce automaticamente un'interfaccia utente per interagire direttamente con il modello.
Passi successivi
Seguendo i passaggi descritti in questo tutorial, hai sbloccato un potente approccio per perfezionare e distribuire LLM utilizzando le funzionalità combinate di dstack
, OCI e l'ecosistema Hugging Face. Ora puoi sfruttare l'interfaccia intuitiva di dstack
per gestire le tue risorse OCI in modo efficace, semplificando il processo di impostazione degli ambienti di formazione distribuiti per i tuoi progetti LLM.
Inoltre, l'integrazione con il manuale di allineamento di Hugging Face e il framework TGI consente di ottimizzare e servire senza problemi i modelli, garantendo che siano ottimizzati per le prestazioni e pronti per le applicazioni del mondo reale. Vi invitiamo a esplorare ulteriormente le possibilità e sperimentare con diversi modelli e configurazioni per ottenere i risultati desiderati nel mondo dell'elaborazione del linguaggio naturale.
Conferme
- Autore - Chansung Park (HuggingFace fellow - ricercatore AI), Yann Caniou (esperto AI Infra/GPU), Bruno Garbaccio (esperto AI Infra/GPU)
Altre risorse di apprendimento
Esplora altri laboratori su docs.oracle.com/learn o accedi a più contenuti gratuiti sulla formazione su Oracle Learning YouTube channel. Inoltre, visita education.oracle.com/learning-explorer per diventare un Oracle Learning Explorer.
Per la documentazione del prodotto, visita l'Oracle Help Center.
Fine-Tune and Serve Large Language Models on Oracle Cloud Infrastructure with dstack
G11980-01
July 2024