Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
Visualizzazione attuale:Versione del portale Foundry (versione classica) - Passa alla versione per il nuovo portale Foundry
Informazioni su come ottimizzare i modelli in Microsoft Foundry per i set di dati e i casi d'uso. L'ottimizzazione consente di:
- Risultati di qualità superiore rispetto a quanto si possa ottenere solo con il engineering dei prompt.
- Possibilità di eseguire il training su più esempi rispetto a quelli che possono rientrare nel limite di contesto di richiesta di un modello.
- Risparmio di token dovuto a richieste più brevi.
- Richieste a bassa latenza, in particolare quando si usano modelli più piccoli.
A differenza dell'apprendimento con pochi scatti, l'ottimizzazione migliora il modello eseguendo il training su più esempi rispetto a quanto previsto in un prompt. Poiché i pesi si adattano all'attività, sono inclusi meno esempi o istruzioni. L'inclusione di meno riduce i token per chiamata e riduce potenzialmente i costi e la latenza.
Usiamo l'adattamento a bassa classificazione (LoRA) per ottimizzare i modelli in modo da ridurre la complessità senza influire significativamente sulle prestazioni. Questo metodo funziona approssimando la matrice originale di rango elevato con una matrice di rango inferiore. L'ottimizzazione di un subset più piccolo di parametri importanti durante la fase di training supervisionata rende il modello più gestibile ed efficiente. Per gli utenti, rende anche il training più veloce e più conveniente rispetto ad altre tecniche.
Questo articolo illustra come:
- Scegliere set di dati e formati appropriati per l'ottimizzazione.
- Attivare un processo di ottimizzazione, monitorare lo stato e recuperare i risultati.
- Distribuire e valutare un modello ottimizzato.
- Pulire le risorse quando non sono più necessarie.
Nel portale di Microsoft Foundry sono disponibili due esperienze di ottimizzazione univoche:
- Hub o vista progetto: supporta modelli di ottimizzazione da più provider, ad esempio Azure OpenAI, Meta Llama e Microsoft Phi.
Visualizzazione Azure basata su OpenAI : supporta solo l'ottimizzazione dei modelli Azure OpenAI, ma supporta funzionalità aggiuntive come l'integrazione preview diWeights & Biases (W&B) . Se stai ottimizzando solo i modelli OpenAI di Azure, consigliamo questa esperienza.
Importante
Gli elementi contrassegnati (anteprima) in questo articolo sono attualmente in anteprima pubblica. Questa anteprima viene fornita senza un contratto di servizio e non è consigliabile per i carichi di lavoro di produzione. Alcune funzionalità potrebbero non essere supportate o potrebbero avere funzionalità limitate. Per altre informazioni, vedere Condizioni supplementari per l'utilizzo delle anteprime di Microsoft Azure.
Prerequisiti
- Leggi la guida su quando utilizzare l'ottimizzazione fine di Azure OpenAI.
- È necessaria una sottoscrizione Azure. Crearne uno gratuitamente.
- È necessaria una risorsa OpenAI Azure che si trova in un'area che supporta l'ottimizzazione del modello OpenAI Azure. Per l'elenco dei modelli disponibili in base all'area e alle funzionalità supportate, controllare la tabella di riepilogo del modello e la disponibilità dell'area. Per altre informazioni, vedere Creare una risorsa e distribuire un modello con Azure OpenAI.
- L'affinamento richiede il ruolo di Proprietario dell'Intelligenza Artificiale di Azure. Anche se gli utenti di Azure IA possono addestrare (regolare) i modelli, solo i proprietari dei modelli IA possono distribuirli.
- Se non si ha già accesso per visualizzare le quote e distribuire i modelli nel portale foundry, sono necessarie altre autorizzazioni.
Modelli supportati
Per verificare quali aree attualmente supportano l'ottimizzazione, vedere l'articolo sui modelli.
In alternativa, è possibile ottimizzare un modello ottimizzato in precedenza, formattato come base-model.ft-{jobid}.
Esaminare il flusso di lavoro per il portale Foundry
Esaminare il flusso di lavoro di messa a punto per l'uso del portale Foundry:
- Prepara i dati di addestramento e convalida.
- Usare la finestra di dialogo Crea un modello ottimizzato nel portale foundry per eseguire il training del modello personalizzato.
- Selezionare un metodo di training.
- Selezionare un modello di base.
- Scegliere il tipo di formazione.
- Scegliere i dati di allenamento.
- Facoltativamente, scegliere i dati di convalida.
- Facoltativamente, configurare i parametri delle attività per il processo di ottimizzazione.
- Facoltativamente, abilitare la distribuzione automatica per il modello personalizzato risultante.
- Esaminare le scelte ed eseguire il training del nuovo modello personalizzato.
- Controllare lo stato del modello personalizzato ottimizzato.
- Distribuire il modello personalizzato da usare.
- Usare il modello personalizzato.
- Facoltativamente, analizza il tuo modello personalizzato per valutarne le prestazioni e l'adattabilità.
Preparare i dati di addestramento e di validazione
I set di dati di training e convalida sono costituiti da esempi di input e output per la modalità di esecuzione del modello.
I dati di training e di convalida che utilizzi devono essere formattati come documento JSON Lines (JSONL). Deve anche essere formattato nel formato di conversazione usato dall'API Chat Completions.
Oltre al formato JSONL, i file di dati di training e convalida devono essere codificati in UTF-8 e includere un indicatore di ordine byte (BOM). Ogni file deve avere dimensioni inferiori a 512 MB.
In genere è consigliabile usare le istruzioni che hanno funzionato meglio in ciascun esempio di formazione. Questo approccio consente di ottenere i risultati migliori, soprattutto se si hanno meno di un centinaio di esempi.
Formato di file di esempio
{"messages": [{"role": "system", "content": "Clippy is a factual chatbot that is also sarcastic."}, {"role": "user", "content": "Who discovered Antarctica?"}, {"role": "assistant", "content": "Some chaps named Fabian Gottlieb von Bellingshausen and Mikhail Lazarev, as if they don't teach that in every school!"}]}
{"messages": [{"role": "system", "content": "Clippy is a factual chatbot that is also sarcastic."}, {"role": "user", "content": "What is the biggest ocean?"}, {"role": "assistant", "content": "The Pacific Ocean. It's not like it's a small pond or anything."}]}
{"messages": [{"role": "system", "content": "Clippy is a factual chatbot that is also sarcastic."}, {"role": "user", "content": "What is the largest planet?"}, {"role": "assistant", "content": "It's called Jupiter, you might have heard of it...or not."}]}
{"messages": [{"role": "system", "content": "Clippy is a factual chatbot that is also sarcastic."}, {"role": "user", "content": "Who painted the Mona Lisa?"}, {"role": "assistant", "content": "Oh, some obscure artist named Leonardo da Vinci. Not that he is famous or anything."}]}
{"messages": [{"role": "system", "content": "Clippy is a factual chatbot that is also sarcastic."}, {"role": "user", "content": "What's the boiling point of water?"}, {"role": "assistant", "content": "Exciting fact of the day: it's 100 degrees Celsius. Life-changing, isn't it?"}]}
{"messages": [{"role": "system", "content": "Clippy is a factual chatbot that is also sarcastic."}, {"role": "user", "content": "Who wrote 'The Odyssey'?"}, {"role": "assistant", "content": "Oh, just some poet named Homer. Nothing special, really."}]}
{"messages": [{"role": "system", "content": "Clippy is a factual chatbot that is also sarcastic."}, {"role": "user", "content": "What is the largest mammal?"}, {"role": "assistant", "content": "Blue Whale. Quite a big fish isn't it? Oh wait, it's not a fish!"}]}
{"messages": [{"role": "system", "content": "Clippy is a factual chatbot that is also sarcastic."}, {"role": "user", "content": "What's the highest mountain peak?"}, {"role": "assistant", "content": "Everest. Brace yourself, it's not a walk in the park."}]}
{"messages": [{"role": "system", "content": "Clippy is a factual chatbot that is also sarcastic."}, {"role": "user", "content": "Who invented the telephone?"}, {"role": "assistant", "content": "A guy named Alexander Graham Bell. Bet you didn't guess that one!"}]}
{"messages": [{"role": "system", "content": "Clippy is a factual chatbot that is also sarcastic."}, {"role": "user", "content": "What is the distance from Earth to the Sun?"}, {"role": "assistant", "content": "About 93 million miles. Just a quick drive, really."}]}
Formato di file di chat a più turni per Azure OpenAI
Sono supportati anche più turni di una conversazione in una singola riga del file di training JSONL. Per ignorare l'ottimizzazione di messaggi di assistente specifici, aggiungere la coppia chiave/valore facoltativa weight. Attualmente, weight può essere impostato su 0 o 1.
{"messages": [{"role": "system", "content": "Marv is a factual chatbot that is also sarcastic."}, {"role": "user", "content": "What's the capital/major city of France?"}, {"role": "assistant", "content": "Paris", "weight": 0}, {"role": "user", "content": "Can you be more sarcastic?"}, {"role": "assistant", "content": "Paris, as if everyone doesn't know that already.", "weight": 1}]}
{"messages": [{"role": "system", "content": "Marv is a factual chatbot that is also sarcastic."}, {"role": "user", "content": "Who wrote 'Romeo and Juliet'?"}, {"role": "assistant", "content": "William Shakespeare", "weight": 0}, {"role": "user", "content": "Can you be more sarcastic?"}, {"role": "assistant", "content": "Oh, just some guy named William Shakespeare. Ever heard of him?", "weight": 1}]}
{"messages": [{"role": "system", "content": "Marv is a factual chatbot that is also sarcastic."}, {"role": "user", "content": "How far is the Moon from Earth?"}, {"role": "assistant", "content": "384,400 kilometers", "weight": 0}, {"role": "user", "content": "Can you be more sarcastic?"}, {"role": "assistant", "content": "Around 384,400 kilometers. Give or take a few, like that really matters.", "weight": 1}]}
Completamento della chat con visione
{"messages": [{"role": "user", "content": [{"type": "text", "text": "What's in this image?"}, {"type": "image_url", "image_url": {"url": "https://raw.githubusercontent.com/MicrosoftDocs/azure-ai-docs/main/articles/ai-services/openai/media/how-to/generated-seattle.png"}}]}, {"role": "assistant", "content": "The image appears to be a watercolor painting of a city skyline, featuring tall buildings and a recognizable structure often associated with Seattle, like the Space Needle. The artwork uses soft colors and brushstrokes to create a somewhat abstract and artistic representation of the cityscape."}]}
Considerazioni sulle dimensioni del set di dati
Più esempi di training sono disponibili, meglio. I processi di ottimizzazione non procederanno senza almeno 10 esempi di training, ma un numero così ridotto non è sufficiente per influenzare notevolmente le risposte del modello. Una delle migliori pratiche per una corretta messa a punto consiste nel fornire centinaia, se non migliaia, di esempi di addestramento. È consigliabile iniziare con 50 esempi ben creati.
In generale, il raddoppio delle dimensioni del set di dati può comportare un aumento lineare della qualità del modello. Tenere tuttavia presente che gli esempi di bassa qualità possono influire negativamente sulle prestazioni. Se si esegue il training del modello su una grande quantità di dati interni senza prima selezionare solo gli esempi di qualità più elevata nel set di dati, il modello potrebbe avere prestazioni peggiori del previsto.
Creare un modello ottimizzato
Il portale Foundry fornisce la finestra di dialogo creare un modello ottimizzato per creare ed eseguire il training di un modello ottimizzato per la risorsa Azure in un'unica posizione.
Passare al portale Foundry e accedere con le credenziali che hanno accesso alla risorsa OpenAI Azure. Durante il flusso di lavoro di accesso, selezionare la directory appropriata, la sottoscrizione di Azure e la risorsa di Azure OpenAI.
Passare a Strumenti>Ottimizzazione e quindi selezionare Ottimizza modello.
Selezionare un modello da ottimizzare e quindi selezionare Avanti.
Viene visualizzata la finestra di dialogo Crea un modello ottimizzato .
Scegliere il metodo di training
Il primo passaggio consiste nel confermare la scelta del modello e il metodo di training. Non tutti i modelli supportano tutti i metodi di training.
- Ottimizzazione supervisionata: supportata da tutti i modelli non di ragionamento.
- Ottimizzazione delle preferenze dirette (anteprima): supportata da GPT-4o.
- Ottimizzazione dell'rinforzo: supportata dai modelli di ragionamento, ad esempio o4-mini.
Quando si seleziona il modello, è anche possibile selezionare un modello ottimizzato in precedenza, come descritto più avanti in questo articolo.
Scegliere il tipo di training
Foundry offre tre livelli di training per soddisfare le esigenze dei clienti.
Livello di formazione standard
Il livello Standard offre capacità dedicate per il fine-tuning con prestazioni prevedibili e accordi sul livello del servizio. È ideale per i carichi di lavoro di produzione che richiedono una velocità effettiva garantita.
Livello Standard globale di formazione
Il livello Training globale espande la portata della personalizzazione del modello con i prezzi più convenienti di altre offerte globali. Non offre la residenza dei dati. Se è necessaria la residenza dei dati, vedere l'elenco delle aree disponibili per il modello scelto.
I dati di addestramento e i parametri del modello risultanti potrebbero essere copiati in un'altra area Azure.
Quando si usa questo livello, è possibile:
- Addestrare i modelli OpenAI più recenti in più di una dozzina di regioni Azure OpenAI.
- Approfitta di tariffe di training per token inferiori rispetto al livello Standard.
Livello di formazione per sviluppatori
Il livello Developer è un'opzione conveniente che usa capacità inattiva per carichi di lavoro non urgenti o esplorativi. I job in questo livello potrebbero essere preemptati e ripresi in un secondo momento, pertanto è ideale per la sperimentazione e i casi d'uso sensibili ai costi.
Scegli i dati di training
Il passaggio successivo consiste nel scegliere i dati di training preparati esistenti o caricare nuovi dati di training preparati da usare quando si personalizza il modello selezionando Aggiungi dati di training.
Nella finestra di dialogo Dati di training vengono visualizzati tutti i set di dati caricati in precedenza esistenti. Offre anche opzioni per caricare nuovi dati di training.
Se i dati di training sono già caricati nel servizio, selezionare File dalla risorsa di intelligenza artificiale connessa. Selezionare quindi il file dall'elenco a discesa.
Per caricare nuovi dati di training, usare una delle opzioni seguenti:
- Selezionare Carica file per caricare i dati di training da un file locale.
- Selezionare Azure BLOB o altri percorsi Web condivisi per importare i dati di training da Archiviazione BLOB di Azure o da un'altra posizione Web condivisa.
Per i file di dati di grandi dimensioni, è consigliabile importare da gestione rete virtuale di Azure. I file di grandi dimensioni possono diventare instabili quando vengono caricati tramite moduli multipart perché le richieste sono atomiche e non possono essere ritentate o riprese. Per altre informazioni sulle gestione rete virtuale di Azure, vedere Che è Archiviazione BLOB di Azure?.
Scegliere i dati di convalida (facoltativo)
Se si dispone di un set di dati di convalida, selezionare Aggiungi dati di training. È possibile scegliere i dati di convalida preparati esistenti o caricare nuovi dati di convalida preparati da usare quando si personalizza il modello.
La finestra di dialogo Dati di convalida visualizza tutti i set di dati di training e convalida caricati in precedenza esistenti. Offre anche opzioni per caricare nuovi dati di convalida.
Se i dati di convalida sono già caricati nel servizio, selezionare Scegli set di dati. Selezionare quindi il file dall'elenco a discesa.
Per caricare nuovi dati di convalida, usare una delle opzioni seguenti:
- Selezionare File locale per caricare i dati di convalida da un file locale.
- Selezionare Azure BLOB o altri percorsi Web condivisi per importare i dati di convalida da Archiviazione BLOB di Azure o da un altro percorso Web condiviso.
Per i file di dati di grandi dimensioni, è consigliabile importare da gestione rete virtuale di Azure. I file di grandi dimensioni possono diventare instabili quando vengono caricati tramite moduli multipart perché le richieste sono atomiche e non possono essere ritentate o riprese.
Rendere il modello identificabile (facoltativo)
È consigliabile includere un suffix parametro per distinguere più facilmente le iterazioni del modello ottimizzato. Un suffix parametro accetta una stringa di un massimo di 18 caratteri e viene usato per assegnare un nome al modello ottimizzato risultante.
Configurare i parametri di training (facoltativo)
È possibile fornire un seed facoltativo e regolare ulteriori iperparametri.
Un seme controlla la riproducibilità del job. Il passaggio degli stessi parametri di seed e job dovrebbe produrre gli stessi risultati, ma in rari casi potrebbe differire. Se non si specifica un seed, ne viene generato uno casualmente per te.
Gli iperparametri seguenti sono disponibili per l'ottimizzazione tramite il portale foundry:
| Nome | Digitare | Descrizione |
|---|---|---|
| Dimensioni batch | Intero | Dimensioni del batch da usare per il training. La dimensione del batch è il numero di esempi di addestramento usati per addestrare un singolo passaggio in avanti e indietro. In generale, si scopre che le dimensioni dei batch più grandi tendono a funzionare meglio per i set di dati più grandi. Il valore predefinito e il valore massimo per questa proprietà sono specifici di un modello di base. Una dimensione batch maggiore indica che i parametri del modello vengono aggiornati meno frequentemente, ma con varianza inferiore. |
| Moltiplicatore della frequenza di apprendimento | Numero | Moltiplicatore della frequenza di apprendimento da usare per il training. La frequenza di apprendimento di ottimizzazione è la frequenza di apprendimento originale usata per il pre-training, moltiplicato per questo valore. I tassi di apprendimento più elevati tendono a ottenere prestazioni migliori con dimensioni batch maggiori. È consigliabile provare con i valori compresi nell'intervallo da 0,02 a 0,2 per vedere quali risultati producono i risultati migliori. Una rata di apprendimento inferiore può aiutare a evitare l'overfitting. |
| Numero di periodi | Intero | Numero di periodi per cui eseguire il training del modello. Un periodo fa riferimento a un ciclo completo attraverso il set di dati di training. |
Abilitare la distribuzione automatica (facoltativo)
Per risparmiare tempo, è possibile abilitare facoltativamente la distribuzione automatica per il modello risultante. Se il training viene completato correttamente, il modello viene distribuito in base al tipo di distribuzione selezionato. Il nome dell'implementazione si basa sul nome univoco generato per il tuo modello personalizzato e sull'eventuale suffisso opzionale che potresti aver fornito in precedenza.
Nota
Per la distribuzione automatica sono attualmente supportate solo le distribuzioni standard globali e per gli sviluppatori. Nessuna di queste opzioni fornisce la residenza dei dati. Per altre informazioni, vedere la documentazione relativa ai tipi di distribuzione.
Esaminare le scelte ed eseguire il training del modello
Rivedere le scelte e quindi selezionare Invia per avviare il training del nuovo modello ottimizzato.
Controllare lo stato del modello personalizzato
Dopo aver inviato il processo di ottimizzazione, viene visualizzata una pagina con i dettagli sul modello ottimizzato. È possibile trovare lo stato e altre informazioni sul modello personalizzato nella pagina Ottimizzazione nel portale di Foundry.
Il tuo lavoro potrebbe essere in coda dietro ad altri lavori nel sistema. Il training del modello può richiedere minuti o ore, a seconda delle dimensioni del modello e del set di dati.
Generare punti di controllo
Al termine di ogni periodo di training, viene generato un checkpoint. Un checkpoint è una versione completamente funzionale di un modello che può essere distribuita e usata come modello di destinazione per i processi di ottimizzazione successivi.
I punti di controllo possono essere particolarmente utili, perché potrebbero fornire istantanee prima dell'overfitting. Al termine di un processo di ottimizzazione, sono disponibili le tre versioni più recenti del modello da distribuire. È possibile copiare i "checkpoints" tra risorse e sottoscrizioni tramite l'API REST.
Sospendere e riprendere
È possibile tenere traccia dello stato di avanzamento in entrambe le visualizzazioni di messa a punto del portale Foundry. Il processo passa attraverso gli stessi stati dei normali processi di ottimizzazione (in coda, in esecuzione, riuscito).
È anche possibile esaminare i file dei risultati durante l'esecuzione del training per visualizzare un'anteprima dello stato di avanzamento e se il training sta procedendo come previsto.
Durante il training, è possibile visualizzare le metriche e sospendere il processo in base alle esigenze. La sospensione può essere utile se le metriche non sono convergenti o se si ritiene che il modello non stia imparando al ritmo corretto. Quando si sospende un processo di training, viene creato un checkpoint distribuibile al termine delle valutazioni di sicurezza. Questo checkpoint è disponibile per implementare e utilizzare per l'inferenza, oppure è possibile riprendere il lavoro per completarlo. L'operazione di sospensione è applicabile solo per i processi addestrati per almeno un passaggio e sono in stato In esecuzione.
Analizzare il modello personalizzato
Azure OpenAI allega un file denominato results.csv a ogni job di fine-tuning dopo che è terminato. È possibile usare il file dei risultati per analizzare le prestazioni di training e convalida del modello personalizzato. L'ID file per il file di risultato è elencato per ogni modello personalizzato nella colonna ID file di risultato nel riquadro Modelli del portale Foundry. È possibile usare l'ID file per identificare e scaricare il file di risultato dal riquadro File di dati del portale foundry.
Il file di risultato è un file CSV che contiene una riga di intestazione e una riga per ogni passaggio di training eseguito dal processo di ottimizzazione. Il file di risultati contiene le colonne seguenti:
| Nome colonna | Descrizione |
|---|---|
step |
Numero della fase di addestramento. Un passaggio di addestramento rappresenta una singola esecuzione, avanti e indietro, su un batch di dati di addestramento. |
train_loss |
Perdita per il batch di addestramento. |
train_mean_token_accuracy |
Percentuale di token nel lotto di addestramento prevista correttamente dal modello. Ad esempio, se le dimensioni del batch sono impostate su 3 e i dati contengono completamenti [[1, 2], [0, 5], [4, 2]], questo valore viene impostato su 0.83 (5 di 6) se il modello ha previsto [[1, 1], [0, 5], [4, 2]]. |
valid_loss |
Perdita per il lotto di convalida. |
validation_mean_token_accuracy |
Percentuale di token nel batch di convalida che il modello ha previsto correttamente. Ad esempio, se le dimensioni del batch sono impostate su 3 e i dati contengono completamenti [[1, 2], [0, 5], [4, 2]], questo valore viene impostato su 0.83 (5 di 6) se il modello ha previsto [[1, 1], [0, 5], [4, 2]]. |
full_valid_loss |
Perdita di convalida calcolata alla fine di ogni periodo. Quando il training va bene, la perdita dovrebbe diminuire. |
full_valid_mean_token_accuracy |
Accuratezza del token media valida calcolata alla fine di ogni periodo. Quando l'addestramento va bene, la precisione del token dovrebbe aumentare. |
È anche possibile visualizzare i dati nel results.csv file come grafici nel portale Foundry. Quando si seleziona il collegamento per il modello sottoposto a training, vengono visualizzati tre grafici: perdita, accuratezza del token medio e accuratezza del token. Se sono stati forniti dati di convalida, entrambi i set di dati vengono visualizzati nello stesso tracciato.
Cerca che la perdita diminuisca nel tempo e che l'accuratezza aumenti. Se i dati di training e convalida divergono, è possibile che si verifichi un overfitting. Provare a eseguire il training con un numero minore di epoche o un moltiplicatore di tasso di apprendimento inferiore.
Distribuire un modello ottimizzato
Quando si è soddisfatti delle metriche del processo di ottimizzazione o si vuole semplicemente passare all'inferenza, è necessario distribuire il modello.
Se si esegue la distribuzione per un'ulteriore convalida, provare a eseguire la distribuzione per i test usando una distribuzione per sviluppatori.
Se si è pronti per la distribuzione per la produzione o si hanno specifiche esigenze di residenza dei dati, seguire la guida alla distribuzione.
Usare un modello distribuito e ottimizzato
Dopo aver distribuito il modello ottimizzato, è possibile usarlo come qualsiasi altro modello distribuito. È possibile usare il playground in Foundry per sperimentare il tuo nuovo deployment. È anche possibile utilizzare l'API REST per chiamare il modello personalizzato dalla propria applicazione. È anche possibile iniziare a utilizzare questo nuovo modello ottimizzato nel flusso di prompt per sviluppare l'applicazione di intelligenza artificiale generativa.
Nota
Per i modelli di chat, il messaggio di sistema usato per guidare il modello ottimizzato (sia distribuito o disponibile per i test nel playground) deve corrispondere al messaggio di sistema usato per il training. Se si usa un messaggio di sistema diverso, il modello potrebbe non funzionare come previsto.
Eseguire il perfezionamento continuo
Dopo aver creato un modello ottimizzato, è possibile continuare a perfezionare il modello nel tempo tramite un'ulteriore ottimizzazione. L'ottimizzazione continua è il processo iterativo per selezionare un modello già ottimizzato come modello di base e ottimizzarlo ulteriormente sui nuovi set di esempi di training.
Per eseguire l'ottimizzazione su un modello ottimizzato in precedenza, usare lo stesso processo descritto in Creare un modello ottimizzato. Ma invece di specificare il nome di un modello di base generico, è necessario specificare il modello già ottimizzato. Un modello personalizzato ottimizzato è simile a gpt-4o-2024-08-06.ft-d93dda6110004b4da3472d96f4dd4777-ft.
Pulisci le distribuzioni, i modelli personalizzati e i file di addestramento
Quando il modello personalizzato non è più necessario, è possibile eliminare la distribuzione e il modello. È anche possibile eliminare i file di training e convalida caricati nel servizio, se necessario.
Eliminare la distribuzione modello
Importante
Dopo aver distribuito un modello personalizzato, se in qualsiasi momento la distribuzione rimane inattiva per più di 15 giorni, la distribuzione viene eliminata. La distribuzione di un modello personalizzato è inattiva se il modello è stato distribuito più di 15 giorni fa e non sono stati effettuati completamenti di chat o chiamate API di risposta durante un periodo di 15 giorni continuo.
L'eliminazione di una distribuzione inattiva non elimina o influisce sul modello personalizzato sottostante. Il modello personalizzato può essere ridistribuibile in qualsiasi momento.
Come descritto nei prezzi dei modelli Microsoft Foundry in Azure OpenAI, ogni modello personalizzato (ottimizzato) distribuito comporta un costo di hosting orario, indipendentemente dall'esecuzione di completamenti chat o chiamate API al modello. Per altre informazioni sulla pianificazione e la gestione dei costi con Azure OpenAI, vedere Plan e gestire i costi per Azure OpenAI.
È possibile eliminare la distribuzione per il modello personalizzato nel riquadro Distribuzioni nel portale foundry. Selezionare la distribuzione da eliminare e quindi selezionare Elimina.
Eliminare il modello personalizzato
È possibile eliminare un modello personalizzato nel riquadro Modelli nel portale foundry. Selezionare il modello personalizzato da eliminare dalla scheda Modelli personalizzati e quindi selezionare Elimina.
Nota
Non è possibile eliminare un modello personalizzato se ha una distribuzione esistente. È necessario eliminare la distribuzione del modello prima di poter eliminare il modello personalizzato.
Eliminare i file di formazione
Facoltativamente, è possibile eliminare i file di training e convalida caricati per il training, insieme ai file dei risultati generati durante il training, nel riquadro Dati di gestione>e indici nel portale Foundry. Selezionare il file da eliminare e quindi selezionare Elimina.
Prerequisiti
- Leggi la guida su quando utilizzare l'ottimizzazione fine di Azure OpenAI.
- È necessaria una sottoscrizione Azure. Crearne uno gratuitamente.
- È necessaria una risorsa OpenAI Azure. Per altre informazioni, vedere Creare una risorsa e distribuire un modello con Azure OpenAI.
- Sono necessarie le librerie di Python seguenti:
os,json,requests,openai. - È necessaria la libreria di Python OpenAI.
- L'affinamento richiede il ruolo di Proprietario dell'Intelligenza Artificiale di Azure. Sebbene gli utenti di Azure AI possano addestrare (perfezionare) i modelli, solo i titolari dell'AI possono distribuirli.
- Se non si ha già accesso per visualizzare le quote e distribuire i modelli nel portale foundry, sono necessarie altre autorizzazioni.
Modelli supportati
Per verificare quali aree attualmente supportano l'ottimizzazione, vedere l'articolo sui modelli.
In alternativa, è possibile ottimizzare un modello ottimizzato in precedenza, formattato come base-model.ft-{jobid}.
Esaminare il flusso di lavoro per Python SDK
Prendetevi un momento per esaminare il flusso di lavoro di ottimizzazione per l'uso dell'SDK di Python con Azure OpenAI.
- Prepara i dati di addestramento e convalida.
- Selezionare un modello di base.
- Caricare i dati di training.
- Addestra il nuovo modello personalizzato.
- Controllare lo stato del modello personalizzato.
- Distribuire il modello personalizzato per l'uso.
- Usa il tuo modello personalizzato.
- Facoltativamente, analizzare il modello personalizzato per valutare le prestazioni e l'adattamento.
Preparare i dati di addestramento e di validazione
I set di dati di training e convalida sono costituiti da esempi di input e output per la modalità di esecuzione del modello.
I dati di training e di convalida che utilizzi devono essere formattati come documento JSON Lines (JSONL). Deve anche essere formattato nel formato di conversazione usato dall'API Chat Completions.
Oltre al formato JSONL, i file di dati di training e convalida devono essere codificati in UTF-8 e includere un indicatore di ordine byte (BOM). Ogni file deve avere dimensioni inferiori a 512 MB.
Per una procedura dettagliata sull'ottimizzazione gpt-4o-mini-2024-07-18, vedere l'esercitazione Azure OpenAI per l'ottimizzazione.
Formato di file di esempio
{"messages": [{"role": "system", "content": "Clippy is a factual chatbot that is also sarcastic."}, {"role": "user", "content": "Who discovered Antarctica?"}, {"role": "assistant", "content": "Some chaps named Fabian Gottlieb von Bellingshausen and Mikhail Lazarev, as if they don't teach that in every school!"}]}
{"messages": [{"role": "system", "content": "Clippy is a factual chatbot that is also sarcastic."}, {"role": "user", "content": "What is the biggest ocean?"}, {"role": "assistant", "content": "The Pacific Ocean. It's not like it's a small pond or anything."}]}
{"messages": [{"role": "system", "content": "Clippy is a factual chatbot that is also sarcastic."}, {"role": "user", "content": "What is the largest planet?"}, {"role": "assistant", "content": "It's called Jupiter, you might have heard of it...or not."}]}
{"messages": [{"role": "system", "content": "Clippy is a factual chatbot that is also sarcastic."}, {"role": "user", "content": "Who painted the Mona Lisa?"}, {"role": "assistant", "content": "Oh, some obscure artist named Leonardo da Vinci. Not that he is famous or anything."}]}
{"messages": [{"role": "system", "content": "Clippy is a factual chatbot that is also sarcastic."}, {"role": "user", "content": "What's the boiling point of water?"}, {"role": "assistant", "content": "Exciting fact of the day: it's 100 degrees Celsius. Life-changing, isn't it?"}]}
{"messages": [{"role": "system", "content": "Clippy is a factual chatbot that is also sarcastic."}, {"role": "user", "content": "Who wrote 'The Odyssey'?"}, {"role": "assistant", "content": "Oh, just some poet named Homer. Nothing special, really."}]}
{"messages": [{"role": "system", "content": "Clippy is a factual chatbot that is also sarcastic."}, {"role": "user", "content": "What is the largest mammal?"}, {"role": "assistant", "content": "Blue Whale. Quite a big fish, isn't it? Oh wait, it's not a fish!"}]}
{"messages": [{"role": "system", "content": "Clippy is a factual chatbot that is also sarcastic."}, {"role": "user", "content": "What's the highest mountain peak?"}, {"role": "assistant", "content": "Everest. Brace yourself, it's not a walk in the park."}]}
{"messages": [{"role": "system", "content": "Clippy is a factual chatbot that is also sarcastic."}, {"role": "user", "content": "Who invented the telephone?"}, {"role": "assistant", "content": "A guy named Alexander Graham Bell. Bet you didn't guess that one!"}]}
{"messages": [{"role": "system", "content": "Clippy is a factual chatbot that is also sarcastic."}, {"role": "user", "content": "What is the distance from Earth to the Sun?"}, {"role": "assistant", "content": "About 93 million miles. Just a quick drive, really."}]}
Formato di file chat a più turni
Sono supportati anche più turni di una conversazione in una singola riga del file di training JSONL. Per ignorare l'ottimizzazione di messaggi di assistente specifici, aggiungere la coppia chiave/valore facoltativa weight. Attualmente, weight può essere impostato su 0 o 1.
{"messages": [{"role": "system", "content": "Marv is a factual chatbot that is also sarcastic."}, {"role": "user", "content": "What's the capital/major city of France?"}, {"role": "assistant", "content": "Paris", "weight": 0}, {"role": "user", "content": "Can you be more sarcastic?"}, {"role": "assistant", "content": "Paris, as if everyone doesn't know that already.", "weight": 1}]}
{"messages": [{"role": "system", "content": "Marv is a factual chatbot that is also sarcastic."}, {"role": "user", "content": "Who wrote 'Romeo and Juliet'?"}, {"role": "assistant", "content": "William Shakespeare", "weight": 0}, {"role": "user", "content": "Can you be more sarcastic?"}, {"role": "assistant", "content": "Oh, just some guy named William Shakespeare. Ever heard of him?", "weight": 1}]}
{"messages": [{"role": "system", "content": "Marv is a factual chatbot that is also sarcastic."}, {"role": "user", "content": "How far is the Moon from Earth?"}, {"role": "assistant", "content": "384,400 kilometers", "weight": 0}, {"role": "user", "content": "Can you be more sarcastic?"}, {"role": "assistant", "content": "Around 384,400 kilometers. Give or take a few, like that really matters.", "weight": 1}]}
Completamento della chat con visione
{"messages": [{"role": "user", "content": [{"type": "text", "text": "What's in this image?"}, {"type": "image_url", "image_url": {"url": "https://raw.githubusercontent.com/MicrosoftDocs/azure-ai-docs/main/articles/ai-services/openai/media/how-to/generated-seattle.png"}}]}, {"role": "assistant", "content": "The image appears to be a watercolor painting of a city skyline, featuring tall buildings and a recognizable structure often associated with Seattle, like the Space Needle. The artwork uses soft colors and brushstrokes to create a somewhat abstract and artistic representation of the cityscape."}]}
Crea i set di dati di addestramento e convalida
Più esempi di training sono disponibili, meglio. I processi di ottimizzazione non procederanno senza almeno 10 esempi di training, ma un numero così ridotto non è sufficiente per influenzare notevolmente le risposte del modello. Una delle migliori pratiche per una corretta messa a punto consiste nel fornire centinaia, se non migliaia, di esempi di addestramento.
In generale, il raddoppio delle dimensioni del set di dati può comportare un aumento lineare della qualità del modello. Tenere tuttavia presente che gli esempi di bassa qualità possono influire negativamente sulle prestazioni. Se si esegue il training del modello su una grande quantità di dati interni senza prima selezionare solo gli esempi di qualità più elevata nel set di dati, il modello potrebbe avere prestazioni peggiori del previsto.
Caricare i dati di training
Il passaggio successivo consiste nel scegliere i dati di training preparati esistenti o caricare nuovi dati di training preparati da usare quando si personalizza il modello. Dopo aver preparato i dati di training, è possibile caricare i file nel servizio. Esistono due modi per caricare i dati di training:
Per i file di dati di grandi dimensioni, è consigliabile importare da gestione rete virtuale di Azure. I file di grandi dimensioni possono diventare instabili quando vengono caricati tramite moduli multipart perché le richieste sono atomiche e non possono essere ritentate o riprese. Per altre informazioni sulle gestione rete virtuale di Azure, vedere Che è Archiviazione BLOB di Azure?.
L'esempio di Python seguente carica i file di training e convalida locali usando Python SDK e recupera gli ID file restituiti:
import os
from openai import OpenAI
# Load the OpenAI client
client = OpenAI(
api_key = os.getenv("AZURE_OPENAI_API_KEY"),
base_url="https://YOUR-RESOURCE-NAME.openai.azure.com/openai/v1/"
)
# Upload the training and validation dataset files to Microsoft Foundry with the SDK.
training_file_name = 'training_set.jsonl'
validation_file_name = 'validation_set.jsonl'
training_response = client.files.create(file=open(training_file_name, "rb"), purpose="fine-tune")
validation_response = client.files.create(file=open(validation_file_name, "rb"), purpose="fine-tune")
training_file_id = training_response.id
validation_file_id = validation_response.id
print("Training file ID:", training_file_id)
print("Validation file ID:", validation_file_id)
Creare un modello personalizzato
Dopo aver caricato i file di training e convalida, si è pronti per avviare il processo di ottimizzazione.
Il codice Python seguente illustra un esempio di come creare un nuovo processo di ottimizzazione tramite Python SDK:
response = client.fine_tuning.jobs.create(
training_file=training_file_id,
validation_file=validation_file_id,
model="gpt-4.1-2025-04-14", # Enter the base model name.
suffix="my-model", # Custom suffix for naming the resulting model. Note that in Microsoft Foundry, the model can't contain dot/period characters.
seed=105, # Seed parameter controls reproducibility of the fine-tuning job. If you don't specify a seed, one is generated automatically.
extra_body={ "trainingType": "GlobalStandard" } # Change this value to your preferred training type. Other options are `Standard` and `Developer`.
)
job_id = response.id
# You can use the job ID to monitor the status of the fine-tuning job.
# The fine-tuning job takes some time to start and finish.
print("Job ID:", response.id)
print(response.model_dump_json(indent=2))
Nota
È consigliabile usare il livello Standard globale per il tipo di training, perché offre risparmi sui costi e usa la capacità globale per tempi di accodamento più rapidi. Tuttavia, copia i dati e i pesi all'esterno dell'area di risorse corrente. Se la residenza dei dati è un requisito, usare un modello che supporti il training di livello Standard.
È anche possibile passare parametri facoltativi aggiuntivi, ad esempio gli iperparametri, per assumere un maggiore controllo del processo di ottimizzazione. Per il training iniziale, è consigliabile usare le impostazioni predefinite automatiche presenti senza specificare questi parametri.
Gli iperparametri attualmente supportati per l'ottimizzazione con supervisione sono:
| Nome | Digitare | Descrizione |
|---|---|---|
batch_size |
Intero | Dimensioni del batch da usare per il training. La dimensione del batch è il numero di esempi di addestramento usati per addestrare un singolo passaggio in avanti e indietro. In generale, si scopre che le dimensioni dei batch più grandi tendono a funzionare meglio per i set di dati più grandi. Il valore predefinito e il valore massimo per questa proprietà sono specifici di un modello di base. Una dimensione batch maggiore indica che i parametri del modello vengono aggiornati meno frequentemente, ma con varianza inferiore. |
learning_rate_multiplier |
Numero | Moltiplicatore della frequenza di apprendimento da usare per il training. La frequenza di apprendimento di ottimizzazione è la frequenza di apprendimento originale usata per il pre-training, moltiplicato per questo valore. I tassi di apprendimento più elevati tendono a ottenere prestazioni migliori con dimensioni batch maggiori. È consigliabile sperimentare con i valori nell'intervallo di 0.02 per 0.2 vedere quali sono i risultati migliori. Una rata di apprendimento inferiore può aiutare a evitare l'overfitting. |
n_epochs |
Intero | Numero di periodi per cui eseguire il training del modello. Un periodo fa riferimento a un ciclo completo attraverso il set di dati di training. |
seed |
Intero | Il seme che controlla la riproducibilità del lavoro. Il passaggio degli stessi parametri di seed e job dovrebbe produrre gli stessi risultati, ma in rari casi potrebbe differire. Se non si specifica un seme, ne viene generato uno. |
Per impostare iperparametri personalizzati con la versione 1.x dell'API Python OpenAI, specificarli come parte di method:
client.fine_tuning.jobs.create(
training_file="file-abc123",
model="gpt-4.1-2025-04-14",
suffix="my-model",
seed=105,
method={
"type": "supervised", # In this case, the job is using supervised fine-tuning.
"supervised": {
"hyperparameters": {
"n_epochs": 2
}
}
},
extra_body={ "trainingType": "GlobalStandard" }
)
Per informazioni sugli iperparametri supportati per gli altri metodi di personalizzazione, vedere la guida per l'ottimizzazione delle preferenze dirette e la guida per l'ottimizzazione per rinforzo.
Tipo di training
Selezionare il livello di training in base al caso d'uso e al budget:
Standard: L'addestramento ha luogo nella regione della risorsa Foundry corrente e garantisce la residenza dei dati. Ideale per i carichi di lavoro in cui i dati devono rimanere in un'area specifica.
Globale: offre prezzi più convenienti rispetto a Standard usando capacità oltre l'area corrente. I dati e i pesi vengono copiati nell'area in cui si verifica l'addestramento. Ideale se la residenza dei dati non è una restrizione e si vogliono tempi di coda più rapidi.
Sviluppatore (anteprima): offre risparmi significativi sui costi usando la capacità inattiva per la formazione. Non esistono garanzie di latenza o dell'accordo sul livello di servizio, quindi i processi in questo livello potrebbero essere sospesi e ripresi automaticamente in un secondo momento. Non esistono garanzie per la residenza dei dati. Ideale per la sperimentazione e i carichi di lavoro sensibili ai prezzi.
import openai
from openai import AzureOpenAI
base_uri = "https://<ACCOUNT-NAME>.services.ai.azure.com"
api_key = "<API-KEY>"
api_version = "2025-04-01-preview"
client = AzureOpenAI(
azure_endpoint=base_uri,
api_key=api_key,
api_version=api_version
)
try:
client.fine_tuning.jobs.create(
model="gpt-4.1-mini",
training_file="<FILE-ID>",
extra_body={"trainingType": "developerTier"}
)
except openai.APIConnectionError as e:
print("The server could not be reached")
print(e.__cause__) # An underlying exception, likely raised within httpx.
except openai.RateLimitError as e:
print("A 429 status code was received; we should back off a bit.")
except openai.APIStatusError as e:
print("Another non-200-range status code was received")
print(e.status_code)
print(e.response)
print(e.body)
Controllare lo stato del processo di ottimizzazione
response = client.fine_tuning.jobs.retrieve(job_id)
print("Job ID:", response.id)
print("Status:", response.status)
print(response.model_dump_json(indent=2))
Elencare gli eventi di ottimizzazione
Per esaminare i singoli eventi di ottimizzazione generati durante il training, eseguire il comando seguente. Prima di eseguire il comando, potrebbe essere necessario aggiornare la libreria client OpenAI alla versione più recente usando pip install openai --upgrade.
response = client.fine_tuning.jobs.list_events(fine_tuning_job_id=job_id, limit=10)
print(response.model_dump_json(indent=2))
Elencare i checkpoint
Il completamento di ogni periodo di training genera un checkpoint. Un checkpoint è una versione completamente funzionale di un modello che può essere distribuita e usata come modello di destinazione per i processi di ottimizzazione successivi. I punti di controllo possono essere particolarmente utili, perché potrebbero fornire istantanee prima dell'overfitting.
Al termine di un processo di ottimizzazione, sono disponibili le tre versioni più recenti del modello da distribuire. Il modello perfezionato rappresenta l'ultima epoca. Le due epoche precedenti sono disponibili come checkpoint.
È possibile eseguire il comando seguente per recuperare l'elenco di checkpoint associati a un singolo processo di ottimizzazione. Prima di eseguire il comando, potrebbe essere necessario aggiornare la libreria client OpenAI alla versione più recente usando pip install openai --upgrade.
response = client.fine_tuning.jobs.checkpoints.list(job_id)
print(response.model_dump_json(indent=2))
Analizzare il modello personalizzato
Azure OpenAI allega un file denominato results.csv a ogni job di fine-tuning dopo che è terminato. È possibile usare il file di risultati per analizzare le prestazioni di training e convalida del modello personalizzato. L'ID file per il file di risultato è elencato per ogni modello personalizzato. È possibile usare l'SDK di Python per recuperare l'ID file e scaricare il file di risultato per l'analisi.
Nell'esempio di Python seguente viene recuperato l'ID file del primo file di risultato collegato al processo di ottimizzazione per il modello personalizzato. Usa quindi l'SDK di Python per scaricare il file nella directory di lavoro corrente per l'analisi.
# Retrieve the file ID of the first result file from the fine-tuning job
# for the customized model.
response = client.fine_tuning.jobs.retrieve(job_id)
if response.status == 'succeeded':
result_file_id = response.result_files[0]
retrieve = client.files.retrieve(result_file_id)
# Download the result file.
print(f'Downloading result file: {result_file_id}')
with open(retrieve.filename, "wb") as file:
result = client.files.content(result_file_id).read()
file.write(result)
Il file di risultato è un file CSV che contiene una riga di intestazione e una riga per ogni passaggio di training eseguito dal processo di ottimizzazione. Il file di risultati contiene le colonne seguenti:
| Nome colonna | Descrizione |
|---|---|
step |
Numero della fase di addestramento. Un passaggio di addestramento rappresenta una singola esecuzione, avanti e indietro, su un batch di dati di addestramento. |
train_loss |
Perdita per il batch di addestramento. |
train_mean_token_accuracy |
Percentuale di token nel lotto di addestramento prevista correttamente dal modello. Ad esempio, se le dimensioni del batch sono impostate su 3 e i dati contengono completamenti [[1, 2], [0, 5], [4, 2]], questo valore viene impostato su 0.83 (5 di 6) se il modello ha previsto [[1, 1], [0, 5], [4, 2]]. |
valid_loss |
Perdita per il lotto di convalida. |
validation_mean_token_accuracy |
Percentuale di token nel batch di convalida che il modello ha previsto correttamente. Ad esempio, se le dimensioni del batch sono impostate su 3 e i dati contengono completamenti [[1, 2], [0, 5], [4, 2]], questo valore viene impostato su 0.83 (5 di 6) se il modello ha previsto [[1, 1], [0, 5], [4, 2]]. |
full_valid_loss |
Perdita di convalida calcolata alla fine di ogni periodo. Quando il training va bene, la perdita dovrebbe diminuire. |
full_valid_mean_token_accuracy |
Accuratezza del token media valida calcolata alla fine di ogni periodo. Quando l'addestramento va bene, la precisione del token dovrebbe aumentare. |
È anche possibile visualizzare i dati nel file results.csv come tracciati nel portale di Microsoft Foundry. Quando si seleziona il collegamento per il modello sottoposto a training, vengono visualizzati tre grafici: perdita, accuratezza del token medio e accuratezza del token. Se sono stati forniti dati di convalida, entrambi i set di dati vengono visualizzati nello stesso tracciato.
Cerca che la perdita diminuisca nel tempo e che l'accuratezza aumenti. Se i dati di training e convalida divergono, è possibile che si verifichi un overfitting. Provare a eseguire il training con un numero minore di epoche o un moltiplicatore di tasso di apprendimento inferiore.
Distribuire un modello ottimizzato
Quando si è soddisfatti delle metriche del processo di ottimizzazione o si vuole semplicemente passare all'inferenza, è necessario distribuire il modello.
Se si esegue la distribuzione per un'ulteriore convalida, provare a eseguire la distribuzione per i test usando una distribuzione per sviluppatori.
A differenza dei comandi sdk precedenti, è necessario usare l'API del piano di controllo per la distribuzione. Questa attività richiede un'autorizzazione separata, un percorso API diverso e una versione diversa dell'API.
| Variabile | Definizione |
|---|---|
token |
Token di autorizzazione. Esistono diversi modi per generare un token di autorizzazione. Il metodo più semplice per i test iniziali consiste nell'aprire Azure Cloud Shell dal portale di Azure.
az account get-access-tokenEseguire quindi . È possibile usare questo token come token di autorizzazione temporaneo per il test dell'API. È consigliabile archiviare questo token in una nuova variabile di ambiente. |
subscription |
L'ID di sottoscrizione per la risorsa Azure OpenAI associata. |
resource_group |
Nome del gruppo di risorse per la risorsa Azure OpenAI. |
resource_name |
Il nome della risorsa Azure OpenAI. |
model_deployment_name |
Nome personalizzato per la tua nuova distribuzione del modello affinato. Questo nome viene utilizzato nel codice durante le chiamate di completamento della chat. |
fine_tuned_model |
Modello ottimizzato. Recuperare questo valore dai risultati del processo di ottimizzazione nel passaggio precedente. Sembra che sia gpt-4.1-2025-04-14.ft-b044a9d3cf9c4228b5d393567f693b83. È necessario aggiungere il valore al deploy_data codice JSON. In alternativa, è possibile distribuire un checkpoint passando l'ID del checkpoint, visualizzato nel formato ftchkpt-e559c011ecc04fc68eaa339d8227d02d. |
import json
import os
import requests
token= os.getenv("<TOKEN>")
subscription = "<YOUR_SUBSCRIPTION_ID>"
resource_group = "<YOUR_RESOURCE_GROUP_NAME>"
resource_name = "<YOUR_AZURE_OPENAI_RESOURCE_NAME>"
model_deployment_name ="gpt-41-ft" # Custom deployment name that you use to reference the model when making inference calls.
deploy_params = {'api-version': "2024-10-01"} # Control plane API version rather than the data plane API for this call
deploy_headers = {'Authorization': 'Bearer {}'.format(token), 'Content-Type': 'application/json'}
deploy_data = {
"sku": {"name": "standard", "capacity": 1},
"properties": {
"model": {
"format": "OpenAI",
"name": <"fine_tuned_model">, # Retrieve this value from the previous call; it looks like gpt-4.1-2025-04-14.ft-b044a9d3cf9c4228b5d393567f693b83
"version": "1"
}
}
}
deploy_data = json.dumps(deploy_data)
request_url = f'https://management.azure.com/subscriptions/{subscription}/resourceGroups/{resource_group}/providers/Microsoft.CognitiveServices/accounts/{resource_name}/deployments/{model_deployment_name}'
print('Creating a new deployment...')
r = requests.put(request_url, params=deploy_params, headers=deploy_headers, data=deploy_data)
print(r)
print(r.reason)
print(r.json())
Per informazioni sulla distribuzione tra aree e su come usare il modello distribuito, vedere Usare il modello distribuito ottimizzato.
Se si è pronti per la distribuzione per la produzione o si hanno specifiche esigenze di residenza dei dati, seguire la guida alla distribuzione.
Eseguire il perfezionamento continuo
Dopo aver creato un modello ottimizzato, è possibile continuare a perfezionare il modello nel tempo tramite un'ulteriore ottimizzazione. L'ottimizzazione continua è il processo iterativo per selezionare un modello già ottimizzato come modello di base e ottimizzarlo ulteriormente sui nuovi set di esempi di training. L'ottimizzazione continua è supportata solo per i modelli OpenAI.
Per eseguire l'ottimizzazione su un modello ottimizzato in precedenza, usare lo stesso processo descritto in Creare un modello personalizzato. Invece di specificare il nome di un modello di base generico, è necessario specificare l'ID del modello ottimizzato. L'ID del modello ottimizzato è simile a gpt-4.1-2025-04-14.ft-5fd1918ee65d4cd38a5dcf6835066ed7.
response = client.fine_tuning.jobs.create(
training_file=training_file_id,
validation_file=validation_file_id,
model="gpt-4.1-2025-04-14.ft-5fd1918ee65d4cd38a5dcf6835066ed7"
)
job_id = response.id
# You can use the job ID to monitor the status of the fine-tuning job.
# The fine-tuning job takes some time to start and finish.
print("Job ID:", response.id)
print("Status:", response.id)
print(response.model_dump_json(indent=2))
È anche consigliabile includere il suffix parametro per distinguere più facilmente le iterazioni del modello ottimizzato. Il suffix parametro accetta una stringa ed è impostato per identificare il modello ottimizzato. Con l'API Python OpenAI, è possibile aggiungere una stringa di un massimo di 18 caratteri al nome del modello ottimizzato.
Se non si è certi dell'ID del modello ottimizzato esistente, è possibile trovare queste informazioni nella pagina Models di Microsoft Foundry. In alternativa, è possibile generare un list di modelli per una risorsa OpenAI Azure usando l'API REST.
Pulire le implementazioni, i modelli personalizzati e i file di addestramento
Quando il modello personalizzato non è più necessario, è possibile eliminare la distribuzione e il modello. È anche possibile eliminare i file di training e convalida caricati nel servizio, se necessario.
Eliminare la distribuzione modello
Importante
Dopo aver distribuito un modello personalizzato, se in qualsiasi momento la distribuzione rimane inattiva per più di 15 giorni, la distribuzione viene eliminata. La distribuzione di un modello personalizzato è inattiva se il modello è stato distribuito più di 15 giorni fa e non sono stati effettuati completamenti di chat o chiamate API di risposta durante un periodo di 15 giorni continuo.
L'eliminazione di una distribuzione inattiva non elimina o influisce sul modello personalizzato sottostante. Il modello personalizzato può essere ridistribuibile in qualsiasi momento.
Come descritto nei prezzi dei modelli Microsoft Foundry in Azure OpenAI, ogni modello personalizzato (ottimizzato) distribuito comporta un costo di hosting orario, indipendentemente dall'esecuzione di completamenti chat o chiamate API al modello. Per altre informazioni sulla pianificazione e la gestione dei costi con Azure OpenAI, vedere Plan e gestire i costi per Azure OpenAI.
È possibile usare uno di questi metodi per eliminare la distribuzione per il modello personalizzato:
Eliminare il modello personalizzato
È possibile eliminare il modello personalizzato usando Foundry.
Nota
Non è possibile eliminare un modello personalizzato se ha una distribuzione esistente. È necessario eliminare la distribuzione del modello prima di poter eliminare il modello personalizzato.
Eliminare i file di formazione
Facoltativamente, è possibile eliminare i file di training e convalida caricati per il training e i file di risultato generati durante il training dalla sottoscrizione openAI Azure. È possibile usare i metodi seguenti per eliminare i file di training, convalida e risultato:
L'esempio di Python seguente usa l'SDK di Python per eliminare i file di training, convalida e risultato per il modello personalizzato:
print('Checking for existing uploaded files.')
results = []
# Get the complete list of uploaded files in your subscription.
files = openai.File.list().data
print(f'Found {len(files)} total uploaded files in the subscription.')
# Enumerate all uploaded files. Extract the IDs for the
# files with file names that match your training dataset file and
# validation dataset file.
for item in files:
if item["filename"] in [training_file_name, validation_file_name, result_file_name]:
results.append(item["id"])
print(f'Found {len(results)} already uploaded files that match our files')
# Enumerate the file IDs for your files and delete each file.
print(f'Deleting already uploaded files.')
for id in results:
openai.File.delete(sid = id)
Prerequisiti
- Leggi la guida su quando utilizzare l'ottimizzazione fine di Azure OpenAI.
- È necessaria una sottoscrizione Azure. Crearne uno gratuitamente.
- È necessaria una risorsa OpenAI Azure. Per altre informazioni, vedere Creare una risorsa e distribuire un modello con Azure OpenAI.
- L'affinamento richiede il ruolo di Proprietario dell'Intelligenza Artificiale di Azure. Sebbene gli utenti di Azure AI possano addestrare (perfezionare) i modelli, solo i titolari dell'AI possono distribuirli.
- Se non si ha già accesso per visualizzare le quote e distribuire i modelli nel portale foundry, sono necessarie altre autorizzazioni.
Modelli supportati
Per verificare quali aree attualmente supportano l'ottimizzazione, vedere l'articolo sui modelli.
In alternativa, è possibile ottimizzare un modello ottimizzato in precedenza, formattato come base-model.ft-{jobid}.
Esaminare il flusso di lavoro per l'API REST
Prenditi un momento per esaminare il flusso di lavoro di messa a punto per l'uso dell'API REST e Python con Azure OpenAI:
- Prepara i dati di addestramento e convalida.
- Selezionare un modello di base.
- Caricare i dati di training.
- Addestra il nuovo modello personalizzato.
- Controllare lo stato del modello personalizzato.
- Distribuire il modello personalizzato per l'uso.
- Usa il tuo modello personalizzato.
- Facoltativamente, analizzare il modello personalizzato per valutare le prestazioni e l'adattamento.
Preparare i dati di addestramento e di validazione
I set di dati di training e convalida sono costituiti da esempi di input e output per la modalità di esecuzione del modello.
I dati di training e di convalida che utilizzi devono essere formattati come documento JSON Lines (JSONL). Deve anche essere formattato nel formato di conversazione usato dall'API Chat Completions.
Oltre al formato JSONL, i file di dati di training e convalida devono essere codificati in UTF-8 e includere un indicatore di ordine byte (BOM). Ogni file deve avere dimensioni inferiori a 512 MB.
Per una procedura dettagliata sull'ottimizzazione gpt-4o-mini-2024-07-18, vedere l'esercitazione Azure OpenAI per l'ottimizzazione.
Formato di file di esempio
{"messages": [{"role": "system", "content": "Clippy is a factual chatbot that is also sarcastic."}, {"role": "user", "content": "Who discovered Antarctica?"}, {"role": "assistant", "content": "Some chaps named Fabian Gottlieb von Bellingshausen and Mikhail Lazarev, as if they don't teach that in every school!"}]}
{"messages": [{"role": "system", "content": "Clippy is a factual chatbot that is also sarcastic."}, {"role": "user", "content": "What is the biggest ocean?"}, {"role": "assistant", "content": "The Pacific Ocean. It's not like it's a small pond or anything."}]}
{"messages": [{"role": "system", "content": "Clippy is a factual chatbot that is also sarcastic."}, {"role": "user", "content": "What is the largest planet?"}, {"role": "assistant", "content": "It's called Jupiter, you might have heard of it...or not."}]}
{"messages": [{"role": "system", "content": "Clippy is a factual chatbot that is also sarcastic."}, {"role": "user", "content": "Who painted the Mona Lisa?"}, {"role": "assistant", "content": "Oh, some obscure artist named Leonardo da Vinci. Not that he is famous or anything."}]}
{"messages": [{"role": "system", "content": "Clippy is a factual chatbot that is also sarcastic."}, {"role": "user", "content": "What's the boiling point of water?"}, {"role": "assistant", "content": "Exciting fact of the day: it's 100 degrees Celsius. Life-changing, isn't it?"}]}
{"messages": [{"role": "system", "content": "Clippy is a factual chatbot that is also sarcastic."}, {"role": "user", "content": "Who wrote 'The Odyssey'?"}, {"role": "assistant", "content": "Oh, just some poet named Homer. Nothing special, really."}]}
{"messages": [{"role": "system", "content": "Clippy is a factual chatbot that is also sarcastic."}, {"role": "user", "content": "What is the largest mammal?"}, {"role": "assistant", "content": "Blue Whale. Quite a big fish isn't it? Oh wait, it's not a fish!"}]}
{"messages": [{"role": "system", "content": "Clippy is a factual chatbot that is also sarcastic."}, {"role": "user", "content": "What's the highest mountain peak?"}, {"role": "assistant", "content": "Everest. Brace yourself, it's not a walk in the park."}]}
{"messages": [{"role": "system", "content": "Clippy is a factual chatbot that is also sarcastic."}, {"role": "user", "content": "Who invented the telephone?"}, {"role": "assistant", "content": "A guy named Alexander Graham Bell. Bet you didn't guess that one!"}]}
{"messages": [{"role": "system", "content": "Clippy is a factual chatbot that is also sarcastic."}, {"role": "user", "content": "What is the distance from Earth to the Sun?"}, {"role": "assistant", "content": "About 93 million miles. Just a quick drive, really."}]}
Formato di file chat a più turni
Sono supportati anche più turni di una conversazione in una singola riga del file di training JSONL. Per ignorare l'ottimizzazione di messaggi di assistente specifici, aggiungere la coppia chiave/valore facoltativa weight. Attualmente, weight può essere impostato su 0 o 1.
{"messages": [{"role": "system", "content": "Marv is a factual chatbot that is also sarcastic."}, {"role": "user", "content": "What's the capital/major city of France?"}, {"role": "assistant", "content": "Paris", "weight": 0}, {"role": "user", "content": "Can you be more sarcastic?"}, {"role": "assistant", "content": "Paris, as if everyone doesn't know that already.", "weight": 1}]}
{"messages": [{"role": "system", "content": "Marv is a factual chatbot that is also sarcastic."}, {"role": "user", "content": "Who wrote 'Romeo and Juliet'?"}, {"role": "assistant", "content": "William Shakespeare", "weight": 0}, {"role": "user", "content": "Can you be more sarcastic?"}, {"role": "assistant", "content": "Oh, just some guy named William Shakespeare. Ever heard of him?", "weight": 1}]}
{"messages": [{"role": "system", "content": "Marv is a factual chatbot that is also sarcastic."}, {"role": "user", "content": "How far is the Moon from Earth?"}, {"role": "assistant", "content": "384,400 kilometers", "weight": 0}, {"role": "user", "content": "Can you be more sarcastic?"}, {"role": "assistant", "content": "Around 384,400 kilometers. Give or take a few, like that really matters.", "weight": 1}]}
Completamento della chat con visione
{"messages": [{"role": "user", "content": [{"type": "text", "text": "What's in this image?"}, {"type": "image_url", "image_url": {"url": "https://raw.githubusercontent.com/MicrosoftDocs/azure-ai-docs/main/articles/ai-services/openai/media/how-to/generated-seattle.png"}}]}, {"role": "assistant", "content": "The image appears to be a watercolor painting of a city skyline, featuring tall buildings and a recognizable structure often associated with Seattle, like the Space Needle. The artwork uses soft colors and brushstrokes to create a somewhat abstract and artistic representation of the cityscape."}]}
Crea i set di dati di addestramento e convalida
Più esempi di training sono disponibili, meglio. I processi di ottimizzazione non procederanno senza almeno 10 esempi di training, ma un numero così ridotto non è sufficiente per influenzare notevolmente le risposte del modello. Una delle migliori pratiche per una corretta messa a punto consiste nel fornire centinaia, se non migliaia, di esempi di addestramento.
In generale, il raddoppio delle dimensioni del set di dati può comportare un aumento lineare della qualità del modello. Tenere tuttavia presente che gli esempi di bassa qualità possono influire negativamente sulle prestazioni. Se si esegue il training del modello su una grande quantità di dati interni senza prima selezionare solo gli esempi di qualità più elevata nel set di dati, il modello potrebbe avere prestazioni peggiori del previsto.
Caricare i dati di training
Il passaggio successivo consiste nel scegliere i dati di training preparati esistenti o caricare nuovi dati di training preparati da usare quando si personalizza il modello. Dopo aver preparato i dati di training, è possibile caricare i file nel servizio. Esistono due modi per caricare i dati di training:
Per i file di dati di grandi dimensioni, è consigliabile importare da gestione rete virtuale di Azure. I file di grandi dimensioni possono diventare instabili quando vengono caricati tramite moduli multipart perché le richieste sono atomiche e non possono essere ritentate o riprese. Per altre informazioni sulle gestione rete virtuale di Azure, vedere Che è Archiviazione BLOB di Azure?.
Caricare i dati di training
curl -X POST $AZURE_OPENAI_ENDPOINT/openai/v1/files \
-H "Content-Type: multipart/form-data" \
-H "api-key: $AZURE_OPENAI_API_KEY" \
-F "purpose=fine-tune" \
-F "file=@C:\\fine-tuning\\training_set.jsonl;type=application/json"
Caricare i dati di convalida
curl -X POST $AZURE_OPENAI_ENDPOINT/openai/v1/files \
-H "Content-Type: multipart/form-data" \
-H "api-key: $AZURE_OPENAI_API_KEY" \
-F "purpose=fine-tune" \
-F "file=@C:\\fine-tuning\\validation_set.jsonl;type=application/json"
Creare un modello personalizzato
Dopo aver caricato i file di training e convalida, si è pronti per avviare il processo di ottimizzazione. Il codice seguente illustra un esempio di come creare un nuovo processo di ottimizzazione tramite l'API REST.
Questo esempio include il passaggio del parametro seed. Il seme controlla la riproducibilità del processo. Il passaggio degli stessi parametri di seed e job dovrebbe produrre gli stessi risultati, ma in rari casi potrebbe differire. Se non si specifica un seme, ne viene generato uno.
curl -X POST $AZURE_OPENAI_ENDPOINT/openai/v1/fine_tuning/jobs \
-H "Content-Type: application/json" \
-H "api-key: $AZURE_OPENAI_API_KEY" \
-d '{
"model": "gpt-4.1-2025-04-14",
"training_file": "<TRAINING_FILE_ID>",
"validation_file": "<VALIDATION_FILE_ID>",
"seed": 105
}'
Se si ottimizza un modello che supporta il training globale, è possibile specificare il tipo di training usando l'argomento extra_body denominato e usando api-version=2025-04-01-preview:
curl -X POST $AZURE_OPENAI_ENDPOINT/openai/fine_tuning/jobs?api-version=2025-04-01-preview \
-H "Content-Type: application/json" \
-H "api-key: $AZURE_OPENAI_API_KEY" \
-d '{
"model": "gpt-4.1-2025-04-14",
"training_file": "<TRAINING_FILE_ID>",
"validation_file": "<VALIDATION_FILE_ID>",
"seed": 105,
"trainingType": "globalstandard"
}'
È anche possibile passare parametri facoltativi aggiuntivi, ad esempio gli iperparametri , per assumere un maggiore controllo del processo di ottimizzazione. Per il training iniziale, è consigliabile usare le impostazioni predefinite automatiche presenti senza specificare questi parametri.
Gli iperparametri attualmente supportati per l'ottimizzazione con supervisione sono:
| Nome | Digitare | Descrizione |
|---|---|---|
batch_size |
Intero | Dimensioni del batch da usare per il training. La dimensione del batch è il numero di esempi di addestramento usati per addestrare un singolo passaggio in avanti e indietro. In generale, si scopre che le dimensioni dei batch più grandi tendono a funzionare meglio per i set di dati più grandi. Il valore predefinito e il valore massimo per questa proprietà sono specifici di un modello di base. Una dimensione batch maggiore indica che i parametri del modello vengono aggiornati meno frequentemente, ma con varianza inferiore. |
learning_rate_multiplier |
Numero | Moltiplicatore della frequenza di apprendimento da usare per il training. La frequenza di apprendimento di ottimizzazione è la frequenza di apprendimento originale usata per il pre-training, moltiplicato per questo valore. I tassi di apprendimento più elevati tendono a ottenere prestazioni migliori con dimensioni batch maggiori. È consigliabile sperimentare con i valori nell'intervallo di 0.02 per 0.2 vedere quali sono i risultati migliori. Una rata di apprendimento inferiore può aiutare a evitare l'overfitting. |
n_epochs |
Intero | Numero di periodi per cui eseguire il training del modello. Un periodo fa riferimento a un ciclo completo attraverso il set di dati di training. |
seed |
Intero | Il seme che controlla la riproducibilità del lavoro. |
Per informazioni sugli iperparametri supportati per gli altri metodi di personalizzazione, vedere la guida per l'ottimizzazione delle preferenze dirette e la guida per l'ottimizzazione per rinforzo.
Selezionare un tipo di training
Selezionare il livello di training in base al caso d'uso e al budget:
Standard: L'addestramento ha luogo nella regione della risorsa Foundry corrente e garantisce la residenza dei dati. Ideale per i carichi di lavoro in cui i dati devono rimanere in un'area specifica.
Globale: offre prezzi più convenienti rispetto a Standard usando capacità oltre l'area corrente. I dati e i pesi vengono copiati nell'area in cui si verifica l'addestramento. Ideale se la residenza dei dati non è una restrizione e si vogliono tempi di coda più rapidi.
Sviluppatore (anteprima): offre risparmi significativi sui costi usando la capacità inattiva per la formazione. Non esistono garanzie di latenza o dell'accordo sul livello di servizio, quindi i processi in questo livello potrebbero essere sospesi e ripresi automaticamente in un secondo momento. Non esistono garanzie di residenza dei dati. Ideale per la sperimentazione e i carichi di lavoro sensibili ai prezzi.
curl -X POST "https://<ACCOUNT-NAME>.openai.azure.com/openai/fine_tuning/jobs?api-version=2025-04-01-preview" -H "Content-Type: application/json" -H "api-key: <API-KEY>" -d "{"model": "gpt-4.1", "training_file": "<FILE_ID>", "hyperparameters": {"prompt_loss_weight": 0.1}, "trainingType": "developerTier"}"
Controllare lo stato del modello personalizzato
Dopo aver avviato un processo di ottimizzazione, il completamento può richiedere del tempo. Il tuo lavoro potrebbe essere in coda dietro ad altri lavori nel sistema. Il training del modello può richiedere minuti o ore, a seconda delle dimensioni del modello e del set di dati.
L'esempio seguente usa l'API REST per controllare lo stato del processo di ottimizzazione. Nell'esempio vengono recuperate informazioni sul lavoro utilizzando l'ID processo restituito dall'esempio precedente.
curl -X GET $AZURE_OPENAI_ENDPOINT/openai/v1/fine_tuning/jobs/<YOUR-JOB-ID> \
-H "api-key: $AZURE_OPENAI_API_KEY"
Elencare gli eventi di ottimizzazione
Per esaminare i singoli eventi di ottimizzazione generati durante il training:
curl -X POST $AZURE_OPENAI_ENDPOINT/openai/v1/fine_tuning/jobs/{fine_tuning_job_id}/events \
-H "Content-Type: application/json" \
-H "api-key: $AZURE_OPENAI_API_KEY"
Elencare i checkpoint
Il completamento di ogni periodo di training genera un checkpoint. Un checkpoint è una versione completamente funzionale di un modello che può essere distribuita e usata come modello di destinazione per i processi di ottimizzazione successivi. I punti di controllo possono essere particolarmente utili, perché potrebbero fornire istantanee prima dell'overfitting.
Al termine di un processo di ottimizzazione, sono disponibili le tre versioni più recenti del modello da distribuire. Il modello perfezionato rappresenta l'ultima epoca. Le due epoche precedenti sono disponibili come checkpoint.
È possibile eseguire il comando seguente per recuperare l'elenco dei checkpoint associati a un singolo processo di ottimizzazione:
curl -X POST $AZURE_OPENAI_ENDPOINT/openai/v1/fine_tuning/jobs/{fine_tuning_job_id}/checkpoints \
-H "Content-Type: application/json" \
-H "api-key: $AZURE_OPENAI_API_KEY"
Sospendere e riprendere
Durante il training, è possibile visualizzare i log e le metriche e sospendere il processo in base alle esigenze. La sospensione può essere utile se le metriche non sono convergenti o se si ritiene che il modello non stia imparando al ritmo corretto.
Dopo aver sospeso il processo di training e aver completato le valutazioni di sicurezza, viene creato un checkpoint distribuibile. Questo checkpoint è disponibile per implementare e utilizzare per l'inferenza, oppure è possibile riprendere il lavoro per completarlo.
L'operazione di sospensione è applicabile solo per i processi addestrati per almeno un passaggio e sono in stato In esecuzione.
Pausa
curl -X POST $AZURE_OPENAI_ENDPOINT/openai/v1/fine_tuning/jobs/{fine_tuning_job_id}/pause \
-H "Content-Type: application/json" \
-H "api-key: $AZURE_OPENAI_API_KEY"
Riassumere
curl -X POST $AZURE_OPENAI_ENDPOINT/openai/v1/fine_tuning/jobs/{fine_tuning_job_id}/resume \
-H "Content-Type: application/json" \
-H "api-key: $AZURE_OPENAI_API_KEY"
Copiare un modello (anteprima)
È ora possibile copiare un modello con checkpoint ottimizzato da un'area a un'altra, in sottoscrizioni diverse, ma all'interno dello stesso tenant. Il processo usa API dedicate per garantire trasferimenti efficienti e sicuri. Questa funzionalità è attualmente disponibile solo con l'API e non tramite il portale foundry.
Dopo aver copiato il modello dall'area A all'area B, è possibile ottimizzare continuamente il modello nell'area B e distribuire il modello da questa posizione.
Nota
L'eliminazione del checkpoint del modello nell'area di origine non comporta l'eliminazione del modello nell'area di destinazione. Per eliminare il modello in entrambe le aree dopo la copia, è necessario distribuire il modello separatamente in ogni area.
Prerequisiti
- La risorsa o l'account di destinazione deve avere almeno un processo di ottimizzazione.
- La risorsa o l'account di destinazione non devono disabilitare l'accesso alla rete pubblica (almeno durante l'invio della richiesta di copia).
- È possibile copiare solo nell'account di destinazione, se l'account che avvia la copia dispone di autorizzazioni sufficienti per accedere all'account di destinazione.
Configurare le autorizzazioni
- Creare un'identità gestita assegnata dall'utente.
- Assegna il ruolo utente Azure AI alla tua identità gestita assegnata dall'utente sulla risorsa o sull'account di destinazione.
- Assegna l'identità gestita assegnata dall'utente all'account della risorsa di origine.
Copiare il modello
curl --request POST \
--url 'https://<aoai-resource>.openai.azure.com/openai/v1/fine_tuning/jobs/<ftjob>/checkpoints/<checkpoint-name>/copy' \
--header 'Content-Type: application/json' \
--header 'api-key: <api-key>' \
--header 'aoai-copy-ft-checkpoints: preview' \
--data '{
"destinationResourceId": "<resourceId>",
"region": "<region>"
}'
Poiché si tratta di un'operazione a lungo termine, controllare lo stato della copia del modello finemente ottimizzato specificando l'ID del checkpoint dell'account di origine usato nella chiamata POST.
Controllare lo stato della copia
curl --request GET \
--url 'https://<aoai-resource>.openai.azure.com//openai/v1/fine_tuning/jobs/<ftjob>/checkpoints/<checkpoint-name>/copy' \
--header 'Content-Type: application/json' \
--header 'api-key: <api-key>' \
--header 'aoai-copy-ft-checkpoints: preview'
Nota
Quando si copia un checkpoint da un account di origine, lo stesso nome del checkpoint viene mantenuto nell'account di destinazione. Assicurarsi di usare esattamente questo nome per l'ottimizzazione, la distribuzione o qualsiasi altra operazione nell'account di destinazione. Questo checkpoint non viene visualizzato nell'interfaccia utente o nell'API list checkpoints .
Analizzare il modello personalizzato
Azure OpenAI allega un file denominato results.csv a ogni job di fine-tuning dopo che è terminato. È possibile usare il file di risultati per analizzare le prestazioni di training e convalida del modello personalizzato. L'ID file per il file di risultato è elencato per ogni modello personalizzato. È possibile usare l'API REST per recuperare l'ID file e scaricare il file di risultato per l'analisi.
Nell'esempio seguente Python viene usata l'API REST per recuperare l'ID file del primo file di risultato allegato al processo di ottimizzazione per il modello personalizzato. Scarica quindi il file nella directory di lavoro per l'analisi.
curl -X GET "$AZURE_OPENAI_ENDPOINT/openai/v1/fine_tuning/jobs/<JOB_ID>" \
-H "api-key: $AZURE_OPENAI_API_KEY")
curl -X GET "$AZURE_OPENAI_ENDPOINT/openai/v1/files/<RESULT_FILE_ID>/content" \
-H "api-key: $AZURE_OPENAI_API_KEY" > <RESULT_FILENAME>
Il file di risultato è un file CSV che contiene una riga di intestazione e una riga per ogni passaggio di training eseguito dal processo di ottimizzazione. Il file di risultati contiene le colonne seguenti:
| Nome colonna | Descrizione |
|---|---|
step |
Numero della fase di addestramento. Un passaggio di addestramento rappresenta una singola esecuzione, avanti e indietro, su un batch di dati di addestramento. |
train_loss |
Perdita per il batch di addestramento. |
train_mean_token_accuracy |
Percentuale di token nel lotto di addestramento prevista correttamente dal modello. Ad esempio, se le dimensioni del batch sono impostate su 3 e i dati contengono completamenti [[1, 2], [0, 5], [4, 2]], questo valore viene impostato su 0.83 (5 di 6) se il modello ha previsto [[1, 1], [0, 5], [4, 2]]. |
valid_loss |
Perdita per il lotto di convalida. |
validation_mean_token_accuracy |
Percentuale di token nel batch di convalida che il modello ha previsto correttamente. Ad esempio, se le dimensioni del batch sono impostate su 3 e i dati contengono completamenti [[1, 2], [0, 5], [4, 2]], questo valore viene impostato su 0.83 (5 di 6) se il modello ha previsto [[1, 1], [0, 5], [4, 2]]. |
full_valid_loss |
Perdita di convalida calcolata alla fine di ogni periodo. Quando il training va bene, la perdita dovrebbe diminuire. |
full_valid_mean_token_accuracy |
Accuratezza del token media valida calcolata alla fine di ogni periodo. Quando l'addestramento va bene, la precisione del token dovrebbe aumentare. |
È anche possibile visualizzare i dati nel results.csv file come grafici nel portale Foundry. Quando si seleziona il collegamento per il modello sottoposto a training, vengono visualizzati tre grafici: perdita, accuratezza del token medio e accuratezza del token. Se sono stati forniti dati di convalida, entrambi i set di dati vengono visualizzati nello stesso tracciato.
Cerca che la perdita diminuisca nel tempo e che l'accuratezza aumenti. Se i dati di training e convalida divergono, è possibile che si verifichi un overfitting. Provare a eseguire il training con un numero minore di epoche o un moltiplicatore di tasso di apprendimento inferiore.
Distribuire un modello ottimizzato
Quando si è soddisfatti delle metriche del processo di ottimizzazione o si vuole semplicemente passare all'inferenza, è necessario distribuire il modello.
Se si esegue la distribuzione per un'ulteriore convalida, provare a eseguire la distribuzione per i test usando una distribuzione per sviluppatori.
Se si è pronti per la distribuzione per la produzione o si hanno specifiche esigenze di residenza dei dati, seguire la guida alla distribuzione.
| Variabile | Definizione |
|---|---|
token |
Token di autorizzazione. Esistono diversi modi per generare un token di autorizzazione. Il metodo più semplice per i test iniziali consiste nell'aprire Azure Cloud Shell dal portale di Azure.
az account get-access-tokenEseguire quindi . È possibile usare questo token come token di autorizzazione temporaneo per il test dell'API. È consigliabile archiviare questo token in una nuova variabile di ambiente. |
subscription |
L'ID di sottoscrizione per la risorsa Azure OpenAI associata. |
resource_group |
Nome del gruppo di risorse per la risorsa Azure OpenAI. |
resource_name |
Il nome della risorsa Azure OpenAI. |
model_deployment_name |
Nome personalizzato per la tua nuova distribuzione del modello affinato. Questo nome viene utilizzato nel codice durante le chiamate di completamento della chat. |
fine_tuned_model |
Modello ottimizzato. Recuperare questo valore dai risultati del processo di ottimizzazione nel passaggio precedente. Sembra che sia gpt-4.1-2025-04-14.ft-b044a9d3cf9c4228b5d393567f693b83. È necessario aggiungere il valore al deploy_data codice JSON. In alternativa, è possibile distribuire un checkpoint passando l'ID del checkpoint, visualizzato nel formato ftchkpt-e559c011ecc04fc68eaa339d8227d02d. |
curl -X POST "https://management.azure.com/subscriptions/<SUBSCRIPTION>/resourceGroups/<RESOURCE_GROUP>/providers/Microsoft.CognitiveServices/accounts/<RESOURCE_NAME>/deployments/<MODEL_DEPLOYMENT_NAME>?api-version=2024-10-21" \
-H "Authorization: Bearer <TOKEN>" \
-H "Content-Type: application/json" \
-d '{
"sku": {"name": "standard", "capacity": 1},
"properties": {
"model": {
"format": "OpenAI",
"name": "<FINE_TUNED_MODEL>",
"version": "1"
}
}
}'
Per informazioni sulla distribuzione tra aree e su come usare il modello distribuito, vedere Usare il modello distribuito ottimizzato.
Eseguire il perfezionamento continuo
Dopo aver creato un modello ottimizzato, è possibile continuare a perfezionare il modello nel tempo tramite un'ulteriore ottimizzazione. L'ottimizzazione continua è il processo iterativo per selezionare un modello già ottimizzato come modello di base e ottimizzarlo ulteriormente sui nuovi set di esempi di training. L'ottimizzazione continua è supportata solo per i modelli OpenAI.
Per eseguire l'ottimizzazione su un modello ottimizzato in precedenza, usare lo stesso processo descritto in Creare un modello personalizzato. Invece di specificare il nome di un modello di base generico, è necessario specificare l'ID del modello ottimizzato. L'ID del modello ottimizzato è simile a gpt-4.1-2025-04-14.ft-5fd1918ee65d4cd38a5dcf6835066ed7.
curl -X POST $AZURE_OPENAI_ENDPOINT/openai/v1/fine_tuning/jobs \
-H "Content-Type: application/json" \
-H "api-key: $AZURE_OPENAI_API_KEY" \
-d '{
"model": "gpt-4.1-2025-04-14.ft-5fd1918ee65d4cd38a5dcf6835066ed7",
"training_file": "<TRAINING_FILE_ID>",
"validation_file": "<VALIDATION_FILE_ID>",
"suffix": "<additional text used to help identify fine-tuned models>"
}'
È anche consigliabile includere il suffix parametro per distinguere più facilmente le iterazioni del modello ottimizzato. Il suffix parametro accetta una stringa ed è impostato per identificare il modello ottimizzato. Il suffisso può contenere fino a 40 caratteri (a da , z a A, Z a 09, -e _) aggiunti al nome del modello ottimizzato.
Se non si è certi dell'ID del modello ottimizzato esistente, è possibile trovare queste informazioni nella pagina Modelli di Foundry. In alternativa, è possibile generare un list di modelli per una risorsa OpenAI Azure usando l'API REST.
Pulire le implementazioni, i modelli personalizzati e i file di addestramento
Quando il modello personalizzato non è più necessario, è possibile eliminare la distribuzione e il modello. È anche possibile eliminare i file di training e convalida caricati nel servizio, se necessario.
Eliminare la distribuzione modello
È possibile usare uno di questi metodi per eliminare la distribuzione per il modello personalizzato:
Eliminare il modello personalizzato
È possibile eliminare il modello personalizzato usando Foundry.
Nota
Non è possibile eliminare un modello personalizzato se ha una distribuzione esistente. È necessario eliminare la distribuzione del modello prima di poter eliminare il modello personalizzato.
Eliminare i file di formazione
Facoltativamente, è possibile eliminare i file di training e convalida caricati per il training e i file di risultato generati durante il training dalla sottoscrizione openAI Azure. È possibile usare Foundry per eliminare i file.