Fine-tuning dei modelli con componenti di inferenza dell’adattatore
Amazon SageMaker AI consente di ospitare modelli di fondazione preaddestrati senza dover creare i modelli da zero. Tuttavia, per personalizzare un modello di fondazione generico in base alle esigenze specifiche della tua azienda, devi crearne una versione ottimizzata con fine-tuning. Una tecnica di fine-tuning conveniente è il Low-Rank Adaptation (LoRA). Il principio alla base di LoRA è che solo una piccola parte di un modello di fondazione di grandi dimensioni deve essere aggiornata per eseguire l’adattamento a nuove attività o domini. Un adattatore LoRA aumenta l’inferenza da un modello di fondazione con un numero minimo di livelli di adattatore aggiuntivi.
Se ospiti il modello di fondazione di base utilizzando un componente di inferenza SageMaker AI, è possibile eseguire il fine-tuning di tale modello con adattatori LoRA creando componenti di inferenza dell’adattatore. Quando viene creato un componente di inferenza di un adattatore, occorre specificare quanto segue:
-
Il componente di inferenza di base che deve contenere il componente di inferenza dell’adattatore. Il componente di inferenza di base contiene il modello di fondazione che desideri adattare. Il componente di inferenza dell’adattatore utilizza le risorse di calcolo assegnate al componente di inferenza di base.
-
La posizione nella quale è stato archiviato l’adattatore LoRA in Amazon S3.
Dopo aver creato il componente di inferenza dell’adattatore, è possibile invocarlo direttamente. Quando lo si invoca, SageMaker AI combina l’adattatore con il modello di base per aumentare la risposta generata.
Prima di iniziare
Prima di creare un componente di inferenza dell’adattatore, è necessario soddisfare i seguenti requisiti:
-
Disponibilità di un componente di inferenza di base che contiene il modello di fondazione da adattare. Questo componente di inferenza è stato implementato su un endpoint di SageMaker AI.
Per ulteriori informazioni sull’implementazione di componenti di inferenza sugli endpoint, consulta Implementazione di modelli per l’inferenza in tempo reale.
-
Disponibilità di un modello di adattatore LoRA e archiviazione degli artefatti del modello come file
tar.gzin Amazon S3. Specifica l’URI S3 degli artefatti quando crei il componente di inferenza dell’adattatore.
Gli esempi seguenti utilizzano SDK per Python (Boto3) per creare e invocare un componente di inferenza di un adattatore.
Esempio Chiamata create_inference_component per creare un componente di inferenza dell’adattatore
L’esempio seguente crea un componente di inferenza dell’adattatore e lo assegna a un componente di inferenza di base:
sm_client.create_inference_component( InferenceComponentName =adapter_ic_name, EndpointName =endpoint_name, Specification={ "BaseInferenceComponentName":base_inference_component_name, "Container": { "ArtifactUrl":adapter_s3_uri}, }, )
Quando utilizzi questo esempio nel tuo codice, sostituisci i valori segnaposto come segue:
-
adapter_ic_name: nome univoco per il componente di inferenza dell’adattatore. -
endpoint_name: nome dell’endpoint che ospita il componente di inferenza di base. -
base_inference_component_name: nome del componente di inferenza di base che contiene il modello di fondazione da adattare. -
adapter_s3_uri: URI di S3 che individua il filetar.gzcon gli artefatti dell’adattatore LoRA.
Si crea un componente di inferenza dell’adattatore con un codice simile al codice per un normale componente di inferenza, con la differenza che, per il parametro Specification, si omette la chiave ComputeResourceRequirements. Quando si invoca un componente di inferenza dell’adattatore, questo viene caricato dal componente di inferenza di base. Il componente di inferenza dell’adattatore utilizza le risorse di calcolo del componente di inferenza di base.
Per ulteriori informazioni sulla creazione e sull’implementazione di componenti di inferenza con SDK per Python (Boto3), consulta Implementare modelli con gli SDK Python.
Dopo aver creato un componente di inferenza dell’adattatore, puoi invocarlo specificandone il nome in una richiesta invoke_endpoint.
Esempio Chiamata all’invoke_endpoint per invocare un componente di inferenza dell’adattatore
L’esempio seguente invoca un componente di inferenza dell’adattatore:
response = sm_rt_client.invoke_endpoint( EndpointName =endpoint_name, InferenceComponentName =adapter_ic_name, Body = json.dumps( { "inputs":prompt, "parameters": {"max_new_tokens": 100, "temperature":0.9} } ), ContentType = "application/json", ) adapter_reponse = response["Body"].read().decode("utf8")["generated_text"]
Quando utilizzi questo esempio nel tuo codice, sostituisci i valori segnaposto come segue:
-
endpoint_name: nome dell’endpoint che ospita il componente di inferenza di base e dell’adattatore. -
adapter_ic_name: nome del componente di inferenza dell’adattatore. -
prompt: prompt per la richiesta di inferenza.
Per ulteriori informazioni sull’invocazione di componenti di inferenza con SDK per Python (Boto3), consulta Invocare modelli per l’inferenza in tempo reale.