Dela via


Finjustera modeller med hjälp av serverlösa API-distributioner i Azure AI Foundry

Viktigt!

Objekt markerade (förhandsversion) i den här artikeln är för närvarande i offentlig förhandsversion. 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.

Lär dig hur du distribuerar finjusterade modeller med hjälp av serverlösa API-distributioner i Azure AI Foundry. Den här omfattande guiden visar hur du finjusterar stora språkmodeller till dina specifika datauppsättningar och distribuerar dem med serverlös infrastruktur, vilket ger bättre prestanda, kostnadseffektivitet, kortare svarstid och skräddarsydda utdata.

Kostnadseffektivitet: Azure AI Foundrys finjustering kan vara mer kostnadseffektiv, särskilt för storskaliga distributioner tack vare betalningsmodellen betalning per användning.

Modellvariativ: Azure AI Foundrys serverlösa API-distribution ger stöd för både proprietära modeller och modeller med öppen källkod, vilket ger användarna flexibilitet att välja de modeller som bäst passar deras behov utan att begränsas till en enda typ.

Anpassning och kontroll: Azure AI Foundry ger större anpassning och kontroll över finjusteringsprocessen, vilket gör att användarna kan skräddarsy modeller mer exakt efter sina specifika krav.

Den här artikeln beskriver hur du finjusterar modeller som distribueras med hjälp av serverlösa API-distributioner i Azure AI Foundry.

Förutsättningar

  • En Azure-prenumeration med en giltig betalningsmetod. Kostnadsfria azure-prenumerationer eller utvärderingsprenumerationer fungerar inte. Om du inte har en Azure-prenumeration skapar du ett betalt Azure-konto för att börja.

  • Åtkomst till Azure Portal.

  • Ett Azure AI Foundry-projekt.

  • Rollbaserade åtkomstkontroller i Azure (Azure RBAC) används för att ge åtkomst till åtgärder i Azure AI Foundry-portalen. Om du vill utföra stegen i den här artikeln måste ditt användarkonto tilldelas rollen ägare eller deltagare för Azure-prenumerationen. Mer information om behörigheter finns i rollbaserad åtkomstkontroll i Azure AI Foundry-portalen.

Verifiera registreringen av prenumerationsprovidern

Kontrollera att din prenumeration är registrerad på microsoft.network-resursprovidern .

  1. Logga in på Azure-portalen.
  2. Välj den prenumeration som du vill använda.
  3. Under Inställningar på sidomenyn väljer du Resursprovidrar.
  4. Välj Microsoft.Network och välj Registrera om det inte är registrerat.

Hitta modeller med stöd för finjustering

Ai Foundry-modellkatalogen erbjuder finjusteringsstöd för flera typer av modeller, inklusive chattavslut och textgenerering. En lista över modeller och regioner som stöder finjustering finns i Regiontillgänglighet för modeller i serverlösa API:er.

Finjusteringsuppgifter är endast tillgängliga för användare vars Azure-prenumeration tillhör ett faktureringskonto i en region där modellleverantören har erbjudandet tillgängligt. Om erbjudandet är tillgängligt i den relevanta regionen måste användaren ha en projektresurs i Azure-regionen där modellen är tillgänglig för distribution eller finjustering, i förekommande fall.

Du kan också gå till Azure AI Foundry-portalen för att visa alla modeller som innehåller finjusteringsstöd:

  1. Logga in på Azure AI Foundry.

  2. Om du inte redan är med i projektet väljer du det.

  3. Gå till modellkatalogen.

  4. Välj filtret för finjustering av uppgifter.

    Skärmbild av alternativ för finjustering av modellkatalogfilter.

  5. Välj Alla eller välj en specifik uppgift.

Förbereda data för finjustering

Förbered dina tränings- och valideringsdata för att finjustera din modell. Dina tränings- och valideringsdata består av indata och utdataexempel för hur du vill att modellen ska fungera.

Se till att alla dina träningsexempel följer det förväntade formatet för slutsats. För att finjustera modeller effektivt säkerställer du en mängd olika datamängder genom att upprätthålla databalans, inklusive olika scenarier, och regelbundet förfina träningsdata så att de överensstämmer med verkliga förväntningar. Dessa åtgärder leder slutligen till mer exakta och balanserade modellsvar.

Tips/Råd

Olika modelltyper kräver träningsdata i olika format.

Exempel på filformat

Filtypen som stöds är JSON Lines (JSONL). Filer laddas upp till standarddatalagringen och görs tillgängliga i projektet.

    {"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?"}]}

Använda guiden finjustera modell

Azure AI Foundry-portalen innehåller en anpassad modellguide så att du interaktivt kan skapa och träna en finjusterad modell för din Azure-resurs.

Välj basmodellen

  1. Välj Finjustering på sidomenyn och välj sedan + Finjustera modell.
  2. Välj den modell som du vill finjustera från listan under Basmodeller och välj sedan Nästa.

Välj din 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.

Välj + Lägg till träningsdata.

  • Om dina träningsdata redan har laddats upp till tjänsten väljer du Befintliga filer på den här resursen.
    • Välj filen från rullgardinslistan som visas.
  • Om du vill ladda upp nya träningsdata använder du något av följande alternativ:
    • Välj Ladda upp filer för att ladda upp träningsdata från en lokal fil.
    • Välj Azure blob eller andra delade webbplatser för att importera träningsdata från Azure Blob eller en annan delad webbplats.
  • Om du vill använda en färdig att använda datamängd för snabb finjustering, välja från listan under Välj data.

För stora datafiler rekommenderar vi att du importerar från en Azure Blob-lagring. Mer information om Azure Blob Storage finns i Vad är Azure Blob Storage?

Välj din valideringsdata

Nästa steg erbjuder alternativ för att konfigurera modellen så att valideringsdata används i träningsprocessen. Om du inte vill använda valideringsdata kan du välja Skicka för att fortsätta till de avancerade alternativen för modellen. Annars, om du har en valideringsdatamängd, kan du antingen välja befintliga förberedda valideringsdata eller ladda upp nya förberedda valideringsdata att använda när du anpassar din modell.

Välj + Lägg till valideringsdata. Valideringsdatapanelen visar befintliga, tidigare uppladdade tränings- och valideringsdatamängder och erbjuder alternativ för att ladda upp nya valideringsdata.

  • Om dina valideringsdata redan har laddats upp till tjänsten väljer du Befintliga filer på den här resursen.
    • Välj filen från listan som visas i Validation data-rutan.
  • Om du vill ladda upp nya valideringsdata använder du något av följande alternativ:
    • Välj Ladda upp filer för att ladda upp valideringsdata från en lokal fil.
    • Välj Azure blob eller andra delade webbplatser för att importera valideringsdata från Azure Blob eller en annan delad webbplats.

För stora datafiler rekommenderar vi att du importerar från en Azure Blob-lagring. Stora filer kan bli instabila när de laddas upp via flerdelade formulär eftersom förfrågningarna är atomära och inte kan försökas igen eller återupptas.

Anmärkning

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

Konfigurera aktivitetsparametrar

Guiden Finjustera modell visar parametrarna för att träna din finjusterade modell i fönstret Aktivitetsparametrar . Följande parametrar är tillgängliga:

Namn Typ Beskrivning
Batchstorlek (1–32) heltal Storleken på batchen som ska användas för träning. Batchstorleken är antalet träningsprover som används för att träna ett enskilt framåt- och bakåtpass. I allmänhet tenderar större batchstorlekar att fungera bättre för större datamängder. Standardvärdet och 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 mer sällan, men med lägre varians.
Multiplikator för inlärningshastighet (0,0–10,0) 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ärningshastigheter tenderar att prestera bättre med större batchstorlekar. Vi rekommenderar att experimentera med värden i intervallet 0,02 till 0,2 för att se vad som ger de bästa resultaten. En mindre inlärningsfrekvens kan vara användbar för att undvika överanpassning.
Antal epoker (1–10) heltal Antalet epoker som modellen ska tränas i. En epoch avser en full cykel genom träningsdatamängden.

Välj Standard för att använda standardvärdena för finjusteringsjobbet, eller välj Anpassad för att visa och redigera hyperparametervärdena. När standardinställningar väljs, bestämmer vi det korrekta värdet algoritmiskt baserat på din träningsdata.

När du har konfigurerat de avancerade alternativen väljer du Skicka.

Kontrollera statusen för din anpassade modell

Fliken Finjustering visar information om din anpassade modell. 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 instrumentpanelen för projekt som körs.

När du har startat ett finjusteringsjobb kan det ta lite tid att slutföra. Ditt jobb kan bli placerat i kö bakom andra jobb i systemet. Att träna din modell kan ta minuter eller timmar beroende på modellens och datamängdens storlek. Här är några av de uppgifter som du kan utföra på fliken Modeller :

  • Kontrollera statusen för finjusteringsjobbet för din anpassade modell i kolumnen Status på fliken Anpassade modeller .
  • I kolumnen modellnamn väljer du modellens namn 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 Uppdatera för att uppdatera informationen på sidan.

Skärmbild av instrumentpanelen för finjusteringsinformation.

Företagsscenarier som stöds för finjustering

Flera företagsscenarier stöds för finjustering av serverlös API-distribution. I följande tabell beskrivs de konfigurationer som stöds för användarlagringsnätverk och autentisering för att säkerställa smidig drift i företagsscenarier:

Anmärkning

  • Autentisering av dataanslutningar kan ändras via AI Foundry genom att välja den datalageranslutning där datamängden lagras och navigera till inställningenAutentiseringsmetod för >.
  • Lagringsautentisering kan ändras på sidan >Konfigurationer för Azure >>Tillåt åtkomst till lagringskontonyckel.
  • Lagringsnätverk kan ändras på sidan Azure Storage-nätverk>.
Lagringsnätverk Lagringsautentisering Autentisering av dataanslutning Stöd
Åtkomst till offentligt nätverk = Aktiverad Kontonyckeln är aktiverad SAS/kontonyckel Ja, UX och SDK
Åtkomst till offentligt nätverk = Aktiverad Kontonyckeln har inaktiverats Entra-baserad autentisering (utan referenser) Ja, UX och SDK

Obs! För UX kan du behöva lägga till Storage Blob Data Reader eller Storage Blob Data Contributor för ditt användar-ID på lagringskontot eller ändra anslutningens autentisering för att använda kontonyckel/SAS-token
Aktiverad från valda virtuella nätverk och IP-adresser Kontonyckeln är aktiverad Kontonyckel Ja, UX och SDK

Obs! För UX måste IP-adressen för den beräkning som kör webbläsaren finnas i den valda listan
Aktiverad från valda virtuella nätverk och IP-adresser Kontonyckeln är aktiverad SAS Ja, UX och SDK

Obs! För UX måste IP-adressen för den beräkning som kör webbläsaren finnas i den valda listan
Aktiverad från valda virtuella nätverk och IP-adresser Kontonyckeln har inaktiverats Entra-baserad autentisering (utan referenser) Ja, UX och SDK.

Obs! För UX kan du behöva lägga till Storage Blob Data Reader eller Storage Blob Data Contributor för ditt användar-ID på lagringskontot eller ändra anslutningens autentisering för att använda kontonyckel/SAS-token. Se också till att IP-adressen för den beräkning som kör webbläsaren måste finnas i den valda listan
Åtkomst till offentligt nätverk = Inaktiverad Kontonyckeln är aktiverad SAS/kontonyckel Ja, UX och SDK.

Obs! För att uppladdning och överföring av UX-data ska fungera måste arbetsytan nås inifrån det virtuella nätverk som har lämplig åtkomst till lagringen
Åtkomst till offentligt nätverk = Inaktiverad Kontonyckeln har inaktiverats Entra-baserad autentisering (utan referenser) Ja, UX och SDK.

Obs! För att uppladdning och överföring av UX-data ska fungera måste arbetsytan nås inifrån det virtuella nätverk som har lämplig åtkomst till lagringen

Föregående scenarier bör också fungera i en arbetsyta för hanterade virtuella nätverk. Mer information om hur du konfigurerar det hanterade virtuella nätverket AI Foundry Hub finns i Så här konfigurerar du ett hanterat nätverk för Azure AI Foundry-hubbar.

Att använda kundhanterade nycklar (CMK:er) är inte ett företagsscenario som stöds med finjustering av serverlös API-distribution.

Problem med finjustering med unika nätverksinstallationer på arbetsytan och lagring pekar vanligtvis på ett problem med nätverkskonfigurationen.


Distribuera en finjusterad modell

När finjusteringsjobbet har slutförts kan du distribuera den anpassade modellen från fliken Finjustering . 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 och är klar med slutpunkten, så ska du komma ihåg att rensa alla inaktiva slutpunkter. 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. Som beskrivs i prissättningen för Azure AI Foundry 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 AI Foundry finns i vägledningen i Planera och hantera kostnader för Azure AI Foundry Service.

Anmärkning

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.

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

Du kan också distribuera en finjusterad modell via fliken Modeller + slutpunkter genom att välja knappen Distribuera modell och sedan välja Distribuera finjusterad modell i listrutan

Skärmbild av instrumentpanelen för finjustering och hantering av distributioner.

Välj sedan den finjusterade modell som du vill distribuera och välj Distribuera.

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 eller region.

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

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

Använd en driftsatt 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 AI Foundry-portalen för att experimentera med din nya distribution. Du kan fortsätta att använda samma parametrar med din anpassade modell, till exempel temperatur och max_tokens, som du kan med andra distribuerade modeller.

Rensa dina finjusterade modeller

Du kan ta bort en finjusterad modell från listan med finjusteringsmodeller i Azure AI Foundry eller från sidan med modellinformation. Om du vill ta bort den finjusterade modellen från sidan Finjustering

  1. Välj Finjustering på sidomenyn i ditt Azure AI Foundry-projekt.
  2. Välj knappen Ta bort för att ta bort den finjusterade modellen.

Anmärkning

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

Skapa en klient för att använda modellen

Följande avsnitt beskriver hur du finjusterar en modell i python. Information om hur du hittar ett notebook-exempel på den här koden finns i Finjustera LLM med modellen som en tjänst.

  1. Installera beroenden för att börja finjustera din modell.
%pip install azure-ai-ml
%pip install azure-identity

%pip install mlflow
%pip install azureml-mlflow
  1. Skapa klienten för att använda modellen. I följande kod används en slutpunkts-URL och nyckel som lagras i miljövariabler. Ersätt <SUBSCRIPTION_ID>, <RESOURCE_GROUP_NAME> och <WORKSPACE_NAME> med dina egna värden.
from azure.ai.ml import MLClient
from azure.identity import (
    DefaultAzureCredential,
    InteractiveBrowserCredential,
)

try:
    credential = DefaultAzureCredential()
    credential.get_token("https://management.azure.com/.default")
except Exception as ex:
    credential = InteractiveBrowserCredential()

try:
    workspace_ml_client = MLClient.from_config(credential=credential)
except:
    workspace_ml_client = MLClient(
        credential,
        subscription_id="<SUBSCRIPTION_ID>",
        resource_group_name="<RESOURCE_GROUP_NAME>",
        workspace_name="<PROJECT_NAME OR WORKSPACE_NAME>",
    )

# The models, fine tuning pipelines and environments are available in various AzureML system registries,
# Example: Phi family of models are in "azureml", Llama family of models are in "azureml-meta" registry.
registry_ml_client = MLClient(credential, registry_name="azureml")

# Get AzureML workspace object.
workspace = workspace_ml_client._workspaces.get(workspace_ml_client.workspace_name)
workspace.id

Hitta modeller med stöd för finjustering

Ai Foundry-modellkatalogen erbjuder finjusteringsstöd för flera typer av modeller, inklusive chattavslut och textgenerering. En lista över modeller och regioner som stöder finjustering finns i Regiontillgänglighet för modeller i serverlösa API:er.

Finjusteringsuppgifter är endast tillgängliga för användare vars Azure-prenumeration tillhör ett faktureringskonto i en region där modellleverantören har erbjudandet tillgängligt. Om erbjudandet är tillgängligt i den relevanta regionen måste användaren ha en projektresurs i Azure-regionen där modellen är tillgänglig för distribution eller finjustering, i förekommande fall.

I det här exemplet används en Phi-4-mini-instruct-modell . I det här kodfragmentet skickas modellens modell-ID-egenskap som indata till finjusteringsjobbet. Detta är också tillgängligt som fältet Tillgångs-ID i modellinformationssidan i Azure AI Foundry Model Catalog.

model_name = "Phi-4-mini-instruct"
model_to_finetune = registry_ml_client.models.get(model_name, label="latest")
print(
    "\n\nUsing model name: {0}, version: {1}, id: {2} for fine tuning".format(
        model_to_finetune.name, model_to_finetune.version, model_to_finetune.id
    )
)

Förbereda data för finjustering

Förbered dina tränings- och valideringsdata för att finjustera din modell. Dina tränings- och valideringsdata består av indata och utdataexempel för hur du vill att modellen ska fungera.

Se till att alla dina träningsexempel följer det förväntade formatet för slutsats. För att finjustera modeller effektivt säkerställer du en mängd olika datamängder genom att upprätthålla databalans, inklusive olika scenarier, och regelbundet förfina träningsdata så att de överensstämmer med verkliga förväntningar. Dessa åtgärder leder slutligen till mer exakta och balanserade modellsvar.

Tips/Råd

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

Exempel på filformat

Filtypen som stöds är JSON Lines (JSONL). Filer laddas upp till standarddatalagringen och görs tillgängliga i projektet.

    {"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?"}]}

Skapa indata för träningsdata

Det här kodfragmentet visar hur du definierar en träningsdatauppsättning.

from azure.ai.ml.constants import AssetTypes
from azure.ai.ml.entities import Data

dataset_version = "1"
train_dataset_name = "chat_training_small"
try:
    train_data_asset = workspace_ml_client.data.get(
        train_dataset_name, version=dataset_version
    )
    print(f"Dataset {train_dataset_name} already exists")
except:
    print("creating dataset")
    train_data = Data(
        path=f"./train.jsonl",
        type=AssetTypes.URI_FILE,
        description="Training dataset",
        name=train_dataset_name,
        version="1",
    )
    train_data_asset = workspace_ml_client.data.create_or_update(train_data)

Skapa valideringsdata

Nästa steg erbjuder alternativ för att konfigurera modellen så att valideringsdata används i träningsprocessen. Om du inte vill använda valideringsdata kan du välja att hoppa över det här steget för att fortsätta till nästa avsnitt. Annars, om du har en valideringsdatamängd, kan du antingen välja befintliga förberedda valideringsdata eller ladda upp nya förberedda valideringsdata att använda när du anpassar din modell.

from azure.ai.ml.entities import Data

dataset_version = "1"
validation_dataset_name = "chat_validation_small"
try:
    validation_data_asset = workspace_ml_client.data.get(
        validation_dataset_name, version=dataset_version
    )
    print(f"Dataset {validation_dataset_name} already exists")
except:
    print("creating dataset")
    validation_data = Data(
        path=f"./validation.jsonl",
        type=AssetTypes.URI_FILE,
        description="Validation dataset",
        name=validation_dataset_name,
        version="1",
    )
    validation_data_asset = workspace_ml_client.data.create_or_update(validation_data)

Skapa marketplace-prenumeration för partnermodeller

Det här steget krävs för alla modeller som inte kommer från Microsoft. Ett exempel på en Microsoft-modell är Phi-serien med modeller.

model_id_to_subscribe = "/".join(model_to_finetune.id.split("/")[:-2])
print(model_id_to_subscribe)

normalized_model_name = model_name.replace(".", "-")

from azure.ai.ml.entities import MarketplaceSubscription


subscription_name = f"{normalized_model_name}-sub"

marketplace_subscription = MarketplaceSubscription(
    model_id=model_id_to_subscribe,
    name=subscription_name,
)

# note: this will throw exception if the subscription already exists or subscription is not required (for example, if the model is not in the marketplace like Phi family)
try:
    marketplace_subscription = (
        workspace_ml_client.marketplace_subscriptions.begin_create_or_update(
            marketplace_subscription
        ).result()
    )
except Exception as ex:
    print(ex)

Skicka finjusteringsjobbet med modellen och data som indata

Följande uppsättning parametrar krävs för att finjustera din modell.

  • model: Basmodell för finjustering
  • training_data: Träningsdata för finjustering av basmodellen
  • validation_data: Valideringsdata för finjustering av basmodellen
  • task: Finjusteringsuppgift att utföra, till exempel CHAT_COMPLETION för finjustering av chattavslutningsjobb
  • outputs: Namn på registrerad modell för utdata

Följande parametrar är valfria:

  • hyperparameters: Parametrar som styr finjusteringsbeteendet vid körning
  • name: Finjustering av jobbnamn
  • experiment_name: Experimentnamn för finjusteringsjobb
  • display_name: Visningsnamn för finjusteringsjobb
from azure.ai.ml.finetuning import FineTuningTaskType, create_finetuning_job
import uuid

guid = uuid.uuid4()
short_guid = str(guid)[:8]
display_name = f"{model_name}-display-name-{short_guid}-from-sdk"
name = f"{model_name}t-{short_guid}-from-sdk"
output_model_name_prefix = f"{model_name}-{short_guid}-from-sdk-finetuned"
experiment_name = f"{model_name}-from-sdk"

finetuning_job = create_finetuning_job(
    task=FineTuningTaskType.CHAT_COMPLETION,
    training_data=train_data_asset.id,
    validation_data=validation_data_asset.id,
    hyperparameters={
        "per_device_train_batch_size": "1",
        "learning_rate": "0.00002",
        "num_train_epochs": "1",
    },
    model=model_to_finetune.id,
    display_name=display_name,
    name=name,
    experiment_name=experiment_name,
    tags={"foo_tag": "bar"},
    properties={"my_property": "my_value"},
    output_model_name_prefix=output_model_name_prefix,
created_job = workspace_ml_client.jobs.create_or_update(finetuning_job)
workspace_ml_client.jobs.get(created_job.name)

status = workspace_ml_client.jobs.get(created_job.name).status

import time

while True:
    status = workspace_ml_client.jobs.get(created_job.name).status
    print(f"Current job status: {status}")
    if status in ["Failed", "Completed", "Canceled"]:
        print("Job has finished with status: {0}".format(status))
        break
    else:
        print("Job is still running. Checking again in 30 seconds.")
        time.sleep(30)
finetune_model_name = created_job.outputs["registered_model"]["name"]
finetune_model_name

Distribuera en finjusterad modell

När finjusteringsjobbet har slutförts kan du distribuera den anpassade modellen.

Viktigt!

När du har distribuerat en anpassad modell och är klar med slutpunkten, så ska du komma ihåg att rensa alla inaktiva slutpunkter. 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. Som beskrivs i prissättningen för Azure AI Foundry 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 AI Foundry finns i vägledningen i Planera och hantera kostnader för Azure AI Foundry-hubbar.

# Deploy the model as a serverless endpoint

endpoint_name = f"{normalized_model_name}-ft-{short_guid}"  # Name must be unique
model_id = f"azureml://locations/{workspace.location}/workspaces/{workspace._workspace_id}/models/{finetune_model_name}/versions/1"

Företagsscenarier som stöds för finjustering

Flera företagsscenarier stöds för finjustering av serverlös API-distribution. I följande tabell beskrivs de konfigurationer som stöds för användarlagringsnätverk och autentisering för att säkerställa smidig drift i företagsscenarier:

Anmärkning

  • Autentisering av dataanslutningar kan ändras via AI Foundry genom att klicka på datalagringsanslutningen där datamängden lagras och navigera till inställningenAutentiseringsmetod för >.
  • Lagringsautentisering kan ändras på sidan >Konfigurationer för Azure >>Tillåt åtkomst till lagringskontonyckel.
  • Lagringsnätverk kan ändras på sidan Azure Storage-nätverk>.
Lagringsnätverk Lagringsautentisering Autentisering av dataanslutning Stöd
Åtkomst till offentligt nätverk = Aktiverad Kontonyckeln är aktiverad SAS/kontonyckel Ja, UX och SDK
Åtkomst till offentligt nätverk = Aktiverad Kontonyckeln har inaktiverats Entra-baserad autentisering (utan referenser) Ja, UX och SDK

Obs! För UX kan du behöva lägga till Storage Blob Data Reader eller Storage Blob Data Contributor för ditt användar-ID på lagringskontot eller ändra anslutningens autentisering för att använda kontonyckel/SAS-token
Aktiverad från valda virtuella nätverk och IP-adresser Kontonyckeln är aktiverad Kontonyckel Ja, UX och SDK

Obs! För UX måste IP-adressen för den beräkning som kör webbläsaren finnas i den valda listan
Aktiverad från valda virtuella nätverk och IP-adresser Kontonyckeln är aktiverad SAS Ja, UX och SDK

Obs! För UX måste IP-adressen för den beräkning som kör webbläsaren finnas i den valda listan
Aktiverad från valda virtuella nätverk och IP-adresser Kontonyckeln har inaktiverats Entra-baserad autentisering (utan referenser) Ja, UX och SDK.

Obs! För UX kan du behöva lägga till Storage Blob Data Reader eller Storage Blob Data Contributor för ditt användar-ID på lagringskontot, eller ändra anslutningens autentisering för att använda kontonyckel/SAS-token. Se också till att IP-adressen för den beräkning som kör webbläsaren måste finnas i den valda listan
Åtkomst till offentligt nätverk = Inaktiverad Kontonyckeln är aktiverad SAS/kontonyckel Ja, UX och SDK.

Obs! För att uppladdning och överföring av UX-data ska fungera måste arbetsytan nås inifrån det virtuella nätverk som har lämplig åtkomst till lagringen
Åtkomst till offentligt nätverk = Inaktiverad Kontonyckeln har inaktiverats Entra-baserad autentisering (utan referenser) Ja, UX och SDK.

Obs! För att uppladdning och överföring av UX-data ska fungera måste arbetsytan nås inifrån det virtuella nätverk som har lämplig åtkomst till lagringen

Föregående scenarier bör också fungera i en arbetsyta för hanterade virtuella nätverk. Mer information om hur du konfigurerar det hanterade virtuella nätverket AI Foundry Hub finns i Så här konfigurerar du ett hanterat nätverk för Azure AI Foundry Hubs.

Att använda kundhanterade nycklar (CMK:er) är inte ett företagsscenario som stöds med finjustering av serverlös API-distribution.

Problem med finjustering med unika nätverksinstallationer på arbetsytan och lagring pekar vanligtvis på ett problem med nätverkskonfigurationen.

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 eller region.

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

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


# Create Cross region FT deployment client
from azure.ai.ml.entities import ServerlessEndpoint
from azure.ai.ml import MLClient
from azure.identity import (
    DefaultAzureCredential,
    InteractiveBrowserCredential,
)

try:
    credential = DefaultAzureCredential()
    credential.get_token("https://management.azure.com/.default")
except Exception as ex:
    credential = InteractiveBrowserCredential()
try:
    workspace_ml_client = MLClient.from_config(credential=credential)
except:
    workspace_ml_client = MLClient(
        credential,
        subscription_id="<TARGET_SUBSCRIPTION_ID>",
        resource_group_name="<TARGET_RESOURCE_GROUP_NAME>",
        workspace_name="<TARGET_PROJECT_NAME>",
    )

workspace = workspace_ml_client._workspaces.get(workspace_ml_client.workspace_name)
workspace_region = workspace.location
model_to_finetune.tags
supported_regions = model_to_finetune.tags["maas-finetuning-deploy-regions"]
supported_regions
if workspace_region in supported_regions:
    print(f"Creating endpoint in the region:{workspace_region}")
    serverless_endpoint = ServerlessEndpoint(name=endpoint_name, model_id=model_id)
    created_endpoint = workspace_ml_client.serverless_endpoints.begin_create_or_update(
        serverless_endpoint
    ).result()
else:
    raise ValueError(
        f"For the model : {model_to_finetune}, the target region: {workspace_region} is not supported for deployment, the supported regions: {supported_regions}"
    )

Använd en driftsatt anpassad modell

När din anpassade modell har distribuerats kan du använda den som vilken annan distribuerad modell som helst. 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.

endpoint = workspace_ml_client.serverless_endpoints.get(endpoint_name)
endpoint_keys = workspace_ml_client.serverless_endpoints.get_keys(endpoint_name)
auth_key = endpoint_keys.primary_key

import requests

url = f"{endpoint.scoring_uri}/v1/chat/completions"

payload = {
    "max_tokens": 1024,
    "messages": [
        {
            "content": "This script is great so far. Can you add more dialogue between Amanda and Thierry to build up their chemistry and connection?",
            "role": "user",
        }
    ],
}
headers = {"Content-Type": "application/json", "Authorization": f"{auth_key}"}

response = requests.post(url, json=payload, headers=headers)

response.json()

Rensa dina finjusterade modeller

När du är klar med din modell kör du följande kod för att rensa din finjusterade modell.

workspace_ml_client.serverless_endpoints.begin_delete(endpoint_name).result()

Kostnads- och kvotöverväganden för modeller som distribueras som en serverlös API-distribution

Kvot hanteras per utplacering. Varje distribution har en hastighetsgräns på 200 000 token per minut och 1 000 API-begäranden per minut. För närvarande begränsar vi dock en distribution per modell per projekt. Kontakta Microsoft Azure Support om de aktuella hastighetsgränserna inte räcker för dina scenarier.

Kostnad för Microsoft-modeller

Du hittar prisinformationen på fliken Priser och villkor i distributionsguiden när du distribuerar Microsoft-modeller (till exempel Phi-3-modeller) som en serverlös API-distribution.

Kostnad för modeller som inte kommer från Microsoft

Icke-Microsoft-modeller som distribueras som en serverlös API-distribution erbjuds via Azure Marketplace och integreras med Azure AI Foundry för användning. Du hittar priser för Azure Marketplace när du distribuerar eller finjusterar dessa modeller.

Varje gång ett projekt prenumererar på ett visst erbjudande från Azure Marketplace skapas en ny resurs för att spåra de kostnader som är kopplade till förbrukningen. Samma resurs används för att spåra kostnader som är kopplade till slutsatsdragning och finjustering. Flera mätare är dock tillgängliga för att spåra varje scenario oberoende av varandra.

Mer information om hur du spårar kostnader finns i Övervaka kostnader för modeller som erbjuds via Azure Marketplace.

Skärmbild som visar olika resurser som motsvarar olika modellerbjudanden och deras associerade mätare.

Exempel på anteckningsbok

Du kan använda den här exempelanteckningsboken för att skapa ett fristående finjusteringsjobb för att förbättra en modells förmåga att sammanfatta dialoger mellan två personer med hjälp av Samsum-datauppsättningen.

Träningsdatan som används är ultrachat_200k-datasetet, som är uppdelat i fyra delar som är lämpliga för övervakad finjustering (sft) och generations-rankning (gen). Notebook-filen använder tillgängliga Azure AI-modeller för chattens slutförande (Om du vill använda en annan modell än vad som används i notebook-filen kan du ersätta modellnamnet).

Notebook-filen innehåller krav för att konfigurera, välja en modell för att finjustera, skapa tränings- och valideringsdatauppsättningar, konfigurera och skicka finjusteringsjobbet och slutligen skapa en serverlös distribution med hjälp av den finjusterade modellen för exempelinferens.

Cli-exempel

Dessutom kan du använda det här cli-exemplet för att skapa ett fristående finjusteringsjobb för att förbättra en modells förmåga att sammanfatta dialoger mellan två personer med hjälp av en datauppsättning.

type: finetuning

name: "Phi-3-mini-4k-instruct-with-amlcompute"
experiment_name: "Phi-3-mini-4k-instruct-finetuning-experiment"
display_name: "Phi-3-mini-4k-instruct-display-name"
task: chat_completion
model_provider: custom
model: 
  path: "azureml://registries/azureml/models/Phi-3-mini-4k-instruct/versions/14"
  type: mlflow_model
training_data: train.jsonl
validation_data:
  path: validation.jsonl
  type: uri_file
hyperparameters:
  num_train_epochs: "1"
  per_device_train_batch_size: "1"
  learning_rate: "0.00002"
properties:
  my_property: "my_value"
tags:
  foo_tag: "bar"
outputs:
  registered_model:
    name: "Phi-3-mini-4k-instruct-finetuned-model"
    type: mlflow_model 

Träningsdata som används är desamma som de som visas i SDK-notebook-filen. CLI använder tillgängliga Azure AI-modeller för chattens slutförandeaktivitet. Om du föredrar att använda en annan modell än den i CLI-exemplet kan du uppdatera argumenten, till exempel model path, i enlighet med detta.

Innehållsfiltrering

Serverlösa API-distributionsmodeller skyddas av Azure AI Content Safety. När det implementeras till realtidsslutpunkter kan du välja att inte använda den här funktionen.

Med Azure AI Content Safety aktiverat passerar både prompten och slutförandet genom en uppsättning klassificeringsmodeller som syftar till att identifiera och förhindra utdata från skadligt innehåll. Systemet för innehållsfiltrering identifierar och vidtar åtgärder för specifika kategorier av potentiellt skadligt innehåll i både inkommande prompter och slutföranden av utdata.

Mer information om Azure AI Content Safety finns i Innehållsfiltrering i Azure AI Foundry-portalen.