Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
Visualizando atualmente:versão do portal Foundry (clássico) - Alternar para a versão do novo portal Foundry
Saiba como ajustar modelos no Microsoft Foundry para seus conjuntos de dados e casos de uso. O ajuste fino permite:
- Resultados de qualidade mais alta do que os obtidos apenas com a engenharia de prompts.
- A capacidade de treinar em mais exemplos do que aqueles que cabem no limite de contexto de solicitação de um modelo.
- Economia de tokens devido a prompts mais curtos.
- Solicitações com menor latência, especialmente ao usar modelos menores.
Em contraste com o aprendizado em poucas tentativas, o ajuste fino melhora o modelo ao treinar em mais exemplos do que os que cabem em um prompt. Como os pesos se adaptam à tarefa, você inclui menos exemplos ou instruções. Incluir menos tokens por chamada reduz potencialmente o custo e a latência.
Usamos a LoRA (adaptação de baixa classificação) para ajustar modelos de forma a reduzir sua complexidade sem afetar significativamente seu desempenho. Esse método funciona aproximando a matriz de alta classificação original com uma classificação inferior. Ajustar um subconjunto menor de parâmetros importantes durante a fase de treinamento supervisionado torna o modelo mais gerenciável e eficiente. Para os usuários, isso também torna o treinamento mais rápido e acessível do que outras técnicas.
Neste artigo, você aprenderá a:
- Escolha os conjuntos de dados e os formatos apropriados para ajuste fino.
- Inicie um trabalho de ajuste fino, monitore o status e busque os resultados.
- Implante e avalie um modelo ajustado.
- Limpe seus recursos quando você não precisar mais deles.
Há duas experiências de ajuste fino exclusivas no portal do Microsoft Foundry:
- Hub ou exibição de projeto: dá suporte a modelos de ajuste fino de vários provedores, como Azure OpenAI, Meta Llama e Microsoft Phi.
- Exibição centrada do OpenAI do Azure: dá suporte somente ao ajuste fino dos modelos do OpenAI do Azure, mas tem suporte para recursos adicionais como a integração da versão prévia de Weights & Biases (W&B). Se você estiver apenas ajustando modelos do Azure OpenAI, recomendamos esta experiência.
Importante
Itens marcados (versão prévia) neste artigo estão atualmente em versão prévia pública. Essa versão prévia é fornecida sem um contrato de nível de serviço e não recomendamos isso para cargas de trabalho de produção. Alguns recursos podem não ter suporte ou ter recursos restritos. Para obter mais informações, consulte Supplemental Terms of Use for Microsoft Azure Previews.
Pré-requisitos
Leia o guia sobre quando usar o Azure OpenAI para ajuste fino.
Você precisa de uma assinatura Azure. Crie um gratuitamente.
Você precisa de um recurso Azure OpenAI localizado em uma região que dê suporte ao ajuste fino do modelo Azure OpenAI. Para obter a lista de modelos disponíveis por região e funcionalidade com suporte, verifique a tabela de resumo do modelo e a disponibilidade da região. Para obter mais informações, consulte Criar um recurso e implantar um modelo com Azure OpenAI.
O ajuste fino requer a função Foundry Owner. Embora os usuários do Foundry possam treinar modelos (ajuste fino), somente os Proprietários de IA podem implantá-los.
Importante
As funções RBAC do Foundry foram renomeadas recentemente. Foundry User, Foundry Owner, Foundry Account Owner e Foundry Project Manager eram anteriormente chamados de Usuário do Azure AI, Proprietário do Azure AI, Proprietário da conta do Azure AI e Gerente de Projeto do Azure AI. Você ainda pode ver os nomes anteriores em alguns lugares enquanto essa mudança de nome está sendo implementada. Os IDs das funções e as permissões principais não são alterados com a mudança de nome.
Se você ainda não tiver acesso para exibir cotas e implantar modelos no portal do Foundry, precisará de mais permissões.
Modelos com suporte
Para verificar quais regiões atualmente dão suporte ao ajuste fino, consulte o artigo sobre modelos.
Ou você pode ajustar um modelo ajustado anteriormente, formatado como base-model.ft-{jobid}.
Examinar o fluxo de trabalho do portal do Foundry
Reserve um momento para examinar o fluxo de trabalho de ajuste fino para usar o portal do Foundry:
- Prepare seus dados de treinamento e validação.
- Use a caixa de diálogo Criar um modelo otimizado no portal do Foundry para treinar seu modelo personalizado.
- Selecione um método de treinamento.
- Selecione um modelo base.
- Escolha seu tipo de treinamento.
- Escolha seus dados de treinamento.
- Opcionalmente, escolha seus dados de validação.
- Opcionalmente, configure parâmetros de tarefa para seu trabalho de ajuste fino.
- Opcionalmente, habilite a implantação automática para o modelo personalizado resultante.
- Examine suas escolhas e treine seu novo modelo personalizado.
- Verifique o status do seu modelo personalizado refinado.
- Implemente seu modelo personalizado para utilização.
- Use seu modelo personalizado.
- Opcionalmente, analise seu modelo personalizado para obter desempenho e ajuste.
Preparar seus dados de treinamento e validação
Seus conjuntos de dados de treinamento e validação consistem em exemplos de entrada e saída de como você deseja que o modelo seja executado.
Os dados de treinamento e validação que você usa devem ser formatados como um documento JSONL (Linhas JSON). Ele também deve ser formatado no formato de conversa que a API de Conclusões de Chat usa.
Além do formato JSONL, os arquivos de dados de treinamento e validação devem ser codificados em UTF-8 e incluir uma marca de ordem de byte (BOM). Cada arquivo deve ter menos de 512 MB de tamanho.
Geralmente, recomendamos que você use as instruções e os prompts que achou que funcionaram melhor em cada exemplo de treinamento. Essa abordagem ajuda você a obter os melhores resultados, especialmente se você tiver menos de cem exemplos.
Formato de arquivo de exemplo
{"messages": [{"role": "system", "content": "Clippy is a factual chatbot that is also sarcastic."}, {"role": "user", "content": "Who discovered Antarctica?"}, {"role": "assistant", "content": "Some chaps named Fabian Gottlieb von Bellingshausen and Mikhail Lazarev, as if they don't teach that in every school!"}]}
{"messages": [{"role": "system", "content": "Clippy is a factual chatbot that is also sarcastic."}, {"role": "user", "content": "What is the biggest ocean?"}, {"role": "assistant", "content": "The Pacific Ocean. It's not like it's a small pond or anything."}]}
{"messages": [{"role": "system", "content": "Clippy is a factual chatbot that is also sarcastic."}, {"role": "user", "content": "What is the largest planet?"}, {"role": "assistant", "content": "It's called Jupiter, you might have heard of it...or not."}]}
{"messages": [{"role": "system", "content": "Clippy is a factual chatbot that is also sarcastic."}, {"role": "user", "content": "Who painted the Mona Lisa?"}, {"role": "assistant", "content": "Oh, some obscure artist named Leonardo da Vinci. Not that he is famous or anything."}]}
{"messages": [{"role": "system", "content": "Clippy is a factual chatbot that is also sarcastic."}, {"role": "user", "content": "What's the boiling point of water?"}, {"role": "assistant", "content": "Exciting fact of the day: it's 100 degrees Celsius. Life-changing, isn't it?"}]}
{"messages": [{"role": "system", "content": "Clippy is a factual chatbot that is also sarcastic."}, {"role": "user", "content": "Who wrote 'The Odyssey'?"}, {"role": "assistant", "content": "Oh, just some poet named Homer. Nothing special, really."}]}
{"messages": [{"role": "system", "content": "Clippy is a factual chatbot that is also sarcastic."}, {"role": "user", "content": "What is the largest mammal?"}, {"role": "assistant", "content": "Blue Whale. Quite a big fish isn't it? Oh wait, it's not a fish!"}]}
{"messages": [{"role": "system", "content": "Clippy is a factual chatbot that is also sarcastic."}, {"role": "user", "content": "What's the highest mountain peak?"}, {"role": "assistant", "content": "Everest. Brace yourself, it's not a walk in the park."}]}
{"messages": [{"role": "system", "content": "Clippy is a factual chatbot that is also sarcastic."}, {"role": "user", "content": "Who invented the telephone?"}, {"role": "assistant", "content": "A guy named Alexander Graham Bell. Bet you didn't guess that one!"}]}
{"messages": [{"role": "system", "content": "Clippy is a factual chatbot that is also sarcastic."}, {"role": "user", "content": "What is the distance from Earth to the Sun?"}, {"role": "assistant", "content": "About 93 million miles. Just a quick drive, really."}]}
Formato de arquivo de chat com vários turnos para OpenAI do Azure
Também há suporte para várias voltas de uma conversa em uma única linha do arquivo de treinamento JSONL. Para pular o ajuste fino de mensagens específicas do assistente, adicione o par chave/valor opcional weight. Atualmente, weight pode ser definido como 0 ou 1.
{"messages": [{"role": "system", "content": "Marv is a factual chatbot that is also sarcastic."}, {"role": "user", "content": "What's the capital/major city of France?"}, {"role": "assistant", "content": "Paris", "weight": 0}, {"role": "user", "content": "Can you be more sarcastic?"}, {"role": "assistant", "content": "Paris, as if everyone doesn't know that already.", "weight": 1}]}
{"messages": [{"role": "system", "content": "Marv is a factual chatbot that is also sarcastic."}, {"role": "user", "content": "Who wrote 'Romeo and Juliet'?"}, {"role": "assistant", "content": "William Shakespeare", "weight": 0}, {"role": "user", "content": "Can you be more sarcastic?"}, {"role": "assistant", "content": "Oh, just some guy named William Shakespeare. Ever heard of him?", "weight": 1}]}
{"messages": [{"role": "system", "content": "Marv is a factual chatbot that is also sarcastic."}, {"role": "user", "content": "How far is the Moon from Earth?"}, {"role": "assistant", "content": "384,400 kilometers", "weight": 0}, {"role": "user", "content": "Can you be more sarcastic?"}, {"role": "assistant", "content": "Around 384,400 kilometers. Give or take a few, like that really matters.", "weight": 1}]}
Conclusões de bate-papo com visão
{"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."}]}
Considerações sobre o tamanho do conjunto de dados
Quanto mais exemplos de treinamento você tiver, melhor. Trabalhos de ajuste fino não continuarão sem pelo menos 10 exemplos de treinamento, mas um número tão pequeno não é suficiente para influenciar visivelmente as respostas do modelo. Uma prática recomendada para ajuste fino bem-sucedido é fornecer centenas, se não milhares, de exemplos de treinamento. Recomendamos que você comece com 50 exemplos bem elaborados.
Em geral, dobrar o tamanho do conjunto de dados pode levar a um aumento linear na qualidade do modelo. Mas tenha em mente que exemplos de baixa qualidade podem afetar negativamente o desempenho. Se você treinar o modelo em uma grande quantidade de dados internos sem antes podar o conjunto de dados apenas para os exemplos de mais alta qualidade, seu modelo poderá ter um desempenho pior do que o esperado.
Criar um modelo afinado
O portal do Foundry fornece a caixa de diálogo Criar um modelo ajustado para que você possa criar e treinar um modelo ajustado para seu recurso de Azure em um só lugar.
Vá para o portal Foundry e entre com credenciais que tenham acesso ao recurso Azure OpenAI. Durante o processo de login, selecione o diretório apropriado, a assinatura do Azure e o recurso do Azure OpenAI.
Vá para Ferramentas>Ajuste fino e selecione Ajustar modelo.
Selecione um modelo para ajustar e selecione Avançar.
A caixa de diálogo Criar um modelo ajustado é exibida.
Escolha seu método de treinamento
A primeira etapa é confirmar sua escolha de modelo e o método de treinamento. Nem todos os modelos dão suporte a todos os métodos de treinamento.
- Afinamento supervisionado: suportado por todos os modelos não relacionados a raciocínio.
- Otimização de preferência direta (versão prévia): compatível com GPT-4o.
- Ajuste fino por reforço: compatível com modelos de raciocínio, como o o4-mini.
Ao selecionar o modelo, você também pode selecionar um modelo ajustado anteriormente, conforme descrito posteriormente neste artigo.
Escolha seu tipo de treinamento
A Foundry oferece três camadas de treinamento para atender às necessidades dos clientes.
Camada de treinamento padrão
A camada Standard fornece capacidade dedicada para ajuste fino com desempenho previsível e SLAs. É ideal para cargas de trabalho de produção que exigem um rendimento garantido.
Camada de treinamento Global Standard
A camada de Treinamento Global expande o alcance da personalização de modelos com os preços mais acessíveis de outras ofertas globais. Ele não oferece residência de dados. Se você precisar de residência de dados, consulte a lista de regiões disponíveis para o modelo escolhido.
Seus dados de treinamento e os pesos de modelo resultantes podem ser copiados para outra região do Azure.
Ao usar essa camada, você pode:
- Treine os modelos OpenAI mais recentes em mais de uma dúzia de regiões do Azure OpenAI.
- Beneficie-se de taxas de treinamento por token mais baixas em comparação com a camada Standard.
Nível de treinamento para desenvolvedores
A camada Desenvolvedor é uma opção econômica que usa a capacidade ociosa para cargas de trabalho não urgentes ou exploratórias. Os trabalhos nessa camada podem ser preemptados e retomados posteriormente, portanto, é ideal para experimentação e casos de uso sensíveis ao custo.
Escolha seus dados de treinamento
A próxima etapa é escolher dados de treinamento preparados existentes ou carregar novos dados de treinamento preparados para usar quando você estiver personalizando seu modelo selecionando Adicionar dados de treinamento.
A caixa de diálogo Dados de Treinamento exibe todos os conjuntos de dados existentes e carregados anteriormente. Ele também fornece opções para carregar novos dados de treinamento.
Se os dados de treinamento já estiverem carregados no serviço, selecione Arquivos do recurso de IA Conectada. Em seguida, selecione o arquivo na lista suspensa.
Para carregar novos dados de treinamento, use uma das seguintes opções:
- Selecione Carregar arquivos para carregar dados de treinamento de um arquivo local.
- Selecione Azure blob ou outros locais da Web compartilhados para importar dados de treinamento de Armazenamento de Blobs do Azure ou de outro local da Web compartilhado.
Para arquivos de dados grandes, recomendamos que você importe de Armazenamento de Blobs. Arquivos grandes podem se tornar instáveis quando você os carrega por meio de formulários de várias partes porque as solicitações são atômicas e não podem ser repetidas ou retomadas. Para obter mais informações sobre Armazenamento de Blobs, consulte O que é Armazenamento de Blobs do Azure?.
Escolha seus dados de validação (opcional)
Se você tiver um conjunto de dados de validação, selecione Adicionar dados de treinamento. Você pode escolher dados de validação preparados existentes ou carregar novos dados de validação preparados para usar ao personalizar seu modelo.
A caixa de diálogo Dados de Validação exibe todos os conjuntos de dados de treinamento e validação existentes carregados anteriormente. Ele também fornece opções para carregar novos dados de validação.
Se os dados de validação já estiverem carregados no serviço, selecione Escolher conjunto de dados. Em seguida, selecione o arquivo na lista suspensa.
Para carregar novos dados de validação, use uma das seguintes opções:
- Selecione arquivo local para carregar dados de validação de um arquivo local.
- Selecione Azure blob ou outros locais da Web compartilhados para importar dados de validação de Armazenamento de Blobs do Azure ou de outro local da Web compartilhado.
Para arquivos de dados grandes, recomendamos que você importe de Armazenamento de Blobs. Arquivos grandes podem se tornar instáveis quando você os carrega por meio de formulários de várias partes porque as solicitações são atômicas e não podem ser repetidas ou retomadas.
Tornar seu modelo identificável (opcional)
Recomendamos que você inclua um suffix parâmetro para distinguir mais facilmente entre iterações do seu modelo ajustado. Um suffix parâmetro usa uma cadeia de caracteres de até 18 caracteres e é usado para nomear o modelo ajustado resultante.
Configurar parâmetros de treinamento (opcional)
Você pode fornecer uma semente opcional e ajustar hiperparâmetros adicionais.
Uma semente controla a reprodutibilidade do trabalho. A passagem da mesma posição inicial e dos mesmos parâmetros de trabalho deve produzir os mesmos resultados, mas pode haver diferenças em casos raros. Se você não especificar uma semente, uma será gerada aleatoriamente para você.
Os seguintes hiperparâmetros estão disponíveis para ajuste por meio do portal do Foundry:
| Nome | Tipo | Descrição |
|---|---|---|
| Tamanho do lote | Inteiro | O tamanho do lote para usar no treinamento. O tamanho do lote é o número de exemplos de treinamento usados para treinar uma única passagem para frente e para trás. Em geral, descobrimos que tamanhos de lote maiores tendem a funcionar melhor para conjuntos de dados maiores. O valor padrão e o valor máximo dessa propriedade são específicos para um modelo base. Um tamanho de lote maior significa que os parâmetros de modelo são atualizados com menos frequência, mas com menor variação. |
| Multiplicador de taxa de aprendizagem | Número | O multiplicador de taxa de aprendizado para usar no treinamento. A taxa de aprendizado de ajuste fino é a taxa de aprendizado original usada para pré-treinamento, multiplicada por esse valor. Taxas de aprendizado maiores tendem a ter melhor desempenho com lotes maiores. Recomendamos experimentar valores no intervalo de 0,02 a 0,2 para ver o que produz os melhores resultados. Uma taxa de aprendizagem menor pode ser útil para evitar o sobreajuste. |
| Número de épocas | Inteiro | O número de épocas para o qual o modelo deve ser treinado. Um período refere-se a um ciclo completo através do conjunto de dados de treinamento. |
Habilitar a implantação automática (opcional)
Para economizar tempo, opcionalmente, você pode habilitar a implantação automática para o modelo resultante. Se o treinamento for concluído com êxito, o modelo será implantado de acordo com o tipo de implantação selecionado. O nome da implantação é baseado no nome exclusivo gerado para seu modelo personalizado e no sufixo opcional que você pode ter fornecido anteriormente.
Nota
Atualmente, há suporte apenas a implantações Global Standard e Developer para implantação automática. Nenhuma dessas opções fornece residência de dados. Para obter mais informações, consulte a documentação para tipos de implantação.
Examine suas escolhas e treine seu modelo
Examine suas escolhas e selecione Enviar para começar a treinar seu novo modelo ajustado.
Verificar o status do seu modelo personalizado
Depois de enviar seu trabalho de ajuste fino, uma página será exibida com detalhes sobre seu modelo ajustado. Você pode encontrar o status e mais informações sobre seu modelo ajustado na página Ajuste fino no portal do Foundry.
Sua tarefa pode estar na fila atrás de outras tarefas no sistema. Treinar seu modelo pode levar minutos ou horas, dependendo do tamanho do modelo e do conjunto de dados.
Gerar pontos de verificação
Quando cada época de treinamento é concluída, um ponto de verificação é gerado. Um ponto de verificação é uma versão totalmente funcional de um modelo que pode ser implantado e usado como o modelo de destino para trabalhos de ajuste fino subsequentes.
Os pontos de verificação podem ser particularmente úteis, pois podem fornecer instantâneos antes do sobreajuste. Quando um trabalho de ajuste fino é concluído, você tem as três versões mais recentes do modelo disponíveis para implantação. Você pode copiar pontos de verificação entre recursos e assinaturas por meio da API REST.
Pausar e retomar
Você pode acompanhar o progresso em ambas as exibições de ajuste fino do Portal do Foundry. Seu trabalho passa pelos mesmos status que os trabalhos de ajuste fino normais (Enfileirado, Em execução, Com êxito).
Você também pode examinar os arquivos de resultados durante as execuções de treinamento, para dar uma olhada no progresso e verificar se o treinamento está ocorrendo conforme o esperado.
Durante o treinamento, você pode exibir as métricas e pausar o trabalho conforme necessário. Pausar pode ser útil se as métricas não estiverem convergindo ou se você achar que o modelo não está aprendendo no ritmo certo. Quando você pausa um trabalho de treinamento, um ponto de verificação implantável é criado após a conclusão das avaliações de segurança. Esse ponto de verificação está disponível para você implantar e usar para inferência ou você pode retomar o trabalho para concluí-lo. A operação de pausa é aplicável somente a trabalhos treinados para pelo menos uma etapa que estejam no estado Em execução.
Analisar seu modelo personalizado
Azure OpenAI anexa um arquivo de resultados chamado results.csv a cada trabalho de ajuste fino após a conclusão. Você pode usar o arquivo de resultados para analisar o desempenho de treinamento e validação do modelo personalizado. A ID do arquivo de resultado é listada para cada modelo personalizado na coluna ID do arquivo de resultado no painel Modelos do portal do Foundry. Você pode usar a ID do arquivo para identificar e baixar o arquivo de resultado do painel Arquivos de dados do portal do Foundry.
O arquivo de resultado é um arquivo CSV que contém uma linha de cabeçalho e uma linha para cada etapa de treinamento que o trabalho de ajuste fino executa. O arquivo de resultado contém as seguintes colunas:
| Nome da coluna | Descrição |
|---|---|
step |
O número da etapa de treinamento. Uma etapa de treinamento representa um único passe, para frente e para trás, em um lote de dados de treinamento. |
train_loss |
A perda do lote de treinamento. |
train_mean_token_accuracy |
A porcentagem de tokens que o modelo previu corretamente no lote de treinamento. Por exemplo, se o tamanho do lote for definido como 3 e seus dados contiverem conclusões [[1, 2], [0, 5], [4, 2]], esse valor será definido como 0.83 (5 de 6) se o modelo tiver previsto [[1, 1], [0, 5], [4, 2]]. |
valid_loss |
A perda do lote de validação. |
validation_mean_token_accuracy |
A porcentagem de tokens no lote de validação que o modelo previu corretamente. Por exemplo, se o tamanho do lote for definido como 3 e seus dados contiverem conclusões [[1, 2], [0, 5], [4, 2]], esse valor será definido como 0.83 (5 de 6) se o modelo tiver previsto [[1, 1], [0, 5], [4, 2]]. |
full_valid_loss |
A perda de validação calculada no final de cada época. Quando o treinamento vai bem, a perda deve diminuir. |
full_valid_mean_token_accuracy |
A precisão média válida do token calculada no final de cada época. Quando o treinamento está indo bem, a precisão do token deve aumentar. |
Você também pode exibir os dados em seu results.csv arquivo como gráficos no portal do Foundry. Quando você seleciona o link para o seu modelo treinado, três gráficos aparecem: perda, precisão média do token e precisão do token. Se você forneceu dados de validação, ambos os conjuntos de dados aparecerão no mesmo gráfico.
Procure que sua perda diminua ao longo do tempo e sua precisão aumente. Se os dados de treinamento e validação divergirem, talvez você esteja realizando um sobreajuste. Tente treinar com menos épocas ou um multiplicador de taxa de aprendizagem menor.
Implantar um modelo finamente ajustado
Quando estiver satisfeito com as métricas do seu trabalho de ajuste fino ou apenas quiser passar para a inferência, você deve implantar o modelo.
Se você estiver implantando para validação adicional, considere implantar para testes usando uma implantação Developer.
Se você estiver pronto para implantar para produção ou tiver necessidades específicas de residência de dados, siga o guia de implantação.
Usar um modelo ajustado implantado
Depois de implantar seu modelo ajustado, você pode usá-lo como qualquer outro modelo implantado. Você pode usar o playground na Foundry para experimentar sua nova implementação. Você também pode usar a API REST para chamar seu modelo ajustado do seu próprio aplicativo. Você pode até começar a usar esse novo modelo refinado em seu fluxo de prompts para construir seu aplicativo de IA generativa.
Nota
Para modelos de chat, a mensagem do sistema que você usa para orientar seu modelo ajustado (seja ele implantado ou disponível para teste no playground) deve ser igual à mensagem do sistema usada para treinamento. Se você usar uma mensagem de sistema diferente, o modelo poderá não ser executado conforme o esperado.
Executar ajuste fino contínuo
Depois de criar um modelo finamente ajustado, convém continuar a refinar o modelo ao longo do tempo por meio de refinamentos adicionais. O ajuste fino contínuo é o processo iterativo de selecionar um modelo já ajustado como um modelo base e ajustá-lo ainda mais em novos conjuntos de exemplos de treinamento.
Para executar o ajuste fino em um modelo que você ajustou anteriormente, use o mesmo processo descrito em Criar um modelo ajustado. Mas, em vez de especificar o nome de um modelo base genérico, especifique seu modelo já ajustado. Um modelo ajustado personalizado é semelhante a gpt-4o-2024-08-06.ft-d93dda6110004b4da3472d96f4dd4777-ft.
Limpar suas implantações, modelos personalizados e arquivos de treinamento
Quando você não precisar mais do modelo personalizado, poderá excluir a implantação e o modelo. Você também pode excluir os arquivos de treinamento e validação que carregou no serviço, se necessário.
Excluir sua implantação de modelo
Importante
Depois de implantar um modelo personalizado, se a qualquer momento a implantação permanecer inativa por mais de 15 dias, a implantação será excluída. A implantação de um modelo personalizado será inativa se o modelo tiver sido implantado há mais de 15 dias e nenhuma conclusão de chat ou chamadas à API de resposta tiverem sido feitas durante um período contínuo de 15 dias.
A exclusão de uma implantação inativa não exclui ou afeta o modelo personalizado subjacente. O modelo personalizado pode ser reimplantado a qualquer momento.
Como descrito em Preços do OpenAI do Azure nos Modelos do Microsoft Foundry, cada modelo personalizado (ajustado) que é implantado incorre em um custo de hospedagem por hora, independentemente de estarem feitas conclusões ou chamadas para o modelo, sejam elas de resposta da API ou de chat. Para saber mais sobre como planejar e gerenciar custos com Azure OpenAI, consulte Plano e gerencie custos para Azure OpenAI.
Você pode excluir a implantação do modelo personalizado no painel Implantações no portal do Foundry. Selecione a implantação a ser excluída e, em seguida, selecione Excluir.
Excluir seu modelo personalizado
Você pode excluir um modelo personalizado no painel Modelos no portal do Foundry. Selecione o modelo personalizado a ser excluído da guia Modelos Personalizados e selecione Excluir.
Nota
Você não poderá excluir um modelo personalizado se ele tiver uma implantação existente. Você deve excluir a implantação do modelo antes de excluir o modelo personalizado.
Excluir seus arquivos de treinamento
Opcionalmente, você pode excluir arquivos de treinamento e validação que carregou para o treinamento, juntamente com os arquivos de resultados gerados durante o treinamento, no painel Gerenciamento>Dados + índices no portal do Foundry. Selecione o arquivo a ser excluído e, em seguida, selecione Excluir.
Pré-requisitos
Leia o guia sobre quando usar o Azure OpenAI para ajuste fino.
Você precisa de uma assinatura Azure. Crie um gratuitamente.
Você precisa de um recurso Azure OpenAI. Para obter mais informações, consulte Criar um recurso e implantar um modelo com Azure OpenAI.
Você precisa das seguintes bibliotecas de Python:
os,json,requests,openai.Você precisa da biblioteca de Python OpenAI.
O ajuste fino requer a função Foundry Owner. Embora os usuários do Foundry possam treinar (ajustar) modelos, somente os Proprietários de IA podem implantá-los.
Importante
As funções RBAC do Foundry foram renomeadas recentemente. Foundry User, Foundry Owner, Foundry Account Owner e Foundry Project Manager eram anteriormente chamados de Usuário do Azure AI, Proprietário do Azure AI, Proprietário da conta do Azure AI e Gerente de Projeto do Azure AI. Você ainda pode ver os nomes anteriores em alguns lugares enquanto essa mudança de nome está sendo implementada. Os IDs das funções e as permissões principais não são alterados com a mudança de nome.
Se você ainda não tiver acesso para exibir cotas e implantar modelos no portal do Foundry, precisará de mais permissões.
Modelos com suporte
Para verificar quais regiões atualmente dão suporte ao ajuste fino, consulte o artigo sobre modelos.
Ou você pode ajustar um modelo ajustado anteriormente, formatado como base-model.ft-{jobid}.
Examinar o fluxo de trabalho do SDK do Python
Reserve um momento para examinar o fluxo de trabalho de ajuste fino para usar o SDK do Python com Azure OpenAI:
- Prepare seus dados de treinamento e validação.
- Selecione um modelo base.
- Carregue seus dados de treinamento.
- Treine seu novo modelo personalizado.
- Verifique o status do modelo personalizado.
- Implante para uso o seu modelo personalizado.
- Use seu modelo personalizado.
- Opcionalmente, analise seu modelo personalizado para obter desempenho e ajuste.
Preparar seus dados de treinamento e validação
Seus conjuntos de dados de treinamento e validação consistem em exemplos de entrada e saída de como você deseja que o modelo seja executado.
Os dados de treinamento e validação que você usa devem ser formatados como um documento JSONL (Linhas JSON). Ele também deve ser formatado no formato de conversa que a API de Conclusões de Chat usa.
Além do formato JSONL, os arquivos de dados de treinamento e validação devem ser codificados em UTF-8 e incluir uma marca de ordem de byte (BOM). Cada arquivo deve ter menos de 512 MB de tamanho.
Se você quiser um passo a passo do ajuste fino
Formato de arquivo de exemplo
{"messages": [{"role": "system", "content": "Clippy is a factual chatbot that is also sarcastic."}, {"role": "user", "content": "Who discovered Antarctica?"}, {"role": "assistant", "content": "Some chaps named Fabian Gottlieb von Bellingshausen and Mikhail Lazarev, as if they don't teach that in every school!"}]}
{"messages": [{"role": "system", "content": "Clippy is a factual chatbot that is also sarcastic."}, {"role": "user", "content": "What is the biggest ocean?"}, {"role": "assistant", "content": "The Pacific Ocean. It's not like it's a small pond or anything."}]}
{"messages": [{"role": "system", "content": "Clippy is a factual chatbot that is also sarcastic."}, {"role": "user", "content": "What is the largest planet?"}, {"role": "assistant", "content": "It's called Jupiter, you might have heard of it...or not."}]}
{"messages": [{"role": "system", "content": "Clippy is a factual chatbot that is also sarcastic."}, {"role": "user", "content": "Who painted the Mona Lisa?"}, {"role": "assistant", "content": "Oh, some obscure artist named Leonardo da Vinci. Not that he is famous or anything."}]}
{"messages": [{"role": "system", "content": "Clippy is a factual chatbot that is also sarcastic."}, {"role": "user", "content": "What's the boiling point of water?"}, {"role": "assistant", "content": "Exciting fact of the day: it's 100 degrees Celsius. Life-changing, isn't it?"}]}
{"messages": [{"role": "system", "content": "Clippy is a factual chatbot that is also sarcastic."}, {"role": "user", "content": "Who wrote 'The Odyssey'?"}, {"role": "assistant", "content": "Oh, just some poet named Homer. Nothing special, really."}]}
{"messages": [{"role": "system", "content": "Clippy is a factual chatbot that is also sarcastic."}, {"role": "user", "content": "What is the largest mammal?"}, {"role": "assistant", "content": "Blue Whale. Quite a big fish, isn't it? Oh wait, it's not a fish!"}]}
{"messages": [{"role": "system", "content": "Clippy is a factual chatbot that is also sarcastic."}, {"role": "user", "content": "What's the highest mountain peak?"}, {"role": "assistant", "content": "Everest. Brace yourself, it's not a walk in the park."}]}
{"messages": [{"role": "system", "content": "Clippy is a factual chatbot that is also sarcastic."}, {"role": "user", "content": "Who invented the telephone?"}, {"role": "assistant", "content": "A guy named Alexander Graham Bell. Bet you didn't guess that one!"}]}
{"messages": [{"role": "system", "content": "Clippy is a factual chatbot that is also sarcastic."}, {"role": "user", "content": "What is the distance from Earth to the Sun?"}, {"role": "assistant", "content": "About 93 million miles. Just a quick drive, really."}]}
Formato de arquivo de chat em múltiplos turnos
Também há suporte para várias voltas de uma conversa em uma única linha do arquivo de treinamento JSONL. Para pular o ajuste fino de mensagens específicas do assistente, adicione o par chave/valor opcional weight. Atualmente, weight pode ser definido como 0 ou 1.
{"messages": [{"role": "system", "content": "Marv is a factual chatbot that is also sarcastic."}, {"role": "user", "content": "What's the capital/major city of France?"}, {"role": "assistant", "content": "Paris", "weight": 0}, {"role": "user", "content": "Can you be more sarcastic?"}, {"role": "assistant", "content": "Paris, as if everyone doesn't know that already.", "weight": 1}]}
{"messages": [{"role": "system", "content": "Marv is a factual chatbot that is also sarcastic."}, {"role": "user", "content": "Who wrote 'Romeo and Juliet'?"}, {"role": "assistant", "content": "William Shakespeare", "weight": 0}, {"role": "user", "content": "Can you be more sarcastic?"}, {"role": "assistant", "content": "Oh, just some guy named William Shakespeare. Ever heard of him?", "weight": 1}]}
{"messages": [{"role": "system", "content": "Marv is a factual chatbot that is also sarcastic."}, {"role": "user", "content": "How far is the Moon from Earth?"}, {"role": "assistant", "content": "384,400 kilometers", "weight": 0}, {"role": "user", "content": "Can you be more sarcastic?"}, {"role": "assistant", "content": "Around 384,400 kilometers. Give or take a few, like that really matters.", "weight": 1}]}
Conclusões de bate-papo com visão
{"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."}]}
Criar seus conjuntos de dados de treinamento e validação
Quanto mais exemplos de treinamento você tiver, melhor. Trabalhos de ajuste fino não continuarão sem pelo menos 10 exemplos de treinamento, mas um número tão pequeno não é suficiente para influenciar visivelmente as respostas do modelo. Uma prática recomendada para ajuste fino bem-sucedido é fornecer centenas, se não milhares, de exemplos de treinamento.
Em geral, dobrar o tamanho do conjunto de dados pode levar a um aumento linear na qualidade do modelo. Mas tenha em mente que exemplos de baixa qualidade podem afetar negativamente o desempenho. Se você treinar o modelo em uma grande quantidade de dados internos sem antes podar o conjunto de dados apenas para os exemplos de mais alta qualidade, seu modelo poderá ter um desempenho pior do que o esperado.
Carregar seus dados de treinamento
A próxima etapa é escolher os dados de treinamento preparados existentes ou carregar novos dados de treinamento preparados para usar ao personalizar seu modelo. Depois de preparar seus dados de treinamento, você pode carregar seus arquivos no serviço. Há duas maneiras de carregar dados de treinamento:
Para arquivos de dados grandes, recomendamos que você importe de Armazenamento de Blobs. Arquivos grandes podem se tornar instáveis quando você os carrega por meio de formulários de várias partes porque as solicitações são atômicas e não podem ser repetidas ou retomadas. Para obter mais informações sobre Armazenamento de Blobs, consulte O que é Armazenamento de Blobs do Azure?.
O exemplo de Python a seguir carrega arquivos de treinamento e validação locais usando o SDK do Python e recupera as IDs de arquivo retornadas:
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)
Criar um modelo personalizado
Depois de carregar seus arquivos de treinamento e validação, você estará pronto para iniciar o trabalho de ajuste fino.
O código Python a seguir mostra um exemplo de como criar um novo trabalho de ajuste fino usando o SDK Python:
response = client.fine_tuning.jobs.create(
training_file=training_file_id,
validation_file=validation_file_id,
model="gpt-4.1-2025-04-14", # Enter the base model name.
suffix="my-model", # Custom suffix for naming the resulting model. Note that in Microsoft Foundry, the model can't contain dot/period characters.
seed=105, # Seed parameter controls reproducibility of the fine-tuning job. If you don't specify a seed, one is generated automatically.
extra_body={ "trainingType": "GlobalStandard" } # Change this value to your preferred training type. Other options are `Standard` and `Developer`.
)
job_id = response.id
# You can use the job ID to monitor the status of the fine-tuning job.
# The fine-tuning job takes some time to start and finish.
print("Job ID:", response.id)
print(response.model_dump_json(indent=2))
Nota
É recomendável usar a camada Padrão Global para o tipo de treinamento, pois ela oferece economia de custos e usa a capacidade global para tempos de fila mais rápidos. No entanto, ele copia dados e pesos fora da região de recurso atual. Se a residência de dados for um requisito, use um modelo que dê suporte ao treinamento de camada Standard.
Você também pode passar parâmetros opcionais adicionais, como hiperparâmetros, para ter maior controle do processo de ajuste fino. Para o treinamento inicial, recomendamos usar os padrões automáticos presentes sem especificar esses parâmetros.
Os hiperparâmetros com suporte no momento para ajuste fino supervisionado são:
| Nome | Tipo | Descrição |
|---|---|---|
batch_size |
Inteiro | O tamanho do lote para usar no treinamento. O tamanho do lote é o número de exemplos de treinamento usados para treinar uma única passagem para frente e para trás. Em geral, descobrimos que tamanhos de lote maiores tendem a funcionar melhor para conjuntos de dados maiores. O valor padrão e o valor máximo dessa propriedade são específicos para um modelo base. Um tamanho de lote maior significa que os parâmetros de modelo são atualizados com menos frequência, mas com menor variação. |
learning_rate_multiplier |
Número | O multiplicador de taxa de aprendizado para usar no treinamento. A taxa de aprendizado de ajuste fino é a taxa de aprendizado original usada para pré-treinamento, multiplicada por esse valor. Taxas de aprendizado maiores tendem a ter melhor desempenho com lotes maiores. Recomendamos experimentar valores no intervalo de 0.02 para 0.2 ver o que produz os melhores resultados. Uma taxa de aprendizagem menor pode ser útil para evitar o sobreajuste. |
n_epochs |
Inteiro | O número de épocas para o qual o modelo deve ser treinado. Um período refere-se a um ciclo completo através do conjunto de dados de treinamento. |
seed |
Inteiro | A semente que controla a reprodutibilidade do trabalho. A passagem da mesma posição inicial e dos mesmos parâmetros de trabalho deve produzir os mesmos resultados, mas pode haver diferenças em casos raros. Se você não especificar uma semente, uma será gerada para você. |
Para definir hiperparâmetros personalizados com a versão 1.x da API de Python OpenAI, forneça-os como parte do method:
client.fine_tuning.jobs.create(
training_file="file-abc123",
model="gpt-4.1-2025-04-14",
suffix="my-model",
seed=105,
method={
"type": "supervised", # In this case, the job is using supervised fine-tuning.
"supervised": {
"hyperparameters": {
"n_epochs": 2
}
}
},
extra_body={ "trainingType": "GlobalStandard" }
)
Para saber mais sobre hiperparâmetros com suporte para os outros métodos de personalização, consulte o guia para otimização de preferência direta e o guia de ajuste fino de reforço.
Tipo de treinamento
Selecione a camada de treinamento com base no seu caso de uso e orçamento:
Padrão: o treinamento ocorre na região atual do recurso Foundry e assegura a residência dos dados. Ideal para cargas de trabalho em que os dados devem permanecer em uma região específica.
Global: Fornece preços mais acessíveis em comparação ao Standard usando a capacidade além da sua região atual. Os dados e os pesos são copiados para a região em que ocorre o treinamento. Ideal se a residência de dados não for uma restrição e você deseja tempos de fila mais rápidos.
Desenvolvedor: fornece uma economia significativa de custos usando a capacidade ociosa para treinamento. Não há garantias de latência ou SLA, portanto, os trabalhos nesta camada podem ser automaticamente preemptados e retomados posteriormente. Também não há garantias de residência de dados. Ideal para experimentação e cargas de trabalho sensíveis ao preço.
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)
Verificar o status da tarefa de ajuste fino
response = client.fine_tuning.jobs.retrieve(job_id)
print("Job ID:", response.id)
print("Status:", response.status)
print(response.model_dump_json(indent=2))
Listar eventos de ajuste fino
Para examinar os eventos de ajuste fino individuais que foram gerados durante o treinamento, execute o comando a seguir. Antes de executar o comando, talvez seja necessário atualizar sua biblioteca de clientes do OpenAI para a versão mais recente usando pip install openai --upgrade.
response = client.fine_tuning.jobs.list_events(fine_tuning_job_id=job_id, limit=10)
print(response.model_dump_json(indent=2))
Listar pontos de verificação
A conclusão de cada época de treinamento gera um ponto de verificação. Um ponto de verificação é uma versão totalmente funcional de um modelo que pode ser implantado e usado como o modelo de destino para trabalhos de ajuste fino subsequentes. Os pontos de verificação podem ser particularmente úteis, pois podem fornecer instantâneos antes do sobreajuste.
Quando um trabalho de ajuste fino é concluído, você tem as três versões mais recentes do modelo disponíveis para implantação. Seu modelo ajustado representa a época final. As duas épocas anteriores estão disponíveis como pontos de verificação.
Você pode executar o comando a seguir para recuperar a lista de pontos de verificação associados a um trabalho de ajuste fino individual. Antes de executar o comando, talvez seja necessário atualizar sua biblioteca de clientes do OpenAI para a versão mais recente usando pip install openai --upgrade.
response = client.fine_tuning.jobs.checkpoints.list(job_id)
print(response.model_dump_json(indent=2))
Analisar seu modelo personalizado
Azure OpenAI anexa um arquivo de resultados chamado results.csv a cada trabalho de ajuste fino após a conclusão. Você pode usar o arquivo de resultados para analisar o desempenho de treinamento e validação do modelo personalizado. A ID do arquivo de resultado é listada para cada modelo personalizado. Você pode usar o SDK Python para recuperar a ID do arquivo e baixar o arquivo de resultado para análise.
O exemplo em Python a seguir recupera o ID do primeiro arquivo de resultado anexado à tarefa de ajuste fino do seu modelo personalizado. Em seguida, ele usa o SDK Python para baixar o arquivo no diretório de trabalho atual para análise.
# 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)
O arquivo de resultado é um arquivo CSV que contém uma linha de cabeçalho e uma linha para cada etapa de treinamento que o trabalho de ajuste fino executa. O arquivo de resultado contém as seguintes colunas:
| Nome da coluna | Descrição |
|---|---|
step |
O número da etapa de treinamento. Uma etapa de treinamento representa um único passe, para frente e para trás, em um lote de dados de treinamento. |
train_loss |
A perda do lote de treinamento. |
train_mean_token_accuracy |
A porcentagem de tokens que o modelo previu corretamente no lote de treinamento. Por exemplo, se o tamanho do lote for definido como 3 e seus dados contiverem conclusões [[1, 2], [0, 5], [4, 2]], esse valor será definido como 0.83 (5 de 6) se o modelo tiver previsto [[1, 1], [0, 5], [4, 2]]. |
valid_loss |
A perda do lote de validação. |
validation_mean_token_accuracy |
A porcentagem de tokens no lote de validação que o modelo previu corretamente. Por exemplo, se o tamanho do lote for definido como 3 e seus dados contiverem conclusões [[1, 2], [0, 5], [4, 2]], esse valor será definido como 0.83 (5 de 6) se o modelo tiver previsto [[1, 1], [0, 5], [4, 2]]. |
full_valid_loss |
A perda de validação calculada no final de cada época. Quando o treinamento vai bem, a perda deve diminuir. |
full_valid_mean_token_accuracy |
A precisão média válida do token calculada no final de cada época. Quando o treinamento está indo bem, a precisão do token deve aumentar. |
Você também pode exibir os dados em seu arquivo results.csv como gráficos no portal do Microsoft Foundry. Quando você seleciona o link para o seu modelo treinado, três gráficos aparecem: perda, precisão média do token e precisão do token. Se você forneceu dados de validação, ambos os conjuntos de dados aparecerão no mesmo gráfico.
Procure que sua perda diminua ao longo do tempo e sua precisão aumente. Se os dados de treinamento e validação divergirem, talvez você esteja realizando um sobreajuste. Tente treinar com menos épocas ou um multiplicador de taxa de aprendizagem menor.
Implantar um modelo finamente ajustado
Quando estiver satisfeito com as métricas do seu trabalho de ajuste fino ou apenas quiser passar para a inferência, você deve implantar o modelo.
Se você estiver implantando para validação adicional, considere implantar para testes usando uma implantação Developer.
Ao contrário dos comandos anteriores do SDK, você deve usar a API do painel de controle para a implantação. Essa tarefa requer autorização separada, um caminho de API diferente e uma versão de API diferente.
| Variável | Definição |
|---|---|
token |
Um token de autorização. Há várias maneiras de gerar um token de autorização. O método mais fácil para o teste inicial é abrir Azure Cloud Shell do portal Azure. Em seguida, execute az account get-access-token. Você pode usar esse token como seu token de autorização temporária para teste de API. Recomendamos armazenar esse token em uma nova variável de ambiente. |
subscription |
O ID da assinatura do recurso Azure OpenAI associado. |
resource_group |
O nome do grupo de recursos para o recurso Azure OpenAI. |
resource_name |
O nome do recurso Azure OpenAI. |
model_deployment_name |
O nome personalizado para sua nova implantação de modelo ajustado. Esse nome é referenciado em seu código durante chamadas de conclusão de chat. |
fine_tuned_model |
Seu modelo finamente ajustado. Recupere esse valor dos resultados do trabalho de ajuste fino na etapa anterior. Parece que gpt-4.1-2025-04-14.ft-b044a9d3cf9c4228b5d393567f693b83. Você precisa adicionar o valor ao deploy_data JSON. Como alternativa, você pode implantar um ponto de verificação passando a ID do ponto de verificação, que aparece no formato ftchkpt-e559c011ecc04fc68eaa339d8227d02d. |
import json
import os
import requests
token= os.getenv("<TOKEN>")
subscription = "<YOUR_SUBSCRIPTION_ID>"
resource_group = "<YOUR_RESOURCE_GROUP_NAME>"
resource_name = "<YOUR_AZURE_OPENAI_RESOURCE_NAME>"
model_deployment_name ="gpt-41-ft" # Custom deployment name that you use to reference the model when making inference calls.
deploy_params = {'api-version': "2024-10-01"} # Control plane API version rather than the data plane API for this call
deploy_headers = {'Authorization': 'Bearer {}'.format(token), 'Content-Type': 'application/json'}
deploy_data = {
"sku": {"name": "standard", "capacity": 1},
"properties": {
"model": {
"format": "OpenAI",
"name": <"fine_tuned_model">, # Retrieve this value from the previous call; it looks like gpt-4.1-2025-04-14.ft-b044a9d3cf9c4228b5d393567f693b83
"version": "1"
}
}
}
deploy_data = json.dumps(deploy_data)
request_url = f'https://management.azure.com/subscriptions/{subscription}/resourceGroups/{resource_group}/providers/Microsoft.CognitiveServices/accounts/{resource_name}/deployments/{model_deployment_name}'
print('Creating a new deployment...')
r = requests.put(request_url, params=deploy_params, headers=deploy_headers, data=deploy_data)
print(r)
print(r.reason)
print(r.json())
Para saber mais sobre a implantação entre regiões e como usar o modelo implantado, consulte Usar seu modelo ajustado implantado.
Se você estiver pronto para implantar para produção ou tiver necessidades específicas de residência de dados, siga o guia de implantação.
Executar ajuste fino contínuo
Depois de criar um modelo finamente ajustado, convém continuar a refinar o modelo ao longo do tempo por meio de refinamentos adicionais. O ajuste fino contínuo é o processo iterativo de selecionar um modelo já ajustado como um modelo base e ajustá-lo ainda mais em novos conjuntos de exemplos de treinamento. O ajuste fino contínuo tem suporte apenas para modelos OpenAI.
Para executar o ajuste fino em um modelo que você ajustou anteriormente, use o mesmo processo descrito em Criar um modelo personalizado. Mas, em vez de especificar o nome de um modelo base genérico, especifique a ID do modelo ajustado. A ID do modelo ajustado tem esta aparência gpt-4.1-2025-04-14.ft-5fd1918ee65d4cd38a5dcf6835066ed7.
response = client.fine_tuning.jobs.create(
training_file=training_file_id,
validation_file=validation_file_id,
model="gpt-4.1-2025-04-14.ft-5fd1918ee65d4cd38a5dcf6835066ed7"
)
job_id = response.id
# You can use the job ID to monitor the status of the fine-tuning job.
# The fine-tuning job takes some time to start and finish.
print("Job ID:", response.id)
print("Status:", response.id)
print(response.model_dump_json(indent=2))
Também recomendamos que você inclua o suffix parâmetro para distinguir mais facilmente entre iterações do seu modelo ajustado. O suffix parâmetro usa uma cadeia de caracteres e é definido para identificar o modelo ajustado. Com a API Python OpenAI, você pode adicionar uma cadeia de caracteres de até 18 caracteres ao nome do modelo ajustado.
Se você não tiver certeza da ID do modelo ajustado existente, poderá encontrar essas informações na página Models do Microsoft Foundry. Ou você pode gerar uma list de modelos para um recurso Azure OpenAI usando a API REST.
Limpar suas implantações, modelos personalizados e arquivos de treinamento
Quando você não precisar mais do modelo personalizado, poderá excluir a implantação e o modelo. Você também pode excluir os arquivos de treinamento e validação que carregou no serviço, se necessário.
Excluir sua implantação de modelo
Importante
Depois de implantar um modelo personalizado, se a qualquer momento a implantação permanecer inativa por mais de 15 dias, a implantação será excluída. A implantação de um modelo personalizado será inativa se o modelo tiver sido implantado há mais de 15 dias e nenhuma conclusão de chat ou chamadas à API de resposta tiverem sido feitas durante um período contínuo de 15 dias.
A exclusão de uma implantação inativa não exclui ou afeta o modelo personalizado subjacente. O modelo personalizado pode ser reimplantado a qualquer momento.
Como descrito em Preços do OpenAI do Azure nos Modelos do Microsoft Foundry, cada modelo personalizado (ajustado) que é implantado incorre em um custo de hospedagem por hora, independentemente de estarem feitas conclusões ou chamadas para o modelo, sejam elas de resposta da API ou de chat. Para saber mais sobre como planejar e gerenciar custos com Azure OpenAI, consulte Plano e gerencie custos para Azure OpenAI.
Você pode usar qualquer um desses métodos para excluir a implantação do modelo personalizado:
Excluir seu modelo personalizado
Você pode excluir seu modelo personalizado usando o Foundry.
Nota
Você não poderá excluir um modelo personalizado se ele tiver uma implantação existente. Você deve excluir a implantação do modelo antes de poder excluir o modelo personalizado.
Excluir seus arquivos de treinamento
Opcionalmente, você pode excluir arquivos de treinamento e validação que carregou para treinamento e arquivos de resultados gerados durante o treinamento de sua assinatura Azure OpenAI. Você pode usar os seguintes métodos para excluir seus arquivos de treinamento, validação e resultado:
O exemplo de Python a seguir usa o SDK de Python para excluir os arquivos de treinamento, validação e resultado do modelo personalizado:
print('Checking for existing uploaded files.')
results = []
# Get the complete list of uploaded files in your subscription.
files = openai.File.list().data
print(f'Found {len(files)} total uploaded files in the subscription.')
# Enumerate all uploaded files. Extract the IDs for the
# files with file names that match your training dataset file and
# validation dataset file.
for item in files:
if item["filename"] in [training_file_name, validation_file_name, result_file_name]:
results.append(item["id"])
print(f'Found {len(results)} already uploaded files that match our files')
# Enumerate the file IDs for your files and delete each file.
print(f'Deleting already uploaded files.')
for id in results:
openai.File.delete(sid = id)
Pré-requisitos
Leia o guia sobre quando usar o Azure OpenAI para ajuste fino.
Você precisa de uma assinatura Azure. Crie um gratuitamente.
Você precisa de um recurso Azure OpenAI. Para obter mais informações, consulte Criar um recurso e implantar um modelo com Azure OpenAI.
O ajuste fino requer a função Foundry Owner. Embora os usuários do Foundry possam treinar (ajustar) modelos, somente os Proprietários de IA podem implantá-los.
Importante
As funções RBAC do Foundry foram renomeadas recentemente. Foundry User, Foundry Owner, Foundry Account Owner e Foundry Project Manager eram anteriormente chamados de Usuário do Azure AI, Proprietário do Azure AI, Proprietário da conta do Azure AI e Gerente de Projeto do Azure AI. Você ainda pode ver os nomes anteriores em alguns lugares enquanto essa mudança de nome está sendo implementada. Os IDs das funções e as permissões principais não são alterados com a mudança de nome.
Se você ainda não tiver acesso para exibir cotas e implantar modelos no portal do Foundry, precisará de mais permissões.
Modelos com suporte
Para verificar quais regiões atualmente dão suporte ao ajuste fino, consulte o artigo sobre modelos.
Ou você pode ajustar um modelo ajustado anteriormente, formatado como base-model.ft-{jobid}.
Examinar o fluxo de trabalho da API REST
Reserve um tempo para examinar o fluxo de trabalho de ajuste fino a fim de usar as APIs REST e o Python com o OpenAI do Azure:
- Prepare seus dados de treinamento e validação.
- Selecione um modelo base.
- Carregue seus dados de treinamento.
- Treine seu novo modelo personalizado.
- Verifique o status do modelo personalizado.
- Implante para uso o seu modelo personalizado.
- Use seu modelo personalizado.
- Opcionalmente, analise seu modelo personalizado para obter desempenho e ajuste.
Preparar seus dados de treinamento e validação
Seus conjuntos de dados de treinamento e validação consistem em exemplos de entrada e saída de como você deseja que o modelo seja executado.
Os dados de treinamento e validação que você usa devem ser formatados como um documento JSONL (Linhas JSON). Ele também deve ser formatado no formato de conversa que a API de Conclusões de Chat usa.
Além do formato JSONL, os arquivos de dados de treinamento e validação devem ser codificados em UTF-8 e incluir uma marca de ordem de byte (BOM). Cada arquivo deve ter menos de 512 MB de tamanho.
Se você quiser um passo a passo do ajuste fino
Formato de arquivo de exemplo
{"messages": [{"role": "system", "content": "Clippy is a factual chatbot that is also sarcastic."}, {"role": "user", "content": "Who discovered Antarctica?"}, {"role": "assistant", "content": "Some chaps named Fabian Gottlieb von Bellingshausen and Mikhail Lazarev, as if they don't teach that in every school!"}]}
{"messages": [{"role": "system", "content": "Clippy is a factual chatbot that is also sarcastic."}, {"role": "user", "content": "What is the biggest ocean?"}, {"role": "assistant", "content": "The Pacific Ocean. It's not like it's a small pond or anything."}]}
{"messages": [{"role": "system", "content": "Clippy is a factual chatbot that is also sarcastic."}, {"role": "user", "content": "What is the largest planet?"}, {"role": "assistant", "content": "It's called Jupiter, you might have heard of it...or not."}]}
{"messages": [{"role": "system", "content": "Clippy is a factual chatbot that is also sarcastic."}, {"role": "user", "content": "Who painted the Mona Lisa?"}, {"role": "assistant", "content": "Oh, some obscure artist named Leonardo da Vinci. Not that he is famous or anything."}]}
{"messages": [{"role": "system", "content": "Clippy is a factual chatbot that is also sarcastic."}, {"role": "user", "content": "What's the boiling point of water?"}, {"role": "assistant", "content": "Exciting fact of the day: it's 100 degrees Celsius. Life-changing, isn't it?"}]}
{"messages": [{"role": "system", "content": "Clippy is a factual chatbot that is also sarcastic."}, {"role": "user", "content": "Who wrote 'The Odyssey'?"}, {"role": "assistant", "content": "Oh, just some poet named Homer. Nothing special, really."}]}
{"messages": [{"role": "system", "content": "Clippy is a factual chatbot that is also sarcastic."}, {"role": "user", "content": "What is the largest mammal?"}, {"role": "assistant", "content": "Blue Whale. Quite a big fish isn't it? Oh wait, it's not a fish!"}]}
{"messages": [{"role": "system", "content": "Clippy is a factual chatbot that is also sarcastic."}, {"role": "user", "content": "What's the highest mountain peak?"}, {"role": "assistant", "content": "Everest. Brace yourself, it's not a walk in the park."}]}
{"messages": [{"role": "system", "content": "Clippy is a factual chatbot that is also sarcastic."}, {"role": "user", "content": "Who invented the telephone?"}, {"role": "assistant", "content": "A guy named Alexander Graham Bell. Bet you didn't guess that one!"}]}
{"messages": [{"role": "system", "content": "Clippy is a factual chatbot that is also sarcastic."}, {"role": "user", "content": "What is the distance from Earth to the Sun?"}, {"role": "assistant", "content": "About 93 million miles. Just a quick drive, really."}]}
Formato de arquivo de chat em múltiplos turnos
Também há suporte para várias voltas de uma conversa em uma única linha do arquivo de treinamento JSONL. Para pular o ajuste fino de mensagens específicas do assistente, adicione o par chave/valor opcional weight. Atualmente, weight pode ser definido como 0 ou 1.
{"messages": [{"role": "system", "content": "Marv is a factual chatbot that is also sarcastic."}, {"role": "user", "content": "What's the capital/major city of France?"}, {"role": "assistant", "content": "Paris", "weight": 0}, {"role": "user", "content": "Can you be more sarcastic?"}, {"role": "assistant", "content": "Paris, as if everyone doesn't know that already.", "weight": 1}]}
{"messages": [{"role": "system", "content": "Marv is a factual chatbot that is also sarcastic."}, {"role": "user", "content": "Who wrote 'Romeo and Juliet'?"}, {"role": "assistant", "content": "William Shakespeare", "weight": 0}, {"role": "user", "content": "Can you be more sarcastic?"}, {"role": "assistant", "content": "Oh, just some guy named William Shakespeare. Ever heard of him?", "weight": 1}]}
{"messages": [{"role": "system", "content": "Marv is a factual chatbot that is also sarcastic."}, {"role": "user", "content": "How far is the Moon from Earth?"}, {"role": "assistant", "content": "384,400 kilometers", "weight": 0}, {"role": "user", "content": "Can you be more sarcastic?"}, {"role": "assistant", "content": "Around 384,400 kilometers. Give or take a few, like that really matters.", "weight": 1}]}
Conclusões de bate-papo com visão
{"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."}]}
Criar seus conjuntos de dados de treinamento e validação
Quanto mais exemplos de treinamento você tiver, melhor. Trabalhos de ajuste fino não continuarão sem pelo menos 10 exemplos de treinamento, mas um número tão pequeno não é suficiente para influenciar visivelmente as respostas do modelo. Uma prática recomendada para ajuste fino bem-sucedido é fornecer centenas, se não milhares, de exemplos de treinamento.
Em geral, dobrar o tamanho do conjunto de dados pode levar a um aumento linear na qualidade do modelo. Mas tenha em mente que exemplos de baixa qualidade podem afetar negativamente o desempenho. Se você treinar o modelo em uma grande quantidade de dados internos sem antes podar o conjunto de dados apenas para os exemplos de mais alta qualidade, seu modelo poderá ter um desempenho pior do que o esperado.
Carregar seus dados de treinamento
A próxima etapa é escolher os dados de treinamento preparados existentes ou carregar novos dados de treinamento preparados para usar ao personalizar seu modelo. Depois de preparar seus dados de treinamento, você pode carregar seus arquivos no serviço. Há duas maneiras de carregar dados de treinamento:
Para arquivos de dados grandes, recomendamos que você importe de Armazenamento de Blobs. Arquivos grandes podem se tornar instáveis quando você os carrega por meio de formulários de várias partes porque as solicitações são atômicas e não podem ser repetidas ou retomadas. Para obter mais informações sobre Armazenamento de Blobs, consulte O que é Armazenamento de Blobs do Azure?.
Carregar dados de treinamento
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"
Carregar dados de validação
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"
Criar um modelo personalizado
Depois de carregar seus arquivos de treinamento e validação, você estará pronto para iniciar o trabalho de ajuste fino. O código a seguir mostra um exemplo de como criar um novo trabalho de ajuste fino usando a API REST.
Este exemplo inclui a passagem do parâmetro de semente. A semente controla a reprodutibilidade do trabalho. A passagem da mesma posição inicial e dos mesmos parâmetros de trabalho deve produzir os mesmos resultados, mas pode haver diferenças em casos raros. Se você não especificar uma semente, uma será gerada para você.
curl -X POST $AZURE_OPENAI_ENDPOINT/openai/v1/fine_tuning/jobs \
-H "Content-Type: application/json" \
-H "api-key: $AZURE_OPENAI_API_KEY" \
-d '{
"model": "gpt-4.1-2025-04-14",
"training_file": "<TRAINING_FILE_ID>",
"validation_file": "<VALIDATION_FILE_ID>",
"seed": 105
}'
Se você estiver ajustando um modelo que dá suporte ao treinamento global, poderá especificar o tipo de treinamento usando o extra_body argumento nomeado e usando api-version=2025-04-01-preview:
curl -X POST $AZURE_OPENAI_ENDPOINT/openai/fine_tuning/jobs?api-version=2025-04-01-preview \
-H "Content-Type: application/json" \
-H "api-key: $AZURE_OPENAI_API_KEY" \
-d '{
"model": "gpt-4.1-2025-04-14",
"training_file": "<TRAINING_FILE_ID>",
"validation_file": "<VALIDATION_FILE_ID>",
"seed": 105,
"trainingType": "globalstandard"
}'
Você também pode passar parâmetros opcionais adicionais, como hiperparâmetros , para ter maior controle do processo de ajuste fino. Para o treinamento inicial, recomendamos usar os padrões automáticos presentes sem especificar esses parâmetros.
Os hiperparâmetros com suporte no momento para ajuste fino supervisionado são:
| Nome | Tipo | Descrição |
|---|---|---|
batch_size |
Inteiro | O tamanho do lote para usar no treinamento. O tamanho do lote é o número de exemplos de treinamento usados para treinar uma única passagem para frente e para trás. Em geral, descobrimos que tamanhos de lote maiores tendem a funcionar melhor para conjuntos de dados maiores. O valor padrão e o valor máximo dessa propriedade são específicos para um modelo base. Um tamanho de lote maior significa que os parâmetros de modelo são atualizados com menos frequência, mas com menor variação. |
learning_rate_multiplier |
Número | O multiplicador de taxa de aprendizado para usar no treinamento. A taxa de aprendizado de ajuste fino é a taxa de aprendizado original usada para pré-treinamento, multiplicada por esse valor. Taxas de aprendizado maiores tendem a ter melhor desempenho com lotes maiores. Recomendamos experimentar valores no intervalo de 0.02 para 0.2 ver o que produz os melhores resultados. Uma taxa de aprendizagem menor pode ser útil para evitar o sobreajuste. |
n_epochs |
Inteiro | O número de épocas para o qual o modelo deve ser treinado. Um período refere-se a um ciclo completo através do conjunto de dados de treinamento. |
seed |
Inteiro | A semente que controla a reprodutibilidade do trabalho. |
Para saber mais sobre hiperparâmetros com suporte para os outros métodos de personalização, consulte o guia para otimização de preferência direta e o guia de ajuste fino de reforço.
Selecionar um tipo de treinamento
Selecione a camada de treinamento com base no seu caso de uso e orçamento:
Padrão: o treinamento ocorre na região atual do recurso Foundry e assegura a residência dos dados. Ideal para cargas de trabalho em que os dados devem permanecer em uma região específica.
Global: Fornece preços mais acessíveis em comparação ao Standard usando a capacidade além da sua região atual. Os dados e os pesos são copiados para a região em que ocorre o treinamento. Ideal se a residência de dados não for uma restrição e você deseja tempos de fila mais rápidos.
Desenvolvedor: fornece uma economia significativa de custos usando a capacidade ociosa para treinamento. Não há garantias de latência ou SLA, portanto, os trabalhos nesta camada podem ser automaticamente preemptados e retomados posteriormente. Não há garantias de residência de dados também. Ideal para experimentação e cargas de trabalho sensíveis ao preço.
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"}"
Verificar o status do modelo personalizado
Depois de iniciar uma tarefa de ajuste fino, pode levar algum tempo para ser concluída. Sua tarefa pode estar na fila atrás de outras tarefas no sistema. Treinar seu modelo pode levar minutos ou horas, dependendo do tamanho do modelo e do conjunto de dados.
O exemplo a seguir usa a API REST para verificar o status do seu trabalho de ajuste fino. O exemplo recupera informações sobre seu trabalho usando a ID do trabalho retornada do exemplo anterior.
curl -X GET $AZURE_OPENAI_ENDPOINT/openai/v1/fine_tuning/jobs/<YOUR-JOB-ID> \
-H "api-key: $AZURE_OPENAI_API_KEY"
Listar eventos de ajuste fino
Para examinar os eventos de ajuste fino individuais que foram gerados durante o treinamento:
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"
Listar pontos de verificação
A conclusão de cada época de treinamento gera um ponto de verificação. Um ponto de verificação é uma versão totalmente funcional de um modelo que pode ser implantado e usado como o modelo de destino para trabalhos de ajuste fino subsequentes. Os pontos de verificação podem ser particularmente úteis, pois podem fornecer instantâneos antes do sobreajuste.
Quando um trabalho de ajuste fino é concluído, você tem as três versões mais recentes do modelo disponíveis para implantação. Seu modelo ajustado representa a época final. As duas épocas anteriores estão disponíveis como pontos de verificação.
Você pode executar o seguinte comando para recuperar a lista de pontos de verificação associados a um trabalho de ajuste fino individual:
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"
Pausar e retomar
Durante o treinamento, você pode exibir os logs e as métricas e pausar o trabalho conforme necessário. Pausar pode ser útil se as métricas não estiverem convergindo ou se você achar que o modelo não está aprendendo no ritmo certo.
Depois que o trabalho de treinamento é pausado e as avaliações de segurança são concluídas, um ponto de verificação implantável é criado. Esse ponto de verificação está disponível para você implantar e usar para inferência ou você pode retomar o trabalho para concluí-lo.
A operação de pausa é aplicável somente a trabalhos treinados para pelo menos uma etapa que estejam no estado Em execução.
Pausa
curl -X POST $AZURE_OPENAI_ENDPOINT/openai/v1/fine_tuning/jobs/{fine_tuning_job_id}/pause \
-H "Content-Type: application/json" \
-H "api-key: $AZURE_OPENAI_API_KEY"
Currículo
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"
Copiar um modelo (versão prévia)
Agora você pode copiar um modelo de ponto de verificação ajustado de uma região para outra, em assinaturas diferentes, mas dentro do mesmo locatário. O processo usa APIs dedicadas para ajudar a garantir transferências eficientes e seguras. No momento, esse recurso está disponível apenas com a API e não por meio do portal do Foundry.
Depois que o modelo for copiado da região A para a região B, você poderá ajustar continuamente o modelo na região B e implantar o modelo desse local.
Nota
A exclusão do ponto de verificação do modelo na região de origem não faz com que o modelo seja excluído na região de destino. Para excluir o modelo em ambas as regiões depois de copiado, você deve implantar o modelo separadamente em cada região.
Pré-requisitos
- O recurso ou a conta de destino deve ter pelo menos um trabalho de ajuste fino.
- O recurso ou a conta de destino não deve desabilitar o acesso à rede pública (pelo menos enquanto você está enviando a solicitação de cópia).
- Você só poderá copiar para a conta de destino se a conta que inicia a cópia tiver permissões suficientes para acessar a conta de destino.
Configurar permissões
- Crie uma identidade gerenciada atribuída pelo usuário.
- Dê a função Usuário do Foundry à sua identidade gerenciada atribuída pelo usuário no recurso ou conta de destino.
- Atribua a identidade gerenciada atribuída pelo usuário à sua conta de recurso de origem.
Copiar o modelo
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>"
}'
Como essa é uma operação de execução prolongada, verifique o status da cópia do modelo ajustado fornecendo a ID do ponto de verificação da conta de origem usada na chamada POST.
Verificar o status da cópia
curl --request GET \
--url 'https://<aoai-resource>.openai.azure.com//openai/v1/fine_tuning/jobs/<ftjob>/checkpoints/<checkpoint-name>/copy' \
--header 'Content-Type: application/json' \
--header 'api-key: <api-key>' \
--header 'aoai-copy-ft-checkpoints: preview'
Nota
Quando você copia um ponto de verificação de uma conta de origem, o mesmo nome de ponto de verificação é mantido na conta de destino. Certifique-se de usar exatamente esse mesmo nome para ajuste fino, implantação ou qualquer outra operação na conta de destino. Esse ponto de verificação não aparece na interface do usuário ou na list checkpoints API.
Analisar seu modelo personalizado
Azure OpenAI anexa um arquivo de resultados chamado results.csv a cada trabalho de ajuste fino após a conclusão. Você pode usar o arquivo de resultados para analisar o desempenho de treinamento e validação do modelo personalizado. A ID do arquivo de resultado é listada para cada modelo personalizado. Você pode usar a API REST para recuperar a ID do arquivo e baixar o arquivo de resultado para análise.
O exemplo de Python a seguir usa a API REST para recuperar a ID de arquivo do primeiro arquivo de resultado anexado ao trabalho de ajuste fino para seu modelo personalizado. Em seguida, ele baixa o arquivo para o diretório de trabalho para análise.
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>
O arquivo de resultado é um arquivo CSV que contém uma linha de cabeçalho e uma linha para cada etapa de treinamento que o trabalho de ajuste fino executa. O arquivo de resultado contém as seguintes colunas:
| Nome da coluna | Descrição |
|---|---|
step |
O número da etapa de treinamento. Uma etapa de treinamento representa um único passe, para frente e para trás, em um lote de dados de treinamento. |
train_loss |
A perda do lote de treinamento. |
train_mean_token_accuracy |
A porcentagem de tokens que o modelo previu corretamente no lote de treinamento. Por exemplo, se o tamanho do lote for definido como 3 e seus dados contiverem conclusões [[1, 2], [0, 5], [4, 2]], esse valor será definido como 0.83 (5 de 6) se o modelo tiver previsto [[1, 1], [0, 5], [4, 2]]. |
valid_loss |
A perda do lote de validação. |
validation_mean_token_accuracy |
A porcentagem de tokens no lote de validação que o modelo previu corretamente. Por exemplo, se o tamanho do lote for definido como 3 e seus dados contiverem conclusões [[1, 2], [0, 5], [4, 2]], esse valor será definido como 0.83 (5 de 6) se o modelo tiver previsto [[1, 1], [0, 5], [4, 2]]. |
full_valid_loss |
A perda de validação calculada no final de cada época. Quando o treinamento vai bem, a perda deve diminuir. |
full_valid_mean_token_accuracy |
A precisão média válida do token calculada no final de cada época. Quando o treinamento está indo bem, a precisão do token deve aumentar. |
Você também pode exibir os dados em seu results.csv arquivo como gráficos no portal do Foundry. Quando você seleciona o link para o seu modelo treinado, três gráficos aparecem: perda, precisão média do token e precisão do token. Se você forneceu dados de validação, ambos os conjuntos de dados aparecerão no mesmo gráfico.
Procure que sua perda diminua ao longo do tempo e sua precisão aumente. Se os dados de treinamento e validação divergirem, talvez você esteja realizando um sobreajuste. Tente treinar com menos épocas ou um multiplicador de taxa de aprendizagem menor.
Implantar um modelo finamente ajustado
Quando estiver satisfeito com as métricas do seu trabalho de ajuste fino ou apenas quiser passar para a inferência, você deve implantar o modelo.
Se você estiver implantando para validação adicional, considere implantar para testes usando uma implantação Developer.
Se você estiver pronto para implantar para produção ou tiver necessidades específicas de residência de dados, siga o guia de implantação.
| Variável | Definição |
|---|---|
token |
Um token de autorização. Há várias maneiras de gerar um token de autorização. O método mais fácil para o teste inicial é abrir Azure Cloud Shell do portal Azure. Em seguida, execute az account get-access-token. Você pode usar esse token como seu token de autorização temporária para teste de API. Recomendamos armazenar esse token em uma nova variável de ambiente. |
subscription |
O ID da assinatura do recurso Azure OpenAI associado. |
resource_group |
O nome do grupo de recursos para o recurso Azure OpenAI. |
resource_name |
O nome do recurso Azure OpenAI. |
model_deployment_name |
O nome personalizado para sua nova implantação de modelo ajustado. Esse nome é referenciado em seu código durante chamadas de conclusão de chat. |
fine_tuned_model |
Seu modelo finamente ajustado. Recupere esse valor dos resultados do trabalho de ajuste fino na etapa anterior. Parece que gpt-4.1-2025-04-14.ft-b044a9d3cf9c4228b5d393567f693b83. Você precisa adicionar o valor ao deploy_data JSON. Como alternativa, você pode implantar um ponto de verificação passando a ID do ponto de verificação, que aparece no formato ftchkpt-e559c011ecc04fc68eaa339d8227d02d. |
curl -X POST "https://management.azure.com/subscriptions/<SUBSCRIPTION>/resourceGroups/<RESOURCE_GROUP>/providers/Microsoft.CognitiveServices/accounts/<RESOURCE_NAME>/deployments/<MODEL_DEPLOYMENT_NAME>?api-version=2024-10-21" \
-H "Authorization: Bearer <TOKEN>" \
-H "Content-Type: application/json" \
-d '{
"sku": {"name": "standard", "capacity": 1},
"properties": {
"model": {
"format": "OpenAI",
"name": "<FINE_TUNED_MODEL>",
"version": "1"
}
}
}'
Para saber mais sobre a implantação entre regiões e como usar o modelo implantado, consulte Usar seu modelo ajustado implantado.
Executar ajuste fino contínuo
Depois de criar um modelo finamente ajustado, convém continuar a refinar o modelo ao longo do tempo por meio de refinamentos adicionais. O ajuste fino contínuo é o processo iterativo de selecionar um modelo já ajustado como um modelo base e ajustá-lo ainda mais em novos conjuntos de exemplos de treinamento. O ajuste fino contínuo tem suporte apenas para modelos OpenAI.
Para executar o ajuste fino em um modelo que você ajustou anteriormente, use o mesmo processo descrito em Criar um modelo personalizado. Mas, em vez de especificar o nome de um modelo base genérico, especifique a ID do modelo ajustado. A ID do modelo ajustado tem esta aparência 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>"
}'
Também recomendamos que você inclua o suffix parâmetro para distinguir mais facilmente entre iterações do seu modelo ajustado. O suffix parâmetro usa uma cadeia de caracteres e é definido para identificar o modelo ajustado. O sufixo pode conter até 40 caracteres (a para z, A para Z, 0 para 9, -e _) que são adicionados ao nome do modelo ajustado.
Se você não tiver certeza da ID do seu modelo ajustado existente, poderá encontrar essa informação na página Modelos do Foundry. Ou você pode gerar uma list de modelos para um recurso Azure OpenAI usando a API REST.
Limpar suas implantações, modelos personalizados e arquivos de treinamento
Quando você não precisar mais do modelo personalizado, poderá excluir a implantação e o modelo. Você também pode excluir os arquivos de treinamento e validação que carregou no serviço, se necessário.
Excluir sua implantação de modelo
Você pode usar qualquer um desses métodos para excluir a implantação do modelo personalizado:
Excluir seu modelo personalizado
Você pode excluir seu modelo personalizado usando o Foundry.
Nota
Você não poderá excluir um modelo personalizado se ele tiver uma implantação existente. Você deve excluir a implantação do modelo antes de poder excluir o modelo personalizado.
Excluir seus arquivos de treinamento
Opcionalmente, você pode excluir arquivos de treinamento e validação que carregou para treinamento e arquivos de resultados gerados durante o treinamento de sua assinatura Azure OpenAI. Você pode usar o Foundry para excluir os arquivos.