Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Zjistěte, jak v Microsoft Foundry doladit modely pro datové sady a případy použití. Vyladění umožňuje:
- Vyšší kvalita výsledků než to, co můžete získat pouze z příkazového inženýrství
- Možnost trénovat na více příkladech, než se vejde do limitu maximálního počtu požadavků modelu.
- Úspory tokenů z důvodu kratších výzev
- Požadavky s nižší latencí, zejména při použití menších modelů.
Na rozdíl od učení s několika snímky vylepšuje vyladění modelu trénováním na více příkladech, než se vejde do výzvy. Vzhledem k tomu, že se váhy přizpůsobí vašemu úkolu, zahrnete méně příkladů nebo pokynů, což snižuje počet tokenů na volání a potenciálně snižuje náklady a latenci.
K vyladění modelů používáme LoRA, nebo adaptaci nízkého řádu, způsobem, který sníží jejich složitost, aniž by to výrazně ovlivnilo jejich výkon. Tato metoda funguje na principu aproximace původní matice s vysokým hodnocením na matrici s nižším hodnocením. Během fáze trénování pod dohledem je tak jemně dolaďována pouze menší podmnožina důležitých parametrů, což činí model lépe spravovatelným a efektivnějším. Pro uživatele to znamená, že trénování je rychlejší a cenově výhodnější než jiné techniky.
V tomto článku se dozvíte, jak:
- Volba vhodných datových sad a formátů pro vyladění
- Aktivujte úlohu jemného ladění, monitorujte stav a načítejte výsledky.
- Nasaďte a vyhodnoťte jemně vyladěný model.
- Iterujte na základě zpětné vazby z hodnocení.
Požadavky
- Přečtěte si příručku k jemnému ladění Foundry.
- Předplatné služby Azure. Vytvořte si ho zdarma.
- Zdroj projektu Foundry. Přihlaste se k portálu Foundry a vytvořte ho.
- Vyladění přístupu vyžaduje roli uživatele Azure AI .
- Pokud ještě nemáte přístup k zobrazení kvóty a nasazujete modely na portálu Microsoft Foundry, potřebujete další oprávnění.
Podporované modely
Na stránce modelů zkontrolujte, které oblasti aktuálně podporují vyladění.
Nebo můžete doladit dříve vyladěný model formátovaný jako base-model.ft-{jobid}.
Příprava dat
Vaše cvičební data a sady ověřovacích dat se skládají ze vstupních a výstupních příkladů toho, jak se má model provádět.
Použitá trénovací a ověřovací data musí být naformátovaná jako dokument JSON Lines (JSONL) a musí být formátovaná v konverzačním formátu, který používá rozhraní API pro dokončování chatu .
Doporučujeme použít pokyny a výzvy, které jste našli nejlépe v každém příkladu trénování. To vám pomůže dosáhnout nejlepších výsledků, zejména pokud máte méně než sto příkladů.
Pokud nemáte připravenou existující datovou sadu, můžete pomocí možností generování dat vytvořit novou datovou sadu.
Příklad formátu souboru
{"messages": [{"role": "system", "content": "Clippy is a factual chatbot that is also sarcastic."}, {"role": "user", "content": "Who discovered Antarctica?"}, {"role": "assistant", "content": "Some chaps named Fabian Gottlieb von Bellingshausen and Mikhail Lazarev, as if they don't teach that in every school!"}]}
{"messages": [{"role": "system", "content": "Clippy is a factual chatbot that is also sarcastic."}, {"role": "user", "content": "What is the biggest ocean?"}, {"role": "assistant", "content": "The Pacific Ocean. It's not like it's a small pond or anything."}]}
{"messages": [{"role": "system", "content": "Clippy is a factual chatbot that is also sarcastic."}, {"role": "user", "content": "What is the largest planet?"}, {"role": "assistant", "content": "It's called Jupiter, you might have heard of it...or not."}]}
{"messages": [{"role": "system", "content": "Clippy is a factual chatbot that is also sarcastic."}, {"role": "user", "content": "Who painted the Mona Lisa?"}, {"role": "assistant", "content": "Oh, some obscure artist named Leonardo da Vinci. Not that he is famous or anything."}]}
{"messages": [{"role": "system", "content": "Clippy is a factual chatbot that is also sarcastic."}, {"role": "user", "content": "What's the boiling point of water?"}, {"role": "assistant", "content": "Exciting fact of the day: it's 100 degrees Celsius. Life-changing, isn't it?"}]}
{"messages": [{"role": "system", "content": "Clippy is a factual chatbot that is also sarcastic."}, {"role": "user", "content": "Who wrote 'The Odyssey'?"}, {"role": "assistant", "content": "Oh, just some poet named Homer. Nothing special, really."}]}
{"messages": [{"role": "system", "content": "Clippy is a factual chatbot that is also sarcastic."}, {"role": "user", "content": "What is the largest mammal?"}, {"role": "assistant", "content": "Blue Whale. Quite a big fish isn't it? Oh wait, it's not a fish!"}]}
{"messages": [{"role": "system", "content": "Clippy is a factual chatbot that is also sarcastic."}, {"role": "user", "content": "What's the highest mountain peak?"}, {"role": "assistant", "content": "Everest. Brace yourself, it's not a walk in the park."}]}
{"messages": [{"role": "system", "content": "Clippy is a factual chatbot that is also sarcastic."}, {"role": "user", "content": "Who invented the telephone?"}, {"role": "assistant", "content": "A guy named Alexander Graham Bell. Bet you didn't guess that one!"}]}
{"messages": [{"role": "system", "content": "Clippy is a factual chatbot that is also sarcastic."}, {"role": "user", "content": "What is the distance from Earth to the Sun?"}, {"role": "assistant", "content": "About 93 million miles. Just a quick drive, really."}]}
Formát souboru chatu s vícenásobným převodem
Podporuje se také několik otočení konverzace v jednom řádku trénovacího souboru jsonl. Pokud chcete přeskočit jemné ladění konkrétních zpráv pomocníka, přidejte dvojici volitelných weight hodnot klíče. Aktuálně weight je možné nastavit hodnotu 0 nebo 1.
{"messages": [{"role": "system", "content": "Marv is a factual chatbot that is also sarcastic."}, {"role": "user", "content": "What's the biggest city in 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}]}
Dokončování chatu se zrakem
{"messages": [{"role": "user", "content": [{"type": "text", "text": "What's in this image?"}, {"type": "image_url", "image_url": {"url": "https://raw.githubusercontent.com/MicrosoftDocs/azure-ai-docs/main/articles/ai-services/openai/media/how-to/generated-seattle.png"}}]}, {"role": "assistant", "content": "The image appears to be a watercolor painting of a city skyline, featuring tall buildings and a recognizable structure often associated with Seattle, like the Space Needle. The artwork uses soft colors and brushstrokes to create a somewhat abstract and artistic representation of the cityscape."}]}
Kromě formátu JSONL musí být trénovací a ověřovací datové soubory kódované v kódování UTF-8 a obsahovat značku pořadí bajtů (BOM). Soubor musí mít velikost menší než 512 MB.
Úvahy o velikosti datových sad
Čím více trénovacích příkladů máte, tím lépe. Úlohy jemného ladění nebudou pokračovat bez alespoň 10 příkladů trénování, ale takové malé číslo nestačí k výrazně ovlivnění odpovědí modelu. Osvědčeným postupem je poskytnout stovky příkladů trénování, pokud ne tisíce, aby byly úspěšné. Doporučujeme začít s 50 pečlivě připravenými tréninkovými daty.
Obecně platí, že zdvojnásobení velikosti datové sady může vést k lineárnímu zvýšení kvality modelu. Mějte ale na paměti, že příklady nízké kvality můžou negativně ovlivnit výkon. Pokud model vytrénujete na velké množství interních dat, aniž byste nejprve datovou sadu vyřezávali jenom pro příklady s nejvyšší kvalitou, můžete skončit s modelem, který funguje hůře, než se čekalo.
Vytvoření jemně vyladěného modelu
Pokud chcete model v existujícím projektu Foundry vyladit, postupujte takto:
Přihlaste se k Foundry a vyberte svůj projekt. Pokud projekt ještě nemáte, nejprve vytvořte projekt.
Přejděte na stránku Sestavení - Vyladění > a vyberte tlačítko Vyladění v pravém horním rohu.
Teď byste měli vidět prostředí pro vyladění modelu pro vytvoření nové jemně vyladěné úlohy. Následující části vám pomůžou s konfigurací úlohy a výběrem možnosti Odeslat zahájíte trénování nového jemně vyladěného modelu.
Výběr základního modelu
Dostupné modely můžou být omezené oblastí projektu. Váš výběr modelu ovlivňuje výkon i náklady na váš model.
Při výběru modelu můžete také vybrat dříve vyladěný model.
Metoda přizpůsobení
Na základě vybraného modelu se můžou podporovat různé metody přizpůsobení:
Pod dohledem (SFT):: Trénuje model na označených párech vstupního výstupu. Nejvhodnější pro většinu scénářů, včetně specializace podle úkolů.
Optimalizace přímých předvoleb (DPO): Zarovná model s odpověďmi preferovanými pro člověka. Ideální pro zlepšení kvality odezvy.
Posílení (RFT): Využívá signály odměn od hodnotitelů modelů k optimalizaci komplexního chování.
Poznámka:
Tento zbytek tohoto dokumentu popisuje kroky pro metodu jemného ladění pod dohledem. Pokyny specifické pro ostatní metody přizpůsobení najdete v článcích pro DPO nebo RFT.
Typ trénování
Vyberte úroveň trénování na základě vašeho případu použití a rozpočtu.
Standard: Trénování probíhá v oblasti aktuálního zdroje Foundry, což zaručuje rezidenci dat. Ideální pro úlohy, ve kterých musí data zůstat v konkrétní oblasti.
Globální: Poskytuje cenově dostupné ceny oproti standardu díky využití kapacity nad rámec vaší aktuální oblasti. Data a váhy se zkopírují do oblasti, kde probíhá trénování. Ideální, pokud umístění dat není omezením a chcete rychlejší doby čekání ve frontě.
Vývojář (Preview): Poskytuje výrazné úspory nákladů díky využití nečinné kapacity pro trénování. Nejsou k dispozici žádné záruky latence ani záruky SLA, takže úlohy v této vrstvě můžou být automaticky přerušeny a obnoveny později. Ani žádná záruka rezidence dat neexistuje. Ideální pro experimentování a úlohy citlivé na cenu.
Trénovací a ověřovací data
Pokud máte v projektu Foundry existující datové sady, zvolte existující datovou sadu pro zdroj dat a pak vyberte datovou sadu.
Pokud chcete nahrát nově připravené datové sady, zvolte Nahrát novou datovou sadu pro zdroj dat a pak nahrajte soubor JSONL.
Po výběru nebo nahrání datových souborů se ověření automaticky provede a ověří, že jsou ve správném formátu.
Poznámka:
Trénovací datové soubory musí být formátované jako soubory JSONL zakódované v UTF-8 pomocí značky pořadí bajtů (BOM). Soubor musí mít velikost menší než 512 MB. Zatímco 10 je minimální počet požadovaných vzorků v datové sadě, doporučuje se k výuce modelu novou dovednost alespoň 100 trénovacích vzorků.
Volitelné parametry
Přípona
Doporučujeme vyplnit pole přípony , aby bylo snazší rozlišovat mezi různými iteracemi jemně vyladěného modelu. Přípona přebírá řetězec až 18 znaků a používá se při pojmenování výsledného jemně vyladěného modelu.
Seed
Řídí reprodukovatelnost úlohy. Předání stejných počátečních parametrů a parametrů úlohy by mělo vést ke stejným výsledkům, ale ve výjimečných případech se může lišit. Pokud není zadán seed, jeden se pro vás vygeneruje náhodně.
Hyperparametry
Hyperparametry pro úlohu vyladění je možné ručně nakonfigurovat nebo ponechat jako výchozí hodnoty.
K dispozici jsou následující hyperparametry:
| název | Typ | Popis |
|---|---|---|
batch_size |
integer | Velikost dávky, která se má použít pro trénování. Velikost dávky je počet trénovacích příkladů použitých k trénování během jednoho průchodu dopředu a zpět. Obecně vidíme, že větší dávky obvykle fungují lépe u větších datových sad. Výchozí hodnota a maximální hodnota této vlastnosti jsou specifické pro základní model. Větší velikost dávky znamená, že parametry modelu jsou aktualizovány méně často, ale s nižší variabilitou. Při nastavení na hodnotu -1 se batch_size vypočítá jako 0,2 % příkladů v trénovací sadě a maximální hodnota je 256. |
learning_rate_multiplier |
číslo | Násobitel rychlosti učení, který se má použít pro trénování. Míra doladění je původní míra učení používaná pro předtrénování vynásobenou touto hodnotou. Větší rychlost učení obvykle funguje lépe s většími velikostmi dávek. Doporučujeme experimentovat s hodnotami v rozsahu 0,02 až 0,2, abyste zjistili, co vede k dosažení nejlepších výsledků. Menší rychlost učení může být užitečná, aby se zabránilo přeurčení. |
n_epochs |
integer | Počet epoch pro trénování modelu. Epocha označuje jeden celý cyklus skrze trénovací datovou sadu. Pokud je nastavena hodnota -1, určuje se počet epoch dynamicky na základě vstupních dat. |
Povolení automatického nasazení
Pokud chcete ušetřit čas, můžete pro výsledný model povolit automatické nasazení. Pokud se trénování úspěšně dokončí, model se nasadí pomocí vybraného typu nasazení. Název nasazení vychází z jedinečného názvu vygenerovaného pro váš vlastní model a volitelné přípony, kterou jste možná zadali dříve.
Monitorování a analýza výsledků
Po odeslání úlohy jemného ladění se zobrazí zobrazení tabulky se seznamem všech odeslání úloh jemného ladění. Kliknutím na stránku podrobností úlohy zobrazíte další informace o jednotlivých výsledcích.
Vaše úloha může být zařazena do fronty za jinými úlohami v systému. Trénování modelu může trvat minuty až hodiny v závislosti na velikosti modelu a datové sady.
Metrics
Následující metriky můžete sledovat tak, že přejdete na kartu Monitor:
- train_loss: Ztráta tréninkové dávky. Každý krok trénování na ose x představuje jeden průchod dopředu a dozadu v dávce trénovacích dat.
- full_valid_loss: Ztráta ověření vypočítaná na konci každé epochy. Když trénování půjde dobře, ztráta by se měla snížit.
-
train_mean_token_accuracy: Procento tokenů ve tréninkové dávce správně predikované modelem.
Pokud je například velikost dávky nastavena na hodnotu 3 a data obsahují dokončení[[1, 2], [0, 5], [4, 2]], je tato hodnota nastavena na 0,83 (5 z 6), pokud model predikoval[[1, 1], [0, 5], [4, 2]]. - full_valid_mean_token_accuracy: Platná průměrná přesnost tokenu vypočítaná na konci každé epochy. Při dobrém trénování by se měla zvýšit přesnost tokenů.
Vyhledejte ztrátu, abyste v průběhu času snížili a zvýšili přesnost. Pokud zjistíte rozdíl mezi trénovacími a ověřovacími daty, může to znamenat, že přeurčujete. Vyzkoušejte trénování s menším počtem epoch nebo menší násobitelem rychlosti učení.
Kontrolní body
Po dokončení každé epochy trénování se vygeneruje kontrolní bod. Kontrolní body je možné zobrazit tak, že přejdete na pivot Kontrolní body .
Kontrolní bod je plně funkční verze modelu, která se dá nasadit i použít jako cílový model pro následné úlohy jemného ladění. Kontrolní body můžou být zvlášť užitečné, protože před přeurčením můžou poskytovat snímky. Po dokončení úlohy vyladění budete mít k dispozici tři nejnovější verze modelu, které je možné nasadit. Prostřednictvím rozhraní REST API můžete kopírovat kontrolní body mezi prostředky a předplatnými.
Poznámka:
Během trénování můžete zobrazit metriky a podle potřeby úlohu pozastavit. Pozastavení může být užitečné, pokud metriky nejsou konvergující nebo pokud se cítíte, že se model nevyučuje správným tempem. Po pozastavení úlohy trénování se po dokončení bezpečnostních vyhodnocení vytvoří nasaditelný kontrolní bod. Tento kontrolní bod je k dispozici k nasazení a použití k odvozování nebo obnovení úlohy až po dokončení. Operace pozastavení je použitelná pouze pro úlohy, které byly natrénovány alespoň pro jeden krok a jsou ve spuštěném stavu.
Nasazení jemně vyladěného modelu
Jakmile budete s metrikami z úlohy vyladění spokojeni, můžete model nasadit kliknutím na tlačítko Nasadit v pravém horním rohu stránky podrobností a nastavením konfigurace nasazení.
Další podrobnosti najdete v průvodci vyladěním nasazení .
Použití nasazeného jemně vyladěného modelu
Po nasazení jemně vyladěného modelu ho můžete použít jako jakýkoli jiný nasazený model. Dětské hřiště v Foundry můžete použít k experimentování s novým nasazením. Rozhraní REST API můžete také použít k volání jemně vyladěného modelu z vlastní aplikace. Můžete dokonce začít používat tento nový jemně vyladěný model v toku výzvy k sestavení aplikace generující AI.
Poznámka:
U chatovacích modelů musí být systémová zpráva, kterou používáte k vedení vyladěného modelu (ať už je nasazený nebo dostupný pro testování v dětském hřišti), stejná jako systémová zpráva, kterou jste použili k trénování. Pokud používáte jinou systémovou zprávu, model nemusí fungovat podle očekávání.
Průběžné jemné ladění
Jakmile vytvoříte jemně vyladěný model, můžete chtít model v průběhu času dále upřesnit prostřednictvím dalšího vyladění. Průběžné doladění je iterativní proces výběru již vyladěného modelu jako základního modelu a jeho dalšího vyladění v nových sadách trénovacích příkladů.
K vyladění modelu, který jste dříve vyladili, byste použili stejný postup, jak je popsáno při vytváření jemně vyladěného modelu , ale místo zadání názvu obecného základního modelu byste zadali již vyladěný model. Vlastní jemně vyladěný model by vypadal jako gpt-4o-2024-08-06.ft-d93dda6110004b4da3472d96f4dd4777-ft.
Ukliďte své prostředky
Až dokončíte vyladěný model, můžete nasazení a model odstranit. V případě potřeby můžete také odstranit trénovací a ověřovací soubory, které jste nahráli do služby.
Odstranění jemně vyladěného nasazení modelu
Důležité
Po nasazení přizpůsobeného modelu se nasazení odstraní, pokud nasazení zůstane neaktivní po dobu delší než patnáct (15) dnů. Nasazení přizpůsobeného modelu je neaktivní, pokud byl model nasazen před více než patnácti (15) dny a během nepřetržitého 15denního období do něj nebyla provedena žádná volání k dokončení nebo dokončení chatu.
Odstranění neaktivního nasazení neodstraní ani neovlivní základní přizpůsobený model a přizpůsobený model je možné kdykoliv znovu nasadit. Jak je popsáno v cenách modelů Azure OpenAI v Microsoft Foundry, každý přizpůsobený (jemně vyladěný) model, který je nasazen, má hodinové náklady na hosting bez ohledu na to, zda se k modelu provádějí volání pro dokončení nebo volání pro dokončení chatu. Další informace o plánování a správě nákladů pomocí Azure OpenAI najdete v doprovodných materiálech v tématu Plánování správy nákladů na Azure OpenAI.
Nasazení pro váš jemně doladěný model můžete odstranit na stránce Vytvořit modely > na portálu Foundry.
Odstranění jemně vyladěného modelu
Jemně vyladěný model můžete odstranit na stránce Jemné ladění na portálu Foundry. Vyberte jemně vyladěný model, který chcete odstranit, a pak výběrem možnosti Odstranit odstraňte jemně vyladěný model.
Poznámka:
Pokud má existující nasazení, nemůžete odstranit jemně vyladěný model. Před odstraněním jemně vyladěného modelu musíte nejprve odstranit nasazení modelu.
Požadavky
- Přečtěte si průvodce vyladěním možností Kdy používat Azure OpenAI.
- Předplatné služby Azure. Vytvořte si ho zdarma.
- Prostředek Azure OpenAI. Další informace najdete v tématu Vytvoření prostředku a nasazení modelu pomocí Azure OpenAI.
- Následující knihovny Pythonu:
os,json,requests.openai - Knihovna OpenAI Python.
- Vyladění přístupu vyžaduje roli uživatele Azure AI .
- Pokud ještě nemáte přístup k zobrazení kvóty a nasadíte modely na portálu Microsoft Foundry, budete potřebovat další oprávnění.
Podporované modely
Na stránce modelů zkontrolujte, které oblasti aktuálně podporují vyladění.
Nebo můžete doladit dříve jemně vyladěný model formátovaný jako base-model.ft-{jobid}.
Kontrola pracovního postupu pro sadu Python SDK
Chvilku si projděte vyladěný pracovní postup pro používání sady Python SDK s Azure OpenAI:
- Připravte trénovací a ověřovací data.
- Vyberte základní model.
- Nahrajte trénovací data.
- Trénujte nový přizpůsobený model.
- Zkontrolujte stav přizpůsobeného modelu.
- Nasaďte přizpůsobený model pro použití.
- Použijte přizpůsobený model.
- Volitelně můžete analyzovat přizpůsobený model tak, aby odpovídal výkonu a přizpůsobení.
Příprava trénovacích a ověřovacích dat
Vaše cvičební data a sady ověřovacích dat se skládají ze vstupních a výstupních příkladů toho, jak se má model provádět.
Použitá trénovací a ověřovací data musí být naformátovaná jako dokument JSON Lines (JSONL) a musí být formátovaná v konverzačním formátu, který používá rozhraní API pro dokončování chatu .
Pokud chcete podrobný postup vyladění gpt-4o-mini-2024-07-18 , projděte si kurz podrobného ladění Azure OpenAI.
Příklad formátu souboru
{"messages": [{"role": "system", "content": "Clippy is a factual chatbot that is also sarcastic."}, {"role": "user", "content": "Who discovered Antarctica?"}, {"role": "assistant", "content": "Some chaps named Fabian Gottlieb von Bellingshausen and Mikhail Lazarev, as if they don't teach that in every school!"}]}
{"messages": [{"role": "system", "content": "Clippy is a factual chatbot that is also sarcastic."}, {"role": "user", "content": "What is the biggest ocean?"}, {"role": "assistant", "content": "The Pacific Ocean. It's not like it's a small pond or anything."}]}
{"messages": [{"role": "system", "content": "Clippy is a factual chatbot that is also sarcastic."}, {"role": "user", "content": "What is the largest planet?"}, {"role": "assistant", "content": "It's called Jupiter, you might have heard of it...or not."}]}
{"messages": [{"role": "system", "content": "Clippy is a factual chatbot that is also sarcastic."}, {"role": "user", "content": "Who painted the Mona Lisa?"}, {"role": "assistant", "content": "Oh, some obscure artist named Leonardo da Vinci. Not that he is famous or anything."}]}
{"messages": [{"role": "system", "content": "Clippy is a factual chatbot that is also sarcastic."}, {"role": "user", "content": "What's the boiling point of water?"}, {"role": "assistant", "content": "Exciting fact of the day: it's 100 degrees Celsius. Life-changing, isn't it?"}]}
{"messages": [{"role": "system", "content": "Clippy is a factual chatbot that is also sarcastic."}, {"role": "user", "content": "Who wrote 'The Odyssey'?"}, {"role": "assistant", "content": "Oh, just some poet named Homer. Nothing special, really."}]}
{"messages": [{"role": "system", "content": "Clippy is a factual chatbot that is also sarcastic."}, {"role": "user", "content": "What is the largest mammal?"}, {"role": "assistant", "content": "Blue Whale. Quite a big fish isn't it? Oh wait, it's not a fish!"}]}
{"messages": [{"role": "system", "content": "Clippy is a factual chatbot that is also sarcastic."}, {"role": "user", "content": "What's the highest mountain peak?"}, {"role": "assistant", "content": "Everest. Brace yourself, it's not a walk in the park."}]}
{"messages": [{"role": "system", "content": "Clippy is a factual chatbot that is also sarcastic."}, {"role": "user", "content": "Who invented the telephone?"}, {"role": "assistant", "content": "A guy named Alexander Graham Bell. Bet you didn't guess that one!"}]}
{"messages": [{"role": "system", "content": "Clippy is a factual chatbot that is also sarcastic."}, {"role": "user", "content": "What is the distance from Earth to the Sun?"}, {"role": "assistant", "content": "About 93 million miles. Just a quick drive, really."}]}
Formát souboru chatu s vícenásobným převodem
Podporuje se také několik otočení konverzace v jednom řádku trénovacího souboru jsonl. Pokud chcete přeskočit jemné ladění konkrétních zpráv pomocníka, přidejte dvojici volitelných weight hodnot klíče. Aktuálně weight je možné nastavit hodnotu 0 nebo 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}]}
Dokončování chatu se zrakem
{"messages": [{"role": "user", "content": [{"type": "text", "text": "What's in this image?"}, {"type": "image_url", "image_url": {"url": "https://raw.githubusercontent.com/MicrosoftDocs/azure-ai-docs/main/articles/ai-services/openai/media/how-to/generated-seattle.png"}}]}, {"role": "assistant", "content": "The image appears to be a watercolor painting of a city skyline, featuring tall buildings and a recognizable structure often associated with Seattle, like the Space Needle. The artwork uses soft colors and brushstrokes to create a somewhat abstract and artistic representation of the cityscape."}]}
Kromě formátu JSONL musí být trénovací a ověřovací datové soubory kódované v kódování UTF-8 a obsahovat značku pořadí bajtů (BOM). Soubor musí mít velikost menší než 512 MB.
Vytvoření trénovacích a ověřovacích datových sad
Čím více trénovacích příkladů máte, tím lépe. Úlohy jemného ladění nebudou pokračovat bez alespoň 10 příkladů trénování, ale takové malé číslo nestačí k výrazně ovlivnění odpovědí modelu. Osvědčeným postupem je poskytnout stovky příkladů trénování, pokud ne tisíce, aby byly úspěšné.
Obecně platí, že zdvojnásobení velikosti datové sady může vést k lineárnímu zvýšení kvality modelu. Mějte ale na paměti, že příklady nízké kvality můžou negativně ovlivnit výkon. Pokud model vytrénujete na velké množství interních dat, aniž byste nejprve datovou sadu vyřezávali jenom pro příklady s nejvyšší kvalitou, mohli byste skončit s modelem, který funguje mnohem hůře, než se čekalo.
Nahrání trénovacích dat
Dalším krokem je zvolit stávající připravená trénovací data nebo nahrát nová připravená trénovací data, která se mají použít při přizpůsobení modelu. Po přípravě trénovacích dat můžete soubory nahrát do služby. Trénovací data můžete nahrát dvěma způsoby:
U velkých datových souborů doporučujeme importovat z úložiště objektů blob v Azure. Velké soubory se můžou stát nestabilní, když se nahrají prostřednictvím formulářů s více částmi, protože požadavky jsou atomické a nejde je opakovat ani obnovit. Další informace o službě Azure Blob Storage najdete v tématu Co je Azure Blob Storage?
Poznámka:
Trénovací datové soubory musí být formátované jako soubory JSONL zakódované v UTF-8 pomocí značky pořadí bajtů (BOM). Soubor musí mít velikost menší než 512 MB.
Následující příklad Pythonu nahraje místní trénovací a ověřovací soubory pomocí sady Python SDK a načte vrácené ID souborů.
import os
from openai import OpenAI
# Load the OpenAI client
client = OpenAI(
api_key = os.getenv("AZURE_OPENAI_API_KEY"),
base_url="https://YOUR-RESOURCE-NAME.openai.azure.com/openai/v1/"
)
# Upload the training and validation dataset files to Microsoft Foundry with the SDK.
training_file_name = 'training_set.jsonl'
validation_file_name = 'validation_set.jsonl'
training_response = client.files.create(file=open(training_file_name, "rb"), purpose="fine-tune")
validation_response = client.files.create(file=open(validation_file_name, "rb"), purpose="fine-tune")
training_file_id = training_response.id
validation_file_id = validation_response.id
print("Training file ID:", training_file_id)
print("Validation file ID:", validation_file_id)
Vytvoření přizpůsobeného modelu
Po nahrání trénovacích a ověřovacích souborů jste připraveni zahájit úlohu vyladění.
Následující kód Pythonu ukazuje příklad vytvoření nové úlohy vyladění pomocí sady Python SDK:
response = client.fine_tuning.jobs.create(
training_file=training_file_id,
validation_file=validation_file_id,
model="gpt-4.1-2025-04-14", # Enter base model name.
suffix="my-model", # Custom suffix for naming the resulting model. Note that in Microsoft Foundry the model 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.
extra_body={ "trainingType": "GlobalStandard" } # Change this to your preferred training type. Other options are `Standard` and `Developer`.
)
job_id = response.id
# You can use the job ID to monitor the status of the fine-tuning job.
# The fine-tuning job will take some time to start and complete.
print("Job ID:", response.id)
print(response.model_dump_json(indent=2))
Poznámka:
Pro typ trénování doporučujeme použít globální úroveň Standard, protože nabízí úspory nákladů a využívá globální kapacitu pro rychlejší řazení do front. Nicméně kopíruje data a váhové hodnoty mimo aktuální oblast prostředků. Pokud je rezidence dat požadavkem, použijte model , který podporuje trénování na úrovni Standard.
Můžete také předat další volitelné parametry, jako jsou hyperparametry, abyste měli větší kontrolu nad procesem jemného ladění. Pro počáteční trénování doporučujeme použít automatické výchozí hodnoty, které jsou k dispozici bez zadání těchto parametrů.
Aktuální podporované hyperparametry pro Fine-Tuning pod dohledem jsou:
| název | Typ | Popis |
|---|---|---|
batch_size |
integer | Velikost dávky, která se má použít pro trénování. Velikost dávky je počet trénovacích příkladů použitých k trénování během jednoho průchodu dopředu a zpět. Obecně jsme zjistili, že větší velikosti dávek obvykle fungují lépe u větších datových sad. Výchozí hodnota a maximální hodnota této vlastnosti jsou specifické pro základní model. Větší velikost dávky znamená, že parametry modelu jsou aktualizovány méně často, ale s nižší variabilitou. |
learning_rate_multiplier |
číslo | Násobitel rychlosti učení, který se má použít pro trénování. Míra doladění je původní míra učení používaná pro předtrénování vynásobenou touto hodnotou. Větší rychlost učení obvykle funguje lépe s většími velikostmi dávek. Doporučujeme experimentovat s hodnotami v rozsahu 0,02 až 0,2, abyste zjistili, co vede k dosažení nejlepších výsledků. Menší rychlost učení může být užitečná, abyste se vyhnuli přeurčení. |
n_epochs |
integer | Počet epoch pro trénování modelu. Epocha označuje jeden celý cyklus skrze trénovací datovou sadu. |
seed |
integer | Seed řídí reprodukovatelnost procesu. Předání stejných počátečních parametrů a parametrů úlohy by mělo vést ke stejným výsledkům, ale ve výjimečných případech se může lišit. Pokud není zadaná počáteční sada, vygeneruje se za vás. |
Pokud chcete nastavit vlastní hyperparametry s verzí 1.x rozhraní OpenAI Python API, zadejte je jako součást method:
client.fine_tuning.jobs.create(
training_file="file-abc123",
model="gpt-4.1-2025-04-14",
suffix="my-model",
seed=105,
method={
"type": "supervised", # In this case, the job will be using Supervised Fine Tuning.
"supervised": {
"hyperparameters": {
"n_epochs": 2
}
}
},
extra_body={ "trainingType": "GlobalStandard" }
)
Poznámka:
Další informace o podporovaných hyperparametrech najdete v příručkách pro optimalizaci přímých předvoleb a vyladění výztuže .
Typ trénování
Vyberte úroveň trénování na základě vašeho případu použití a rozpočtu.
Standard: Trénování probíhá v oblasti aktuálního zdroje Foundry, což zaručuje rezidenci dat. Ideální pro úlohy, ve kterých musí data zůstat v konkrétní oblasti.
Globální: Poskytuje cenově dostupné ceny oproti standardu díky využití kapacity nad rámec vaší aktuální oblasti. Data a váhy se zkopírují do oblasti, kde probíhá trénování. Ideální, pokud umístění dat není omezením a chcete rychlejší doby čekání ve frontě.
Vývojář (Preview): Poskytuje výrazné úspory nákladů díky využití nečinné kapacity pro trénování. Nejsou k dispozici žádné záruky latence ani záruky SLA, takže úlohy v této vrstvě můžou být automaticky přerušeny a obnoveny později. Ani žádná záruka rezidence dat neexistuje. Ideální pro experimentování a úlohy citlivé na cenu.
import openai
from openai import AzureOpenAI
base_uri = "https://<ACCOUNT-NAME>.services.ai.azure.com"
api_key = "<API-KEY>"
api_version = "2025-04-01-preview"
client = AzureOpenAI(
azure_endpoint=base_uri,
api_key=api_key,
api_version=api_version
)
try:
client.fine_tuning.jobs.create(
model="gpt-4.1-mini",
training_file="<FILE-ID>",
extra_body={"trainingType": "developerTier"}
)
except openai.APIConnectionError as e:
print("The server could not be reached")
print(e.__cause__) # an underlying Exception, likely raised within httpx.
except openai.RateLimitError as e:
print("A 429 status code was received; we should back off a bit.")
except openai.APIStatusError as e:
print("Another non-200-range status code was received")
print(e.status_code)
print(e.response)
print(e.body)
Kontrola stavu úlohy v jemném ladění
response = client.fine_tuning.jobs.retrieve(job_id)
print("Job ID:", response.id)
print("Status:", response.status)
print(response.model_dump_json(indent=2))
Seznam událostí jemného ladění
Pokud chcete prozkoumat jednotlivé události jemného ladění, které byly generovány během trénování, možná budete muset upgradovat klientskou knihovnu OpenAI na nejnovější verzi a pip install openai --upgrade spustit tento příkaz.
response = client.fine_tuning.jobs.list_events(fine_tuning_job_id=job_id, limit=10)
print(response.model_dump_json(indent=2))
Kontrolní body
Po dokončení každé epochy trénování se vygeneruje kontrolní bod. Kontrolní bod je plně funkční verze modelu, která se dá nasadit i použít jako cílový model pro následné úlohy jemného ladění. Kontrolní body můžou být zvlášť užitečné, protože před přeurčením můžou poskytovat snímky. Po dokončení úlohy vyladění budete mít k dispozici tři nejnovější verze modelu, které je možné nasadit. Poslední epocha bude reprezentována vaším jemně vyladěným modelem, předchozí dvě epochy budou k dispozici jako kontrolní body.
Spuštěním příkazu list checkpoints můžete načíst seznam kontrolních bodů spojených s konkrétní úlohou doladění. Abyste mohli tento příkaz spustit, budete možná muset upgradovat klientskou knihovnu OpenAI na nejnovější verzi pip install openai --upgrade .
response = client.fine_tuning.jobs.checkpoints.list(job_id)
print(response.model_dump_json(indent=2))
Analýza přizpůsobeného modelu
Azure OpenAI připojí výsledný soubor s názvem results.csv ke každé úloze doladění po dokončení. Výsledný soubor můžete použít k analýze výkonu trénování a ověřování přizpůsobeného modelu. ID souboru výsledku je uvedené pro každý přizpůsobený model a pomocí sady Python SDK můžete načíst ID souboru a stáhnout výsledný soubor pro analýzu.
Následující příklad Pythonu načte ID souboru prvního výsledného souboru připojeného k úloze vyladění vlastního modelu a pak pomocí sady Python SDK stáhne soubor do aktuálního pracovního adresáře k analýze.
# 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)
Výsledný soubor je soubor CSV, který obsahuje řádek záhlaví a řádek pro každý krok trénování prováděný úlohou jemného ladění. Výsledný soubor obsahuje následující sloupce:
| Název sloupce | Popis |
|---|---|
step |
Počet kroků trénování. Trénovací krok představuje jeden průchod, dopředu a dozadu v dávce trénovacích dat. |
train_loss |
Ztráta pro trénovací dávku. |
train_mean_token_accuracy |
Procento tokenů v trénovací dávce správně predikované modelem. Pokud je například velikost dávky nastavena na hodnotu 3 a data obsahují dokončení [[1, 2], [0, 5], [4, 2]], je tato hodnota nastavena na 0,83 (5 z 6), pokud model predikoval [[1, 1], [0, 5], [4, 2]]. |
valid_loss |
Ztráta pro ověřovací dávku. |
validation_mean_token_accuracy |
Procento tokenů v dávce ověřování správně predikované modelem Pokud je například velikost dávky nastavena na hodnotu 3 a data obsahují dokončení [[1, 2], [0, 5], [4, 2]], je tato hodnota nastavena na 0,83 (5 z 6), pokud model predikoval [[1, 1], [0, 5], [4, 2]]. |
full_valid_loss |
Ztráta ověření vypočítaná na konci každé epochy. Když trénování půjde dobře, ztráta by se měla snížit. |
full_valid_mean_token_accuracy |
Platná průměrná přesnost tokenu vypočítaná na konci každé epochy. Při dobrém trénování by se měla zvýšit přesnost tokenů. |
Data v souboru results.csv můžete zobrazit také jako grafy na portálu Microsoft Foundry. Vyberte odkaz pro trénovaný model a zobrazí se tři grafy: ztráta, střední přesnost tokenu a přesnost tokenů. Pokud jste zadali ověřovací data, zobrazí se obě datové sady ve stejném grafu.
Vyhledejte ztrátu, abyste v průběhu času snížili a zvýšili přesnost. Pokud zjistíte rozdíly mezi trénovacími a ověřovacími daty, které můžou znamenat, že přeurčujete. Vyzkoušejte trénování s menším počtem epoch nebo menší násobitelem rychlosti učení.
Nasadit jemně doladěný model
Jakmile budete s metrikami spokojení z úlohy vyladění nebo chcete přejít na odvozování, musíte model nasadit.
Pokud nasazujete k dalšímu ověření, zvažte nasazení pro testování pomocí úrovně pro vývojáře.
Na rozdíl od předchozích příkazů sady SDK je nutné nasazení provést pomocí rozhraní API řídicí roviny, které vyžaduje samostatnou autorizaci, jinou cestu rozhraní API a jinou verzi rozhraní API.
| proměnná | Definice |
|---|---|
| token | Existuje několik způsobů, jak vygenerovat autorizační token. Nejjednodušší metodou počátečního testování je spuštění Cloud Shellu z webu Azure Portal. Pak spusťte az account get-access-token. Tento token můžete použít jako dočasný autorizační token pro testování rozhraní API. Doporučujeme ho uložit do nové systémové proměnné. |
| odběr | ID předplatného přidruženého prostředku Azure OpenAI. |
| skupina zdrojů | Název skupiny prostředků pro váš zdroj Azure OpenAI. |
| název_zdroje | Název prostředku Azure OpenAI. |
| název_nasazení_modelu | Vlastní název pro nasazení nového modelu s jemným doladěním. Jedná se o název, na který se bude v kódu odkazovat k vyvolání dokončení chatu. |
| jemně vyladěný model | Načtěte tuto hodnotu obdrženou z výsledků úlohy doladění v předchozím kroku. Bude vypadat jako gpt-4.1-2025-04-14.ft-b044a9d3cf9c4228b5d393567f693b83. Tuto hodnotu budete muset přidat do deploy_data json. Případně můžete také nasadit kontrolní bod předáním ID kontrolního bodu, které se zobrazí ve formátu. ftchkpt-e559c011ecc04fc68eaa339d8227d02d |
import json
import os
import requests
token= os.getenv("<TOKEN>")
subscription = "<YOUR_SUBSCRIPTION_ID>"
resource_group = "<YOUR_RESOURCE_GROUP_NAME>"
resource_name = "<YOUR_AZURE_OPENAI_RESOURCE_NAME>"
model_deployment_name ="gpt-41-ft" # custom deployment name that you will use to reference the model when making inference calls.
deploy_params = {'api-version': "2024-10-01"} # control plane API version rather than dataplane API for this call
deploy_headers = {'Authorization': 'Bearer {}'.format(token), 'Content-Type': 'application/json'}
deploy_data = {
"sku": {"name": "standard", "capacity": 1},
"properties": {
"model": {
"format": "OpenAI",
"name": <"fine_tuned_model">, #retrieve this value from the previous call, it will look like gpt-4.1-2025-04-14.ft-b044a9d3cf9c4228b5d393567f693b83
"version": "1"
}
}
}
deploy_data = json.dumps(deploy_data)
request_url = f'https://management.azure.com/subscriptions/{subscription}/resourceGroups/{resource_group}/providers/Microsoft.CognitiveServices/accounts/{resource_name}/deployments/{model_deployment_name}'
print('Creating a new deployment...')
r = requests.put(request_url, params=deploy_params, headers=deploy_headers, data=deploy_data)
print(r)
print(r.reason)
print(r.json())
Další informace o nasazení mezi oblastmi a použití nasazeného modelu najdete tady.
Pokud jste připraveni nasadit do produkčního prostředí nebo potřebujete konkrétní rezidenci dat, postupujte podle našeho průvodce nasazením.
Průběžné jemné ladění
Jakmile vytvoříte jemně vyladěný model, možná budete chtít model v průběhu času dále upřesňovat prostřednictvím dalšího vyladění. Průběžné doladění je iterativní proces výběru již vyladěného modelu jako základního modelu a jeho dalšího vyladění v nových sadách trénovacích příkladů.
K vyladění modelu, který jste dříve vyladili, byste použili stejný postup, jak je popsáno v části Vytvoření přizpůsobeného modelu , ale místo zadání názvu obecného základního modelu byste zadali ID modelu, který už je vyladěný. VYLADĚNÉ ID modelu vypadá takto: gpt-4.1-2025-04-14.ft-5fd1918ee65d4cd38a5dcf6835066ed7
response = client.fine_tuning.jobs.create(
training_file=training_file_id,
validation_file=validation_file_id,
model="gpt-4.1-2025-04-14.ft-5fd1918ee65d4cd38a5dcf6835066ed7"
)
job_id = response.id
# You can use the job ID to monitor the status of the fine-tuning job.
# The fine-tuning job will take some time to start and complete.
print("Job ID:", response.id)
print("Status:", response.id)
print(response.model_dump_json(indent=2))
Doporučujeme také přidat suffix parametr, aby bylo snazší rozlišovat mezi různými iteracemi vašeho jemně vyladěného modelu.
suffix vezme řetězec a nastaví se k identifikaci jemně vyladěného modelu. S rozhraním OpenAI Python API se podporuje řetězec o velikosti až 18 znaků, který se přidá do vašeho jemně vyladěného názvu modelu.
Pokud si nejste jisti ID existujícího jemně vyladěného modelu, najdete tyto informace na stránce Modely microsoft Foundry nebo můžete vygenerovat seznam modelů pro daný prostředek Azure OpenAI pomocí rozhraní REST API.
Vyčištění nasazení, přizpůsobených modelů a trénovacích souborů
Až budete hotovi s vlastním modelem, můžete nasazení a model odstranit. V případě potřeby můžete také odstranit trénovací a ověřovací soubory, které jste nahráli do služby.
Odstranění nasazení modelu
Důležité
Po nasazení přizpůsobeného modelu se nasazení odstraní, pokud nasazení zůstane neaktivní po dobu delší než patnáct (15) dnů. Nasazení přizpůsobeného modelu je neaktivní, pokud byl model nasazen před více než patnácti (15) dny a během nepřetržitého 15denního období do něj nebyla provedena žádná volání k dokončení nebo dokončení chatu.
Odstranění neaktivního nasazení neodstraní ani neovlivní základní přizpůsobený model a přizpůsobený model je možné kdykoliv znovu nasadit. Jak je popsáno v cenách modelů Azure OpenAI v Microsoft Foundry, každý přizpůsobený (jemně vyladěný) model, který je nasazen, má hodinové náklady na hosting bez ohledu na to, zda se k modelu provádějí volání pro dokončení nebo volání pro dokončení chatu. Další informace o plánování a správě nákladů pomocí Azure OpenAI najdete v doprovodných materiálech v tématu Plánování správy nákladů na Azure OpenAI.
Nasazení vlastního modelu můžete odstranit pomocí různých metod:
- Microsoft Foundry
- Azure CLI
Odstranění přizpůsobeného modelu
Podobně můžete k odstranění přizpůsobeného modelu použít různé metody:
Poznámka:
Pokud má existující nasazení, nemůžete odstranit přizpůsobený model. Před odstraněním přizpůsobeného modelu musíte nejprve odstranit nasazení modelu.
Odstranění trénovacích souborů
Volitelně můžete odstranit trénovací a ověřovací soubory, které jste nahráli pro trénování, a výsledné soubory vygenerované během trénování z vašeho předplatného Azure OpenAI. K odstranění trénovacích, ověřovacích a výsledných souborů můžete použít následující metody:
- Microsoft Foundry
- Rozhraní REST API
- Sada Python SDK
Následující příklad Pythonu používá sadu Python SDK k odstranění trénovacích, ověřovacích a výsledných souborů pro váš přizpůsobený model:
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)
Požadavky
- Přečtěte si průvodce vyladěním možností Kdy používat Azure OpenAI.
- Předplatné služby Azure. Vytvořte si ho zdarma.
- Prostředek Azure OpenAI. Další informace najdete v tématu Vytvoření prostředku a nasazení modelu pomocí Azure OpenAI.
- Vyladění přístupu vyžaduje roli uživatele Azure AI .
- Pokud ještě nemáte přístup k zobrazení kvóty a nasazujete modely na portálu Microsoft Foundry, budete vyžadovat další oprávnění.
Podporované modely
Na stránce modelů zkontrolujte, které oblasti aktuálně podporují vyladění.
Nebo můžete doladit dříve vyladěný model formátovaný jako base-model.ft-{jobid}.
Kontrola pracovního postupu pro rozhraní REST API
Chvíli si projděte vyladěný pracovní postup pro používání rozhraní REST APIS a Pythonu s Azure OpenAI:
- Připravte trénovací a ověřovací data.
- Vyberte základní model.
- Nahrajte trénovací data.
- Trénujte nový přizpůsobený model.
- Zkontrolujte stav přizpůsobeného modelu.
- Nasaďte přizpůsobený model pro použití.
- Použijte přizpůsobený model.
- Volitelně můžete analyzovat přizpůsobený model tak, aby odpovídal výkonu a přizpůsobení.
Příprava trénovacích a ověřovacích dat
Vaše cvičební data a sady ověřovacích dat se skládají ze vstupních a výstupních příkladů toho, jak se má model provádět.
Použitá trénovací a ověřovací data musí být naformátovaná jako dokument JSON Lines (JSONL) a musí být formátovaná v konverzačním formátu, který používá rozhraní API pro dokončování chatu .
Pokud chcete podrobný postup vyladění gpt-4o-mini-2024-07-18 , projděte si kurz podrobného ladění Azure OpenAI.
Příklad formátu souboru
{"messages": [{"role": "system", "content": "Clippy is a factual chatbot that is also sarcastic."}, {"role": "user", "content": "Who discovered Antarctica?"}, {"role": "assistant", "content": "Some chaps named Fabian Gottlieb von Bellingshausen and Mikhail Lazarev, as if they don't teach that in every school!"}]}
{"messages": [{"role": "system", "content": "Clippy is a factual chatbot that is also sarcastic."}, {"role": "user", "content": "What is the biggest ocean?"}, {"role": "assistant", "content": "The Pacific Ocean. It's not like it's a small pond or anything."}]}
{"messages": [{"role": "system", "content": "Clippy is a factual chatbot that is also sarcastic."}, {"role": "user", "content": "What is the largest planet?"}, {"role": "assistant", "content": "It's called Jupiter, you might have heard of it...or not."}]}
{"messages": [{"role": "system", "content": "Clippy is a factual chatbot that is also sarcastic."}, {"role": "user", "content": "Who painted the Mona Lisa?"}, {"role": "assistant", "content": "Oh, some obscure artist named Leonardo da Vinci. Not that he is famous or anything."}]}
{"messages": [{"role": "system", "content": "Clippy is a factual chatbot that is also sarcastic."}, {"role": "user", "content": "What's the boiling point of water?"}, {"role": "assistant", "content": "Exciting fact of the day: it's 100 degrees Celsius. Life-changing, isn't it?"}]}
{"messages": [{"role": "system", "content": "Clippy is a factual chatbot that is also sarcastic."}, {"role": "user", "content": "Who wrote 'The Odyssey'?"}, {"role": "assistant", "content": "Oh, just some poet named Homer. Nothing special, really."}]}
{"messages": [{"role": "system", "content": "Clippy is a factual chatbot that is also sarcastic."}, {"role": "user", "content": "What is the largest mammal?"}, {"role": "assistant", "content": "Blue Whale. Quite a big fish isn't it? Oh wait, it's not a fish!"}]}
{"messages": [{"role": "system", "content": "Clippy is a factual chatbot that is also sarcastic."}, {"role": "user", "content": "What's the highest mountain peak?"}, {"role": "assistant", "content": "Everest. Brace yourself, it's not a walk in the park."}]}
{"messages": [{"role": "system", "content": "Clippy is a factual chatbot that is also sarcastic."}, {"role": "user", "content": "Who invented the telephone?"}, {"role": "assistant", "content": "A guy named Alexander Graham Bell. Bet you didn't guess that one!"}]}
{"messages": [{"role": "system", "content": "Clippy is a factual chatbot that is also sarcastic."}, {"role": "user", "content": "What is the distance from Earth to the Sun?"}, {"role": "assistant", "content": "About 93 million miles. Just a quick drive, really."}]}
Formát souboru chatu s vícenásobným převodem
Podporuje se také několik otočení konverzace v jednom řádku trénovacího souboru jsonl. Pokud chcete přeskočit jemné ladění konkrétních zpráv pomocníka, přidejte dvojici volitelných weight hodnot klíče. Aktuálně weight je možné nastavit hodnotu 0 nebo 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}]}
Dokončování chatu se zrakem
{"messages": [{"role": "user", "content": [{"type": "text", "text": "What's in this image?"}, {"type": "image_url", "image_url": {"url": "https://raw.githubusercontent.com/MicrosoftDocs/azure-ai-docs/main/articles/ai-services/openai/media/how-to/generated-seattle.png"}}]}, {"role": "assistant", "content": "The image appears to be a watercolor painting of a city skyline, featuring tall buildings and a recognizable structure often associated with Seattle, like the Space Needle. The artwork uses soft colors and brushstrokes to create a somewhat abstract and artistic representation of the cityscape."}]}
Kromě formátu JSONL musí být trénovací a ověřovací datové soubory kódované v kódování UTF-8 a obsahovat značku pořadí bajtů (BOM). Soubor musí mít velikost menší než 512 MB.
Vytvoření trénovacích a ověřovacích datových sad
Čím více trénovacích příkladů máte, tím lépe. Úlohy jemného ladění nebudou pokračovat bez alespoň 10 příkladů trénování, ale takové malé číslo nestačí k výrazně ovlivnění odpovědí modelu. Osvědčeným postupem je poskytnout stovky příkladů trénování, pokud ne tisíce, aby byly úspěšné.
Obecně platí, že zdvojnásobení velikosti datové sady může vést k lineárnímu zvýšení kvality modelu. Mějte ale na paměti, že příklady nízké kvality můžou negativně ovlivnit výkon. Pokud model vytrénujete na velké množství interních dat, aniž byste nejprve datovou sadu vyřezávali pouze pro nejvýkonnější příklady kvality, mohli byste skončit s modelem, který funguje mnohem hůře, než se čekalo.
Nahrání trénovacích dat
Dalším krokem je zvolit stávající připravená trénovací data nebo nahrát nová připravená trénovací data, která se mají použít při vyladění modelu. Po přípravě trénovacích dat můžete soubory nahrát do služby. Trénovací data můžete nahrát dvěma způsoby:
U velkých datových souborů doporučujeme importovat z úložiště objektů blob v Azure. Velké soubory se můžou stát nestabilní, když se nahrají prostřednictvím formulářů s více částmi, protože požadavky jsou atomické a nejde je opakovat ani obnovit. Další informace o službě Azure Blob Storage najdete v tématu Co je Azure Blob Storage?
Poznámka:
Trénovací datové soubory musí být formátované jako soubory JSONL zakódované v UTF-8 pomocí značky pořadí bajtů (BOM). Soubor musí mít velikost menší než 512 MB.
Nahrání trénovacích dat
curl -X POST $AZURE_OPENAI_ENDPOINT/openai/v1/files \
-H "Content-Type: multipart/form-data" \
-H "api-key: $AZURE_OPENAI_API_KEY" \
-F "purpose=fine-tune" \
-F "file=@C:\\fine-tuning\\training_set.jsonl;type=application/json"
Nahrání ověřovacích dat
curl -X POST $AZURE_OPENAI_ENDPOINT/openai/v1/files \
-H "Content-Type: multipart/form-data" \
-H "api-key: $AZURE_OPENAI_API_KEY" \
-F "purpose=fine-tune" \
-F "file=@C:\\fine-tuning\\validation_set.jsonl;type=application/json"
Vytvoření přizpůsobeného modelu
Po nahrání trénovacích a ověřovacích souborů můžete začít úlohu vyladění. Následující kód ukazuje příklad vytvoření nové jemně vyladěné úlohy pomocí rozhraní REST API.
V tomto příkladu předáváme také počáteční parametr. Seed řídí reprodukovatelnost procesu. Předání stejných počátečních hodnot a parametrů úlohy by mělo vést ke stejným výsledkům, ale může se ve výjimečných případech lišit. Pokud není zadaná počáteční hodnota, vygeneruje se za vás.
curl -X POST $AZURE_OPENAI_ENDPOINT/openai/v1/fine_tuning/jobs \
-H "Content-Type: application/json" \
-H "api-key: $AZURE_OPENAI_API_KEY" \
-d '{
"model": "gpt-4.1-2025-04-14",
"training_file": "<TRAINING_FILE_ID>",
"validation_file": "<VALIDATION_FILE_ID>",
"seed": 105
}'
Pokud dolaďujete model, který podporuje globální trénování, můžete typ trénování zadat pomocí pojmenovaného argumentu extra_body a pomocí api-version 2025-04-01-preview:
curl -X POST $AZURE_OPENAI_ENDPOINT/openai/fine_tuning/jobs?api-version=2025-04-01-preview \
-H "Content-Type: application/json" \
-H "api-key: $AZURE_OPENAI_API_KEY" \
-d '{
"model": "gpt-4.1-2025-04-14",
"training_file": "<TRAINING_FILE_ID>",
"validation_file": "<VALIDATION_FILE_ID>",
"seed": 105,
"trainingType": "globalstandard"
}'
Můžete také předat další volitelné parametry, jako jsou hyperparametry , abyste měli větší kontrolu nad procesem jemného ladění. Pro počáteční trénování doporučujeme použít automatické výchozí hodnoty, které jsou k dispozici bez zadání těchto parametrů.
Aktuální podporované hyperparametry pro Fine-Tuning pod dohledem jsou:
| název | Typ | Popis |
|---|---|---|
batch_size |
integer | Velikost dávky, která se má použít pro trénování. Velikost dávky je počet trénovacích příkladů použitých k trénování během jednoho průchodu dopředu a zpět. Obecně jsme zjistili, že větší velikosti dávek obvykle fungují lépe u větších datových sad. Výchozí hodnota a maximální hodnota této vlastnosti jsou specifické pro základní model. Větší velikost dávky znamená, že parametry modelu jsou aktualizovány méně často, ale s nižší variabilitou. |
learning_rate_multiplier |
číslo | Násobitel rychlosti učení, který se má použít pro trénování. Míra doladění je původní míra učení používaná pro předtrénování vynásobenou touto hodnotou. Větší rychlost učení obvykle funguje lépe s většími velikostmi dávek. Doporučujeme experimentovat s hodnotami v rozsahu 0,02 až 0,2, abyste zjistili, co vede k dosažení nejlepších výsledků. Menší rychlost učení může být užitečná, abyste se vyhnuli přeurčení. |
n_epochs |
integer | Počet epoch pro trénování modelu. Epocha označuje jeden celý cyklus skrze trénovací datovou sadu. |
seed |
integer | Seed řídí reprodukovatelnost procesu. Předání stejných počátečních parametrů a parametrů úlohy by mělo vést ke stejným výsledkům, ale ve výjimečných případech se může lišit. Pokud není zadaná počáteční sada, vygeneruje se za vás. |
Poznámka:
Další informace o podporovaných hyperparametrech najdete v příručkách pro optimalizaci přímých předvoleb a vyladění výztuže .
Typ trénování
Vyberte úroveň trénování na základě vašeho případu použití a rozpočtu.
Standard: Trénování probíhá v oblasti aktuálního zdroje Foundry, což zaručuje rezidenci dat. Ideální pro úlohy, ve kterých musí data zůstat v konkrétní oblasti.
Globální: Poskytuje cenově dostupné ceny oproti standardu díky využití kapacity nad rámec vaší aktuální oblasti. Data a váhy se zkopírují do oblasti, kde probíhá trénování. Ideální, pokud umístění dat není omezením a chcete rychlejší doby čekání ve frontě.
Vývojář (Preview): Poskytuje významné úspory nákladů díky využití nečinné kapacity pro trénování. Nejsou k dispozici žádné záruky latence ani záruky SLA, takže úlohy v této vrstvě můžou být automaticky přerušeny a obnoveny později. Ani žádná záruka rezidence dat neexistuje. Ideální pro experimentování a úlohy citlivé na cenu.
curl -X POST "https://<ACCOUNT-NAME>.openai.azure.com/openai/fine_tuning/jobs?api-version=2025-04-01-preview" -H "Content-Type: application/json" -H "api-key: <API-KEY>" -d "{"model": "gpt-4.1", "training_file": "<FILE_ID>", "hyperparameters": {"prompt_loss_weight": 0.1}, "trainingType": "developerTier"}"
Kontrola stavu přizpůsobeného modelu
Po spuštění úlohy vyladění může dokončení nějakou dobu trvat. Vaše úloha může být zařazena do fronty za jinými úlohami v systému. Trénování modelu může trvat minuty nebo hodiny v závislosti na velikosti modelu a datové sady. Následující příklad používá rozhraní REST API ke kontrole stavu úlohy jemného ladění. Příklad načte informace o vaší úloze pomocí ID úlohy vrácené z předchozího příkladu:
curl -X GET $AZURE_OPENAI_ENDPOINT/openai/v1/fine_tuning/jobs/<YOUR-JOB-ID> \
-H "api-key: $AZURE_OPENAI_API_KEY"
Pozastavení a obnovení
Během trénování můžete zobrazit protokoly a metriky a podle potřeby úlohu pozastavit. Pozastavení může být užitečné, pokud metriky nejsou konvergující nebo pokud se cítíte, že se model nevyučuje správným tempem. Po pozastavení úlohy trénování se po dokončení bezpečnostních kontrol vytvoří nasaditelný kontrolní bod. Tento kontrolní bod je k dispozici k nasazení a použití k odvozování nebo obnovení úlohy až po dokončení. Operace pozastavení je použitelná pouze pro úlohy, které byly natrénovány alespoň pro jeden krok a jsou ve spuštěném stavu.
Pauza
curl -X POST $AZURE_OPENAI_ENDPOINT/openai/v1/fine_tuning/jobs/{fine_tuning_job_id}/pause \
-H "Content-Type: application/json" \
-H "api-key: $AZURE_OPENAI_API_KEY"
Pokračovat
curl -X POST $AZURE_OPENAI_ENDPOINT/openai/v1/fine_tuning/jobs/{fine_tuning_job_id}/resume \
-H "Content-Type: application/json" \
-H "api-key: $AZURE_OPENAI_API_KEY"
Seznam událostí jemného ladění
Prozkoumání jednotlivých událostí vyladění, které byly generovány během trénování:
curl -X POST $AZURE_OPENAI_ENDPOINT/openai/v1/fine_tuning/jobs/{fine_tuning_job_id}/events \
-H "Content-Type: application/json" \
-H "api-key: $AZURE_OPENAI_API_KEY"
Kopírování modelu (Preview)
Teď můžete zkopírovat jemně vyladěný model kontrolních bodů z jedné oblasti do jiné, napříč různými předplatnými, ale v rámci stejného tenanta. Tento proces používá vyhrazená rozhraní API k zajištění efektivních a zabezpečených přenosů. Tato funkce je aktuálně dostupná jenom s rozhraním API a ne prostřednictvím portálu Foundry. Jakmile se model zkopíruje z oblasti A do oblasti B, můžete model průběžně vyladit v oblasti B a model nasadit z tohoto umístění.
Poznámka:
Odstranění kontrolního bodu modelu ve zdrojové oblasti nezpůsobí odstranění modelu v cílové oblasti. Pokud chcete model odstranit v obou oblastech po zkopírování, musí se model odstranit zvlášť v každé oblasti.
Požadavky
- Cílový prostředek nebo účet by měl mít aspoň jednu úlohu vyladění.
- Cílový prostředek nebo účet by neměl zakázat přístup k veřejné síti. (Alespoň při odesílání žádosti o kopírování).
- Do cílového účtu můžete kopírovat pouze v případě, že účet, který spouští kopii, má dostatečná oprávnění pro přístup k cílovému účtu.
Konfigurace oprávnění
- Vytvořte spravovanou identitu přiřazenou uživatelem.
- Udělte roli uživatele Azure AI spravované identitě přiřazené uživatelem v cílovém prostředku nebo účtu.
- Přiřaďte spravovanou identitu přiřazenou uživatelem ke zdrojovému účtu prostředku.
Kopírování modelu
curl --request POST \
--url 'https://<aoai-resource>.openai.azure.com/openai/v1/fine_tuning/jobs/<ftjob>/checkpoints/<checkpoint-name>/copy' \
--header 'Content-Type: application/json' \
--header 'api-key: <api-key>' \
--header 'aoai-copy-ft-checkpoints: preview' \
--data '{
"destinationResourceId": "<resourceId>",
"region": "<region>"
}'
Vzhledem k tomu, že se jedná o dlouhotrvající operaci, zkontrolujte stav jemně vyladěné kopie modelu zadáním ID kontrolního bodu zdrojového účtu použitého ve volání POST.
Kontrola stavu kopírování
curl --request GET \
--url 'https://<aoai-resource>.openai.azure.com//openai/v1/fine_tuning/jobs/<ftjob>/checkpoints/<checkpoint-name>/copy' \
--header 'Content-Type: application/json' \
--header 'api-key: <api-key>' \
--header 'aoai-copy-ft-checkpoints: preview'
Poznámka:
Při kopírování kontrolního bodu ze zdrojového účtu se v cílovém účtu zachová stejný název kontrolního bodu. Ujistěte se, že používáte stejný název pro vyladění, nasazení nebo jakoukoli jinou operaci v cílovém účtu. Tento kontrolní bod se nezobrazuje v uživatelském rozhraní ani v list checkpoints rozhraní API.
Kontrolní body
Po dokončení každé epochy trénování se vygeneruje kontrolní bod. Kontrolní bod je plně funkční verze modelu, která se dá nasadit i použít jako cílový model pro následné úlohy jemného ladění. Kontrolní body můžou být zvlášť užitečné, protože před přeurčením můžou poskytovat snímky. Po dokončení úlohy vyladění budete mít k dispozici tři nejnovější verze modelu, které je možné nasadit. Poslední epocha bude reprezentována vaším jemně vyladěným modelem, předchozí dvě epochy budou k dispozici jako kontrolní body.
Spuštěním příkazu kontrolních bodů seznamu můžete načíst seznam kontrolních bodů přidružených k jednotlivým úlohám jemného ladění:
curl -X POST $AZURE_OPENAI_ENDPOINT/openai/v1/fine_tuning/jobs/{fine_tuning_job_id}/checkpoints \
-H "Content-Type: application/json" \
-H "api-key: $AZURE_OPENAI_API_KEY"
Analýza přizpůsobeného modelu
Azure OpenAI připojí výsledný soubor s názvem results.csv ke každé úloze doladění po dokončení. Výsledný soubor můžete použít k analýze výkonu trénování a ověřování přizpůsobeného modelu. ID souboru výsledku je uvedené pro každý přizpůsobený model a pomocí rozhraní REST API můžete načíst ID souboru a stáhnout výsledný soubor pro analýzu.
Následující příklad Pythonu pomocí rozhraní REST API načte ID souboru prvního výsledného souboru připojeného k úloze vyladění vlastního modelu a pak stáhne soubor do pracovního adresáře pro účely analýzy.
curl -X GET "$AZURE_OPENAI_ENDPOINT/openai/v1/fine_tuning/jobs/<JOB_ID>" \
-H "api-key: $AZURE_OPENAI_API_KEY")
curl -X GET "$AZURE_OPENAI_ENDPOINT/openai/v1/files/<RESULT_FILE_ID>/content" \
-H "api-key: $AZURE_OPENAI_API_KEY" > <RESULT_FILENAME>
Výsledný soubor je soubor CSV, který obsahuje řádek záhlaví a řádek pro každý krok trénování prováděný úlohou jemného ladění. Výsledný soubor obsahuje následující sloupce:
| Název sloupce | Popis |
|---|---|
step |
Počet kroků trénování. Trénovací krok představuje jeden průchod, dopředu a dozadu v dávce trénovacích dat. |
train_loss |
Ztráta pro trénovací dávku. |
train_mean_token_accuracy |
Procento tokenů v trénovací dávce správně predikované modelem. Pokud je například velikost dávky nastavena na hodnotu 3 a data obsahují dokončení [[1, 2], [0, 5], [4, 2]], je tato hodnota nastavena na 0,83 (5 z 6), pokud model predikoval [[1, 1], [0, 5], [4, 2]]. |
valid_loss |
Ztráta pro ověřovací dávku. |
validation_mean_token_accuracy |
Procento tokenů v dávce ověřování správně predikované modelem Pokud je například velikost dávky nastavena na hodnotu 3 a data obsahují dokončení [[1, 2], [0, 5], [4, 2]], je tato hodnota nastavena na 0,83 (5 z 6), pokud model predikoval [[1, 1], [0, 5], [4, 2]]. |
full_valid_loss |
Ztráta ověření vypočítaná na konci každé epochy. Když trénování půjde dobře, ztráta by se měla snížit. |
full_valid_mean_token_accuracy |
Platná průměrná přesnost tokenu vypočítaná na konci každé epochy. Při dobrém trénování by se měla zvýšit přesnost tokenů. |
Data v souboru results.csv můžete zobrazit také jako grafy na portálu Foundry. Vyberte odkaz pro trénovaný model a zobrazí se tři grafy: ztráta, střední přesnost tokenu a přesnost tokenů. Pokud jste zadali ověřovací data, zobrazí se obě datové sady ve stejném grafu.
Vyhledejte ztrátu, abyste v průběhu času snížili a zvýšili přesnost. Pokud zjistíte rozdíly mezi trénovacími a ověřovacími daty, které můžou znamenat, že přeurčujete. Vyzkoušejte trénování s menším počtem epoch nebo menší násobitelem rychlosti učení.
Nasadit jemně doladěný model
Jakmile budete s metrikami spokojení z úlohy vyladění nebo chcete přejít na odvozování, musíte model nasadit.
Pokud nasazujete k dalšímu ověření, zvažte nasazení pro testování pomocí úrovně pro vývojáře.
Pokud jste připraveni nasadit do produkčního prostředí nebo potřebujete konkrétní rezidenci dat, postupujte podle našeho průvodce nasazením.
| proměnná | Definice |
|---|---|
| token | Existuje několik způsobů, jak vygenerovat autorizační token. Nejjednodušší metodou počátečního testování je spuštění Cloud Shellu z webu Azure Portal. Pak spusťte az account get-access-token. Tento token můžete použít jako dočasný autorizační token pro testování rozhraní API. Doporučujeme ho uložit do nové systémové proměnné. |
| odběr | ID předplatného přidruženého prostředku Azure OpenAI. |
| skupina zdrojů | Název skupiny prostředků pro váš zdroj Azure OpenAI. |
| název_zdroje | Název prostředku Azure OpenAI. |
| název_nasazení_modelu | Vlastní název pro nasazení nového modelu s jemným doladěním. Jedná se o název, na který se bude v kódu odkazovat k vyvolání dokončení chatu. |
| jemně vyladěný model | Načtěte tuto hodnotu obdrženou z výsledků úlohy doladění v předchozím kroku. Bude vypadat jako gpt-4.1-2025-04-14.ft-b044a9d3cf9c4228b5d393567f693b83. Tuto hodnotu budete muset přidat do deploy_data json. Případně můžete také nasadit kontrolní bod předáním ID kontrolního bodu, které se zobrazí ve formátu. ftchkpt-e559c011ecc04fc68eaa339d8227d02d |
curl -X POST "https://management.azure.com/subscriptions/<SUBSCRIPTION>/resourceGroups/<RESOURCE_GROUP>/providers/Microsoft.CognitiveServices/accounts/<RESOURCE_NAME>/deployments/<MODEL_DEPLOYMENT_NAME>?api-version=2024-10-21" \
-H "Authorization: Bearer <TOKEN>" \
-H "Content-Type: application/json" \
-d '{
"sku": {"name": "standard", "capacity": 1},
"properties": {
"model": {
"format": "OpenAI",
"name": "<FINE_TUNED_MODEL>",
"version": "1"
}
}
}'
Další informace o nasazení mezi oblastmi a použití nasazeného modelu najdete tady.
Průběžné jemné ladění
Jakmile vytvoříte jemně vyladěný model, možná budete chtít model v průběhu času dále upřesňovat prostřednictvím dalšího vyladění. Průběžné doladění je iterativní proces výběru již vyladěného modelu jako základního modelu a jeho dalšího vyladění v nových sadách trénovacích příkladů.
K vyladění modelu, který jste dříve doladili, byste použili stejný postup, jak je popsáno v části Vytvoření přizpůsobeného modelu , ale místo zadání názvu obecného základního modelu byste zadali ID již vyladěného modelu. VYLADĚNÉ ID modelu vypadá takto: gpt-4.1-2025-04-14.ft-5fd1918ee65d4cd38a5dcf6835066ed7
curl -X POST $AZURE_OPENAI_ENDPOINT/openai/v1/fine_tuning/jobs \
-H "Content-Type: application/json" \
-H "api-key: $AZURE_OPENAI_API_KEY" \
-d '{
"model": "gpt-4.1-2025-04-14.ft-5fd1918ee65d4cd38a5dcf6835066ed7",
"training_file": "<TRAINING_FILE_ID>",
"validation_file": "<VALIDATION_FILE_ID>",
"suffix": "<additional text used to help identify fine-tuned models>"
}'
Doporučujeme také přidat suffix parametr, aby bylo snazší rozlišovat mezi různými iteracemi vašeho jemně vyladěného modelu.
suffix vezme řetězec a nastaví se k identifikaci jemně vyladěného modelu. Přípona může obsahovat až 40 znaků (a-z, A-Z, 0-9 a _), které se přidají do vašeho jemně vyladěného názvu modelu.
Pokud si nejste jisti ID vašeho jemně vyladěného modelu, najdete tyto informace na stránce Modely foundry nebo můžete vygenerovat seznam modelů pro daný prostředek Azure OpenAI pomocí rozhraní REST API.
Vyčištění nasazení, přizpůsobených modelů a trénovacích souborů
Až budete hotovi s vlastním modelem, můžete nasazení a model odstranit. V případě potřeby můžete také odstranit trénovací a ověřovací soubory, které jste nahráli do služby.
Odstranění nasazení modelu
Nasazení vlastního modelu můžete odstranit pomocí různých metod:
Odstranění přizpůsobeného modelu
Podobně můžete k odstranění přizpůsobeného modelu použít různé metody:
Poznámka:
Pokud má existující nasazení, nemůžete odstranit přizpůsobený model. Před odstraněním přizpůsobeného modelu musíte nejprve odstranit nasazení modelu.
Odstranění trénovacích souborů
Volitelně můžete odstranit trénovací a ověřovací soubory, které jste nahráli pro trénování, a výsledné soubory vygenerované během trénování z vašeho předplatného Azure OpenAI. K odstranění trénovacích, ověřovacích a výsledných souborů můžete použít následující metody:
Na portálu Microsoft Foundry existují dvě jedinečná prostředí pro vyladění:
- Zobrazení centra/projektu – podporuje jemně vyladěné modely od několika poskytovatelů, včetně Azure OpenAI, Meta Llama, Microsoft Phi atd.
- Zobrazení zaměřené na Azure OpenAI – podporuje pouze vyladění modelů Azure OpenAI, ale podporuje další funkce, jako je integrace Weights &Biases (W&B).
Pokud model Azure OpenAI dolaďujete jenom doladit, doporučujeme vám přejít na https://ai.azure.com/resource/overviewprostředí zaměřené na Azure OpenAI, které je k dispozici.
Důležité
Položky označené (Preview) v tomto článku jsou aktuálně ve verzi Public Preview. Tato verze Preview je poskytována bez smlouvy o úrovni služeb a nedoporučujeme ji pro produkční úlohy. Některé funkce nemusí být podporované nebo můžou mít omezené možnosti. Další informace najdete v dodatečných podmínkách použití pro verze Preview v Microsoft Azure.
Požadavky
- Přečtěte si průvodce vyladěním možností Kdy používat Azure OpenAI.
- Předplatné služby Azure. Vytvořte si ho zdarma.
- Prostředek Azure OpenAI umístěný v oblasti, která podporuje jemné ladění modelu Azure OpenAI. Projděte si tabulku souhrnu modelů a dostupnost oblastí pro seznam dostupných modelů podle oblastí a podporovaných funkcí. Další informace najdete v tématu Vytvoření prostředku a nasazení modelu pomocí Azure OpenAI.
- Vyladění přístupu vyžaduje roli uživatele Azure AI .
- Pokud ještě nemáte přístup k zobrazení kvóty a nasadíte modely na portálu Microsoft Foundry, budete potřebovat další oprávnění.
Podporované modely
Na stránce modelů zkontrolujte, které oblasti aktuálně podporují vyladění.
Nebo můžete doladit dříve vyladěný model formátovaný jako base-model.ft-{jobid}.
Kontrola pracovního postupu pro portál Foundry
Zkuste si projít jemně vyladěný pracovní postup pro použití portálu Foundry:
- Připravte trénovací a ověřovací data.
- Pomocí dialogového okna Vytvořit jemně vyladěný model na portálu Foundry můžete natrénovat vlastní model.
- Vyberte metodu trénování.
- Vyberte základní model.
- Zvolte typ trénování.
- Zvolte trénovací data.
- Volitelně můžete zvolit ověřovací data.
- Volitelně můžete nakonfigurovat parametry úkolu pro úlohu vyladění.
- Volitelně můžete povolit automatické nasazení pro výsledný vlastní model.
- Zkontrolujte své volby a natrénujte nový vlastní model.
- Zkontrolujte stav vlastního jemně vyladěného modelu.
- Nasaďte vlastní model pro použití.
- Použijte vlastní model.
- Volitelně můžete analyzovat vlastní model tak, aby odpovídal výkonu a přizpůsobení.
Příprava trénovacích a ověřovacích dat
Vaše cvičební data a sady ověřovacích dat se skládají ze vstupních a výstupních příkladů toho, jak se má model provádět.
Použitá trénovací a ověřovací data musí být naformátovaná jako dokument JSON Lines (JSONL) a musí být formátovaná v konverzačním formátu, který používá rozhraní API pro dokončování chatu .
Obecně se doporučuje používat pokyny a výzvy, které jste shledali jako nejvhodnější, v každém příkladu výuky. To vám pomůže dosáhnout nejlepších výsledků, zejména pokud máte méně než sto příkladů.
Příklad formátu souboru
{"messages": [{"role": "system", "content": "Clippy is a factual chatbot that is also sarcastic."}, {"role": "user", "content": "Who discovered Antarctica?"}, {"role": "assistant", "content": "Some chaps named Fabian Gottlieb von Bellingshausen and Mikhail Lazarev, as if they don't teach that in every school!"}]}
{"messages": [{"role": "system", "content": "Clippy is a factual chatbot that is also sarcastic."}, {"role": "user", "content": "What is the biggest ocean?"}, {"role": "assistant", "content": "The Pacific Ocean. It's not like it's a small pond or anything."}]}
{"messages": [{"role": "system", "content": "Clippy is a factual chatbot that is also sarcastic."}, {"role": "user", "content": "What is the largest planet?"}, {"role": "assistant", "content": "It's called Jupiter, you might have heard of it...or not."}]}
{"messages": [{"role": "system", "content": "Clippy is a factual chatbot that is also sarcastic."}, {"role": "user", "content": "Who painted the Mona Lisa?"}, {"role": "assistant", "content": "Oh, some obscure artist named Leonardo da Vinci. Not that he is famous or anything."}]}
{"messages": [{"role": "system", "content": "Clippy is a factual chatbot that is also sarcastic."}, {"role": "user", "content": "What's the boiling point of water?"}, {"role": "assistant", "content": "Exciting fact of the day: it's 100 degrees Celsius. Life-changing, isn't it?"}]}
{"messages": [{"role": "system", "content": "Clippy is a factual chatbot that is also sarcastic."}, {"role": "user", "content": "Who wrote 'The Odyssey'?"}, {"role": "assistant", "content": "Oh, just some poet named Homer. Nothing special, really."}]}
{"messages": [{"role": "system", "content": "Clippy is a factual chatbot that is also sarcastic."}, {"role": "user", "content": "What is the largest mammal?"}, {"role": "assistant", "content": "Blue Whale. Quite a big fish isn't it? Oh wait, it's not a fish!"}]}
{"messages": [{"role": "system", "content": "Clippy is a factual chatbot that is also sarcastic."}, {"role": "user", "content": "What's the highest mountain peak?"}, {"role": "assistant", "content": "Everest. Brace yourself, it's not a walk in the park."}]}
{"messages": [{"role": "system", "content": "Clippy is a factual chatbot that is also sarcastic."}, {"role": "user", "content": "Who invented the telephone?"}, {"role": "assistant", "content": "A guy named Alexander Graham Bell. Bet you didn't guess that one!"}]}
{"messages": [{"role": "system", "content": "Clippy is a factual chatbot that is also sarcastic."}, {"role": "user", "content": "What is the distance from Earth to the Sun?"}, {"role": "assistant", "content": "About 93 million miles. Just a quick drive, really."}]}
Formát souboru chatu s vícenásobným převodem na Azure OpenAI
Podporuje se také několik otočení konverzace v jednom řádku trénovacího souboru jsonl. Pokud chcete přeskočit jemné ladění konkrétních zpráv pomocníka, přidejte dvojici volitelných weight hodnot klíče. Aktuálně weight je možné nastavit hodnotu 0 nebo 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}]}
Dokončování chatu se zrakem
{"messages": [{"role": "user", "content": [{"type": "text", "text": "What's in this image?"}, {"type": "image_url", "image_url": {"url": "https://raw.githubusercontent.com/MicrosoftDocs/azure-ai-docs/main/articles/ai-services/openai/media/how-to/generated-seattle.png"}}]}, {"role": "assistant", "content": "The image appears to be a watercolor painting of a city skyline, featuring tall buildings and a recognizable structure often associated with Seattle, like the Space Needle. The artwork uses soft colors and brushstrokes to create a somewhat abstract and artistic representation of the cityscape."}]}
Kromě formátu JSONL musí být trénovací a ověřovací datové soubory kódované v kódování UTF-8 a obsahovat značku pořadí bajtů (BOM). Soubor musí mít velikost menší než 512 MB.
Úvahy o velikosti datových sad
Čím více trénovacích příkladů máte, tím lépe. Úlohy jemného ladění nebudou pokračovat bez alespoň 10 tréninkových příkladů, ale takové malé číslo nestačí k výraznému ovlivnění odpovědí modelu. Osvědčeným postupem je poskytnout stovky příkladů trénování, pokud ne tisíce, aby byly úspěšné. Doporučujeme začít s 50 pečlivě připravenými tréninkovými daty.
Obecně platí, že zdvojnásobení velikosti datové sady může vést k lineárnímu zvýšení kvality modelu. Mějte ale na paměti, že příklady nízké kvality můžou negativně ovlivnit výkon. Pokud model vytrénujete na velké množství interních dat, aniž byste nejprve datovou sadu vyřezávali jenom pro příklady s nejvyšší kvalitou, mohli byste skončit s modelem, který funguje mnohem hůře, než se čekalo.
Vytvoření jemně vyladěného modelu
Portál Foundry poskytuje dialogové okno Vytvořit jemně vyladěný model , takže na jednom místě můžete snadno vytvořit a vytrénovat jemně vyladěný model pro váš prostředek Azure.
Přejděte na portál https://ai.azure.com/ Foundry a přihlaste se pomocí přihlašovacích údajů, které mají přístup k vašemu prostředku Azure OpenAI. Během přihlašovacího pracovního postupu vyberte příslušný adresář, předplatné Azure a prostředek Azure OpenAI.
Na portálu Foundry přejděte do podokna Nástroje > vyladění a vyberte Vyladit model.
Vyberte model, který chcete vyladit, a pak pokračujte výběrem Další.
Teď byste měli vidět dialogové okno Vytvořit jemně vyladěný model .
Volba metody trénování
Prvním krokem je potvrzení výběru modelu a metody trénování. Ne všechny modely podporují všechny metody trénování.
- Jemné ladění pod dohledem (SFT): podporováno všemi modely bez schopnosti usuzování.
- Optimalizace přímých předvoleb (Preview) (DPO): podporováno GPT-4o.
- Jemné ladění výztuže (Preview) (RFT): podporované zdůvodněním modelů, jako je o4-mini.
Při výběru modelu můžete také vybrat dříve vyladěný model.
Zvolte typ trénování.
Foundry nabízí tři úrovně trénování navržené tak, aby splňovaly různé potřeby zákazníků:
Standardní úroveň trénování
Poskytuje vyhrazenou kapacitu pro optimalizaci s předvídatelným výkonem a dohodami o úrovni služeb (SLA). Ideální pro produkční úlohy vyžadující zaručenou propustnost.
Globální úroveň standardního trénování
Globální školení rozšiřuje dosah přizpůsobení modelu s cenově dostupnými cenami našich dalších globálních nabídek. Nenabízí rezidenci dat. Pokud požadujete rezidenci dat, projděte si oblasti uvedené v dostupnosti modelu pro váš vybraný model.
Trénovací data a výsledné váhy modelu se můžou zkopírovat do jiné oblasti Azure.
- Natrénujte nejnovější modely OpenAI z více než desítek oblastí Azure OpenAI.
- Využijte výhod nižších trénovacích sazeb pro jednotlivé tokeny v porovnání s úrovní Standard.
Úroveň školení pro vývojáře
Nákladově efektivní možnost, která využívá nečinnou kapacitu pro ne urgentní nebo průzkumné úlohy.
Úlohy v této úrovni mohou být přerušeny a obnoveny později, což je ideální pro experimentování a případy použití citlivé na náklady.
Volba trénovacích dat
Dalším krokem je zvolit stávající připravená trénovací data nebo nahrát nová připravená trénovací data, která se mají použít při přizpůsobení modelu výběrem možnosti Přidat trénovací data.
V dialogovém okně Trénovací data se zobrazí všechny existující dříve nahrané datové sady a také možnosti pro nahrání nových trénovacích dat.
Pokud jsou trénovací data již nahraná do služby, vyberte Soubory z připojeného prostředku umělé inteligence.
- V zobrazeném rozevíracím seznamu vyberte soubor.
Pokud chcete nahrát nová trénovací data, použijte jednu z následujících možností:
- Vyberte Nahrát soubory a nahrajte trénovací data z místního souboru.
- Vyberte objekt blob Azure nebo jiná sdílená webová umístění pro import trénovacích dat z objektu blob Azure nebo jiného sdíleného webového umístění.
U velkých datových souborů doporučujeme importovat z úložiště objektů blob v Azure. Velké soubory se můžou stát nestabilní, když se nahrají prostřednictvím formulářů s více částmi, protože požadavky jsou atomické a nejde je opakovat ani obnovit. Další informace o službě Azure Blob Storage najdete v tématu Co je Azure Blob Storage?
Poznámka:
Trénovací datové soubory musí být formátované jako soubory JSONL zakódované v UTF-8 pomocí značky pořadí bajtů (BOM). Soubor musí mít velikost menší než 512 MB.
Volba ověřovacích dat (volitelné)
Pokud máte ověřovací datovou sadu, vyberte Přidat trénovací data. Můžete zvolit existující připravená ověřovací data nebo nahrát nová připravená ověřovací data, která se mají použít při přizpůsobení modelu.
V dialogovém okně Ověřovací data se zobrazí všechny existující dříve nahrané trénovací a ověřovací datové sady a poskytují možnosti, pomocí kterých můžete nahrát nová ověřovací data.
Pokud jsou ověřovací data již nahrána do služby, vyberte Zvolit datovou sadu.
- V seznamu zobrazeném v podokně Ověřovací data vyberte soubor.
Pokud chcete nahrát nová ověřovací data, použijte jednu z následujících možností:
- Vyberte Místní soubor a nahrajte ověřovací data z místního souboru.
- Vyberte objekt blob Azure nebo jiná sdílená webová umístění pro import ověřovacích dat z objektu blob Azure nebo jiného sdíleného webového umístění.
U velkých datových souborů doporučujeme importovat z úložiště objektů blob v Azure. Velké soubory se můžou stát nestabilní, když se nahrají prostřednictvím formulářů s více částmi, protože požadavky jsou atomické a nejde je opakovat ani obnovit.
Poznámka:
Podobně jako u trénovacích datových souborů musí být ověřovací datové soubory formátované jako soubory JSONL zakódované v kódování UTF-8 pomocí značky pořadí bajtů (BOM). Soubor musí mít velikost menší než 512 MB.
Určení identifikovatelného modelu (volitelné)
Doporučujeme také přidat suffix parametr, aby bylo snazší rozlišovat mezi různými iteracemi vašeho jemně vyladěného modelu. A suffix přebírá řetězec o velikosti až 18 znaků a používá se při pojmenování výsledného jemně vyladěného modelu.
Konfigurace parametrů trénování (volitelné)
Můžete zadat volitelné nastavení počátečního semene a vyladit další hyperparametry.
Semeno řídí reprodukovatelnost úlohy. Předání stejných počátečních parametrů a parametrů úlohy by mělo vést ke stejným výsledkům, ale ve výjimečných případech se může lišit. Pokud není zadané semeno, bude pro vás náhodně vygenerováno.
K dispozici jsou následující hyperparametry pro ladění prostřednictvím portálu Foundry:
| název | Typ | Popis |
|---|---|---|
| Velikost dávky | integer | Velikost dávky, která se má použít pro trénování. Velikost dávky je počet trénovacích příkladů použitých k trénování během jednoho průchodu dopředu a zpět. Obecně jsme zjistili, že větší velikosti dávek obvykle fungují lépe u větších datových sad. Výchozí hodnota a maximální hodnota této vlastnosti jsou specifické pro základní model. Větší velikost dávky znamená, že parametry modelu jsou aktualizovány méně často, ale s nižší variabilitou. |
| Násobitel rychlosti učení | číslo | Násobitel rychlosti učení, který se má použít pro trénování. Míra doladění je původní míra učení používaná pro předtrénování vynásobenou touto hodnotou. Větší rychlost učení obvykle funguje lépe s většími velikostmi dávek. Doporučujeme experimentovat s hodnotami v rozsahu 0,02 až 0,2, abyste zjistili, co vede k dosažení nejlepších výsledků. Menší rychlost učení může být užitečná, aby se zabránilo přeučení. |
| Počet epoch | integer | Počet epoch pro trénování modelu. Epocha označuje jeden celý cyklus skrze trénovací datovou sadu. |
Povolení automatického nasazení (volitelné)
Pokud chcete ušetřit čas, můžete volitelně povolit automatické nasazení pro výsledný model. Pokud se trénování úspěšně dokončí, model se nasadí pomocí vybraného typu nasazení. Nasazení bude pojmenováno na základě jedinečného názvu vygenerovaného pro váš vlastní model a volitelné přípony , kterou jste možná zadali dříve.
Poznámka:
Pro automatické nasazení se v současné době podporují pouze nasazení globálního standardu a nasazení pro vývojáře. Ani jedna z těchto možností neposkytuje rezidenci dat. Další podrobnosti najdete v dokumentaci k typu nasazení .
Kontrola možností a trénování modelu
Zkontrolujte své volby a vyberte Odeslat , abyste mohli začít trénovat nový jemně vyladěný model.
Kontrola stavu vlastního modelu
Po odeslání jemně vyladěné úlohy se zobrazí stránka s podrobnostmi o jemně vyladěném modelu. Stav a další informace o vašem modelu upraveném jemným doladěním najdete na stránce Jemné ladění na portálu Foundry.
Vaše úloha může být zařazena do fronty za jinými úlohami v systému. Trénování modelu může trvat minuty nebo hodiny v závislosti na velikosti modelu a datové sady.
Kontrolní body
Po dokončení každé epochy trénování se vygeneruje kontrolní bod. Kontrolní bod je plně funkční verze modelu, která se dá nasadit i použít jako cílový model pro následné úlohy jemného ladění. Kontrolní body můžou být zvlášť užitečné, protože před přeurčením můžou poskytovat snímky. Po dokončení úlohy vyladění budete mít k dispozici tři nejnovější verze modelu, které je možné nasadit. Prostřednictvím rozhraní REST API můžete kopírovat kontrolní body mezi prostředky a předplatnými.
Pozastavení a obnovení
Průběh můžete sledovat v obou jemně vyladěných zobrazeních portálu Foundry. Uvidíte, že vaše úloha prochází stejnými stavy jako běžné úlohy jemného ladění (ve frontě, spuštěno, úspěšné).
Můžete si také projít soubory s výsledky během tréninku, abyste mohli nahlédnout do průběhu a zjistit, zda váš trénink pokračuje podle očekávání.
Poznámka:
Během trénování můžete zobrazit protokoly a metriky a podle potřeby úlohu pozastavit. Pozastavení může být užitečné, pokud metriky nejsou konvergující nebo pokud se cítíte, že se model nevyučuje správným tempem. Po pozastavení úlohy trénování se po dokončení bezpečnostních kontrol vytvoří nasaditelný kontrolní bod. Tento kontrolní bod je k dispozici k nasazení a použití k odvozování nebo obnovení úlohy až po dokončení. Operace pozastavení je použitelná pouze pro úlohy, které byly natrénovány alespoň pro jeden krok a jsou ve spuštěném stavu.
Analýza vlastního modelu
Azure OpenAI připojí výsledný soubor s názvem results.csv ke každé úloze vyladění po dokončení. Výsledný soubor můžete použít k analýze výkonu trénování a ověření vlastního modelu. ID souboru výsledku je uvedené pro každý vlastní model ve sloupci ID souboru výsledku v podokně Modely pro portál Foundry. ID souboru můžete použít k identifikaci a stažení výsledného souboru z podokna Datové soubory na portálu Foundry.
Výsledný soubor je soubor CSV, který obsahuje řádek záhlaví a řádek pro každý krok trénování prováděný úlohou jemného ladění. Výsledný soubor obsahuje následující sloupce:
| Název sloupce | Popis |
|---|---|
step |
Počet kroků trénování. Trénovací krok představuje jeden průchod, dopředu a dozadu v dávce trénovacích dat. |
train_loss |
Ztráta pro trénovací dávku. |
train_mean_token_accuracy |
Procento tokenů v trénovací dávce správně predikované modelem. Pokud je například velikost dávky nastavena na hodnotu 3 a data obsahují dokončení [[1, 2], [0, 5], [4, 2]], je tato hodnota nastavena na 0,83 (5 z 6), pokud model predikoval [[1, 1], [0, 5], [4, 2]]. |
valid_loss |
Ztráta pro ověřovací dávku. |
validation_mean_token_accuracy |
Procento tokenů v dávce ověřování správně predikované modelem Pokud je například velikost dávky nastavena na hodnotu 3 a data obsahují dokončení [[1, 2], [0, 5], [4, 2]], je tato hodnota nastavena na 0,83 (5 z 6), pokud model predikoval [[1, 1], [0, 5], [4, 2]]. |
full_valid_loss |
Ztráta ověření vypočítaná na konci každé epochy. Když trénování půjde dobře, ztráta by se měla snížit. |
full_valid_mean_token_accuracy |
Platná průměrná přesnost tokenu vypočítaná na konci každé epochy. Při dobrém trénování by se měla zvýšit přesnost tokenů. |
Data v souboru results.csv můžete zobrazit také jako grafy na portálu Foundry. Vyberte odkaz pro trénovaný model a zobrazí se tři grafy: ztráta, střední přesnost tokenu a přesnost tokenů. Pokud jste zadali ověřovací data, zobrazí se obě datové sady ve stejném grafu.
Vyhledejte ztrátu, abyste v průběhu času snížili a zvýšili přesnost. Pokud zjistíte rozdíl mezi trénovacími a ověřovacími daty, může to znamenat, že přeurčujete. Vyzkoušejte trénování s menším počtem epoch nebo menší násobitelem rychlosti učení.
Nasadit jemně doladěný model
Jakmile budete spokojení s metrikami z vaší jemně vyladěné úlohy nebo chcete přejít na odvozování, musíte model nasadit.
Pokud nasazujete k dalšímu ověření, zvažte nasazení pro testování pomocí úrovně pro vývojáře.
Pokud jste připraveni nasadit do produkčního prostředí nebo potřebujete konkrétní rezidenci dat, postupujte podle našeho průvodce nasazením.
Použití nasazeného jemně vyladěného modelu
Po nasazení jemně vyladěného modelu ho můžete použít jako jakýkoli jiný nasazený model. Dětské hřiště v Foundry můžete použít k experimentování s novým nasazením. Rozhraní REST API můžete také použít k volání jemně vyladěného modelu z vlastní aplikace. Můžete dokonce začít používat tento nový jemně vyladěný model v toku výzvy k sestavení aplikace generující AI.
Poznámka:
U chatovacích modelů musí být systémová zpráva, kterou používáte k vedení vyladěného modelu (ať už je nasazený nebo dostupný pro testování v dětském hřišti), stejná jako systémová zpráva, kterou jste použili k trénování. Pokud používáte jinou systémovou zprávu, model nemusí fungovat podle očekávání.
Průběžné jemné ladění
Jakmile vytvoříte jemně vyladěný model, můžete chtít model v průběhu času dále upřesnit prostřednictvím dalšího vyladění. Průběžné doladění je iterativní proces výběru již vyladěného modelu jako základního modelu a jeho dalšího vyladění v nových sadách trénovacích příkladů.
K vyladění modelu, který jste dříve vyladili, byste použili stejný postup, jak je popsáno při vytváření jemně vyladěného modelu , ale místo zadání názvu obecného základního modelu byste zadali již vyladěný model. Vlastní jemně vyladěný model by vypadal takto: gpt-4o-2024-08-06.ft-d93dda6110004b4da3472d96f4dd4777-ft
Vyčištění nasazení, vlastních modelů a trénovacích souborů
Až budete s vlastním modelem hotovi, můžete nasazení a model odstranit. V případě potřeby můžete také odstranit trénovací a ověřovací soubory, které jste nahráli do služby.
Odstranění nasazení modelu
Důležité
Po nasazení přizpůsobeného modelu se nasazení odstraní, pokud nasazení zůstane neaktivní po dobu delší než patnáct (15) dnů. Nasazení přizpůsobeného modelu je neaktivní, pokud byl model nasazen před více než patnácti (15) dny a během nepřetržitého 15denního období do něj nebyla provedena žádná volání k dokončení nebo dokončení chatu.
Odstranění neaktivního nasazení neodstraní ani neovlivní základní přizpůsobený model a přizpůsobený model je možné kdykoliv znovu nasadit. Jak je popsáno v cenách modelů Azure OpenAI v Microsoft Foundry, každý přizpůsobený (jemně vyladěný) model, který je nasazen, má hodinové náklady na hosting bez ohledu na to, zda se k modelu provádějí volání pro dokončení nebo volání pro dokončení chatu. Další informace o plánování a správě nákladů pomocí Azure OpenAI najdete v doprovodných materiálech v tématu Plánování správy nákladů na Azure OpenAI.
Nasazení vlastního modelu můžete odstranit v podokně Nasazení na portálu Foundry. Vyberte nasazení, které chcete odstranit, a pak výběrem možnosti Odstranit nasazení odstraňte.
Odstranění vlastního modelu
Vlastní model můžete odstranit v podokně Modely na portálu Foundry. Na kartě Vlastní modely vyberte vlastní model, který chcete odstranit, a pak vyberte Odstranit a odstraňte vlastní model.
Poznámka:
Nemůžete odstranit vlastní model, pokud má existující nasazení. Před odstraněním vlastního modelu musíte nejprve odstranit nasazení modelu.
Odstranění trénovacích souborů
Volitelně můžete odstranit trénovací a ověřovací soubory, které jste nahráli pro trénování, a výsledné soubory vygenerované během trénování v podokně Data správy>a indexy na portálu Foundry. Vyberte soubor, který chcete odstranit, a pak soubor odstraňte výběrem možnosti Odstranit .
Požadavky
- Přečtěte si průvodce vyladěním možností Kdy používat Azure OpenAI.
- Předplatné služby Azure. Vytvořte si ho zdarma.
- Prostředek Azure OpenAI. Další informace najdete v tématu Vytvoření prostředku a nasazení modelu pomocí Azure OpenAI.
- Následující knihovny Pythonu:
os,json,requests.openai - Knihovna OpenAI Python.
- Vyladění přístupu vyžaduje roli uživatele Azure AI .
- Pokud ještě nemáte přístup k zobrazení kvóty a nasadíte modely na portálu Microsoft Foundry, budete potřebovat další oprávnění.
Podporované modely
Na stránce modelů zkontrolujte, které oblasti aktuálně podporují vyladění.
Nebo můžete doladit dříve jemně vyladěný model formátovaný jako base-model.ft-{jobid}.
Kontrola pracovního postupu pro sadu Python SDK
Chvilku si projděte vyladěný pracovní postup pro používání sady Python SDK s Azure OpenAI:
- Připravte trénovací a ověřovací data.
- Vyberte základní model.
- Nahrajte trénovací data.
- Trénujte nový přizpůsobený model.
- Zkontrolujte stav přizpůsobeného modelu.
- Nasaďte přizpůsobený model pro použití.
- Použijte přizpůsobený model.
- Volitelně můžete analyzovat přizpůsobený model tak, aby odpovídal výkonu a přizpůsobení.
Příprava trénovacích a ověřovacích dat
Vaše cvičební data a sady ověřovacích dat se skládají ze vstupních a výstupních příkladů toho, jak se má model provádět.
Použitá trénovací a ověřovací data musí být naformátovaná jako dokument JSON Lines (JSONL) a musí být formátovaná v konverzačním formátu, který používá rozhraní API pro dokončování chatu .
Pokud chcete podrobný postup vyladění gpt-4o-mini-2024-07-18 , projděte si kurz podrobného ladění Azure OpenAI.
Příklad formátu souboru
{"messages": [{"role": "system", "content": "Clippy is a factual chatbot that is also sarcastic."}, {"role": "user", "content": "Who discovered Antarctica?"}, {"role": "assistant", "content": "Some chaps named Fabian Gottlieb von Bellingshausen and Mikhail Lazarev, as if they don't teach that in every school!"}]}
{"messages": [{"role": "system", "content": "Clippy is a factual chatbot that is also sarcastic."}, {"role": "user", "content": "What is the biggest ocean?"}, {"role": "assistant", "content": "The Pacific Ocean. It's not like it's a small pond or anything."}]}
{"messages": [{"role": "system", "content": "Clippy is a factual chatbot that is also sarcastic."}, {"role": "user", "content": "What is the largest planet?"}, {"role": "assistant", "content": "It's called Jupiter, you might have heard of it...or not."}]}
{"messages": [{"role": "system", "content": "Clippy is a factual chatbot that is also sarcastic."}, {"role": "user", "content": "Who painted the Mona Lisa?"}, {"role": "assistant", "content": "Oh, some obscure artist named Leonardo da Vinci. Not that he is famous or anything."}]}
{"messages": [{"role": "system", "content": "Clippy is a factual chatbot that is also sarcastic."}, {"role": "user", "content": "What's the boiling point of water?"}, {"role": "assistant", "content": "Exciting fact of the day: it's 100 degrees Celsius. Life-changing, isn't it?"}]}
{"messages": [{"role": "system", "content": "Clippy is a factual chatbot that is also sarcastic."}, {"role": "user", "content": "Who wrote 'The Odyssey'?"}, {"role": "assistant", "content": "Oh, just some poet named Homer. Nothing special, really."}]}
{"messages": [{"role": "system", "content": "Clippy is a factual chatbot that is also sarcastic."}, {"role": "user", "content": "What is the largest mammal?"}, {"role": "assistant", "content": "Blue Whale. Quite a big fish isn't it? Oh wait, it's not a fish!"}]}
{"messages": [{"role": "system", "content": "Clippy is a factual chatbot that is also sarcastic."}, {"role": "user", "content": "What's the highest mountain peak?"}, {"role": "assistant", "content": "Everest. Brace yourself, it's not a walk in the park."}]}
{"messages": [{"role": "system", "content": "Clippy is a factual chatbot that is also sarcastic."}, {"role": "user", "content": "Who invented the telephone?"}, {"role": "assistant", "content": "A guy named Alexander Graham Bell. Bet you didn't guess that one!"}]}
{"messages": [{"role": "system", "content": "Clippy is a factual chatbot that is also sarcastic."}, {"role": "user", "content": "What is the distance from Earth to the Sun?"}, {"role": "assistant", "content": "About 93 million miles. Just a quick drive, really."}]}
Formát souboru chatu s vícenásobným převodem
Podporuje se také několik otočení konverzace v jednom řádku trénovacího souboru jsonl. Pokud chcete přeskočit jemné ladění konkrétních zpráv pomocníka, přidejte dvojici volitelných weight hodnot klíče. Aktuálně weight je možné nastavit hodnotu 0 nebo 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}]}
Dokončování chatu se zrakem
{"messages": [{"role": "user", "content": [{"type": "text", "text": "What's in this image?"}, {"type": "image_url", "image_url": {"url": "https://raw.githubusercontent.com/MicrosoftDocs/azure-ai-docs/main/articles/ai-services/openai/media/how-to/generated-seattle.png"}}]}, {"role": "assistant", "content": "The image appears to be a watercolor painting of a city skyline, featuring tall buildings and a recognizable structure often associated with Seattle, like the Space Needle. The artwork uses soft colors and brushstrokes to create a somewhat abstract and artistic representation of the cityscape."}]}
Kromě formátu JSONL musí být trénovací a ověřovací datové soubory kódované v kódování UTF-8 a obsahovat značku pořadí bajtů (BOM). Soubor musí mít velikost menší než 512 MB.
Vytvoření trénovacích a ověřovacích datových sad
Čím více trénovacích příkladů máte, tím lépe. Úlohy jemného ladění nebudou pokračovat bez alespoň 10 příkladů trénování, ale takové malé číslo nestačí k výrazně ovlivnění odpovědí modelu. Osvědčeným postupem je poskytnout stovky příkladů trénování, pokud ne tisíce, aby byly úspěšné.
Obecně platí, že zdvojnásobení velikosti datové sady může vést k lineárnímu zvýšení kvality modelu. Mějte ale na paměti, že příklady nízké kvality můžou negativně ovlivnit výkon. Pokud model vytrénujete na velké množství interních dat, aniž byste nejprve datovou sadu vyřezávali jenom pro příklady s nejvyšší kvalitou, mohli byste skončit s modelem, který funguje mnohem hůře, než se čekalo.
Nahrání trénovacích dat
Dalším krokem je zvolit stávající připravená trénovací data nebo nahrát nová připravená trénovací data, která se mají použít při přizpůsobení modelu. Po přípravě trénovacích dat můžete soubory nahrát do služby. Trénovací data můžete nahrát dvěma způsoby:
U velkých datových souborů doporučujeme importovat z úložiště objektů blob v Azure. Velké soubory se můžou stát nestabilní, když se nahrají prostřednictvím formulářů s více částmi, protože požadavky jsou atomické a nejde je opakovat ani obnovit. Další informace o službě Azure Blob Storage najdete v tématu Co je Azure Blob Storage?
Poznámka:
Trénovací datové soubory musí být formátované jako soubory JSONL zakódované v UTF-8 pomocí značky pořadí bajtů (BOM). Soubor musí mít velikost menší než 512 MB.
Následující příklad Pythonu nahraje místní trénovací a ověřovací soubory pomocí sady Python SDK a načte vrácené ID souborů.
import os
from openai import OpenAI
# Load the OpenAI client
client = OpenAI(
api_key = os.getenv("AZURE_OPENAI_API_KEY"),
base_url="https://YOUR-RESOURCE-NAME.openai.azure.com/openai/v1/"
)
# Upload the training and validation dataset files to Microsoft Foundry with the SDK.
training_file_name = 'training_set.jsonl'
validation_file_name = 'validation_set.jsonl'
training_response = client.files.create(file=open(training_file_name, "rb"), purpose="fine-tune")
validation_response = client.files.create(file=open(validation_file_name, "rb"), purpose="fine-tune")
training_file_id = training_response.id
validation_file_id = validation_response.id
print("Training file ID:", training_file_id)
print("Validation file ID:", validation_file_id)
Vytvoření přizpůsobeného modelu
Po nahrání trénovacích a ověřovacích souborů jste připraveni zahájit úlohu vyladění.
Následující kód Pythonu ukazuje příklad vytvoření nové úlohy vyladění pomocí sady Python SDK:
response = client.fine_tuning.jobs.create(
training_file=training_file_id,
validation_file=validation_file_id,
model="gpt-4.1-2025-04-14", # Enter base model name.
suffix="my-model", # Custom suffix for naming the resulting model. Note that in Microsoft Foundry the model 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.
extra_body={ "trainingType": "GlobalStandard" } # Change this to your preferred training type. Other options are `Standard` and `Developer`.
)
job_id = response.id
# You can use the job ID to monitor the status of the fine-tuning job.
# The fine-tuning job will take some time to start and complete.
print("Job ID:", response.id)
print(response.model_dump_json(indent=2))
Poznámka:
Pro typ trénování doporučujeme použít globální úroveň Standard, protože nabízí úspory nákladů a využívá globální kapacitu pro rychlejší řazení do front. Nicméně kopíruje data a váhové hodnoty mimo aktuální oblast prostředků. Pokud je rezidence dat požadavkem, použijte model , který podporuje trénování na úrovni Standard.
Můžete také předat další volitelné parametry, jako jsou hyperparametry, abyste měli větší kontrolu nad procesem jemného ladění. Pro počáteční trénování doporučujeme použít automatické výchozí hodnoty, které jsou k dispozici bez zadání těchto parametrů.
Aktuální podporované hyperparametry pro Fine-Tuning pod dohledem jsou:
| název | Typ | Popis |
|---|---|---|
batch_size |
integer | Velikost dávky, která se má použít pro trénování. Velikost dávky je počet trénovacích příkladů použitých k trénování během jednoho průchodu dopředu a zpět. Obecně jsme zjistili, že větší velikosti dávek obvykle fungují lépe u větších datových sad. Výchozí hodnota a maximální hodnota této vlastnosti jsou specifické pro základní model. Větší velikost dávky znamená, že parametry modelu jsou aktualizovány méně často, ale s nižší variabilitou. |
learning_rate_multiplier |
číslo | Násobitel rychlosti učení, který se má použít pro trénování. Míra doladění je původní míra učení používaná pro předtrénování vynásobenou touto hodnotou. Větší rychlost učení obvykle funguje lépe s většími velikostmi dávek. Doporučujeme experimentovat s hodnotami v rozsahu 0,02 až 0,2, abyste zjistili, co vede k dosažení nejlepších výsledků. Menší rychlost učení může být užitečná, abyste se vyhnuli přeurčení. |
n_epochs |
integer | Počet epoch pro trénování modelu. Epocha označuje jeden celý cyklus skrze trénovací datovou sadu. |
seed |
integer | Seed řídí reprodukovatelnost procesu. Předání stejných počátečních parametrů a parametrů úlohy by mělo vést ke stejným výsledkům, ale ve výjimečných případech se může lišit. Pokud není zadaná počáteční sada, vygeneruje se za vás. |
Pokud chcete nastavit vlastní hyperparametry s verzí 1.x rozhraní OpenAI Python API, zadejte je jako součást method:
client.fine_tuning.jobs.create(
training_file="file-abc123",
model="gpt-4.1-2025-04-14",
suffix="my-model",
seed=105,
method={
"type": "supervised", # In this case, the job will be using Supervised Fine Tuning.
"supervised": {
"hyperparameters": {
"n_epochs": 2
}
}
},
extra_body={ "trainingType": "GlobalStandard" }
)
Poznámka:
Další informace o podporovaných hyperparametrech najdete v příručkách pro optimalizaci přímých předvoleb a vyladění výztuže .
Typ trénování
Vyberte úroveň trénování na základě vašeho případu použití a rozpočtu.
Standard: Trénování probíhá v oblasti aktuálního zdroje Foundry, což zaručuje rezidenci dat. Ideální pro úlohy, ve kterých musí data zůstat v konkrétní oblasti.
Globální: Poskytuje cenově dostupné ceny oproti standardu díky využití kapacity nad rámec vaší aktuální oblasti. Data a váhy se zkopírují do oblasti, kde probíhá trénování. Ideální, pokud umístění dat není omezením a chcete rychlejší doby čekání ve frontě.
Vývojář (Preview): Poskytuje výrazné úspory nákladů díky využití nečinné kapacity pro trénování. Nejsou k dispozici žádné záruky latence ani záruky SLA, takže úlohy v této vrstvě můžou být automaticky přerušeny a obnoveny později. Ani žádná záruka rezidence dat neexistuje. Ideální pro experimentování a úlohy citlivé na cenu.
import openai
from openai import AzureOpenAI
base_uri = "https://<ACCOUNT-NAME>.services.ai.azure.com"
api_key = "<API-KEY>"
api_version = "2025-04-01-preview"
client = AzureOpenAI(
azure_endpoint=base_uri,
api_key=api_key,
api_version=api_version
)
try:
client.fine_tuning.jobs.create(
model="gpt-4.1-mini",
training_file="<FILE-ID>",
extra_body={"trainingType": "developerTier"}
)
except openai.APIConnectionError as e:
print("The server could not be reached")
print(e.__cause__) # an underlying Exception, likely raised within httpx.
except openai.RateLimitError as e:
print("A 429 status code was received; we should back off a bit.")
except openai.APIStatusError as e:
print("Another non-200-range status code was received")
print(e.status_code)
print(e.response)
print(e.body)
Kontrola stavu úlohy v jemném ladění
response = client.fine_tuning.jobs.retrieve(job_id)
print("Job ID:", response.id)
print("Status:", response.status)
print(response.model_dump_json(indent=2))
Seznam událostí jemného ladění
Pokud chcete prozkoumat jednotlivé události jemného ladění, které byly generovány během trénování, možná budete muset upgradovat klientskou knihovnu OpenAI na nejnovější verzi a pip install openai --upgrade spustit tento příkaz.
response = client.fine_tuning.jobs.list_events(fine_tuning_job_id=job_id, limit=10)
print(response.model_dump_json(indent=2))
Kontrolní body
Po dokončení každé epochy trénování se vygeneruje kontrolní bod. Kontrolní bod je plně funkční verze modelu, která se dá nasadit i použít jako cílový model pro následné úlohy jemného ladění. Kontrolní body můžou být zvlášť užitečné, protože před přeurčením můžou poskytovat snímky. Po dokončení úlohy vyladění budete mít k dispozici tři nejnovější verze modelu, které je možné nasadit. Poslední epocha bude reprezentována vaším jemně vyladěným modelem, předchozí dvě epochy budou k dispozici jako kontrolní body.
Spuštěním příkazu list checkpoints můžete načíst seznam kontrolních bodů spojených s konkrétní úlohou doladění. Abyste mohli tento příkaz spustit, budete možná muset upgradovat klientskou knihovnu OpenAI na nejnovější verzi pip install openai --upgrade .
response = client.fine_tuning.jobs.checkpoints.list(job_id)
print(response.model_dump_json(indent=2))
Analýza přizpůsobeného modelu
Azure OpenAI připojí výsledný soubor s názvem results.csv ke každé úloze doladění po dokončení. Výsledný soubor můžete použít k analýze výkonu trénování a ověřování přizpůsobeného modelu. ID souboru výsledku je uvedené pro každý přizpůsobený model a pomocí sady Python SDK můžete načíst ID souboru a stáhnout výsledný soubor pro analýzu.
Následující příklad Pythonu načte ID souboru prvního výsledného souboru připojeného k úloze vyladění vlastního modelu a pak pomocí sady Python SDK stáhne soubor do aktuálního pracovního adresáře k analýze.
# 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)
Výsledný soubor je soubor CSV, který obsahuje řádek záhlaví a řádek pro každý krok trénování prováděný úlohou jemného ladění. Výsledný soubor obsahuje následující sloupce:
| Název sloupce | Popis |
|---|---|
step |
Počet kroků trénování. Trénovací krok představuje jeden průchod, dopředu a dozadu v dávce trénovacích dat. |
train_loss |
Ztráta pro trénovací dávku. |
train_mean_token_accuracy |
Procento tokenů v trénovací dávce správně predikované modelem. Pokud je například velikost dávky nastavena na hodnotu 3 a data obsahují dokončení [[1, 2], [0, 5], [4, 2]], je tato hodnota nastavena na 0,83 (5 z 6), pokud model predikoval [[1, 1], [0, 5], [4, 2]]. |
valid_loss |
Ztráta pro ověřovací dávku. |
validation_mean_token_accuracy |
Procento tokenů v dávce ověřování správně predikované modelem Pokud je například velikost dávky nastavena na hodnotu 3 a data obsahují dokončení [[1, 2], [0, 5], [4, 2]], je tato hodnota nastavena na 0,83 (5 z 6), pokud model predikoval [[1, 1], [0, 5], [4, 2]]. |
full_valid_loss |
Ztráta ověření vypočítaná na konci každé epochy. Když trénování půjde dobře, ztráta by se měla snížit. |
full_valid_mean_token_accuracy |
Platná průměrná přesnost tokenu vypočítaná na konci každé epochy. Při dobrém trénování by se měla zvýšit přesnost tokenů. |
Data v souboru results.csv můžete zobrazit také jako grafy na portálu Microsoft Foundry. Vyberte odkaz pro trénovaný model a zobrazí se tři grafy: ztráta, střední přesnost tokenu a přesnost tokenů. Pokud jste zadali ověřovací data, zobrazí se obě datové sady ve stejném grafu.
Vyhledejte ztrátu, abyste v průběhu času snížili a zvýšili přesnost. Pokud zjistíte rozdíly mezi trénovacími a ověřovacími daty, které můžou znamenat, že přeurčujete. Vyzkoušejte trénování s menším počtem epoch nebo menší násobitelem rychlosti učení.
Nasadit jemně doladěný model
Jakmile budete s metrikami spokojení z úlohy vyladění nebo chcete přejít na odvozování, musíte model nasadit.
Pokud nasazujete k dalšímu ověření, zvažte nasazení pro testování pomocí úrovně pro vývojáře.
Na rozdíl od předchozích příkazů sady SDK je nutné nasazení provést pomocí rozhraní API řídicí roviny, které vyžaduje samostatnou autorizaci, jinou cestu rozhraní API a jinou verzi rozhraní API.
| proměnná | Definice |
|---|---|
| token | Existuje několik způsobů, jak vygenerovat autorizační token. Nejjednodušší metodou počátečního testování je spuštění Cloud Shellu z webu Azure Portal. Pak spusťte az account get-access-token. Tento token můžete použít jako dočasný autorizační token pro testování rozhraní API. Doporučujeme ho uložit do nové systémové proměnné. |
| odběr | ID předplatného přidruženého prostředku Azure OpenAI. |
| skupina zdrojů | Název skupiny prostředků pro váš zdroj Azure OpenAI. |
| název_zdroje | Název prostředku Azure OpenAI. |
| název_nasazení_modelu | Vlastní název pro nasazení nového modelu s jemným doladěním. Jedná se o název, na který se bude v kódu odkazovat k vyvolání dokončení chatu. |
| jemně vyladěný model | Načtěte tuto hodnotu obdrženou z výsledků úlohy doladění v předchozím kroku. Bude vypadat jako gpt-4.1-2025-04-14.ft-b044a9d3cf9c4228b5d393567f693b83. Tuto hodnotu budete muset přidat do deploy_data json. Případně můžete také nasadit kontrolní bod předáním ID kontrolního bodu, které se zobrazí ve formátu. ftchkpt-e559c011ecc04fc68eaa339d8227d02d |
import json
import os
import requests
token= os.getenv("<TOKEN>")
subscription = "<YOUR_SUBSCRIPTION_ID>"
resource_group = "<YOUR_RESOURCE_GROUP_NAME>"
resource_name = "<YOUR_AZURE_OPENAI_RESOURCE_NAME>"
model_deployment_name ="gpt-41-ft" # custom deployment name that you will use to reference the model when making inference calls.
deploy_params = {'api-version': "2024-10-01"} # control plane API version rather than dataplane API for this call
deploy_headers = {'Authorization': 'Bearer {}'.format(token), 'Content-Type': 'application/json'}
deploy_data = {
"sku": {"name": "standard", "capacity": 1},
"properties": {
"model": {
"format": "OpenAI",
"name": <"fine_tuned_model">, #retrieve this value from the previous call, it will look like gpt-4.1-2025-04-14.ft-b044a9d3cf9c4228b5d393567f693b83
"version": "1"
}
}
}
deploy_data = json.dumps(deploy_data)
request_url = f'https://management.azure.com/subscriptions/{subscription}/resourceGroups/{resource_group}/providers/Microsoft.CognitiveServices/accounts/{resource_name}/deployments/{model_deployment_name}'
print('Creating a new deployment...')
r = requests.put(request_url, params=deploy_params, headers=deploy_headers, data=deploy_data)
print(r)
print(r.reason)
print(r.json())
Další informace o nasazení mezi oblastmi a použití nasazeného modelu najdete tady.
Pokud jste připraveni nasadit do produkčního prostředí nebo potřebujete konkrétní rezidenci dat, postupujte podle našeho průvodce nasazením.
Průběžné jemné ladění
Jakmile vytvoříte jemně vyladěný model, možná budete chtít model v průběhu času dále upřesňovat prostřednictvím dalšího vyladění. Průběžné doladění je iterativní proces výběru již vyladěného modelu jako základního modelu a jeho dalšího vyladění v nových sadách trénovacích příkladů.
K vyladění modelu, který jste dříve vyladili, byste použili stejný postup, jak je popsáno v části Vytvoření přizpůsobeného modelu , ale místo zadání názvu obecného základního modelu byste zadali ID modelu, který už je vyladěný. VYLADĚNÉ ID modelu vypadá takto: gpt-4.1-2025-04-14.ft-5fd1918ee65d4cd38a5dcf6835066ed7
response = client.fine_tuning.jobs.create(
training_file=training_file_id,
validation_file=validation_file_id,
model="gpt-4.1-2025-04-14.ft-5fd1918ee65d4cd38a5dcf6835066ed7"
)
job_id = response.id
# You can use the job ID to monitor the status of the fine-tuning job.
# The fine-tuning job will take some time to start and complete.
print("Job ID:", response.id)
print("Status:", response.id)
print(response.model_dump_json(indent=2))
Doporučujeme také přidat suffix parametr, aby bylo snazší rozlišovat mezi různými iteracemi vašeho jemně vyladěného modelu.
suffix vezme řetězec a nastaví se k identifikaci jemně vyladěného modelu. S rozhraním OpenAI Python API se podporuje řetězec o velikosti až 18 znaků, který se přidá do vašeho jemně vyladěného názvu modelu.
Pokud si nejste jisti ID existujícího jemně vyladěného modelu, najdete tyto informace na stránce Modely microsoft Foundry nebo můžete vygenerovat seznam modelů pro daný prostředek Azure OpenAI pomocí rozhraní REST API.
Vyčištění nasazení, přizpůsobených modelů a trénovacích souborů
Až budete hotovi s vlastním modelem, můžete nasazení a model odstranit. V případě potřeby můžete také odstranit trénovací a ověřovací soubory, které jste nahráli do služby.
Odstranění nasazení modelu
Důležité
Po nasazení přizpůsobeného modelu se nasazení odstraní, pokud nasazení zůstane neaktivní po dobu delší než patnáct (15) dnů. Nasazení přizpůsobeného modelu je neaktivní, pokud byl model nasazen před více než patnácti (15) dny a během nepřetržitého 15denního období do něj nebyla provedena žádná volání k dokončení nebo dokončení chatu.
Odstranění neaktivního nasazení neodstraní ani neovlivní základní přizpůsobený model a přizpůsobený model je možné kdykoliv znovu nasadit. Jak je popsáno v cenách modelů Azure OpenAI v Microsoft Foundry, každý přizpůsobený (jemně vyladěný) model, který je nasazen, má hodinové náklady na hosting bez ohledu na to, zda se k modelu provádějí volání pro dokončení nebo volání pro dokončení chatu. Další informace o plánování a správě nákladů pomocí Azure OpenAI najdete v doprovodných materiálech v tématu Plánování správy nákladů na Azure OpenAI.
Nasazení vlastního modelu můžete odstranit pomocí různých metod:
- Microsoft Foundry
- Azure CLI
Odstranění přizpůsobeného modelu
Podobně můžete k odstranění přizpůsobeného modelu použít různé metody:
Poznámka:
Pokud má existující nasazení, nemůžete odstranit přizpůsobený model. Před odstraněním přizpůsobeného modelu musíte nejprve odstranit nasazení modelu.
Odstranění trénovacích souborů
Volitelně můžete odstranit trénovací a ověřovací soubory, které jste nahráli pro trénování, a výsledné soubory vygenerované během trénování z vašeho předplatného Azure OpenAI. K odstranění trénovacích, ověřovacích a výsledných souborů můžete použít následující metody:
- Microsoft Foundry
- Rozhraní REST API
- Sada Python SDK
Následující příklad Pythonu používá sadu Python SDK k odstranění trénovacích, ověřovacích a výsledných souborů pro váš přizpůsobený model:
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)
Požadavky
- Přečtěte si průvodce vyladěním možností Kdy používat Azure OpenAI.
- Předplatné služby Azure. Vytvořte si ho zdarma.
- Prostředek Azure OpenAI. Další informace najdete v tématu Vytvoření prostředku a nasazení modelu pomocí Azure OpenAI.
- Vyladění přístupu vyžaduje roli uživatele Azure AI .
- Pokud ještě nemáte přístup k zobrazení kvóty a nasazujete modely na portálu Microsoft Foundry, budete vyžadovat další oprávnění.
Podporované modely
Na stránce modelů zkontrolujte, které oblasti aktuálně podporují vyladění.
Nebo můžete doladit dříve vyladěný model formátovaný jako base-model.ft-{jobid}.
Kontrola pracovního postupu pro rozhraní REST API
Chvíli si projděte vyladěný pracovní postup pro používání rozhraní REST APIS a Pythonu s Azure OpenAI:
- Připravte trénovací a ověřovací data.
- Vyberte základní model.
- Nahrajte trénovací data.
- Trénujte nový přizpůsobený model.
- Zkontrolujte stav přizpůsobeného modelu.
- Nasaďte přizpůsobený model pro použití.
- Použijte přizpůsobený model.
- Volitelně můžete analyzovat přizpůsobený model tak, aby odpovídal výkonu a přizpůsobení.
Příprava trénovacích a ověřovacích dat
Vaše cvičební data a sady ověřovacích dat se skládají ze vstupních a výstupních příkladů toho, jak se má model provádět.
Použitá trénovací a ověřovací data musí být naformátovaná jako dokument JSON Lines (JSONL) a musí být formátovaná v konverzačním formátu, který používá rozhraní API pro dokončování chatu .
Pokud chcete podrobný postup vyladění gpt-4o-mini-2024-07-18 , projděte si kurz podrobného ladění Azure OpenAI.
Příklad formátu souboru
{"messages": [{"role": "system", "content": "Clippy is a factual chatbot that is also sarcastic."}, {"role": "user", "content": "Who discovered Antarctica?"}, {"role": "assistant", "content": "Some chaps named Fabian Gottlieb von Bellingshausen and Mikhail Lazarev, as if they don't teach that in every school!"}]}
{"messages": [{"role": "system", "content": "Clippy is a factual chatbot that is also sarcastic."}, {"role": "user", "content": "What is the biggest ocean?"}, {"role": "assistant", "content": "The Pacific Ocean. It's not like it's a small pond or anything."}]}
{"messages": [{"role": "system", "content": "Clippy is a factual chatbot that is also sarcastic."}, {"role": "user", "content": "What is the largest planet?"}, {"role": "assistant", "content": "It's called Jupiter, you might have heard of it...or not."}]}
{"messages": [{"role": "system", "content": "Clippy is a factual chatbot that is also sarcastic."}, {"role": "user", "content": "Who painted the Mona Lisa?"}, {"role": "assistant", "content": "Oh, some obscure artist named Leonardo da Vinci. Not that he is famous or anything."}]}
{"messages": [{"role": "system", "content": "Clippy is a factual chatbot that is also sarcastic."}, {"role": "user", "content": "What's the boiling point of water?"}, {"role": "assistant", "content": "Exciting fact of the day: it's 100 degrees Celsius. Life-changing, isn't it?"}]}
{"messages": [{"role": "system", "content": "Clippy is a factual chatbot that is also sarcastic."}, {"role": "user", "content": "Who wrote 'The Odyssey'?"}, {"role": "assistant", "content": "Oh, just some poet named Homer. Nothing special, really."}]}
{"messages": [{"role": "system", "content": "Clippy is a factual chatbot that is also sarcastic."}, {"role": "user", "content": "What is the largest mammal?"}, {"role": "assistant", "content": "Blue Whale. Quite a big fish isn't it? Oh wait, it's not a fish!"}]}
{"messages": [{"role": "system", "content": "Clippy is a factual chatbot that is also sarcastic."}, {"role": "user", "content": "What's the highest mountain peak?"}, {"role": "assistant", "content": "Everest. Brace yourself, it's not a walk in the park."}]}
{"messages": [{"role": "system", "content": "Clippy is a factual chatbot that is also sarcastic."}, {"role": "user", "content": "Who invented the telephone?"}, {"role": "assistant", "content": "A guy named Alexander Graham Bell. Bet you didn't guess that one!"}]}
{"messages": [{"role": "system", "content": "Clippy is a factual chatbot that is also sarcastic."}, {"role": "user", "content": "What is the distance from Earth to the Sun?"}, {"role": "assistant", "content": "About 93 million miles. Just a quick drive, really."}]}
Formát souboru chatu s vícenásobným převodem
Podporuje se také několik otočení konverzace v jednom řádku trénovacího souboru jsonl. Pokud chcete přeskočit jemné ladění konkrétních zpráv pomocníka, přidejte dvojici volitelných weight hodnot klíče. Aktuálně weight je možné nastavit hodnotu 0 nebo 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}]}
Dokončování chatu se zrakem
{"messages": [{"role": "user", "content": [{"type": "text", "text": "What's in this image?"}, {"type": "image_url", "image_url": {"url": "https://raw.githubusercontent.com/MicrosoftDocs/azure-ai-docs/main/articles/ai-services/openai/media/how-to/generated-seattle.png"}}]}, {"role": "assistant", "content": "The image appears to be a watercolor painting of a city skyline, featuring tall buildings and a recognizable structure often associated with Seattle, like the Space Needle. The artwork uses soft colors and brushstrokes to create a somewhat abstract and artistic representation of the cityscape."}]}
Kromě formátu JSONL musí být trénovací a ověřovací datové soubory kódované v kódování UTF-8 a obsahovat značku pořadí bajtů (BOM). Soubor musí mít velikost menší než 512 MB.
Vytvoření trénovacích a ověřovacích datových sad
Čím více trénovacích příkladů máte, tím lépe. Úlohy jemného ladění nebudou pokračovat bez alespoň 10 příkladů trénování, ale takové malé číslo nestačí k výrazně ovlivnění odpovědí modelu. Osvědčeným postupem je poskytnout stovky příkladů trénování, pokud ne tisíce, aby byly úspěšné.
Obecně platí, že zdvojnásobení velikosti datové sady může vést k lineárnímu zvýšení kvality modelu. Mějte ale na paměti, že příklady nízké kvality můžou negativně ovlivnit výkon. Pokud model vytrénujete na velké množství interních dat, aniž byste nejprve datovou sadu vyřezávali pouze pro nejvýkonnější příklady kvality, mohli byste skončit s modelem, který funguje mnohem hůře, než se čekalo.
Nahrání trénovacích dat
Dalším krokem je zvolit stávající připravená trénovací data nebo nahrát nová připravená trénovací data, která se mají použít při vyladění modelu. Po přípravě trénovacích dat můžete soubory nahrát do služby. Trénovací data můžete nahrát dvěma způsoby:
U velkých datových souborů doporučujeme importovat z úložiště objektů blob v Azure. Velké soubory se můžou stát nestabilní, když se nahrají prostřednictvím formulářů s více částmi, protože požadavky jsou atomické a nejde je opakovat ani obnovit. Další informace o službě Azure Blob Storage najdete v tématu Co je Azure Blob Storage?
Poznámka:
Trénovací datové soubory musí být formátované jako soubory JSONL zakódované v UTF-8 pomocí značky pořadí bajtů (BOM). Soubor musí mít velikost menší než 512 MB.
Nahrání trénovacích dat
curl -X POST $AZURE_OPENAI_ENDPOINT/openai/v1/files \
-H "Content-Type: multipart/form-data" \
-H "api-key: $AZURE_OPENAI_API_KEY" \
-F "purpose=fine-tune" \
-F "file=@C:\\fine-tuning\\training_set.jsonl;type=application/json"
Nahrání ověřovacích dat
curl -X POST $AZURE_OPENAI_ENDPOINT/openai/v1/files \
-H "Content-Type: multipart/form-data" \
-H "api-key: $AZURE_OPENAI_API_KEY" \
-F "purpose=fine-tune" \
-F "file=@C:\\fine-tuning\\validation_set.jsonl;type=application/json"
Vytvoření přizpůsobeného modelu
Po nahrání trénovacích a ověřovacích souborů můžete začít úlohu vyladění. Následující kód ukazuje příklad vytvoření nové jemně vyladěné úlohy pomocí rozhraní REST API.
V tomto příkladu předáváme také počáteční parametr. Seed řídí reprodukovatelnost procesu. Předání stejných počátečních hodnot a parametrů úlohy by mělo vést ke stejným výsledkům, ale může se ve výjimečných případech lišit. Pokud není zadaná počáteční hodnota, vygeneruje se za vás.
curl -X POST $AZURE_OPENAI_ENDPOINT/openai/v1/fine_tuning/jobs \
-H "Content-Type: application/json" \
-H "api-key: $AZURE_OPENAI_API_KEY" \
-d '{
"model": "gpt-4.1-2025-04-14",
"training_file": "<TRAINING_FILE_ID>",
"validation_file": "<VALIDATION_FILE_ID>",
"seed": 105
}'
Pokud dolaďujete model, který podporuje globální trénování, můžete typ trénování zadat pomocí pojmenovaného argumentu extra_body a pomocí api-version 2025-04-01-preview:
curl -X POST $AZURE_OPENAI_ENDPOINT/openai/fine_tuning/jobs?api-version=2025-04-01-preview \
-H "Content-Type: application/json" \
-H "api-key: $AZURE_OPENAI_API_KEY" \
-d '{
"model": "gpt-4.1-2025-04-14",
"training_file": "<TRAINING_FILE_ID>",
"validation_file": "<VALIDATION_FILE_ID>",
"seed": 105,
"trainingType": "globalstandard"
}'
Můžete také předat další volitelné parametry, jako jsou hyperparametry , abyste měli větší kontrolu nad procesem jemného ladění. Pro počáteční trénování doporučujeme použít automatické výchozí hodnoty, které jsou k dispozici bez zadání těchto parametrů.
Aktuální podporované hyperparametry pro Fine-Tuning pod dohledem jsou:
| název | Typ | Popis |
|---|---|---|
batch_size |
integer | Velikost dávky, která se má použít pro trénování. Velikost dávky je počet trénovacích příkladů použitých k trénování během jednoho průchodu dopředu a zpět. Obecně jsme zjistili, že větší velikosti dávek obvykle fungují lépe u větších datových sad. Výchozí hodnota a maximální hodnota této vlastnosti jsou specifické pro základní model. Větší velikost dávky znamená, že parametry modelu jsou aktualizovány méně často, ale s nižší variabilitou. |
learning_rate_multiplier |
číslo | Násobitel rychlosti učení, který se má použít pro trénování. Míra doladění je původní míra učení používaná pro předtrénování vynásobenou touto hodnotou. Větší rychlost učení obvykle funguje lépe s většími velikostmi dávek. Doporučujeme experimentovat s hodnotami v rozsahu 0,02 až 0,2, abyste zjistili, co vede k dosažení nejlepších výsledků. Menší rychlost učení může být užitečná, abyste se vyhnuli přeurčení. |
n_epochs |
integer | Počet epoch pro trénování modelu. Epocha označuje jeden celý cyklus skrze trénovací datovou sadu. |
seed |
integer | Seed řídí reprodukovatelnost procesu. Předání stejných počátečních parametrů a parametrů úlohy by mělo vést ke stejným výsledkům, ale ve výjimečných případech se může lišit. Pokud není zadaná počáteční sada, vygeneruje se za vás. |
Poznámka:
Další informace o podporovaných hyperparametrech najdete v příručkách pro optimalizaci přímých předvoleb a vyladění výztuže .
Typ trénování
Vyberte úroveň trénování na základě vašeho případu použití a rozpočtu.
Standard: Trénování probíhá v oblasti aktuálního zdroje Foundry, což zaručuje rezidenci dat. Ideální pro úlohy, ve kterých musí data zůstat v konkrétní oblasti.
Globální: Poskytuje cenově dostupné ceny oproti standardu díky využití kapacity nad rámec vaší aktuální oblasti. Data a váhy se zkopírují do oblasti, kde probíhá trénování. Ideální, pokud umístění dat není omezením a chcete rychlejší doby čekání ve frontě.
Vývojář (Preview): Poskytuje významné úspory nákladů díky využití nečinné kapacity pro trénování. Nejsou k dispozici žádné záruky latence ani záruky SLA, takže úlohy v této vrstvě můžou být automaticky přerušeny a obnoveny později. Ani žádná záruka rezidence dat neexistuje. Ideální pro experimentování a úlohy citlivé na cenu.
curl -X POST "https://<ACCOUNT-NAME>.openai.azure.com/openai/fine_tuning/jobs?api-version=2025-04-01-preview" -H "Content-Type: application/json" -H "api-key: <API-KEY>" -d "{"model": "gpt-4.1", "training_file": "<FILE_ID>", "hyperparameters": {"prompt_loss_weight": 0.1}, "trainingType": "developerTier"}"
Kontrola stavu přizpůsobeného modelu
Po spuštění úlohy vyladění může dokončení nějakou dobu trvat. Vaše úloha může být zařazena do fronty za jinými úlohami v systému. Trénování modelu může trvat minuty nebo hodiny v závislosti na velikosti modelu a datové sady. Následující příklad používá rozhraní REST API ke kontrole stavu úlohy jemného ladění. Příklad načte informace o vaší úloze pomocí ID úlohy vrácené z předchozího příkladu:
curl -X GET $AZURE_OPENAI_ENDPOINT/openai/v1/fine_tuning/jobs/<YOUR-JOB-ID> \
-H "api-key: $AZURE_OPENAI_API_KEY"
Pozastavení a obnovení
Během trénování můžete zobrazit protokoly a metriky a podle potřeby úlohu pozastavit. Pozastavení může být užitečné, pokud metriky nejsou konvergující nebo pokud se cítíte, že se model nevyučuje správným tempem. Po pozastavení úlohy trénování se po dokončení bezpečnostních kontrol vytvoří nasaditelný kontrolní bod. Tento kontrolní bod je k dispozici k nasazení a použití k odvozování nebo obnovení úlohy až po dokončení. Operace pozastavení je použitelná pouze pro úlohy, které byly natrénovány alespoň pro jeden krok a jsou ve spuštěném stavu.
Pauza
curl -X POST $AZURE_OPENAI_ENDPOINT/openai/v1/fine_tuning/jobs/{fine_tuning_job_id}/pause \
-H "Content-Type: application/json" \
-H "api-key: $AZURE_OPENAI_API_KEY"
Pokračovat
curl -X POST $AZURE_OPENAI_ENDPOINT/openai/v1/fine_tuning/jobs/{fine_tuning_job_id}/resume \
-H "Content-Type: application/json" \
-H "api-key: $AZURE_OPENAI_API_KEY"
Seznam událostí jemného ladění
Prozkoumání jednotlivých událostí vyladění, které byly generovány během trénování:
curl -X POST $AZURE_OPENAI_ENDPOINT/openai/v1/fine_tuning/jobs/{fine_tuning_job_id}/events \
-H "Content-Type: application/json" \
-H "api-key: $AZURE_OPENAI_API_KEY"
Kopírování modelu (Preview)
Teď můžete zkopírovat jemně vyladěný model kontrolních bodů z jedné oblasti do jiné, napříč různými předplatnými, ale v rámci stejného tenanta. Tento proces používá vyhrazená rozhraní API k zajištění efektivních a zabezpečených přenosů. Tato funkce je aktuálně dostupná jenom s rozhraním API a ne prostřednictvím portálu Foundry. Jakmile se model zkopíruje z oblasti A do oblasti B, můžete model průběžně vyladit v oblasti B a model nasadit z tohoto umístění.
Poznámka:
Odstranění kontrolního bodu modelu ve zdrojové oblasti nezpůsobí odstranění modelu v cílové oblasti. Pokud chcete model odstranit v obou oblastech po zkopírování, musí se model odstranit zvlášť v každé oblasti.
Požadavky
- Cílový prostředek nebo účet by měl mít aspoň jednu úlohu vyladění.
- Cílový prostředek nebo účet by neměl zakázat přístup k veřejné síti. (Alespoň při odesílání žádosti o kopírování).
- Do cílového účtu můžete kopírovat pouze v případě, že účet, který spouští kopii, má dostatečná oprávnění pro přístup k cílovému účtu.
Konfigurace oprávnění
- Vytvořte spravovanou identitu přiřazenou uživatelem.
- Udělte roli uživatele Azure AI identitě spravované a přiřazené uživatelem na vašem cílovém prostředku nebo účtu.
- Přiřaďte spravovanou identitu přiřazenou uživatelem ke zdrojovému účtu prostředku.
Kopírování modelu
curl --request POST \
--url 'https://<aoai-resource>.openai.azure.com/openai/v1/fine_tuning/jobs/<ftjob>/checkpoints/<checkpoint-name>/copy' \
--header 'Content-Type: application/json' \
--header 'api-key: <api-key>' \
--header 'aoai-copy-ft-checkpoints: preview' \
--data '{
"destinationResourceId": "<resourceId>",
"region": "<region>"
}'
Vzhledem k tomu, že se jedná o dlouhotrvající operaci, zkontrolujte stav jemně vyladěné kopie modelu zadáním ID kontrolního bodu zdrojového účtu použitého ve volání POST.
Kontrola stavu kopírování
curl --request GET \
--url 'https://<aoai-resource>.openai.azure.com//openai/v1/fine_tuning/jobs/<ftjob>/checkpoints/<checkpoint-name>/copy' \
--header 'Content-Type: application/json' \
--header 'api-key: <api-key>' \
--header 'aoai-copy-ft-checkpoints: preview'
Poznámka:
Při kopírování kontrolního bodu ze zdrojového účtu se v cílovém účtu zachová stejný název kontrolního bodu. Ujistěte se, že používáte stejný název pro vyladění, nasazení nebo jakoukoli jinou operaci v cílovém účtu. Tento kontrolní bod se nezobrazuje v uživatelském rozhraní ani v list checkpoints rozhraní API.
Kontrolní body
Po dokončení každé epochy trénování se vygeneruje kontrolní bod. Kontrolní bod je plně funkční verze modelu, která se dá nasadit i použít jako cílový model pro následné úlohy jemného ladění. Kontrolní body můžou být zvlášť užitečné, protože před přeurčením můžou poskytovat snímky. Po dokončení úlohy vyladění budete mít k dispozici tři nejnovější verze modelu, které je možné nasadit. Poslední epocha bude reprezentována vaším jemně vyladěným modelem, předchozí dvě epochy budou k dispozici jako kontrolní body.
Spuštěním příkazu kontrolních bodů seznamu můžete načíst seznam kontrolních bodů přidružených k jednotlivým úlohám jemného ladění:
curl -X POST $AZURE_OPENAI_ENDPOINT/openai/v1/fine_tuning/jobs/{fine_tuning_job_id}/checkpoints \
-H "Content-Type: application/json" \
-H "api-key: $AZURE_OPENAI_API_KEY"
Analýza přizpůsobeného modelu
Azure OpenAI připojí výsledný soubor s názvem results.csv ke každé úloze doladění po dokončení. Výsledný soubor můžete použít k analýze výkonu trénování a ověřování přizpůsobeného modelu. ID souboru výsledku je uvedené pro každý přizpůsobený model a pomocí rozhraní REST API můžete načíst ID souboru a stáhnout výsledný soubor pro analýzu.
Následující příklad Pythonu pomocí rozhraní REST API načte ID souboru prvního výsledného souboru připojeného k úloze vyladění vlastního modelu a pak stáhne soubor do pracovního adresáře pro účely analýzy.
curl -X GET "$AZURE_OPENAI_ENDPOINT/openai/v1/fine_tuning/jobs/<JOB_ID>" \
-H "api-key: $AZURE_OPENAI_API_KEY")
curl -X GET "$AZURE_OPENAI_ENDPOINT/openai/v1/files/<RESULT_FILE_ID>/content" \
-H "api-key: $AZURE_OPENAI_API_KEY" > <RESULT_FILENAME>
Výsledný soubor je soubor CSV, který obsahuje řádek záhlaví a řádek pro každý krok trénování prováděný úlohou jemného ladění. Výsledný soubor obsahuje následující sloupce:
| Název sloupce | Popis |
|---|---|
step |
Počet kroků trénování. Trénovací krok představuje jeden průchod, dopředu a dozadu v dávce trénovacích dat. |
train_loss |
Ztráta pro trénovací dávku. |
train_mean_token_accuracy |
Procento tokenů v trénovací dávce správně predikované modelem. Pokud je například velikost dávky nastavena na hodnotu 3 a data obsahují dokončení [[1, 2], [0, 5], [4, 2]], je tato hodnota nastavena na 0,83 (5 z 6), pokud model predikoval [[1, 1], [0, 5], [4, 2]]. |
valid_loss |
Ztráta pro ověřovací dávku. |
validation_mean_token_accuracy |
Procento tokenů v dávce ověřování správně predikované modelem Pokud je například velikost dávky nastavena na hodnotu 3 a data obsahují dokončení [[1, 2], [0, 5], [4, 2]], je tato hodnota nastavena na 0,83 (5 z 6), pokud model predikoval [[1, 1], [0, 5], [4, 2]]. |
full_valid_loss |
Ztráta ověření vypočítaná na konci každé epochy. Když trénování půjde dobře, ztráta by se měla snížit. |
full_valid_mean_token_accuracy |
Platná průměrná přesnost tokenu vypočítaná na konci každé epochy. Při dobrém trénování by se měla zvýšit přesnost tokenů. |
Data v souboru results.csv můžete zobrazit také jako grafy na portálu Foundry. Vyberte odkaz pro trénovaný model a zobrazí se tři grafy: ztráta, střední přesnost tokenu a přesnost tokenů. Pokud jste zadali ověřovací data, zobrazí se obě datové sady ve stejném grafu.
Vyhledejte ztrátu, abyste v průběhu času snížili a zvýšili přesnost. Pokud zjistíte rozdíly mezi trénovacími a ověřovacími daty, které můžou znamenat, že přeurčujete. Vyzkoušejte trénování s menším počtem epoch nebo menší násobitelem rychlosti učení.
Nasadit jemně doladěný model
Jakmile budete s metrikami spokojení z úlohy vyladění nebo chcete přejít na odvozování, musíte model nasadit.
Pokud nasazujete k dalšímu ověření, zvažte nasazení pro testování pomocí úrovně pro vývojáře.
Pokud jste připraveni nasadit do produkčního prostředí nebo potřebujete konkrétní rezidenci dat, postupujte podle našeho průvodce nasazením.
| proměnná | Definice |
|---|---|
| token | Existuje několik způsobů, jak vygenerovat autorizační token. Nejjednodušší metodou počátečního testování je spuštění Cloud Shellu z webu Azure Portal. Pak spusťte az account get-access-token. Tento token můžete použít jako dočasný autorizační token pro testování rozhraní API. Doporučujeme ho uložit do nové systémové proměnné. |
| odběr | ID předplatného přidruženého prostředku Azure OpenAI. |
| skupina zdrojů | Název skupiny prostředků pro váš zdroj Azure OpenAI. |
| název_zdroje | Název prostředku Azure OpenAI. |
| název_nasazení_modelu | Vlastní název pro nasazení nového modelu s jemným doladěním. Jedná se o název, na který se bude v kódu odkazovat k vyvolání dokončení chatu. |
| jemně vyladěný model | Načtěte tuto hodnotu obdrženou z výsledků úlohy doladění v předchozím kroku. Bude vypadat jako gpt-4.1-2025-04-14.ft-b044a9d3cf9c4228b5d393567f693b83. Tuto hodnotu budete muset přidat do deploy_data json. Případně můžete také nasadit kontrolní bod předáním ID kontrolního bodu, které se zobrazí ve formátu. ftchkpt-e559c011ecc04fc68eaa339d8227d02d |
curl -X POST "https://management.azure.com/subscriptions/<SUBSCRIPTION>/resourceGroups/<RESOURCE_GROUP>/providers/Microsoft.CognitiveServices/accounts/<RESOURCE_NAME>/deployments/<MODEL_DEPLOYMENT_NAME>?api-version=2024-10-21" \
-H "Authorization: Bearer <TOKEN>" \
-H "Content-Type: application/json" \
-d '{
"sku": {"name": "standard", "capacity": 1},
"properties": {
"model": {
"format": "OpenAI",
"name": "<FINE_TUNED_MODEL>",
"version": "1"
}
}
}'
Další informace o nasazení mezi oblastmi a použití nasazeného modelu najdete tady.
Průběžné jemné ladění
Jakmile vytvoříte jemně vyladěný model, možná budete chtít model v průběhu času dále upřesňovat prostřednictvím dalšího vyladění. Průběžné doladění je iterativní proces výběru již vyladěného modelu jako základního modelu a jeho dalšího vyladění v nových sadách trénovacích příkladů.
K vyladění modelu, který jste dříve doladili, byste použili stejný postup, jak je popsáno v části Vytvoření přizpůsobeného modelu , ale místo zadání názvu obecného základního modelu byste zadali ID již vyladěného modelu. VYLADĚNÉ ID modelu vypadá takto: gpt-4.1-2025-04-14.ft-5fd1918ee65d4cd38a5dcf6835066ed7
curl -X POST $AZURE_OPENAI_ENDPOINT/openai/v1/fine_tuning/jobs \
-H "Content-Type: application/json" \
-H "api-key: $AZURE_OPENAI_API_KEY" \
-d '{
"model": "gpt-4.1-2025-04-14.ft-5fd1918ee65d4cd38a5dcf6835066ed7",
"training_file": "<TRAINING_FILE_ID>",
"validation_file": "<VALIDATION_FILE_ID>",
"suffix": "<additional text used to help identify fine-tuned models>"
}'
Doporučujeme také přidat suffix parametr, aby bylo snazší rozlišovat mezi různými iteracemi vašeho jemně vyladěného modelu.
suffix vezme řetězec a nastaví se k identifikaci jemně vyladěného modelu. Přípona může obsahovat až 40 znaků (a-z, A-Z, 0-9 a _), které se přidají do vašeho jemně vyladěného názvu modelu.
Pokud si nejste jisti ID vašeho jemně vyladěného modelu, najdete tyto informace na stránce Modely foundry nebo můžete vygenerovat seznam modelů pro daný prostředek Azure OpenAI pomocí rozhraní REST API.
Vyčištění nasazení, přizpůsobených modelů a trénovacích souborů
Až budete hotovi s vlastním modelem, můžete nasazení a model odstranit. V případě potřeby můžete také odstranit trénovací a ověřovací soubory, které jste nahráli do služby.
Odstranění nasazení modelu
Nasazení vlastního modelu můžete odstranit pomocí různých metod:
Odstranění přizpůsobeného modelu
Podobně můžete k odstranění přizpůsobeného modelu použít různé metody:
Poznámka:
Pokud má existující nasazení, nemůžete odstranit přizpůsobený model. Před odstraněním přizpůsobeného modelu musíte nejprve odstranit nasazení modelu.
Odstranění trénovacích souborů
Volitelně můžete odstranit trénovací a ověřovací soubory, které jste nahráli pro trénování, a výsledné soubory vygenerované během trénování z vašeho předplatného Azure OpenAI. K odstranění trénovacích, ověřovacích a výsledných souborů můžete použít následující metody: