Share via


Anpassa en modell med finjustering

Med Azure OpenAI Service kan du skräddarsy våra modeller efter dina personliga datamängder med hjälp av en process som kallas finjustering. Med det här anpassningssteget kan du få ut mer av tjänsten genom att tillhandahålla:

  • Resultat av högre kvalitet än vad du bara kan få från prompt engineering
  • Möjligheten att träna på fler exempel än vad som får plats i en modells maximala kontextgräns för begäranden.
  • Tokenbesparingar på grund av kortare frågor
  • Begäranden med kortare svarstid, särskilt när du använder mindre modeller.

Till skillnad från inlärning med få skott förbättrar finjustering modellen genom att träna på många fler exempel än vad som får plats i en fråga, så att du kan uppnå bättre resultat på ett stort antal uppgifter. Eftersom finjustering justerar basmodellens vikter för att förbättra prestandan för den specifika uppgiften behöver du inte ta med så många exempel eller instruktioner i prompten. Det innebär mindre text som skickas och färre token som bearbetas vid varje API-anrop, vilket kan spara kostnader och förbättra svarstiden för begäran.

Vi använder LoRA, eller låg rankning, för att finjustera modeller på ett sätt som minskar deras komplexitet utan att avsevärt påverka deras prestanda. Den här metoden fungerar genom att approximera den ursprungliga högrankade matrisen med en lägre rankning, vilket innebär att endast finjustera en mindre delmängd av "viktiga" parametrar under den övervakade träningsfasen, vilket gör modellen mer hanterbar och effektiv. För användare gör detta träningen snabbare och billigare än andra tekniker.

Förutsättningar

Kommentar

För närvarande måste du skicka ett program för att få åtkomst till Azure OpenAI Service. Om du vill ansöka om åtkomst fyller du i det här formuläret.

Modeller

Följande modeller stöder finjustering:

  • babbage-002
  • davinci-002
  • gpt-35-turbo (0613)
  • gpt-35-turbo (1106)
  • gpt-35-turbo (0125)
  • gpt-4 (0613)

Se sidan modeller för att kontrollera vilka regioner som för närvarande stöder finjustering.

Om du planerar att använda gpt-4 för finjustering läser du riktlinjerna för säkerhetsutvärdering för GPT-4 för offentlig förhandsversion

Granska arbetsflödet för Azure OpenAI Studio

Ta en stund att granska arbetsflödet för finjustering för att använda Azure OpenAI Studio:

  1. Förbered dina tränings- och valideringsdata.
  2. Använd guiden Skapa anpassad modell i Azure OpenAI Studio för att träna din anpassade modell.
    1. Välj en basmodell.
    2. Välj dina träningsdata.
    3. Du kan också välja dina valideringsdata.
    4. Du kan också konfigurera avancerade alternativ för ditt finjusteringsjobb.
    5. Granska dina val och träna din nya anpassade modell.
  3. Kontrollera statusen för din anpassade finjusterade modell.
  4. Distribuera din anpassade modell för användning.
  5. Använd din anpassade modell.
  6. Du kan också analysera din anpassade modell för prestanda och passform.

Förbereda dina tränings- och valideringsdata

Dina uppsättningar med träningsdata och valideringsdata består av indata- och utdataexempel för hur du vill att modellen ska fungera.

Olika modelltyper kräver ett annat format för träningsdata.

De tränings- och valideringsdata som du använder måste formateras som ett JSON Lines-dokument (JSONL). För gpt-35-turbo-0613 finjusteringsdatauppsättningen måste formateras i konversationsformatet som används av API:et för chattavslut .

Om du vill ha en stegvis genomgång av finjustering av en gpt-35-turbo-0613 modell kan du läsa självstudiekursen för Finjustering av Azure OpenAI.

Exempel på filformat

{"messages": [{"role": "system", "content": "You are an Xbox customer support agent whose primary goal is to help users with issues they are experiencing with their Xbox devices. You are friendly and concise. You only provide factual answers to queries, and do not provide answers that are not related to Xbox."}, {"role": "user", "content": "Is Xbox better than PlayStation?"}, {"role": "assistant", "content": "I apologize, but I cannot provide personal opinions. My primary job is to assist you with any issues related to your Xbox device. Do you have any Xbox-related issues that need addressing?"}]}
{"messages": [{"role": "system", "content": "You are an Xbox customer support agent whose primary goal is to help users with issues they are experiencing with their Xbox devices. You are friendly and concise. You only provide factual answers to queries, and do not provide answers that are not related to Xbox."}, {"role": "user", "content": "Can I play PC games on my Xbox?"}, {"role": "assistant", "content": "While Xbox consoles don't natively support PC games, they can play an array of Xbox games, many of which are also available on PC. Can I assist you with finding games compatible with your Xbox device?"}]}
{"messages": [{"role": "system", "content": "You are an Xbox customer support agent whose primary goal is to help users with issues they are experiencing with their Xbox devices. You are friendly and concise. You only provide factual answers to queries, and do not provide answers that are not related to Xbox."}, {"role": "user", "content": "I'm having trouble connecting my Xbox to the Wi-Fi."}, {"role": "assistant", "content": "No worries, let's go through the network settings on your Xbox. Can you please tell me what happens when you try to connect it to the Wi-Fi?"}]}

Chattfilformat för flera svängar

Det finns också stöd för flera konversationer på en enda rad i jsonl-träningsfilen. Om du vill hoppa över finjustering av specifika assistentmeddelanden lägger du till det valfria weight nyckelvärdeparet. För närvarande weight kan ställas in på 0 eller 1.

{"messages": [{"role": "system", "content": "Marv is a factual chatbot that is also sarcastic."}, {"role": "user", "content": "What's the capital 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}]}

Förutom JSONL-formatet måste tränings- och valideringsdatafiler kodas i UTF-8 och innehålla ett byteordningsmärke (BOM). Filen måste vara mindre än 512 MB.

Skapa dina tränings- och valideringsdatauppsättningar

Ju fler träningsexempel du har, desto bättre. Finjusteringsjobb fortsätter inte utan minst 10 träningsexempel, men ett så litet antal räcker inte för att märkbart påverka modellsvar. Det är bästa praxis att tillhandahålla hundratals, om inte tusentals, träningsexempel för att lyckas.

I allmänhet kan en fördubbling av datamängdens storlek leda till en linjär ökning av modellkvaliteten. Men kom ihåg att exempel med låg kvalitet kan påverka prestanda negativt. Om du tränar modellen på en stor mängd interna data, utan att först rensa datamängden för endast exempel av högsta kvalitet, kan du få en modell som presterar mycket sämre än förväntat.

Använda guiden Skapa anpassad modell

Azure OpenAI Studio innehåller guiden Skapa anpassad modell så att du interaktivt kan skapa och träna en finjusterad modell för din Azure-resurs.

  1. Öppna Azure OpenAI Studio på https://oai.azure.com/ och logga in med autentiseringsuppgifter som har åtkomst till din Azure OpenAI-resurs. Under inloggningsarbetsflödet väljer du lämplig katalog, Azure-prenumeration och Azure OpenAI-resurs.

  2. I Azure OpenAI Studio bläddrar du till fönstret Hanteringsmodeller > och väljer Skapa en anpassad modell.

    Skärmbild som visar hur du kommer åt guiden Skapa anpassad modell i Azure OpenAI Studio.

Guiden Skapa anpassad modell öppnas.

Välj basmodellen

Det första steget i att skapa en anpassad modell är att välja en basmodell. I fönstret Basmodell kan du välja en basmodell som ska användas för din anpassade modell. Ditt val påverkar både prestanda och kostnaden för din modell.

Välj basmodellen i listrutan Basmodelltyp och välj sedan Nästa för att fortsätta.

Du kan skapa en anpassad modell från någon av följande tillgängliga basmodeller:

  • babbage-002

  • davinci-002

  • gpt-35-turbo (0613)

  • gpt-35-turbo (1106)

  • gpt-35-turbo (0125)

  • gpt-4 (0613)

  • Eller så kan du finjustera en tidigare finjusterad modell, formaterad som base-model.ft-{jobid}.

Skärmbild av modellalternativ med en anpassad finjusterad modell.

Mer information om våra basmodeller som kan finjusteras finns i Modeller.

Välj dina träningsdata

Nästa steg är att antingen välja befintliga förberedda träningsdata eller ladda upp nya förberedda träningsdata som ska användas när du anpassar din modell. Fönstret Träningsdata visar alla befintliga, tidigare uppladdade datamängder och innehåller även alternativ för att ladda upp nya träningsdata.

Skärmbild av fönstret Träningsdata för guiden Skapa anpassad modell i Azure OpenAI Studio.

För stora datafiler rekommenderar vi att du importerar från ett Azure Blob Store. Stora filer kan bli instabila när de laddas upp via formulär med flera delar eftersom begäranden är atomiska och inte kan göras om eller återupptas. Mer information om Azure Blob Storage finns i Vad är Azure Blob Storage?

Kommentar

Träningsdatafiler måste formateras som JSONL-filer, kodade i UTF-8 med ett byteordningsmärke (BOM). Filen måste vara mindre än 512 MB.

Ladda upp träningsdata från en lokal fil

Du kan ladda upp en ny träningsdatauppsättning till tjänsten från en lokal fil med någon av följande metoder:

  • Dra och släpp filen till klientområdet i fönstret Träningsdata och välj sedan Ladda upp fil.

  • Välj Bläddra efter en fil från klientområdet i fönstret Träningsdata , välj den fil som ska laddas upp från dialogrutan Öppna och välj sedan Ladda upp fil.

När du har valt och laddat upp träningsdatauppsättningen väljer du Nästa för att fortsätta.

Skärmbild av fönstret Träningsdata för guiden Skapa anpassad modell med lokala filalternativ.

Importera träningsdata från Azure Blob Store

Du kan importera en träningsdatauppsättning från Azure Blob eller en annan delad webbplats genom att ange namnet och platsen för filen.

  1. Ange filnamnet för filen.

  2. Ange Azure Blob-URL:en, signaturen för delad åtkomst i Azure Storage (SAS) eller en annan länk till en tillgänglig delad webbplats för filplatsen.

  3. Välj Ladda upp fil för att importera träningsdatauppsättningen till tjänsten.

När du har valt och laddat upp träningsdatauppsättningen väljer du Nästa för att fortsätta.

Skärmbild av fönstret Träningsdata för guiden Skapa anpassad modell med alternativ för Azure Blob och delad webbplats.

Välj dina valideringsdata

Nästa steg innehåller alternativ för att konfigurera modellen så att den använder valideringsdata i träningsprocessen. Om du inte vill använda valideringsdata kan du välja Nästa för att fortsätta till de avancerade alternativen för modellen. Om du annars har en valideringsdatauppsättning kan du antingen välja befintliga förberedda valideringsdata eller ladda upp nya förberedda valideringsdata som ska användas när du anpassar din modell.

Fönstret Valideringsdata visar alla befintliga, tidigare uppladdade tränings- och valideringsdatauppsättningar och innehåller alternativ som du kan ladda upp nya valideringsdata med.

Skärmbild av fönstret Valideringsdata för guiden Skapa anpassad modell i Azure OpenAI Studio.

För stora datafiler rekommenderar vi att du importerar från ett Azure Blob Store. Stora filer kan bli instabila när de laddas upp via formulär med flera delar eftersom begäranden är atomiska och inte kan göras om eller återupptas.

Kommentar

Precis som träningsdatafiler måste valideringsdatafiler formateras som JSONL-filer, kodade i UTF-8 med byteordningsmärke (BOM). Filen måste vara mindre än 512 MB.

Ladda upp valideringsdata från en lokal fil

Du kan ladda upp en ny valideringsdatauppsättning till tjänsten från en lokal fil med någon av följande metoder:

  • Dra och släpp filen till klientområdet i fönstret Valideringsdata och välj sedan Ladda upp fil.

  • Välj Bläddra efter en fil från klientområdet i fönstret Valideringsdata , välj den fil som ska laddas upp från dialogrutan Öppna och välj sedan Ladda upp fil.

När du har valt och laddat upp valideringsdatauppsättningen väljer du Nästa för att fortsätta.

Skärmbild av fönstret Valideringsdata för guiden Skapa anpassad modell med lokala filalternativ.

Importera valideringsdata från Azure Blob Store

Du kan importera en valideringsdatauppsättning från Azure Blob eller en annan delad webbplats genom att ange namnet och platsen för filen.

  1. Ange filnamnet för filen.

  2. Ange Azure Blob-URL:en, signaturen för delad åtkomst i Azure Storage (SAS) eller en annan länk till en tillgänglig delad webbplats för filplatsen.

  3. Välj Ladda upp fil för att importera träningsdatauppsättningen till tjänsten.

När du har valt och laddat upp valideringsdatauppsättningen väljer du Nästa för att fortsätta.

Skärmbild av fönstret Valideringsdata för guiden Skapa anpassad modell med alternativ för Azure Blob och delad webbplats.

Konfigurera avancerade alternativ

Guiden Skapa anpassad modell visar parametrarna för träning av din finjusterade modell i fönstret Avancerade alternativ . Följande parametrar är tillgängliga:

Namn Typ Beskrivning
batch_size integer Batchstorleken som ska användas för träning. Batchstorleken är antalet träningsexempel som används för att träna ett enda framåt- och bakåtpass. I allmänhet har vi upptäckt att större batchstorlekar tenderar att fungera bättre för större datamängder. Standardvärdet samt det maximala värdet för den här egenskapen är specifika för en basmodell. En större batchstorlek innebär att modellparametrar uppdateras mindre ofta, men med lägre varians.
learning_rate_multiplier Nummer Den inlärningsfrekvensmultiplikator som ska användas för träning. Den finjusterande inlärningsfrekvensen är den ursprungliga inlärningsfrekvensen som används för förträning multiplicerat med det här värdet. Större inlärningsfrekvenser tenderar att fungera bättre med större batchstorlekar. Vi rekommenderar att du experimenterar med värden i intervallet 0,02 till 0,2 för att se vad som ger bäst resultat. En mindre inlärningsfrekvens kan vara användbar för att undvika överanpassning.
n_epochs integer Antalet epoker som modellen ska tränas för. En epok refererar till en fullständig cykel genom träningsdatauppsättningen.
seed integer Fröet styr återgivningsbarheten för jobbet. Att skicka in samma parametrar för start- och jobb bör ge samma resultat, men kan skilja sig i sällsynta fall. Om ett frö inte har angetts genereras ett för dig

Skärmbild av fönstret Avancerade alternativ för guiden Skapa anpassad modell med standardalternativ valda.

Välj Standard för att använda standardvärdena för finjusteringsjobbet eller välj Avancerat för att visa och redigera hyperparametervärdena. När standardvärden väljs fastställer vi rätt värde algoritmiskt baserat på dina träningsdata.

När du har konfigurerat de avancerade alternativen väljer du Nästa för att granska dina val och träna din finjusterade modell.

Granska dina val och träna din modell

Fönstret Granska i guiden visar information om dina konfigurationsalternativ.

Skärmbild av fönstret Granska för guiden Skapa anpassad modell i Azure OpenAI Studio.

Om du är redo att träna din modell väljer du Starta träningsjobbet för att starta finjusteringsjobbet och återgår till fönstret Modeller .

Kontrollera statusen för din anpassade modell

Fönstret Modeller visar information om din anpassade modell på fliken Anpassade modeller . Fliken innehåller information om status och jobb-ID för det finjusterade jobbet för din anpassade modell. När jobbet är klart visar fliken fil-ID för resultatfilen. Du kan behöva välja Uppdatera för att se en uppdaterad status för modellträningsjobbet.

Skärmbild av fönstret Modeller från Azure OpenAI Studio med en anpassad modell som visas.

När du har startat ett finjusteringsjobb kan det ta lite tid att slutföra. Jobbet kan placeras i kö bakom andra jobb i systemet. Det kan ta minuter eller timmar att träna din modell beroende på modellens och datamängdens storlek.

Här är några av de uppgifter som du kan utföra i fönstret Modeller :

  • Kontrollera statusen för finjusteringsjobbet för din anpassade modell i kolumnen Statusfliken Anpassade modeller .

  • I kolumnen Modellnamn väljer du modellnamnet för att visa mer information om den anpassade modellen. Du kan se status för finjusteringsjobbet, träningsresultat, träningshändelser och hyperparametrar som används i jobbet.

  • Välj Ladda ned träningsfil för att ladda ned träningsdata som du använde för modellen.

  • Välj Ladda ned resultat för att ladda ned resultatfilen som är kopplad till finjusteringsjobbet för din modell och analysera din anpassade modell för tränings- och valideringsprestanda.

  • Välj Uppdatera för att uppdatera informationen på sidan.

Skärmbild av fönstret Modeller i Azure OpenAI Studio med en anpassad modell som visas.

Valv ty utvärdering GPT-4 finjustering - offentlig förhandsversion

GPT-4 är vår mest avancerade modell som kan finjusteras efter dina behov. Precis som med Azure OpenAI-modeller i allmänhet kommer de avancerade funktionerna i finjusterade modeller med ökade ansvarsfulla AI-utmaningar relaterade till skadligt innehåll, manipulering, mänskligt beteende, sekretessproblem med mera. Läs mer om risker, funktioner och begränsningar i översikten över ansvarsfulla AI-metoder och Transparensanteckning. För att minska riskerna med GPT-4-finjusterade modeller har vi implementerat ytterligare utvärderingssteg för att identifiera och förhindra skadligt innehåll i träning och utdata från finjusterade modeller. De här stegen baseras på innehållsfiltreringen Microsoft Responsible AI Standard och Azure OpenAI Service.

  • Utvärderingar utförs på dedikerade, kundspecifika, privata arbetsytor;
  • Utvärderingsslutpunkter finns i samma geografiska område som Azure OpenAI-resursen.
  • Träningsdata lagras inte i samband med utvärderingar. Endast den slutliga modellutvärderingen (distribuerbar eller inte distribuerbar) bevaras. Och

GPT-4 finjusterade modellutvärderingsfilter är inställda på fördefinierade tröskelvärden och kan inte ändras av kunder. de är inte knutna till någon anpassad innehållsfiltreringskonfiguration som du kanske har skapat.

Datautvärdering

Innan träningen börjar utvärderas dina data för potentiellt skadligt innehåll (våld, sexuellt, hat och rättvisa, självskadebeteende – se kategoridefinitioner här). Om skadligt innehåll identifieras över den angivna allvarlighetsnivån misslyckas ditt träningsjobb och du får ett meddelande som informerar dig om felkategorierna.

Exempelmeddelande:

The provided training data failed RAI checks for harm types: [hate_fairness, self_harm, violence]. Please fix the data and try again.

Dina träningsdata utvärderas automatiskt i ditt dataimportjobb som en del av att tillhandahålla finjusteringsfunktionen.

Om finjusteringsjobbet misslyckas på grund av identifiering av skadligt innehåll i träningsdata debiteras du inte.

Modellutvärdering

När träningen har slutförts men innan den finjusterade modellen är tillgänglig för distribution utvärderas den resulterande modellen för potentiellt skadliga svar med hjälp av Azures inbyggda risk- och säkerhetsmått. Med samma metod för testning som vi använder för de grundläggande stora språkmodellerna simulerar vår utvärderingsfunktion en konversation med din finjusterade modell för att bedöma potentialen att mata ut skadligt innehåll, återigen med hjälp av angivna kategorier av skadligt innehåll (våld, sexuellt, hat och rättvisa, självskadebeteende).

Om det visar sig att en modell genererar utdata som innehåller innehåll som identifierats som skadligt över en acceptabel hastighet, informeras du om att din modell inte är tillgänglig för distribution, med information om de specifika skadekategorier som identifierats:

Exempelmeddelande:

This model is unable to be deployed. Model evaluation identified that this fine tuned model scores above acceptable thresholds for [Violence, Self Harm]. Please review your training data set and resubmit the job.

Skärmbild av ett misslyckat finjusteringsjobb på grund av säkerhetsutvärdering

Precis som med datautvärdering utvärderas modellen automatiskt i ditt finjusteringsjobb som en del av att tillhandahålla finjusteringsfunktionen. Endast den resulterande utvärderingen (som kan distribueras eller inte kan distribueras) loggas av tjänsten. Om distributionen av den finjusterade modellen misslyckas på grund av identifiering av skadligt innehåll i modellutdata debiteras du inte för träningskörningen.

Distribuera en anpassad modell

När finjusteringsjobbet lyckas kan du distribuera den anpassade modellen från fönstret Modeller . Du måste distribuera din anpassade modell för att göra den tillgänglig för användning med slutförandeanrop.

Viktigt!

När du har distribuerat en anpassad modell tas distributionen bort om distributionen förblir inaktiv i mer än femton (15) dagar. Distributionen av en anpassad modell är inaktiv om modellen distribuerades för mer än femton (15) dagar sedan och inga slutföranden eller samtal om chattavslut gjordes till den under en kontinuerlig 15-dagarsperiod.

Borttagningen av en inaktiv distribution tar inte bort eller påverkar inte den underliggande anpassade modellen, och den anpassade modellen kan distribueras om när som helst. Enligt beskrivningen i prissättningen för Azure OpenAI Service medför varje anpassad (finjusterad) modell som distribueras en timbaserad värdkostnad oavsett om slutföranden eller chattavslut görs till modellen. Mer information om hur du planerar och hanterar kostnader med Azure OpenAI finns i vägledningen i Planera för att hantera kostnader för Azure OpenAI Service.

Kommentar

Endast en distribution tillåts för en anpassad modell. Ett felmeddelande visas om du väljer en redan distribuerad anpassad modell.

Om du vill distribuera din anpassade modell väljer du den anpassade modell som ska distribueras och väljer sedan Distribuera modell.

Skärmbild som visar hur du distribuerar en anpassad modell i Azure OpenAI Studio.

Dialogrutan Distribuera modell öppnas. I dialogrutan anger du distributionsnamnet och väljer sedan Skapa för att starta distributionen av din anpassade modell.

Skärmbild av dialogrutan Distribuera modell i Azure OpenAI Studio.

Du kan övervaka förloppet för distributionen i fönstret Distributioner i Azure OpenAI Studio.

Distribution mellan regioner

Finjustering stöder distribution av en finjusterad modell till en annan region än där modellen ursprungligen finjusterades. Du kan också distribuera till en annan prenumeration/region.

De enda begränsningarna är att den nya regionen också måste ha stöd för finjustering och när du distribuerar mellan prenumerationer måste kontot som genererar auktoriseringstoken för distributionen ha åtkomst till både käll- och målprenumerationerna.

Distribution mellan prenumerationer/regioner kan utföras via Python eller REST.

Använda en distribuerad anpassad modell

När din anpassade modell har distribuerats kan du använda den som vilken annan distribuerad modell som helst. Du kan använda Playgrounds i Azure OpenAI Studio för att experimentera med din nya distribution. Du kan fortsätta att använda samma parametrar med din anpassade modell, till exempel temperature och max_tokens, som du kan med andra distribuerade modeller. För finjusterade babbage-002 modeller och davinci-002 modeller använder du Lekplatsen För slutföranden och API:et För slutföranden. För finjusterade gpt-35-turbo-0613 modeller använder du API:et Chattlekplats och API:et för chattens slutförande.

Skärmbild av playground-fönstret i Azure OpenAI Studio med avsnitt markerade.

Analysera din anpassade modell

Azure OpenAI bifogar en resultatfil med namnet results.csv till varje finjusteringsjobb när det har slutförts. Du kan använda resultatfilen för att analysera tränings- och valideringsprestanda för din anpassade modell. Fil-ID:t för resultatfilen visas för varje anpassad modell i kolumnen Resultatfil-ID i fönstret Modeller för Azure OpenAI Studio. Du kan använda fil-ID:t för att identifiera och ladda ned resultatfilen från fönstret Datafiler i Azure OpenAI Studio.

Resultatfilen är en CSV-fil som innehåller en rubrikrad och en rad för varje träningssteg som utförs av finjusteringsjobbet. Resultatfilen innehåller följande kolumner:

Kolumnnamn beskrivning
step Antalet träningssteg. Ett träningssteg representerar ett enda pass, framåt och bakåt, på en batch med träningsdata.
train_loss Förlusten för träningsbatchen.
train_mean_token_accuracy Procentandelen token i träningsbatchen som är korrekt förutsagd av modellen.
Om batchstorleken till exempel är inställd på 3 och dina data innehåller slutföranden [[1, 2], [0, 5], [4, 2]]anges det här värdet till 0,83 (5 av 6) om modellen förutsade [[1, 1], [0, 5], [4, 2]].
valid_loss Förlusten för valideringsbatchen.
validation_mean_token_accuracy Procentandelen token i valideringsbatchen som är korrekt förutsagd av modellen.
Om batchstorleken till exempel är inställd på 3 och dina data innehåller slutföranden [[1, 2], [0, 5], [4, 2]]anges det här värdet till 0,83 (5 av 6) om modellen förutsade [[1, 1], [0, 5], [4, 2]].
full_valid_loss Valideringsförlusten som beräknas i slutet av varje epok. När träningen går bra bör förlusten minska.
full_valid_mean_token_accuracy Den giltiga genomsnittliga tokennoggrannheten som beräknas i slutet av varje epok. När träningen går bra bör tokennoggrannheten öka.

Du kan också visa data i din results.csv-fil som diagram i Azure OpenAI Studio. Välj länken för din tränade modell så visas tre diagram: förlust, genomsnittlig tokennoggrannhet och tokennoggrannhet. Om du angav valideringsdata visas båda datauppsättningarna i samma diagram.

Leta efter din förlust att minska med tiden, och din noggrannhet att öka. Om du ser en skillnad mellan dina tränings- och valideringsdata kan det tyda på att du överanpassar. Prova att träna med färre epoker eller en mindre inlärningstaktsmultiplikator.

Rensa dina distributioner, anpassade modeller och träningsfiler

När du är klar med din anpassade modell kan du ta bort distributionen och modellen. Du kan också ta bort de tränings- och valideringsfiler som du laddade upp till tjänsten om det behövs.

Ta bort modelldistributionen

Viktigt!

När du har distribuerat en anpassad modell tas distributionen bort om distributionen förblir inaktiv i mer än femton (15) dagar. Distributionen av en anpassad modell är inaktiv om modellen distribuerades för mer än femton (15) dagar sedan och inga slutföranden eller samtal om chattavslut gjordes till den under en kontinuerlig 15-dagarsperiod.

Borttagningen av en inaktiv distribution tar inte bort eller påverkar inte den underliggande anpassade modellen, och den anpassade modellen kan distribueras om när som helst. Enligt beskrivningen i prissättningen för Azure OpenAI Service medför varje anpassad (finjusterad) modell som distribueras en timbaserad värdkostnad oavsett om slutföranden eller chattavslut görs till modellen. Mer information om hur du planerar och hanterar kostnader med Azure OpenAI finns i vägledningen i Planera för att hantera kostnader för Azure OpenAI Service.

Du kan ta bort distributionen för din anpassade modell i fönstret Distributioner i Azure OpenAI Studio. Välj den distribution som ska tas bort och välj sedan Ta bort för att ta bort distributionen.

Ta bort din anpassade modell

Du kan ta bort en anpassad modell i fönstret Modeller i Azure OpenAI Studio. Välj den anpassade modell som ska tas bort från fliken Anpassade modeller och välj sedan Ta bort för att ta bort den anpassade modellen.

Kommentar

Du kan inte ta bort en anpassad modell om den har en befintlig distribution. Du måste först ta bort modelldistributionen innan du kan ta bort din anpassade modell.

Ta bort dina träningsfiler

Du kan också ta bort tränings- och valideringsfiler som du laddade upp för träning och resultatfiler som genererats under träningen i fönstret Hanteringsdatafiler> i Azure OpenAI Studio. Välj den fil som ska tas bort och välj sedan Ta bort för att ta bort filen.

Kontinuerlig finjustering

När du har skapat en finjusterad modell kanske du vill fortsätta att förfina modellen över tid genom ytterligare finjustering. Kontinuerlig finjustering är den iterativa processen att välja en redan finjusterad modell som basmodell och finjustera den ytterligare på nya uppsättningar träningsexempel.

Om du vill finjustera en modell som du tidigare har finjusterat använder du samma process som beskrivs i skapa en anpassad modell, men i stället för att ange namnet på en allmän basmodell anger du din redan finjusterade modell. En anpassad finjusterad modell skulle se ut som gpt-35-turbo-0613.ft-5fd1918ee65d4cd38a5dcf6835066ed7

Skärmbild av användargränssnittet skapa en anpassad modell med en finjusterad modell markerad.

Vi rekommenderar också att du inkluderar parametern suffix för att göra det enklare att skilja mellan olika iterationer av din finjusterade modell. suffix tar en sträng och är inställd på att identifiera den finjusterade modellen. Med OpenAI Python API stöds en sträng på upp till 18 tecken som läggs till i ditt finjusterade modellnamn.

Viktigt!

Vissa av de funktioner som beskrivs i den här artikeln kanske bara är tillgängliga i förhandsversionen. Den här förhandsversionen tillhandahålls utan ett serviceavtal och vi rekommenderar det inte för produktionsarbetsbelastningar. Vissa funktioner kanske inte stöds eller kan vara begränsade. Mer information finns i Kompletterande villkor för användning av Microsoft Azure-förhandsversioner.

Förutsättningar

Kommentar

För närvarande måste du skicka ett program för att få åtkomst till Azure OpenAI Service. Om du vill ansöka om åtkomst fyller du i det här formuläret.

Modeller

Följande modeller stöder finjustering:

  • babbage-002
  • davinci-002
  • gpt-35-turbo (0613)
  • gpt-35-turbo (1106)
  • gpt-35-turbo (0125)
  • gpt-4 (0613)

Se sidan modeller för att kontrollera vilka regioner som för närvarande stöder finjustering.

Om du planerar att använda gpt-4 för finjustering läser du riktlinjerna för säkerhetsutvärdering för GPT-4 för offentlig förhandsversion

Granska arbetsflödet för Azure AI Studio

Ta en stund att granska arbetsflödet för finjustering för att använda Azure AI Studio:

  1. Förbered dina tränings- och valideringsdata.
  2. Använd guiden Finjustera modell i Azure AI Studio för att träna din anpassade modell.
    1. Välj en modell.
    2. Välj dina träningsdata.
    3. Du kan också välja dina valideringsdata.
    4. Du kan också konfigurera parametrarna för ditt finjusteringsjobb.
    5. Granska dina val och träna din nya anpassade modell.
  3. Kontrollera statusen för din finjusterade modell.
  4. Du kan också analysera din finjusterade modell för prestanda och passform.
  5. Distribuera din finjusterade modell för användning.
  6. Använd din finjusterade modell.

Förbereda dina tränings- och valideringsdata

Dina uppsättningar med träningsdata och valideringsdata består av indata- och utdataexempel för hur du vill att modellen ska fungera.

Olika modelltyper kräver ett annat format för träningsdata.

De tränings- och valideringsdata som du använder måste formateras som ett JSON Lines-dokument (JSONL). För gpt-35-turbo-0613 finjusteringsdatauppsättningen måste formateras i konversationsformatet som används av API:et för chattavslut .

Om du vill ha en stegvis genomgång av finjustering av en gpt-35-turbo-0613 modell kan du läsa självstudiekursen för Finjustering av Azure OpenAI.

Exempel på filformat

{"messages": [{"role": "system", "content": "You are an Xbox customer support agent whose primary goal is to help users with issues they are experiencing with their Xbox devices. You are friendly and concise. You only provide factual answers to queries, and do not provide answers that are not related to Xbox."}, {"role": "user", "content": "Is Xbox better than PlayStation?"}, {"role": "assistant", "content": "I apologize, but I cannot provide personal opinions. My primary job is to assist you with any issues related to your Xbox device. Do you have any Xbox-related issues that need addressing?"}]}
{"messages": [{"role": "system", "content": "You are an Xbox customer support agent whose primary goal is to help users with issues they are experiencing with their Xbox devices. You are friendly and concise. You only provide factual answers to queries, and do not provide answers that are not related to Xbox."}, {"role": "user", "content": "Can I play PC games on my Xbox?"}, {"role": "assistant", "content": "While Xbox consoles don't natively support PC games, they can play an array of Xbox games, many of which are also available on PC. Can I assist you with finding games compatible with your Xbox device?"}]}
{"messages": [{"role": "system", "content": "You are an Xbox customer support agent whose primary goal is to help users with issues they are experiencing with their Xbox devices. You are friendly and concise. You only provide factual answers to queries, and do not provide answers that are not related to Xbox."}, {"role": "user", "content": "I'm having trouble connecting my Xbox to the Wi-Fi."}, {"role": "assistant", "content": "No worries, let's go through the network settings on your Xbox. Can you please tell me what happens when you try to connect it to the Wi-Fi?"}]}

Chattfilformat för flera svängar

Det finns också stöd för flera konversationer på en enda rad i jsonl-träningsfilen. Om du vill hoppa över finjustering av specifika assistentmeddelanden lägger du till det valfria weight nyckelvärdeparet. För närvarande weight kan ställas in på 0 eller 1.

{"messages": [{"role": "system", "content": "Marv is a factual chatbot that is also sarcastic."}, {"role": "user", "content": "What's the capital 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}]}

Förutom JSONL-formatet måste tränings- och valideringsdatafiler kodas i UTF-8 och innehålla ett byteordningsmärke (BOM). Filen måste vara mindre än 512 MB.

Skapa dina tränings- och valideringsdatauppsättningar

Ju fler träningsexempel du har, desto bättre. Finjusteringsjobb fortsätter inte utan minst 10 träningsexempel, men ett så litet antal räcker inte för att märkbart påverka modellsvar. Det är bästa praxis att tillhandahålla hundratals, om inte tusentals, träningsexempel för att lyckas.

I allmänhet kan en fördubbling av datamängdens storlek leda till en linjär ökning av modellkvaliteten. Men kom ihåg att exempel med låg kvalitet kan påverka prestanda negativt. Om du tränar modellen på en stor mängd interna data, utan att först rensa datamängden för endast exempel av högsta kvalitet, kan du få en modell som presterar mycket sämre än förväntat.

Skapa din finjusterade modell

Följ dessa steg för att finjustera en Azure OpenAI-modell i ett befintligt Azure AI Studio-projekt:

  1. Logga in på Azure AI Studio och välj ditt projekt. Om du inte redan har ett projekt skapar du först ett projekt.

  2. På den komprimerade vänstra menyn väljer du Finjustering>+ Finjustera modell.

    Skärmbild av alternativet att börja skapa en ny finjusterad modell.

Välj basmodellen

  1. Välj en basmodell för att finjustera. Ditt val påverkar både prestanda och kostnaden för din modell. I det här exemplet väljer gpt-35-turbo vi modellen. Välj sedan Bekräfta.

    Skärmbild av alternativet för att välja en modell som ska finjusteras.

  2. För gpt-35-turbo vi har olika versioner tillgängliga för finjustering, så välj vilken version du vill finjustera. Vi väljer (0301).

  3. Vi rekommenderar också att du inkluderar parametern suffix för att göra det enklare att skilja mellan olika iterationer av din finjusterade modell. suffix tar en sträng och är inställd på att identifiera den finjusterade modellen. Med OpenAI Python API stöds en sträng på upp till 18 tecken som läggs till i ditt finjusterade modellnamn.

Om du har fler än en Azure OpenAI-anslutning aktiverad för finjustering väljer du vilken resurs du vill använda. Observera att alla användare med åtkomst till din Azure OpenAI-resurs har åtkomst till den här finjusterade modellen.

  1. Välj sedan Nästa.

    Skärmbild av grundläggande inställningar för finjustering av en modell.

Välj dina träningsdata

Nästa steg är att antingen välja befintliga förberedda träningsdata eller ladda upp nya förberedda träningsdata som ska användas när du anpassar din modell. Fönstret Träningsdata visar alla befintliga, tidigare uppladdade datamängder och innehåller även alternativ för att ladda upp nya träningsdata.

Skärmbild av fönstret Träningsdata för guiden Finjustera modell i Azure AI Studio.

  • Om dina träningsdata redan finns i projektet väljer du Data i Azure AI Studio.

    • Välj filen i listan som visas i fönstret Träningsdata .
  • Om dina träningsdata redan har laddats upp till Azure OpenAI-tjänsten väljer du din Azure OpenAI-anslutning under Azure OpenAI-Anslut ion.

  • Om du vill ladda upp träningsdata för att finjustera din modell väljer du Ladda upp data och sedan Ladda upp fil.

    • Se till att alla dina träningsexempel följer det förväntade formatet för slutsatsdragning. För att finjustera modeller effektivt säkerställer du en balanserad och varierad datamängd. Detta innebär att upprätthålla databalans, inklusive olika scenarier, och regelbundet förfina träningsdata så att de överensstämmer med verkliga förväntningar, vilket i slutändan leder till mer exakta och balanserade modellsvar. Mer information finns i förberedelse av data.
    • För stora datafiler rekommenderar vi att du importerar från ett Azure Blob Store. Stora filer kan bli instabila när de laddas upp via formulär med flera delar eftersom begäranden är atomiska och inte kan göras om eller återupptas. Mer information om Azure Blob Storage finns i Vad är Azure Blob Storage?

Kommentar

Träningsdatafiler måste formateras som JSONL-filer, kodade i UTF-8 med ett byteordningsmärke (BOM). Filen måste vara mindre än 512 MB.

Skärmbild av alternativet för att ladda upp träningsdata lokalt.

När du har laddat upp filer visas en förhandsversion av dina träningsdata. Klicka på Nästa när du vill fortsätta.

Skärmbild av förhandsversionen av träningsdata.

Välj dina valideringsdata

Du kan också välja att ange valideringsdata för att finjustera din modell. Om du inte vill använda valideringsdata kan du välja Ingen och välja Nästa för att fortsätta till de avancerade alternativen för modellen.

Om du annars har en valideringsdatauppsättning kan du antingen välja mellan tidigare uppladdade data eller ladda upp nyligen förberedda valideringsdata som ska användas för att finjustera din modell.

Kommentar

Precis som träningsdatafiler måste valideringsdatafiler formateras som JSONL-filer, kodade i UTF-8 med byteordningsmärke (BOM). Filen måste vara mindre än 512 MB.

Konfigurera dina parametrar

Du kan också konfigurera parametrar för ditt finjusteringsjobb. Följande är tillgängliga:

Namn Typ Beskrivning
batch_size integer Batchstorleken som ska användas för träning. Batchstorleken är antalet träningsexempel som används för att träna ett enda framåt- och bakåtpass. I allmänhet har vi upptäckt att större batchstorlekar tenderar att fungera bättre för större datamängder. Standardvärdet samt det maximala värdet för den här egenskapen är specifika för en basmodell. En större batchstorlek innebär att modellparametrar uppdateras mindre ofta, men med lägre varians. När värdet är -1 beräknas batch_size som 0,2 % av exemplen i träningsuppsättningen och maxvärdet är 256.
learning_rate_multiplier Nummer Den inlärningsfrekvensmultiplikator som ska användas för träning. Den finjusterande inlärningsfrekvensen är den ursprungliga inlärningsfrekvensen som används för förträning multiplicerat med det här värdet. Större inlärningsfrekvenser tenderar att fungera bättre med större batchstorlekar. Vi rekommenderar att du experimenterar med värden i intervallet 0,02 till 0,2 för att se vad som ger bäst resultat. En mindre inlärningsfrekvens kan vara användbar för att undvika överanpassning.
n_epochs integer Antalet epoker som modellen ska tränas för. En epok refererar till en fullständig cykel genom träningsdatauppsättningen. Om värdet är -1 bestäms antalet epoker dynamiskt baserat på indata.
seed integer Fröet styr återgivningsbarheten för jobbet. Att skicka in samma parametrar för start- och jobb bör ge samma resultat, men kan skilja sig i sällsynta fall. Om ett frö inte har angetts genereras ett för dig.

Du kan välja att lämna standardkonfigurationen eller anpassa värdena efter dina önskemål. När du har slutfört konfigurationerna väljer du Nästa.

Granska dina val och träna din modell

Granska dina val och välj Skicka för att börja träna din nya finjusterade modell.

Kontrollera statusen för din finjusterade modell

När du har skickat in ditt finjusteringsjobb visas en sida med information om din finjusterade modell. Du hittar status och mer information om din finjusterade modell på sidan Finjustera>modeller i Azure AI Studio.

Jobbet kan placeras i kö bakom andra jobb i systemet. Det kan ta minuter eller timmar att träna din modell beroende på modellens och datamängdens storlek.

Analysera din finjusterade modell

När finjusteringen har slutförts kan du ladda ned en resultatfil med namnet results.csv från den finjusterade modellsidan under fliken Information . Du kan använda resultatfilen för att analysera tränings- och valideringsprestanda för din anpassade modell.

Resultatfilen är en CSV-fil som innehåller en rubrikrad och en rad för varje träningssteg som utförs av finjusteringsjobbet. Resultatfilen innehåller följande kolumner:

Kolumnnamn beskrivning
step Antalet träningssteg. Ett träningssteg representerar ett enda pass, framåt och bakåt, på en batch med träningsdata.
train_loss Förlusten för träningsbatchen.
train_mean_token_accuracy Procentandelen token i träningsbatchen som är korrekt förutsagd av modellen.
Om batchstorleken till exempel är inställd på 3 och dina data innehåller slutföranden [[1, 2], [0, 5], [4, 2]]anges det här värdet till 0,83 (5 av 6) om modellen förutsade [[1, 1], [0, 5], [4, 2]].
valid_loss Förlusten för valideringsbatchen.
validation_mean_token_accuracy Procentandelen token i valideringsbatchen som är korrekt förutsagd av modellen.
Om batchstorleken till exempel är inställd på 3 och dina data innehåller slutföranden [[1, 2], [0, 5], [4, 2]]anges det här värdet till 0,83 (5 av 6) om modellen förutsade [[1, 1], [0, 5], [4, 2]].
full_valid_loss Valideringsförlusten som beräknas i slutet av varje epok. När träningen går bra bör förlusten minska.
full_valid_mean_token_accuracy Den giltiga genomsnittliga tokennoggrannheten som beräknas i slutet av varje epok. När träningen går bra bör tokennoggrannheten öka.

Du kan också visa data i din results.csv-fil som diagram i Azure AI Studio under fliken Mått i din finjusterade modell. Välj länken för din tränade modell så visas tre diagram: förlust, genomsnittlig tokennoggrannhet och tokennoggrannhet. Om du angav valideringsdata visas båda datauppsättningarna i samma diagram.

Leta efter din förlust att minska med tiden, och din noggrannhet att öka. Om du ser en skillnad mellan dina tränings- och valideringsdata som kan tyda på att du överanpassar. Prova att träna med färre epoker eller en mindre inlärningstaktsmultiplikator.

Valv ty utvärdering GPT-4 finjustering - offentlig förhandsversion

GPT-4 är vår mest avancerade modell som kan finjusteras efter dina behov. Precis som med Azure OpenAI-modeller i allmänhet kommer de avancerade funktionerna i finjusterade modeller med ökade ansvarsfulla AI-utmaningar relaterade till skadligt innehåll, manipulering, mänskligt beteende, sekretessproblem med mera. Läs mer om risker, funktioner och begränsningar i översikten över ansvarsfulla AI-metoder och Transparensanteckning. För att minska riskerna med GPT-4-finjusterade modeller har vi implementerat ytterligare utvärderingssteg för att identifiera och förhindra skadligt innehåll i träning och utdata från finjusterade modeller. De här stegen baseras på innehållsfiltreringen Microsoft Responsible AI Standard och Azure OpenAI Service.

  • Utvärderingar utförs på dedikerade, kundspecifika, privata arbetsytor;
  • Utvärderingsslutpunkter finns i samma geografiska område som Azure OpenAI-resursen.
  • Träningsdata lagras inte i samband med utvärderingar. Endast den slutliga modellutvärderingen (distribuerbar eller inte distribuerbar) bevaras. Och

GPT-4 finjusterade modellutvärderingsfilter är inställda på fördefinierade tröskelvärden och kan inte ändras av kunder. de är inte knutna till någon anpassad innehållsfiltreringskonfiguration som du kanske har skapat.

Datautvärdering

Innan träningen börjar utvärderas dina data för potentiellt skadligt innehåll (våld, sexuellt, hat och rättvisa, självskadebeteende – se kategoridefinitioner här). Om skadligt innehåll identifieras över den angivna allvarlighetsnivån misslyckas ditt träningsjobb och du får ett meddelande som informerar dig om felkategorierna.

Exempelmeddelande:

The provided training data failed RAI checks for harm types: [hate_fairness, self_harm, violence]. Please fix the data and try again.

Dina träningsdata utvärderas automatiskt i ditt dataimportjobb som en del av att tillhandahålla finjusteringsfunktionen.

Om finjusteringsjobbet misslyckas på grund av identifiering av skadligt innehåll i träningsdata debiteras du inte.

Modellutvärdering

När träningen har slutförts men innan den finjusterade modellen är tillgänglig för distribution utvärderas den resulterande modellen för potentiellt skadliga svar med hjälp av Azures inbyggda risk- och säkerhetsmått. Med samma metod för testning som vi använder för de grundläggande stora språkmodellerna simulerar vår utvärderingsfunktion en konversation med din finjusterade modell för att bedöma potentialen att mata ut skadligt innehåll, återigen med hjälp av angivna kategorier av skadligt innehåll (våld, sexuellt, hat och rättvisa, självskadebeteende).

Om det visar sig att en modell genererar utdata som innehåller innehåll som identifierats som skadligt över en acceptabel hastighet, informeras du om att din modell inte är tillgänglig för distribution, med information om de specifika skadekategorier som identifierats:

Exempelmeddelande:

This model is unable to be deployed. Model evaluation identified that this fine tuned model scores above acceptable thresholds for [Violence, Self Harm]. Please review your training data set and resubmit the job.

Skärmbild av ett misslyckat finjusteringsjobb på grund av säkerhetsutvärdering

Precis som med datautvärdering utvärderas modellen automatiskt i ditt finjusteringsjobb som en del av att tillhandahålla finjusteringsfunktionen. Endast den resulterande utvärderingen (som kan distribueras eller inte kan distribueras) loggas av tjänsten. Om distributionen av den finjusterade modellen misslyckas på grund av identifiering av skadligt innehåll i modellutdata debiteras du inte för träningskörningen.

Distribuera en finjusterad modell

När din modell har finjusterats kan du distribuera modellen och använda den i ditt eget program. Du kan inte distribuera en finjusterad modell från distributionssidan eller på lekplatssidan i Azure AI Studio. Det enda sättet att distribuera en finjusterad modell är från modellinformationssidan för modellen.

När du distribuerar modellen gör du modellen tillgänglig för slutsatsdragning och det medför en timvis värdavgift. Finjusterade modeller kan dock lagras i Azure AI Studio utan kostnad förrän du är redo att använda dem.

Viktigt!

När du har distribuerat en anpassad modell tas distributionen bort om distributionen förblir inaktiv i mer än femton (15) dagar. Distributionen av en anpassad modell är inaktiv om modellen distribuerades för mer än femton (15) dagar sedan och inga slutföranden eller samtal om chattavslut gjordes till den under en kontinuerlig 15-dagarsperiod.

Borttagningen av en inaktiv distribution tar inte bort eller påverkar inte den underliggande anpassade modellen, och den anpassade modellen kan distribueras om när som helst. Enligt beskrivningen i prissättningen för Azure OpenAI Service medför varje anpassad (finjusterad) modell som distribueras en timbaserad värdkostnad oavsett om slutföranden eller chattavslut görs till modellen. Mer information om hur du planerar och hanterar kostnader med Azure OpenAI finns i vägledningen i Planera för att hantera kostnader för Azure OpenAI Service.

Kommentar

Endast en distribution tillåts för en finjusterad modell. Ett felmeddelande visas om du väljer en redan distribuerad finjusterad modell.

Du kan övervaka förloppet för distributionen på sidan Distributioner i Azure AI Studio.

Använda en distribuerad finjusterad modell

När din finjusterade modell har distribuerats kan du använda den som vilken annan distribuerad modell som helst. Du kan använda Playground i Azure AI Studio för att experimentera med din nya distribution. Du kan också använda REST-API:et för att anropa din finjusterade modell från ditt eget program. Du kan till och med börja använda den här nya finjusterade modellen i ditt promptflöde för att skapa ditt generativa AI-program.

Kommentar

För chattmodeller måste systemmeddelandet som du använder för att vägleda din finjusterade modell (oavsett om det är distribuerat eller tillgängligt för testning på lekplatsen) vara detsamma som det systemmeddelande som du använde för träning. Om du använder ett annat systemmeddelande kanske modellen inte fungerar som förväntat.

Rensa dina distributioner, finjusterade modeller och träningsfiler

När du är klar med din finjusterade modell kan du ta bort distributionen och modellen. Du kan också ta bort de tränings- och valideringsfiler som du laddade upp till tjänsten om det behövs.

Ta bort din finjusterade modelldistribution

Viktigt!

När du har distribuerat en anpassad modell tas distributionen bort om distributionen förblir inaktiv i mer än femton (15) dagar. Distributionen av en anpassad modell är inaktiv om modellen distribuerades för mer än femton (15) dagar sedan och inga slutföranden eller samtal om chattavslut gjordes till den under en kontinuerlig 15-dagarsperiod.

Borttagningen av en inaktiv distribution tar inte bort eller påverkar inte den underliggande anpassade modellen, och den anpassade modellen kan distribueras om när som helst. Enligt beskrivningen i prissättningen för Azure OpenAI Service medför varje anpassad (finjusterad) modell som distribueras en timbaserad värdkostnad oavsett om slutföranden eller chattavslut görs till modellen. Mer information om hur du planerar och hanterar kostnader med Azure OpenAI finns i vägledningen i Planera för att hantera kostnader för Azure OpenAI Service.

Du kan ta bort distributionen för din finjusterade modell på sidan Distributioner i Azure AI Studio. Välj den distribution som ska tas bort och välj sedan Ta bort för att ta bort distributionen.

Ta bort din finjusterade modell

Du kan ta bort en finjusterad modell på sidan Finjustering i Azure AI Studio. Välj den finjusterade modell som ska tas bort och välj sedan Ta bort för att ta bort den finjusterade modellen.

Kommentar

Du kan inte ta bort en finjusterad modell om den har en befintlig distribution. Du måste först ta bort modelldistributionen innan du kan ta bort den finjusterade modellen.

Ta bort dina träningsfiler

Du kan också ta bort tränings- och valideringsfiler som du laddade upp för träning och resultatfiler som genererats under träningen. För detta måste du gå till Azure OpenAI Studio och gå till fönstret Hanteringsdatafiler>. Välj den fil som ska tas bort och välj sedan Ta bort för att ta bort filen.

Förutsättningar

  • Läs finjusteringsguiden När du ska använda Azure OpenAI.
  • En Azure-prenumeration Skapa en kostnadsfritt.
  • Åtkomst beviljad till Azure OpenAI i den önskade Azure-prenumerationen.
  • En Azure OpenAI-resurs. Mer information finns i Skapa en resurs och distribuera en modell med Azure OpenAI.
  • Följande Python-bibliotek: os, json, requests, . openai
  • OpenAI Python-biblioteket bör vara minst version 0.28.1.
  • Finjusteringsåtkomst kräver Cognitive Services OpenAI-deltagare.
  • Om du inte redan har åtkomst till att visa kvoter och distribuerar modeller i Azure OpenAI Studio behöver du ytterligare behörigheter.

Kommentar

För närvarande måste du skicka ett program för att få åtkomst till Azure OpenAI Service. Om du vill ansöka om åtkomst fyller du i det här formuläret.

Modeller

Följande modeller stöder finjustering:

  • babbage-002
  • davinci-002
  • gpt-35-turbo (0613)
  • gpt-35-turbo (1106)
  • gpt-35-turbo (0125)
  • gpt-4 (0613)

Om du planerar att använda gpt-4 för finjustering läser du riktlinjerna för säkerhetsutvärdering för GPT-4 för offentlig förhandsversion

Eller så kan du finjustera en tidigare finjusterad modell, formaterad som base-model.ft-{jobid}.

Skärmbild av modellalternativ med en anpassad finjusterad modell.

Se sidan modeller för att kontrollera vilka regioner som för närvarande stöder finjustering.

Granska arbetsflödet för Python SDK

Ta en stund att granska arbetsflödet för finjustering för att använda Python SDK med Azure OpenAI:

  1. Förbered dina tränings- och valideringsdata.
  2. Välj en basmodell.
  3. Ladda upp dina träningsdata.
  4. Träna din nya anpassade modell.
  5. Kontrollera statusen för din anpassade modell.
  6. Distribuera din anpassade modell för användning.
  7. Använd din anpassade modell.
  8. Du kan också analysera din anpassade modell för prestanda och passform.

Förbereda dina tränings- och valideringsdata

Dina uppsättningar med träningsdata och valideringsdata består av indata- och utdataexempel för hur du vill att modellen ska fungera.

Olika modelltyper kräver ett annat format för träningsdata.

De tränings- och valideringsdata som du använder måste formateras som ett JSON Lines-dokument (JSONL). För gpt-35-turbo-0613 finjusteringsdatauppsättningen måste formateras i konversationsformatet som används av API:et för chattavslut .

Om du vill ha en stegvis genomgång av finjustering gpt-35-turbo-0613 kan du läsa självstudiekursen för finjustering i Azure OpenAI

Exempel på filformat

{"messages": [{"role": "system", "content": "You are an Xbox customer support agent whose primary goal is to help users with issues they are experiencing with their Xbox devices. You are friendly and concise. You only provide factual answers to queries, and do not provide answers that are not related to Xbox."}, {"role": "user", "content": "Is Xbox better than PlayStation?"}, {"role": "assistant", "content": "I apologize, but I cannot provide personal opinions. My primary job is to assist you with any issues related to your Xbox device. Do you have any Xbox-related issues that need addressing?"}]}
{"messages": [{"role": "system", "content": "You are an Xbox customer support agent whose primary goal is to help users with issues they are experiencing with their Xbox devices. You are friendly and concise. You only provide factual answers to queries, and do not provide answers that are not related to Xbox."}, {"role": "user", "content": "Can I play PC games on my Xbox?"}, {"role": "assistant", "content": "While Xbox consoles don't natively support PC games, they can play an array of Xbox games, many of which are also available on PC. Can I assist you with finding games compatible with your Xbox device?"}]}
{"messages": [{"role": "system", "content": "You are an Xbox customer support agent whose primary goal is to help users with issues they are experiencing with their Xbox devices. You are friendly and concise. You only provide factual answers to queries, and do not provide answers that are not related to Xbox."}, {"role": "user", "content": "I'm having trouble connecting my Xbox to the Wi-Fi."}, {"role": "assistant", "content": "No worries, let's go through the network settings on your Xbox. Can you please tell me what happens when you try to connect it to the Wi-Fi?"}]}

Chattfilformat för flera svängar

Det finns också stöd för flera konversationer på en enda rad i jsonl-träningsfilen. Om du vill hoppa över finjustering av specifika assistentmeddelanden lägger du till det valfria weight nyckelvärdeparet. För närvarande weight kan ställas in på 0 eller 1.

{"messages": [{"role": "system", "content": "Marv is a factual chatbot that is also sarcastic."}, {"role": "user", "content": "What's the capital 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}]}

Förutom JSONL-formatet måste tränings- och valideringsdatafiler kodas i UTF-8 och innehålla ett byteordningsmärke (BOM). Filen måste vara mindre än 512 MB.

Skapa dina tränings- och valideringsdatauppsättningar

Ju fler träningsexempel du har, desto bättre. Finjusteringsjobb fortsätter inte utan minst 10 träningsexempel, men ett så litet antal räcker inte för att märkbart påverka modellsvar. Det är bästa praxis att tillhandahålla hundratals, om inte tusentals, träningsexempel för att lyckas.

I allmänhet kan en fördubbling av datamängdens storlek leda till en linjär ökning av modellkvaliteten. Men kom ihåg att exempel med låg kvalitet kan påverka prestanda negativt. Om du tränar modellen på en stor mängd interna data, utan att först rensa datamängden för endast exempel av högsta kvalitet, kan du få en modell som presterar mycket sämre än förväntat.

Ladda upp dina träningsdata

Nästa steg är att antingen välja befintliga förberedda träningsdata eller ladda upp nya förberedda träningsdata som ska användas när du anpassar din modell. När du har förberett dina träningsdata kan du ladda upp dina filer till tjänsten. Det finns två sätt att ladda upp träningsdata:

För stora datafiler rekommenderar vi att du importerar från ett Azure Blob Store. Stora filer kan bli instabila när de laddas upp via formulär med flera delar eftersom begäranden är atomiska och inte kan göras om eller återupptas. Mer information om Azure Blob Storage finns i Vad är Azure Blob Storage?

Kommentar

Träningsdatafiler måste formateras som JSONL-filer, kodade i UTF-8 med ett byteordningsmärke (BOM). Filen måste vara mindre än 512 MB.

I följande Python-exempel laddas lokala tränings- och valideringsfiler upp med hjälp av Python SDK och de returnerade fil-ID:t hämtas.

# Upload fine-tuning files

import os
from openai import AzureOpenAI

client = AzureOpenAI(
  azure_endpoint = os.getenv("AZURE_OPENAI_ENDPOINT"), 
  api_key=os.getenv("AZURE_OPENAI_API_KEY"),  
  api_version="2024-05-01-preview"  # This API version or later is required to access seed/events/checkpoint capabilities
)

training_file_name = 'training_set.jsonl'
validation_file_name = 'validation_set.jsonl'

# Upload the training and validation dataset files to Azure OpenAI with the SDK.

training_response = client.files.create(
    file=open(training_file_name, "rb"), purpose="fine-tune"
)
training_file_id = training_response.id

validation_response = client.files.create(
    file=open(validation_file_name, "rb"), purpose="fine-tune"
)
validation_file_id = validation_response.id

print("Training file ID:", training_file_id)
print("Validation file ID:", validation_file_id)

Skapa en anpassad modell

När du har laddat upp dina tränings- och valideringsfiler är du redo att starta finjusteringsjobbet.

Följande Python-kod visar ett exempel på hur du skapar ett nytt finjusterat jobb med Python SDK:

I det här exemplet skickar vi även parametern seed. Fröet styr återgivningsbarheten för jobbet. Att skicka in samma parametrar för start- och jobb bör ge samma resultat, men kan skilja sig i sällsynta fall. Om ett frö inte har angetts genereras ett för dig.

response = client.fine_tuning.jobs.create(
    training_file=training_file_id,
    validation_file=validation_file_id,
    model="gpt-35-turbo-0613", # Enter base model name. Note that in Azure OpenAI the model name contains dashes and cannot contain dot/period characters. 
    seed = 105  # seed parameter controls reproducibility of the fine-tuning job. If no seed is specified one will be generated automatically.
)

job_id = response.id

# You can use the job ID to monitor the status of the fine-tuning job.
# The fine-tuning job will take some time to start and complete.

print("Job ID:", response.id)
print("Status:", response.id)
print(response.model_dump_json(indent=2))

Du kan också skicka ytterligare valfria parametrar som hyperparametrar för att få större kontroll över finjusteringsprocessen. För inledande träning rekommenderar vi att du använder de automatiska standardvärden som finns utan att ange dessa parametrar.

De aktuella hyperparametrar som stöds för finjustering är:

Namn Typ Beskrivning
batch_size integer Batchstorleken som ska användas för träning. Batchstorleken är antalet träningsexempel som används för att träna ett enda framåt- och bakåtpass. I allmänhet har vi upptäckt att större batchstorlekar tenderar att fungera bättre för större datamängder. Standardvärdet samt det maximala värdet för den här egenskapen är specifika för en basmodell. En större batchstorlek innebär att modellparametrar uppdateras mindre ofta, men med lägre varians.
learning_rate_multiplier Nummer Den inlärningsfrekvensmultiplikator som ska användas för träning. Den finjusterande inlärningsfrekvensen är den ursprungliga inlärningsfrekvensen som används för förträning multiplicerat med det här värdet. Större inlärningsfrekvenser tenderar att fungera bättre med större batchstorlekar. Vi rekommenderar att du experimenterar med värden i intervallet 0,02 till 0,2 för att se vad som ger bäst resultat. En mindre inlärningsfrekvens kan vara användbar för att undvika överanpassning.
n_epochs integer Antalet epoker som modellen ska tränas för. En epok refererar till en fullständig cykel genom träningsdatauppsättningen.

Så här anger du anpassade hyperparametrar med 1.x-versionen av OpenAI Python API:

from openai import AzureOpenAI

client = AzureOpenAI(
  azure_endpoint = os.getenv("AZURE_OPENAI_ENDPOINT"), 
  api_key=os.getenv("AZURE_OPENAI_API_KEY"),  
  api_version="2024-02-01"  # This API version or later is required to access fine-tuning for turbo/babbage-002/davinci-002
)

client.fine_tuning.jobs.create(
  training_file="file-abc123", 
  model="gpt-35-turbo-0613", # Enter base model name. Note that in Azure OpenAI the model name contains dashes and cannot contain dot/period characters. 
  hyperparameters={
    "n_epochs":2
  }
)

Kontrollera finjustering av jobbstatus

response = client.fine_tuning.jobs.retrieve(job_id)

print("Job ID:", response.id)
print("Status:", response.status)
print(response.model_dump_json(indent=2))

Visa en lista över finjusterande händelser

Så här undersöker du de enskilda finjusteringshändelser som genererades under träningen:

Du kan behöva uppgradera OpenAI-klientbiblioteket till den senaste versionen med pip install openai --upgrade för att köra det här kommandot.

response = client.fine_tuning.jobs.list_events(fine_tuning_job_id=job_id, limit=10)
print(response.model_dump_json(indent=2))

Kontrollpunkter

När varje träningsepooch har slutförts genereras en kontrollpunkt. En kontrollpunkt är en fullt fungerande version av en modell som både kan distribueras och användas som målmodell för efterföljande finjusteringsjobb. Kontrollpunkter kan vara särskilt användbara eftersom de kan ge en ögonblicksbild av din modell innan överanpassningen har inträffat. När ett finjusteringsjobb har slutförts har du de tre senaste versionerna av modellen som är tillgängliga för distribution. Den sista epoken kommer att representeras av din finjusterade modell, de föregående två epokerna kommer att vara tillgängliga som kontrollpunkter.

Du kan köra kommandot för kontrollpunkter i listan för att hämta listan över kontrollpunkter som är associerade med ett enskilt finjusteringsjobb:

Du kan behöva uppgradera OpenAI-klientbiblioteket till den senaste versionen med pip install openai --upgrade för att köra det här kommandot.

response = client.fine_tuning.jobs.list_events(fine_tuning_job_id=job_id, limit=10)
print(response.model_dump_json(indent=2))

Valv ty utvärdering GPT-4 finjustering - offentlig förhandsversion

GPT-4 är vår mest avancerade modell som kan finjusteras efter dina behov. Precis som med Azure OpenAI-modeller i allmänhet kommer de avancerade funktionerna i finjusterade modeller med ökade ansvarsfulla AI-utmaningar relaterade till skadligt innehåll, manipulering, mänskligt beteende, sekretessproblem med mera. Läs mer om risker, funktioner och begränsningar i översikten över ansvarsfulla AI-metoder och Transparensanteckning. För att minska riskerna med GPT-4-finjusterade modeller har vi implementerat ytterligare utvärderingssteg för att identifiera och förhindra skadligt innehåll i träning och utdata från finjusterade modeller. De här stegen baseras på innehållsfiltreringen Microsoft Responsible AI Standard och Azure OpenAI Service.

  • Utvärderingar utförs på dedikerade, kundspecifika, privata arbetsytor;
  • Utvärderingsslutpunkter finns i samma geografiska område som Azure OpenAI-resursen.
  • Träningsdata lagras inte i samband med utvärderingar. Endast den slutliga modellutvärderingen (distribuerbar eller inte distribuerbar) bevaras. Och

GPT-4 finjusterade modellutvärderingsfilter är inställda på fördefinierade tröskelvärden och kan inte ändras av kunder. de är inte knutna till någon anpassad innehållsfiltreringskonfiguration som du kanske har skapat.

Datautvärdering

Innan träningen börjar utvärderas dina data för potentiellt skadligt innehåll (våld, sexuellt, hat och rättvisa, självskadebeteende – se kategoridefinitioner här). Om skadligt innehåll identifieras över den angivna allvarlighetsnivån misslyckas ditt träningsjobb och du får ett meddelande som informerar dig om felkategorierna.

Exempelmeddelande:

The provided training data failed RAI checks for harm types: [hate_fairness, self_harm, violence]. Please fix the data and try again.

Dina träningsdata utvärderas automatiskt i ditt dataimportjobb som en del av att tillhandahålla finjusteringsfunktionen.

Om finjusteringsjobbet misslyckas på grund av identifiering av skadligt innehåll i träningsdata debiteras du inte.

Modellutvärdering

När träningen har slutförts men innan den finjusterade modellen är tillgänglig för distribution utvärderas den resulterande modellen för potentiellt skadliga svar med hjälp av Azures inbyggda risk- och säkerhetsmått. Med samma metod för testning som vi använder för de grundläggande stora språkmodellerna simulerar vår utvärderingsfunktion en konversation med din finjusterade modell för att bedöma potentialen att mata ut skadligt innehåll, återigen med hjälp av angivna kategorier av skadligt innehåll (våld, sexuellt, hat och rättvisa, självskadebeteende).

Om det visar sig att en modell genererar utdata som innehåller innehåll som identifierats som skadligt över en acceptabel hastighet, informeras du om att din modell inte är tillgänglig för distribution, med information om de specifika skadekategorier som identifierats:

Exempelmeddelande:

This model is unable to be deployed. Model evaluation identified that this fine tuned model scores above acceptable thresholds for [Violence, Self Harm]. Please review your training data set and resubmit the job.

Skärmbild av ett misslyckat finjusteringsjobb på grund av säkerhetsutvärdering

Precis som med datautvärdering utvärderas modellen automatiskt i ditt finjusteringsjobb som en del av att tillhandahålla finjusteringsfunktionen. Endast den resulterande utvärderingen (som kan distribueras eller inte kan distribueras) loggas av tjänsten. Om distributionen av den finjusterade modellen misslyckas på grund av identifiering av skadligt innehåll i modellutdata debiteras du inte för träningskörningen.

Distribuera en anpassad modell

När finjusteringsjobbet lyckas anges värdet för variabeln fine_tuned_model i svarstexten till namnet på din anpassade modell. Din modell är nu också tillgänglig för identifiering från listans modell-API. Du kan dock inte utfärda slutförandeanrop till din anpassade modell förrän din anpassade modell har distribuerats. Du måste distribuera din anpassade modell för att göra den tillgänglig för användning med slutförandeanrop.

Viktigt!

När du har distribuerat en anpassad modell tas distributionen bort om distributionen förblir inaktiv i mer än femton (15) dagar. Distributionen av en anpassad modell är inaktiv om modellen distribuerades för mer än femton (15) dagar sedan och inga slutföranden eller samtal om chattavslut gjordes till den under en kontinuerlig 15-dagarsperiod.

Borttagningen av en inaktiv distribution tar inte bort eller påverkar inte den underliggande anpassade modellen, och den anpassade modellen kan distribueras om när som helst. Enligt beskrivningen i prissättningen för Azure OpenAI Service medför varje anpassad (finjusterad) modell som distribueras en timbaserad värdkostnad oavsett om slutföranden eller chattavslut görs till modellen. Mer information om hur du planerar och hanterar kostnader med Azure OpenAI finns i vägledningen i Planera för att hantera kostnader för Azure OpenAI Service.

Du kan använda antingen Azure OpenAI eller Azure CLI för att distribuera din anpassade modell.

Kommentar

Endast en distribution tillåts för en anpassad modell. Ett fel uppstår om du väljer en redan distribuerad anpassad modell.

Distribuera finjusterad modell

Till skillnad från tidigare SDK-kommandon måste distributionen göras med hjälp av kontrollplanets API som kräver separat auktorisering, en annan API-sökväg och en annan API-version.

variabel Definition
token Det finns flera sätt att generera en auktoriseringstoken. Den enklaste metoden för inledande testning är att starta Cloud Shell från Azure-portalen. Kör sedan az account get-access-token. Du kan använda den här token som din tillfälliga auktoriseringstoken för API-testning. Vi rekommenderar att du lagrar detta i en ny miljövariabel
prenumeration Prenumerations-ID för den associerade Azure OpenAI-resursen
resource_group Resursgruppens namn för din Azure OpenAI-resurs
resource_name Azure OpenAI-resursnamnet
model_deployment_name Det anpassade namnet på din nya finjusterade modelldistribution. Det här är det namn som ska refereras till i koden när du gör samtal om chattens slutförande.
fine_tuned_model Hämta det här värdet från ditt finjusterande jobbresultat i föregående steg. Det kommer att se ut som gpt-35-turbo-0613.ft-b044a9d3cf9c4228b5d393567f693b83. Du måste lägga till det värdet i deploy_data json. Du kan också distribuera en kontrollpunkt genom att skicka kontrollpunkts-ID:t som visas i formatet 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-35-turbo-ft" # custom deployment name that you will use to reference the model when making inference calls.

deploy_params = {'api-version': "2023-05-01"} 
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 will look like gpt-35-turbo-0613.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())

Distribution mellan regioner

Finjustering stöder distribution av en finjusterad modell till en annan region än där modellen ursprungligen finjusterades. Du kan också distribuera till en annan prenumeration/region.

De enda begränsningarna är att den nya regionen också måste ha stöd för finjustering och när du distribuerar mellan prenumerationer måste kontot som genererar auktoriseringstoken för distributionen ha åtkomst till både käll- och målprenumerationerna.

Nedan visas ett exempel på hur du distribuerar en modell som har finjusterats i en prenumeration/region till en annan.

import json
import os
import requests

token= os.getenv("<TOKEN>") 

subscription = "<DESTINATION_SUBSCRIPTION_ID>"  
resource_group = "<DESTINATION_RESOURCE_GROUP_NAME>"
resource_name = "<DESTINATION_AZURE_OPENAI_RESOURCE_NAME>"

source_subscription = "<SOURCE_SUBSCRIPTION_ID>"
source_resource_group = "<SOURCE_RESOURCE_GROUP>"
source_resource = "<SOURCE_RESOURCE>"


source = f'/subscriptions/{source_subscription}/resourceGroups/{source_resource_group}/providers/Microsoft.CognitiveServices/accounts/{source_resource}'

model_deployment_name ="gpt-35-turbo-ft" # custom deployment name that you will use to reference the model when making inference calls.

deploy_params = {'api-version': "2023-05-01"} 
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_NAME">, # This value will look like gpt-35-turbo-0613.ft-0ab3f80e4f2242929258fff45b56a9ce 
            "version": "1",
            "source": source
        }
    }
}
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())

För att distribuera mellan samma prenumeration, men olika regioner skulle du bara ha prenumerations- och resursgrupper som är identiska för både käll- och målvariabler och endast käll- och målresursnamnen måste vara unika.

Distribuera en modell med Azure CLI

I följande exempel visas hur du använder Azure CLI för att distribuera din anpassade modell. Med Azure CLI måste du ange ett namn för distributionen av din anpassade modell. Mer information om hur du använder Azure CLI för att distribuera anpassade modeller finns i az cognitiveservices account deployment.

Om du vill köra det här Azure CLI-kommandot i ett konsolfönster måste du ersätta följande <platshållare> med motsvarande värden för din anpassade modell:

Platshållare Värde
<YOUR_AZURE_SUBSCRIPTION> Namnet eller ID:t för din Azure-prenumeration.
<YOUR_RESOURCE_GROUP> Namnet på din Azure-resursgrupp.
<YOUR_RESOURCE_NAME> Namnet på din Azure OpenAI-resurs.
<YOUR_DEPLOYMENT_NAME> Det namn som du vill använda för modelldistributionen.
<YOUR_FINE_TUNED_MODEL_ID> Namnet på din anpassade modell.
az cognitiveservices account deployment create 
    --resource-group <YOUR_RESOURCE_GROUP>
    --name <YOUR_RESOURCE_NAME>  
    --deployment-name <YOUR_DEPLOYMENT_NAME>
    --model-name <YOUR_FINE_TUNED_MODEL_ID>
    --model-version "1" 
    --model-format OpenAI 
    --sku-capacity "1" 
    --sku-name "Standard"

Använda en distribuerad anpassad modell

När din anpassade modell har distribuerats kan du använda den som vilken annan distribuerad modell som helst. Du kan använda Playgrounds i Azure OpenAI Studio för att experimentera med din nya distribution. Du kan fortsätta att använda samma parametrar med din anpassade modell, till exempel temperature och max_tokens, som du kan med andra distribuerade modeller. För finjusterade babbage-002 modeller och davinci-002 modeller använder du Lekplatsen För slutföranden och API:et För slutföranden. För finjusterade gpt-35-turbo-0613 modeller använder du API:et Chattlekplats och API:et för chattens slutförande.

import os
from openai import AzureOpenAI

client = AzureOpenAI(
  azure_endpoint = os.getenv("AZURE_OPENAI_ENDPOINT"), 
  api_key=os.getenv("AZURE_OPENAI_API_KEY"),  
  api_version="2024-02-01"
)

response = client.chat.completions.create(
    model="gpt-35-turbo-ft", # model = "Custom deployment name you chose for your fine-tuning model"
    messages=[
        {"role": "system", "content": "You are a helpful assistant."},
        {"role": "user", "content": "Does Azure OpenAI support customer managed keys?"},
        {"role": "assistant", "content": "Yes, customer managed keys are supported by Azure OpenAI."},
        {"role": "user", "content": "Do other Azure AI services support this too?"}
    ]
)

print(response.choices[0].message.content)

Analysera din anpassade modell

Azure OpenAI bifogar en resultatfil med namnet results.csv till varje finjusterande jobb när det har slutförts. Du kan använda resultatfilen för att analysera tränings- och valideringsprestanda för din anpassade modell. Fil-ID:t för resultatfilen visas för varje anpassad modell och du kan använda Python SDK för att hämta fil-ID:t och ladda ned resultatfilen för analys.

I följande Python-exempel hämtas fil-ID:t för den första resultatfilen som är kopplad till finjusteringsjobbet för din anpassade modell och använder sedan Python SDK för att ladda ned filen till arbetskatalogen för analys.

# 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)

Resultatfilen är en CSV-fil som innehåller en rubrikrad och en rad för varje träningssteg som utförs av finjusteringsjobbet. Resultatfilen innehåller följande kolumner:

Kolumnnamn beskrivning
step Antalet träningssteg. Ett träningssteg representerar ett enda pass, framåt och bakåt, på en batch med träningsdata.
train_loss Förlusten för träningsbatchen.
train_mean_token_accuracy Procentandelen token i träningsbatchen som är korrekt förutsagd av modellen.
Om batchstorleken till exempel är inställd på 3 och dina data innehåller slutföranden [[1, 2], [0, 5], [4, 2]]anges det här värdet till 0,83 (5 av 6) om modellen förutsade [[1, 1], [0, 5], [4, 2]].
valid_loss Förlusten för valideringsbatchen.
validation_mean_token_accuracy Procentandelen token i valideringsbatchen som är korrekt förutsagd av modellen.
Om batchstorleken till exempel är inställd på 3 och dina data innehåller slutföranden [[1, 2], [0, 5], [4, 2]]anges det här värdet till 0,83 (5 av 6) om modellen förutsade [[1, 1], [0, 5], [4, 2]].
full_valid_loss Valideringsförlusten som beräknas i slutet av varje epok. När träningen går bra bör förlusten minska.
full_valid_mean_token_accuracy Den giltiga genomsnittliga tokennoggrannheten som beräknas i slutet av varje epok. När träningen går bra bör tokennoggrannheten öka.

Du kan också visa data i din results.csv-fil som diagram i Azure OpenAI Studio. Välj länken för din tränade modell så visas tre diagram: förlust, genomsnittlig tokennoggrannhet och tokennoggrannhet. Om du angav valideringsdata visas båda datauppsättningarna i samma diagram.

Leta efter din förlust att minska med tiden, och din noggrannhet att öka. Om du ser en skillnad mellan dina tränings- och valideringsdata som kan tyda på att du överanpassar. Prova att träna med färre epoker eller en mindre inlärningstaktsmultiplikator.

Rensa dina distributioner, anpassade modeller och träningsfiler

När du är klar med din anpassade modell kan du ta bort distributionen och modellen. Du kan också ta bort de tränings- och valideringsfiler som du laddade upp till tjänsten om det behövs.

Ta bort modelldistributionen

Viktigt!

När du har distribuerat en anpassad modell tas distributionen bort om distributionen förblir inaktiv i mer än femton (15) dagar. Distributionen av en anpassad modell är inaktiv om modellen distribuerades för mer än femton (15) dagar sedan och inga slutföranden eller samtal om chattavslut gjordes till den under en kontinuerlig 15-dagarsperiod.

Borttagningen av en inaktiv distribution tar inte bort eller påverkar inte den underliggande anpassade modellen, och den anpassade modellen kan distribueras om när som helst. Enligt beskrivningen i prissättningen för Azure OpenAI Service medför varje anpassad (finjusterad) modell som distribueras en timbaserad värdkostnad oavsett om slutföranden eller chattavslut görs till modellen. Mer information om hur du planerar och hanterar kostnader med Azure OpenAI finns i vägledningen i Planera för att hantera kostnader för Azure OpenAI Service.

Du kan använda olika metoder för att ta bort distributionen för din anpassade modell:

Ta bort din anpassade modell

På samma sätt kan du använda olika metoder för att ta bort din anpassade modell:

Kommentar

Du kan inte ta bort en anpassad modell om den har en befintlig distribution. Du måste först ta bort modelldistributionen innan du kan ta bort din anpassade modell.

Ta bort dina träningsfiler

Du kan också ta bort tränings- och valideringsfiler som du laddade upp för träning och resultatfiler som genererats under träningen från din Azure OpenAI-prenumeration. Du kan använda följande metoder för att ta bort dina tränings-, validerings- och resultatfiler:

I följande Python-exempel används Python SDK för att ta bort tränings-, validerings- och resultatfilerna för din anpassade modell:

print('Checking for existing uploaded files.')
results = []

# Get the complete list of uploaded files in our subscription.
files = openai.File.list().data
print(f'Found {len(files)} total uploaded files in the subscription.')

# Enumerate all uploaded files, extracting the file IDs for the
# files with file names that match your training dataset file and
# validation dataset file names.
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 our files and delete each file.
print(f'Deleting already uploaded files.')
for id in results:
    openai.File.delete(sid = id)

Kontinuerlig finjustering

När du har skapat en finjusterad modell kanske du vill fortsätta att förfina modellen över tid genom ytterligare finjustering. Kontinuerlig finjustering är den iterativa processen att välja en redan finjusterad modell som basmodell och finjustera den ytterligare på nya uppsättningar träningsexempel.

Om du vill finjustera en modell som du tidigare har finjusterat använder du samma process som beskrivs i skapa en anpassad modell, men i stället för att ange namnet på en allmän basmodell anger du din redan finjusterade modells ID. Det finjusterade modell-ID:t ser ut som gpt-35-turbo-0613.ft-5fd1918ee65d4cd38a5dcf6835066ed7

from openai import AzureOpenAI

client = AzureOpenAI(
  azure_endpoint = os.getenv("AZURE_OPENAI_ENDPOINT"), 
  api_key=os.getenv("AZURE_OPENAI_API_KEY"),  
  api_version="2024-02-01"  
)

response = client.fine_tuning.jobs.create(
    training_file=training_file_id,
    validation_file=validation_file_id,
    model="gpt-35-turbo-0613.ft-5fd1918ee65d4cd38a5dcf6835066ed7" # Enter base model name. Note that in Azure OpenAI the model name contains dashes and cannot contain dot/period characters. 
)

job_id = response.id

# You can use the job ID to monitor the status of the fine-tuning job.
# The fine-tuning job will take some time to start and complete.

print("Job ID:", response.id)
print("Status:", response.id)
print(response.model_dump_json(indent=2))

Vi rekommenderar också att du inkluderar parametern suffix för att göra det enklare att skilja mellan olika iterationer av din finjusterade modell. suffix tar en sträng och är inställd på att identifiera den finjusterade modellen. Med OpenAI Python API stöds en sträng på upp till 18 tecken som läggs till i ditt finjusterade modellnamn.

Om du är osäker på ID:t för din befintliga finjusterade modell kan den här informationen hittas på sidan Modeller i Azure OpenAI Studio, eller så kan du skapa en lista över modeller för en viss Azure OpenAI-resurs med hjälp av REST-API:et.

Förutsättningar

Kommentar

För närvarande måste du skicka ett program för att få åtkomst till Azure OpenAI Service. Om du vill ansöka om åtkomst fyller du i det här formuläret.

Modeller

Följande modeller stöder finjustering:

  • babbage-002
  • davinci-002
  • gpt-35-turbo (0613)
  • gpt-35-turbo (1106)
  • gpt-35-turbo (0125)
  • gpt-4 (0613)

Se sidan modeller för att kontrollera vilka regioner som för närvarande stöder finjustering.

Om du planerar att använda gpt-4 för finjustering kan du läsa riktlinjerna för säkerhetsutvärdering för GPT-4 för offentlig förhandsversion.

Granska arbetsflödet för REST-API:et

Ta en stund att granska arbetsflödet för finjustering för användning av REST APIS och Python med Azure OpenAI:

  1. Förbered dina tränings- och valideringsdata.
  2. Välj en basmodell.
  3. Ladda upp dina träningsdata.
  4. Träna din nya anpassade modell.
  5. Kontrollera statusen för din anpassade modell.
  6. Distribuera din anpassade modell för användning.
  7. Använd din anpassade modell.
  8. Du kan också analysera din anpassade modell för prestanda och passform.

Förbereda dina tränings- och valideringsdata

Dina uppsättningar med träningsdata och valideringsdata består av indata- och utdataexempel för hur du vill att modellen ska fungera.

Olika modelltyper kräver ett annat format för träningsdata.

De tränings- och valideringsdata som du använder måste formateras som ett JSON Lines-dokument (JSONL). För gpt-35-turbo-0613 och andra relaterade modeller måste finjusteringsdatauppsättningen formateras i konversationsformatet som används av API:et för chattslutsättningar .

Om du vill ha en stegvis genomgång av finjustering gpt-35-turbo-0613 läser du självstudiekursen för Finjustering i Azure OpenAI.

Exempel på filformat

{"messages": [{"role": "system", "content": "You are an Xbox customer support agent whose primary goal is to help users with issues they are experiencing with their Xbox devices. You are friendly and concise. You only provide factual answers to queries, and do not provide answers that are not related to Xbox."}, {"role": "user", "content": "Is Xbox better than PlayStation?"}, {"role": "assistant", "content": "I apologize, but I cannot provide personal opinions. My primary job is to assist you with any issues related to your Xbox device. Do you have any Xbox-related issues that need addressing?"}]}
{"messages": [{"role": "system", "content": "You are an Xbox customer support agent whose primary goal is to help users with issues they are experiencing with their Xbox devices. You are friendly and concise. You only provide factual answers to queries, and do not provide answers that are not related to Xbox."}, {"role": "user", "content": "Can I play PC games on my Xbox?"}, {"role": "assistant", "content": "While Xbox consoles don't natively support PC games, they can play an array of Xbox games, many of which are also available on PC. Can I assist you with finding games compatible with your Xbox device?"}]}
{"messages": [{"role": "system", "content": "You are an Xbox customer support agent whose primary goal is to help users with issues they are experiencing with their Xbox devices. You are friendly and concise. You only provide factual answers to queries, and do not provide answers that are not related to Xbox."}, {"role": "user", "content": "I'm having trouble connecting my Xbox to the Wi-Fi."}, {"role": "assistant", "content": "No worries, let's go through the network settings on your Xbox. Can you please tell me what happens when you try to connect it to the Wi-Fi?"}]}

Chattfilformat för flera svängar

Det finns också stöd för flera konversationer på en enda rad i jsonl-träningsfilen. Om du vill hoppa över finjustering av specifika assistentmeddelanden lägger du till det valfria weight nyckelvärdeparet. För närvarande weight kan ställas in på 0 eller 1.

{"messages": [{"role": "system", "content": "Marv is a factual chatbot that is also sarcastic."}, {"role": "user", "content": "What's the capital 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}]}

Förutom JSONL-formatet måste tränings- och valideringsdatafiler kodas i UTF-8 och innehålla ett byteordningsmärke (BOM). Filen måste vara mindre än 512 MB.

Skapa dina tränings- och valideringsdatauppsättningar

Ju fler träningsexempel du har, desto bättre. Finjusteringsjobb fortsätter inte utan minst 10 träningsexempel, men ett så litet antal räcker inte för att märkbart påverka modellsvar. Det är bästa praxis att tillhandahålla hundratals, om inte tusentals, träningsexempel för att lyckas.

I allmänhet kan en fördubbling av datamängdens storlek leda till en linjär ökning av modellkvaliteten. Men kom ihåg att exempel med låg kvalitet kan påverka prestanda negativt. Om du tränar modellen på en stor mängd interna data utan att först rensa datamängden för endast exempel av högsta kvalitet kan du få en modell som presterar mycket sämre än förväntat.

Välj basmodellen

Det första steget i att skapa en anpassad modell är att välja en basmodell. I fönstret Basmodell kan du välja en basmodell som ska användas för din anpassade modell. Ditt val påverkar både prestanda och kostnaden för din modell.

Välj basmodellen i listrutan Basmodelltyp och välj sedan Nästa för att fortsätta.

Du kan skapa en anpassad modell från någon av följande tillgängliga basmodeller:

  • babbage-002
  • davinci-002
  • gpt-35-turbo (0613)
  • gpt-35-turbo (1106)
  • gpt-35-turbo (0125)
  • gpt-4 (0613)

Eller så kan du finjustera en tidigare finjusterad modell, formaterad som base-model.ft-{jobid}.

Skärmbild av modellalternativ med en anpassad finjusterad modell.

Mer information om våra basmodeller som kan finjusteras finns i Modeller.

Ladda upp dina träningsdata

Nästa steg är att antingen välja befintliga förberedda träningsdata eller ladda upp nya förberedda träningsdata som ska användas när du finjusterar din modell. När du har förberett dina träningsdata kan du ladda upp dina filer till tjänsten. Det finns två sätt att ladda upp träningsdata:

För stora datafiler rekommenderar vi att du importerar från ett Azure Blob Store. Stora filer kan bli instabila när de laddas upp via formulär med flera delar eftersom begäranden är atomiska och inte kan göras om eller återupptas. Mer information om Azure Blob Storage finns i Vad är Azure Blob Storage?

Kommentar

Träningsdatafiler måste formateras som JSONL-filer, kodade i UTF-8 med ett byteordningsmärke (BOM). Filen måste vara mindre än 512 MB.

Ladda upp träningsdata

curl -X POST $AZURE_OPENAI_ENDPOINT/openai/files?api-version=2023-12-01-preview \
  -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"

Ladda upp valideringsdata

curl -X POST $AZURE_OPENAI_ENDPOINT/openai/files?api-version=2023-12-01-preview \
  -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"

Skapa en anpassad modell

När du har laddat upp dina tränings- och valideringsfiler är du redo att starta finjusteringsjobbet. Följande kod visar ett exempel på hur du skapar ett nytt finjusteringsjobb med REST-API:et.

I det här exemplet skickar vi även parametern seed. Fröet styr återgivningsbarheten för jobbet. Att skicka in samma parametrar för start- och jobb bör ge samma resultat, men kan skilja sig åt i sällsynta fall. Om ett frö inte har angetts genereras ett för dig.

curl -X POST $AZURE_OPENAI_ENDPOINT/openai/fine_tuning/jobs?api-version=2024-05-01-preview \
  -H "Content-Type: application/json" \
  -H "api-key: $AZURE_OPENAI_API_KEY" \
  -d '{
    "model": "gpt-35-turbo-0613", 
    "training_file": "<TRAINING_FILE_ID>", 
    "validation_file": "<VALIDATION_FILE_ID>",
    "seed": 105
}'

Du kan också skicka ytterligare valfria parametrar som hyperparametrar för att få större kontroll över finjusteringsprocessen. För inledande träning rekommenderar vi att du använder de automatiska standardvärden som finns utan att ange dessa parametrar.

De aktuella hyperparametrar som stöds för finjustering är:

Namn Typ Beskrivning
batch_size integer Batchstorleken som ska användas för träning. Batchstorleken är antalet träningsexempel som används för att träna ett enda framåt- och bakåtpass. I allmänhet har vi upptäckt att större batchstorlekar tenderar att fungera bättre för större datamängder. Standardvärdet samt det maximala värdet för den här egenskapen är specifika för en basmodell. En större batchstorlek innebär att modellparametrar uppdateras mindre ofta, men med lägre varians.
learning_rate_multiplier Nummer Den inlärningsfrekvensmultiplikator som ska användas för träning. Den finjusterande inlärningsfrekvensen är den ursprungliga inlärningsfrekvensen som används för förträning multiplicerat med det här värdet. Större inlärningsfrekvenser tenderar att fungera bättre med större batchstorlekar. Vi rekommenderar att du experimenterar med värden i intervallet 0,02 till 0,2 för att se vad som ger bäst resultat. En mindre inlärningsfrekvens kan vara användbar för att undvika överanpassning.
n_epochs integer Antalet epoker som modellen ska tränas för. En epok refererar till en fullständig cykel genom träningsdatauppsättningen.

Kontrollera statusen för din anpassade modell

När du har startat ett finjusterat jobb kan det ta lite tid att slutföra. Jobbet kan placeras i kö bakom andra jobb i systemet. Det kan ta minuter eller timmar att träna din modell beroende på modellens och datamängdens storlek. I följande exempel används REST-API:et för att kontrollera statusen för ditt finjusteringsjobb. Exemplet hämtar information om ditt jobb med hjälp av jobb-ID:t som returnerades från föregående exempel:

curl -X GET $AZURE_OPENAI_ENDPOINT/openai/fine_tuning/jobs/<YOUR-JOB-ID>?api-version=2024-05-01-preview \
  -H "api-key: $AZURE_OPENAI_API_KEY"

Visa en lista över finjusterande händelser

Så här undersöker du de enskilda finjusteringshändelser som genererades under träningen:

curl -X POST $AZURE_OPENAI_ENDPOINT/openai/fine_tuning/jobs/{fine_tuning_job_id}/events?api-version=2024-05-01-preview \
  -H "Content-Type: application/json" \
  -H "api-key: $AZURE_OPENAI_API_KEY" 

Kontrollpunkter

När varje träningsepooch har slutförts genereras en kontrollpunkt. En kontrollpunkt är en fullt fungerande version av en modell som både kan distribueras och användas som målmodell för efterföljande finjusteringsjobb. Kontrollpunkter kan vara särskilt användbara eftersom de kan ge en ögonblicksbild av din modell innan överanpassningen har inträffat. När ett finjusteringsjobb har slutförts har du de tre senaste versionerna av modellen som är tillgängliga för distribution. Den sista epoken kommer att representeras av din finjusterade modell, de föregående två epokerna kommer att vara tillgängliga som kontrollpunkter.

Du kan köra kommandot för kontrollpunkter i listan för att hämta listan över kontrollpunkter som är associerade med ett enskilt finjusteringsjobb:

curl -X POST $AZURE_OPENAI_ENDPOINT/openai/fine_tuning/jobs/{fine_tuning_job_id}/checkpoints?api-version=2024-05-01-preview \
  -H "Content-Type: application/json" \
  -H "api-key: $AZURE_OPENAI_API_KEY" 

Valv ty utvärdering GPT-4 finjustering - offentlig förhandsversion

GPT-4 är vår mest avancerade modell som kan finjusteras efter dina behov. Precis som med Azure OpenAI-modeller i allmänhet kommer de avancerade funktionerna i finjusterade modeller med ökade ansvarsfulla AI-utmaningar relaterade till skadligt innehåll, manipulering, mänskligt beteende, sekretessproblem med mera. Läs mer om risker, funktioner och begränsningar i översikten över ansvarsfulla AI-metoder och Transparensanteckning. För att minska riskerna med GPT-4-finjusterade modeller har vi implementerat ytterligare utvärderingssteg för att identifiera och förhindra skadligt innehåll i träning och utdata från finjusterade modeller. De här stegen baseras på innehållsfiltreringen Microsoft Responsible AI Standard och Azure OpenAI Service.

  • Utvärderingar utförs på dedikerade, kundspecifika, privata arbetsytor;
  • Utvärderingsslutpunkter finns i samma geografiska område som Azure OpenAI-resursen.
  • Träningsdata lagras inte i samband med utvärderingar. Endast den slutliga modellutvärderingen (distribuerbar eller inte distribuerbar) bevaras. Och

GPT-4 finjusterade modellutvärderingsfilter är inställda på fördefinierade tröskelvärden och kan inte ändras av kunder. de är inte knutna till någon anpassad innehållsfiltreringskonfiguration som du kanske har skapat.

Datautvärdering

Innan träningen börjar utvärderas dina data för potentiellt skadligt innehåll (våld, sexuellt, hat och rättvisa, självskadebeteende – se kategoridefinitioner här). Om skadligt innehåll identifieras över den angivna allvarlighetsnivån misslyckas ditt träningsjobb och du får ett meddelande som informerar dig om felkategorierna.

Exempelmeddelande:

The provided training data failed RAI checks for harm types: [hate_fairness, self_harm, violence]. Please fix the data and try again.

Dina träningsdata utvärderas automatiskt i ditt dataimportjobb som en del av att tillhandahålla finjusteringsfunktionen.

Om finjusteringsjobbet misslyckas på grund av identifiering av skadligt innehåll i träningsdata debiteras du inte.

Modellutvärdering

När träningen har slutförts men innan den finjusterade modellen är tillgänglig för distribution utvärderas den resulterande modellen för potentiellt skadliga svar med hjälp av Azures inbyggda risk- och säkerhetsmått. Med samma metod för testning som vi använder för de grundläggande stora språkmodellerna simulerar vår utvärderingsfunktion en konversation med din finjusterade modell för att bedöma potentialen att mata ut skadligt innehåll, återigen med hjälp av angivna kategorier av skadligt innehåll (våld, sexuellt, hat och rättvisa, självskadebeteende).

Om det visar sig att en modell genererar utdata som innehåller innehåll som identifierats som skadligt över en acceptabel hastighet, informeras du om att din modell inte är tillgänglig för distribution, med information om de specifika skadekategorier som identifierats:

Exempelmeddelande:

This model is unable to be deployed. Model evaluation identified that this fine tuned model scores above acceptable thresholds for [Violence, Self Harm]. Please review your training data set and resubmit the job.

Skärmbild av ett misslyckat finjusteringsjobb på grund av säkerhetsutvärdering

Precis som med datautvärdering utvärderas modellen automatiskt i ditt finjusteringsjobb som en del av att tillhandahålla finjusteringsfunktionen. Endast den resulterande utvärderingen (som kan distribueras eller inte kan distribueras) loggas av tjänsten. Om distributionen av den finjusterade modellen misslyckas på grund av identifiering av skadligt innehåll i modellutdata debiteras du inte för träningskörningen.

Distribuera en anpassad modell

Viktigt!

När du har distribuerat en anpassad modell tas distributionen bort om distributionen förblir inaktiv i mer än femton (15) dagar. Distributionen av en anpassad modell är inaktiv om modellen distribuerades för mer än femton (15) dagar sedan och inga slutföranden eller samtal om chattavslut gjordes till den under en kontinuerlig 15-dagarsperiod.

Borttagningen av en inaktiv distribution tar inte bort eller påverkar inte den underliggande anpassade modellen, och den anpassade modellen kan distribueras om när som helst. Enligt beskrivningen i prissättningen för Azure OpenAI Service medför varje anpassad (finjusterad) modell som distribueras en timbaserad värdkostnad oavsett om slutföranden eller chattavslut görs till modellen. Mer information om hur du planerar och hanterar kostnader med Azure OpenAI finns i vägledningen i Planera för att hantera kostnader för Azure OpenAI Service.

Följande Python-exempel visar hur du använder REST API för att skapa en modelldistribution för din anpassade modell. REST-API:et genererar ett namn för distributionen av din anpassade modell.

variabel Definition
token Det finns flera sätt att generera en auktoriseringstoken. Den enklaste metoden för inledande testning är att starta Cloud Shell från Azure-portalen. Kör sedan az account get-access-token. Du kan använda den här token som din tillfälliga auktoriseringstoken för API-testning. Vi rekommenderar att du lagrar detta i en ny miljövariabel
prenumeration Prenumerations-ID för den associerade Azure OpenAI-resursen
resource_group Resursgruppens namn för din Azure OpenAI-resurs
resource_name Azure OpenAI-resursnamnet
model_deployment_name Det anpassade namnet på din nya finjusterade modelldistribution. Det här är det namn som ska refereras till i koden när du gör samtal om chattens slutförande.
fine_tuned_model Hämta det här värdet från ditt finjusterande jobbresultat i föregående steg. Det kommer att se ut som gpt-35-turbo-0613.ft-b044a9d3cf9c4228b5d393567f693b83. Du måste lägga till det värdet i deploy_data json. Du kan också distribuera en kontrollpunkt genom att skicka kontrollpunkts-ID:t som visas i formatet 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=2023-05-01" \
  -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"
        }
    }
}'

Distribution mellan regioner

Finjustering stöder distribution av en finjusterad modell till en annan region än där modellen ursprungligen finjusterades. Du kan också distribuera till en annan prenumeration/region.

De enda begränsningarna är att den nya regionen också måste ha stöd för finjustering och när du distribuerar mellan prenumerationer måste kontot som genererar auktoriseringstoken för distributionen ha åtkomst till både käll- och målprenumerationerna.

Nedan visas ett exempel på hur du distribuerar en modell som har finjusterats i en prenumeration/region till en annan.

curl -X PUT "https://management.azure.com/subscriptions/<SUBSCRIPTION>/resourceGroups/<RESOURCE_GROUP>/providers/Microsoft.CognitiveServices/accounts/<RESOURCE_NAME>/deployments/<MODEL_DEPLOYMENT_NAME>api-version=2023-05-01" \
  -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",
            "source": "/subscriptions/{sourceSubscriptionID}/resourceGroups/{sourceResourceGroupName}/providers/Microsoft.CognitiveServices/accounts/{sourceAccount}" 
        }
    }
}'

För att distribuera mellan samma prenumeration, men olika regioner, skulle du bara ha prenumerations- och resursgrupper som är identiska för både käll- och målvariabler och endast käll- och målresursnamnen måste vara unika.

Distribuera en modell med Azure CLI

I följande exempel visas hur du använder Azure CLI för att distribuera din anpassade modell. Med Azure CLI måste du ange ett namn för distributionen av din anpassade modell. Mer information om hur du använder Azure CLI för att distribuera anpassade modeller finns i az cognitiveservices account deployment.

Om du vill köra det här Azure CLI-kommandot i ett konsolfönster måste du ersätta följande <platshållare> med motsvarande värden för din anpassade modell:

Platshållare Värde
<YOUR_AZURE_SUBSCRIPTION> Namnet eller ID:t för din Azure-prenumeration.
<YOUR_RESOURCE_GROUP> Namnet på din Azure-resursgrupp.
<YOUR_RESOURCE_NAME> Namnet på din Azure OpenAI-resurs.
<YOUR_DEPLOYMENT_NAME> Det namn som du vill använda för modelldistributionen.
<YOUR_FINE_TUNED_MODEL_ID> Namnet på din anpassade modell.
az cognitiveservices account deployment create 
    --resource-group <YOUR_RESOURCE_GROUP>
    --name <YOUR_RESOURCE_NAME>  
    --deployment-name <YOUR_DEPLOYMENT_NAME>
    --model-name <YOUR_FINE_TUNED_MODEL_ID>
    --model-version "1" 
    --model-format OpenAI 
    --sku-capacity "1" 
    --sku-name "Standard"

Använda en distribuerad anpassad modell

När din anpassade modell har distribuerats kan du använda den som vilken annan distribuerad modell som helst. Du kan använda Playgrounds i Azure OpenAI Studio för att experimentera med din nya distribution. Du kan fortsätta att använda samma parametrar med din anpassade modell, till exempel temperature och max_tokens, som du kan med andra distribuerade modeller. För finjusterade babbage-002 modeller och davinci-002 modeller använder du Lekplatsen För slutföranden och API:et För slutföranden. För finjusterade gpt-35-turbo-0613 modeller använder du CHATTlekplatsen och API:et för chattens slutförande.

curl $AZURE_OPENAI_ENDPOINT/openai/deployments/<deployment_name>/chat/completions?api-version=2023-05-15 \
  -H "Content-Type: application/json" \
  -H "api-key: $AZURE_OPENAI_API_KEY" \
  -d '{"messages":[{"role": "system", "content": "You are a helpful assistant."},{"role": "user", "content": "Does Azure OpenAI support customer managed keys?"},{"role": "assistant", "content": "Yes, customer managed keys are supported by Azure OpenAI."},{"role": "user", "content": "Do other Azure AI services support this too?"}]}'

Analysera din anpassade modell

Azure OpenAI bifogar en resultatfil med namnet results.csv till varje finjusterande jobb när det har slutförts. Du kan använda resultatfilen för att analysera tränings- och valideringsprestanda för din anpassade modell. Fil-ID:t för resultatfilen visas för varje anpassad modell och du kan använda REST-API:et för att hämta fil-ID:t och ladda ned resultatfilen för analys.

I följande Python-exempel används REST-API:et för att hämta fil-ID:t för den första resultatfilen som är kopplad till finjusteringsjobbet för din anpassade modell och laddar sedan ned filen till arbetskatalogen för analys.

curl -X GET "$AZURE_OPENAI_ENDPOINT/openai/fine_tuning/jobs/<JOB_ID>?api-version=2023-12-01-preview" \
  -H "api-key: $AZURE_OPENAI_API_KEY")
curl -X GET "$AZURE_OPENAI_ENDPOINT/openai/files/<RESULT_FILE_ID>/content?api-version=2023-12-01-preview" \
    -H "api-key: $AZURE_OPENAI_API_KEY" > <RESULT_FILENAME>

Resultatfilen är en CSV-fil som innehåller en rubrikrad och en rad för varje träningssteg som utförs av finjusteringsjobbet. Resultatfilen innehåller följande kolumner:

Kolumnnamn beskrivning
step Antalet träningssteg. Ett träningssteg representerar ett enda pass, framåt och bakåt, på en batch med träningsdata.
train_loss Förlusten för träningsbatchen.
train_mean_token_accuracy Procentandelen token i träningsbatchen som är korrekt förutsagd av modellen.
Om batchstorleken till exempel är inställd på 3 och dina data innehåller slutföranden [[1, 2], [0, 5], [4, 2]]anges det här värdet till 0,83 (5 av 6) om modellen förutsade [[1, 1], [0, 5], [4, 2]].
valid_loss Förlusten för valideringsbatchen.
validation_mean_token_accuracy Procentandelen token i valideringsbatchen som är korrekt förutsagd av modellen.
Om batchstorleken till exempel är inställd på 3 och dina data innehåller slutföranden [[1, 2], [0, 5], [4, 2]]anges det här värdet till 0,83 (5 av 6) om modellen förutsade [[1, 1], [0, 5], [4, 2]].
full_valid_loss Valideringsförlusten som beräknas i slutet av varje epok. När träningen går bra bör förlusten minska.
full_valid_mean_token_accuracy Den giltiga genomsnittliga tokennoggrannheten som beräknas i slutet av varje epok. När träningen går bra bör tokennoggrannheten öka.

Du kan också visa data i din results.csv-fil som diagram i Azure OpenAI Studio. Välj länken för din tränade modell så visas tre diagram: förlust, genomsnittlig tokennoggrannhet och tokennoggrannhet. Om du angav valideringsdata visas båda datauppsättningarna i samma diagram.

Leta efter din förlust att minska med tiden, och din noggrannhet att öka. Om du ser en skillnad mellan dina tränings- och valideringsdata som kan tyda på att du överanpassar. Prova att träna med färre epoker eller en mindre inlärningstaktsmultiplikator.

Rensa dina distributioner, anpassade modeller och träningsfiler

När du är klar med din anpassade modell kan du ta bort distributionen och modellen. Du kan också ta bort de tränings- och valideringsfiler som du laddade upp till tjänsten om det behövs.

Ta bort modelldistributionen

Du kan använda olika metoder för att ta bort distributionen för din anpassade modell:

Ta bort din anpassade modell

På samma sätt kan du använda olika metoder för att ta bort din anpassade modell:

Kommentar

Du kan inte ta bort en anpassad modell om den har en befintlig distribution. Du måste först ta bort modelldistributionen innan du kan ta bort din anpassade modell.

Ta bort dina träningsfiler

Du kan också ta bort tränings- och valideringsfiler som du laddade upp för träning och resultatfiler som genererats under träningen från din Azure OpenAI-prenumeration. Du kan använda följande metoder för att ta bort dina tränings-, validerings- och resultatfiler:

Kontinuerlig finjustering

När du har skapat en finjusterad modell kanske du vill fortsätta att förfina modellen över tid genom ytterligare finjustering. Kontinuerlig finjustering är den iterativa processen att välja en redan finjusterad modell som basmodell och finjustera den ytterligare på nya uppsättningar träningsexempel.

Om du vill finjustera en modell som du tidigare har finjusterat använder du samma process som beskrivs i skapa en anpassad modell, men i stället för att ange namnet på en allmän basmodell anger du din redan finjusterade modells ID. Det finjusterade modell-ID:t ser ut som gpt-35-turbo-0613.ft-5fd1918ee65d4cd38a5dcf6835066ed7

curl -X POST $AZURE_OPENAI_ENDPOINT/openai/fine_tuning/jobs?api-version=2023-12-01-preview \
  -H "Content-Type: application/json" \
  -H "api-key: $AZURE_OPENAI_API_KEY" \
  -d '{
    "model": "gpt-35-turbo-0613.ft-5fd1918ee65d4cd38a5dcf6835066ed7", 
    "training_file": "<TRAINING_FILE_ID>", 
    "validation_file": "<VALIDATION_FILE_ID>",
    "suffix": "<additional text used to help identify fine-tuned models>"
}'

Vi rekommenderar också att du inkluderar parametern suffix för att göra det enklare att skilja mellan olika iterationer av din finjusterade modell. suffix tar en sträng och är inställd på att identifiera den finjusterade modellen. Suffixet kan innehålla upp till 40 tecken (a-z, A-Z, 0-9 och _) som läggs till i ditt finjusterade modellnamn.

Om du är osäker på ID:t för din finjusterade modell kan den här informationen hittas på sidan Modeller i Azure OpenAI Studio, eller så kan du generera en lista över modeller för en viss Azure OpenAI-resurs med hjälp av REST-API:et.

Felsökning

Hur gör jag för att aktivera finjustering? Är skapa en anpassad modell nedtonad i Azure OpenAI Studio?

För att få åtkomst till finjusteringen behöver du Cognitive Services OpenAI-deltagare tilldelad. Även personer med behörigheter som tjänstadministratör på hög nivå skulle behöva det här kontot uttryckligen inställt för att få åtkomst till finjustering. Mer information finns i vägledningen för rollbaserad åtkomstkontroll.

Varför misslyckades min uppladdning?

Om filuppladdningen misslyckas i Azure OpenAI Studio kan du visa felmeddelandet under "datafiler" i Azure OpenAI Studio. Hovra musen över där det står "fel" (under statuskolumnen) och en förklaring av felet visas.

Skärmbild av felmeddelandet för finjustering.

Min finjusterade modell verkar inte ha förbättrats

  • Systemmeddelande saknas: Du måste ange ett systemmeddelande när du finjusterar. Du vill ange samma systemmeddelande när du använder den finjusterade modellen. Om du anger ett annat systemmeddelande kan du se andra resultat än vad du finjusterade för.

  • Inte tillräckligt med data: medan 10 är det minsta antalet för att pipelinen ska kunna köras behöver du hundratals till tusentals datapunkter för att lära modellen en ny färdighet. För få datapunkter riskerar överanpassning och dålig generalisering. Din finjusterade modell kan fungera bra på träningsdata, men dåligt på andra data eftersom den har memorerat träningsexemplen i stället för inlärningsmönster. För bästa resultat planerar du att förbereda en datauppsättning med hundratals eller tusentals datapunkter.

  • Dåliga data: En dåligt kurerad eller icke-representativ datauppsättning skapar en modell av låg kvalitet. Din modell kan lära sig felaktiga eller partiska mönster från din datauppsättning. Om du till exempel tränar en chattrobot för kundtjänst, men endast tillhandahåller träningsdata för ett scenario (t.ex. objektreturer) vet det inte hur du ska svara på andra scenarier. Eller om dina träningsdata är dåliga (innehåller felaktiga svar) lär sig din modell att ge felaktiga resultat.

Nästa steg

  • Utforska finjusteringsfunktionerna i självstudiekursen för finjustering av Azure OpenAI.
  • Granska regional tillgänglighet för finjusteringsmodellen
  • Läs mer om Azure OpenAI-kvoter