Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
O Azure OpenAI no Azure AI Foundry Models permite-lhe adaptar os nossos modelos aos seus conjuntos de dados pessoais utilizando um processo conhecido como ajuste fino. Este passo de personalização permite-lhe tirar melhor partido do serviço, fornecendo:
- Resultados de maior qualidade do que o que você pode obter apenas com a engenharia imediata
- A capacidade de treinar com mais exemplos do que o limite máximo de contexto de solicitação de um modelo permite.
- Economia de token devido a prompts mais curtos
- Solicitações de baixa latência, especialmente quando se utilizam modelos menores.
Em contraste com a aprendizagem com poucos exemplos, o ajuste fino melhora o modelo treinando com muito mais exemplos do que os que cabem num prompt, permitindo obter melhores resultados em um grande número de tarefas. Como o ajuste fino ajusta os pesos do modelo base para melhorar o desempenho na tarefa específica, você não precisará incluir tantos exemplos ou instruções em seu prompt. Isso significa menos texto enviado e menos tokens processados em cada chamada de API, potencialmente economizando custos e melhorando a latência da solicitação.
Usamos LoRA, ou adaptação de baixa classificação, para ajustar os modelos de forma a reduzir a sua complexidade sem afetar significativamente o seu desempenho. Este método funciona aproximando a matriz original de alto nível com um de classificação inferior, ajustando apenas um subconjunto menor de parâmetros importantes durante a fase de treinamento supervisionado, tornando o modelo mais gerenciável e eficiente. Para os usuários, isso torna o treinamento mais rápido e mais acessível do que outras técnicas.
Há duas experiências exclusivas de ajuste fino no portal do Azure AI Foundry:
- Visualização de Hub/Projeto - suporta modelos de ajuste fino de vários provedores, incluindo Azure OpenAI, Meta Llama, Microsoft Phi, etc.
- Vista centrada no Azure OpenAI - suporta apenas o ajuste fino de modelos do Azure OpenAI, mas tem suporte para funcionalidades adicionais, como a integração de pré-visualização Pesos e Enviesamentos (W&B).
Se você estiver ajustando apenas os modelos do Azure OpenAI, recomendamos a experiência de ajuste fino centrada no Azure OpenAI, que está disponível navegando até https://ai.azure.com/resource/overview.
Importante
Os itens marcados como (pré-visualização) neste artigo estão neste momento em pré-visualização pública. Esta pré-visualização é fornecida sem um acordo de nível de serviço, e não a recomendamos para trabalhos em produção. Algumas funcionalidades poderão não ser suportadas ou poderão ter capacidades limitadas. Para obter mais informações, veja Termos Suplementares de Utilização para Pré-visualizações do Microsoft Azure.
Pré-requisitos
- Leia o guia de quando usar o ajuste fino do Azure OpenAI.
- Uma assinatura do Azure. Crie um gratuitamente.
- Um recurso do Azure OpenAI localizado em uma região que dá suporte ao ajuste fino do modelo do Azure OpenAI. Verifique a tabela de resumo do modelo e a disponibilidade da região para obter a lista de modelos disponíveis por região e funcionalidade suportada. Para obter mais informações, consulte Criar um recurso e implantar um modelo com o Azure OpenAI.
- O ajuste fino do acesso requer Cognitive Services OpenAI Contributor.
- Se você ainda não tiver acesso para exibir a cota e implantar modelos no portal do Azure AI Foundry, precisará de permissões adicionais.
Modelos suportados
Consulte a página de modelos para verificar quais regiões atualmente oferecem suporte à personalização.
Ou você pode ajustar um modelo previamente ajustado, formatado como base-model.ft-{jobid}.
Rever o fluxo de trabalho do portal do Azure AI Foundry
Tire um momento para analisar o fluxo de trabalho de aprimoramento para usar o portal do Azure AI Foundry.
- Prepare seus dados de treinamento e validação.
- Use a caixa de diálogo Criar um modelo ajustado no portal do Azure AI Foundry para treinar seu modelo personalizado.
- Selecione um método de treinamento.
- Selecione um modelo base.
- Escolha o seu tipo de formação
- Escolha seus dados de treinamento.
- Opcionalmente, escolha seus dados de validação.
- Opcionalmente, configure os parâmetros da tarefa para o seu trabalho de afinação.
- Opcionalmente, habilite a implantação automática para o modelo personalizado resultante.
- Reveja as suas escolhas e treine o seu novo modelo personalizado.
- Verifique o estado do seu modelo personalizado ajustado.
- Implemente o seu modelo personalizado para utilização.
- Utilize o seu modelo personalizado.
- Opcionalmente, analise seu modelo personalizado quanto ao desempenho e ajuste.
Prepare seus dados de treinamento e validação
Os dados de preparação e os conjuntos de dados de validação consistem em exemplos de entrada e saída de como pretende que o modelo seja executado.
Os dados de treinamento e validação que você usa devem ser formatados como um documento JSON Lines (JSONL) e devem ser formatados no formato de conversação usado pela API de conclusão de chat .
Geralmente é recomendado usar as instruções e prompts que você achou que funcionaram melhor em todos os exemplos de treinamento. Isto irá ajudá-lo a obter os melhores resultados, especialmente se tiver menos de uma centena de exemplos.
Exemplo de formato de ficheiro
{"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 ficheiro de chat multi-turno Azure OpenAI
Vários turnos de uma conversa em uma única linha do seu arquivo de treinamento jsonl também são suportados. Para saltar o ajuste fino em mensagens específicas de assistente, adicione o par opcional de chave-valor 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 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ão do 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."}]}
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 bytes (BOM). O arquivo deve ter menos de 512 MB de tamanho.
Consideração do tamanho dos conjuntos de dados
Quanto mais exemplos de treinamento você tiver, melhor. Os trabalhos de ajuste fino não prosseguirã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 boa prática fornecer centenas, se não milhares, de exemplos de formação para serem bem sucedidos. Recomenda-se começar com 50 dados de treinamento 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 treinar o modelo numa grande quantidade de dados internos, sem primeiro separar o conjunto apenas para os exemplos de mais alta qualidade, poderá acabar com um modelo com um desempenho muito pior do que o esperado.
Criando um modelo aperfeiçoado
O portal do Azure AI Foundry fornece a caixa de diálogo Criar um modelo ajustado , portanto, em um só lugar, você pode criar e treinar facilmente um modelo ajustado para seu recurso do Azure.
Vá para o portal do Azure AI Foundry em https://ai.azure.com/ e entre com credenciais que têm acesso ao seu recurso do Azure OpenAI. Durante o fluxo de trabalho de entrada, selecione o diretório apropriado, a assinatura do Azure e o recurso do Azure OpenAI.
No portal do Azure AI Foundry, navegue até o painel Ferramentas > de ajuste finoe selecione Ajustar modelo.
Selecione um modelo para ajustar e, em seguida, selecione Avançar para continuar.
Deverá agora ver a janela Criar um modelo ajustado.
Escolha o seu método de treino
O primeiro passo é confirmar a escolha do modelo e o método de treinamento. Nem todos os modelos suportam todos os métodos de formação.
- Ajuste Fino Supervisionado (SFT): suportado por todos os modelos que não necessitam de raciocínio.
- Otimização de Preferência Direta (Preview) (DPO): suportada pelo GPT-4o.
- Afinação de Reforço (Preview) (RFT): Suportado por modelos de raciocínio, como o o4-mini.
Ao selecionar o modelo, você também pode selecionar um modelo previamente ajustado.
Escolher o tipo de treino.
Selecione o nível de treinamento que você gostaria de usar para seu trabalho de ajuste fino:
- Padrão: o treinamento ocorre na região atual do recurso OpenAI do Azure, fornecendo residência de dados.
- Global (Preview): treinamento mais acessível por token, não oferece residência de dados.
Se você não tem requisitos de residência de dados, a Global é uma boa escolha para aproveitar a capacidade de treinamento além da sua região atual. Enquanto estiver na visualização pública, Global pode não estar disponível na sua região atual. Consulta
Em alguns casos, o Standard pode não estar disponível na sua região atual. Se você precisar de residência de dados, consulte as regiões listadas na disponibilidade do modelo escolhido.
Escolha 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 selecionando Adicionar dados de treinamento.
A caixa de diálogo Dados de treinamento exibe todos os conjuntos de dados existentes e carregados anteriormente e também fornece opções para carregar novos dados de treinamento.
Se os dados de treinamento já tiverem sido carregados para o serviço, selecione Arquivos do recurso de IA conectada.
- Selecione o ficheiro na lista suspensa mostrada.
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 Blob do Azure ou outros locais da Web compartilhados para importar dados de treinamento do Blob do Azure ou outro local da Web compartilhado.
Para arquivos de dados grandes, recomendamos que você importe de um repositório de Blob do Azure. Os ficheiros grandes podem tornar-se instáveis quando carregados através de formulários com várias partes porque os pedidos são atómicos e não podem ser repetidos ou retomados. Para obter mais informações sobre o Armazenamento de Blobs do Azure, consulte O que é o Armazenamento de Blobs do Azure?
Observação
Os arquivos de dados de treinamento devem ser formatados como arquivos JSONL, codificados em UTF-8 com uma marca de ordem de bytes (BOM). O arquivo deve ter menos de 512 MB de tamanho.
Escolha os seus dados de validação (opcional)
Se você tiver um conjunto de dados de validação, selecione Adicionar dados de treinamento. Você pode escolher os 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 e carregados anteriormente e fornece opções pelas quais você pode carregar novos dados de validação.
Se os dados de validação já tiverem sido carregados para o serviço, selecione Escolher conjunto de dados.
- Selecione o arquivo na lista mostrada no painel Dados de validação .
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 Blob do Azure ou outros locais da Web compartilhados para importar dados de validação do Blob do Azure ou outro local da Web compartilhado.
Para arquivos de dados grandes, recomendamos que você importe de um repositório de Blob do Azure. Os ficheiros grandes podem tornar-se instáveis quando carregados através de formulários com várias partes porque os pedidos são atómicos e não podem ser repetidos ou retomados.
Observação
Semelhante aos arquivos de dados de treinamento, os arquivos de dados de validação devem ser formatados como arquivos JSONL, codificados em UTF-8 com uma marca de ordem de bytes (BOM). O arquivo deve ter menos de 512 MB de tamanho.
Torne o seu modelo identificável (opcional)
Também recomendamos a inclusão de um suffix
parâmetro para facilitar a distinção entre diferentes iterações do seu modelo ajustado. A suffix
leva uma cadeia de caracteres de até 18 caracteres e é usada quando se nomeia o modelo ajustado resultante.
Configurar parâmetros de treinamento (opcional)
Você pode fornecer uma semente opcional e ajustar hiperparâmetros adicionais.
A semente controla a reprodutibilidade do trabalho. Fornecer os mesmos parâmetros de semente e de trabalho deve produzir os mesmos resultados, mas poderá diferir em casos raros. Se uma semente não for especificada, uma será gerada aleatoriamente para você.
Os seguintes hiperparâmetros estão disponíveis para ajuste por meio do portal do Azure AI Foundry:
Nome | Tipo | Descrição |
---|---|---|
Tamanho do lote | número inteiro | O tamanho do lote a ser usado para treinamento. O tamanho do lote é o número de exemplos de treinamento usados para treinar um único passe para frente e para trás. Em geral, descobrimos que lotes maiores tendem a funcionar melhor para conjuntos de dados maiores. O valor padrão, bem como o valor máximo para essa propriedade são específicos para um modelo base. Um tamanho de lote maior significa que os parâmetros do modelo são atualizados com menos frequência, mas com menor variância. |
Multiplicador da Taxa de Aprendizagem | número | O multiplicador da taxa de aprendizagem a utilizar na formação. A taxa de aprendizagem de ajuste fino é a taxa de aprendizagem original usada para pré-treinamento multiplicada por esse valor. Taxas de aprendizagem maiores tendem a ter um 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 | número inteiro | O número de épocas a serem usadas para treinar o modelo. Uma época refere-se a um ciclo completo através do conjunto de dados de formação. |
Habilitar implantação automática (opcional)
Para economizar tempo, você pode, opcionalmente, habilitar a implantação automática para o modelo resultante. Se o treinamento for concluído com êxito, o modelo será implantado usando o tipo de implantação selecionado. A implantação será nomeada com base no nome exclusivo gerado para seu modelo personalizado e no sufixo opcional que você pode ter fornecido anteriormente.
Observação
Atualmente, apenas implantações de Padrão Global e Desenvolvedor são suportadas para implantação automática. Nenhuma dessas opções fornece residência dos dados. Consulte a documentação do tipo de implantação para obter mais detalhes.
Reveja as suas escolhas e treine o seu modelo
Reveja as suas escolhas e selecione Submeter para começar a treinar o seu novo modelo ajustado.
Verificar o estado do seu modelo personalizado
Depois de enviar seu trabalho de ajuste fino, você verá uma página com detalhes sobre seu modelo ajustado. Você pode encontrar o status e mais informações sobre o seu modelo ajustado finamente na página Ajuste fino no portal do Azure AI Foundry.
Seu trabalho pode estar na fila atrás de outros trabalhos no sistema. O treinamento do seu modelo pode levar minutos ou horas, dependendo do tamanho do modelo e do conjunto de dados.
Pontos de verificação
Quando cada época de treinamento se completa, 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 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 for concluído, você terá as três versões mais recentes do modelo disponíveis para implantação.
Analise seu modelo personalizado
O Azure OpenAI anexa um arquivo de resultado chamado results.csv a cada trabalho de ajuste fino após sua conclusão. Você pode usar o arquivo de resultados para analisar o desempenho de treinamento e validação do seu 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 Azure AI Foundry. Você pode usar a ID do arquivo para identificar e baixar o arquivo de resultado do painel Arquivos de dados do portal do Azure AI Foundry.
O arquivo de resultado é um arquivo CSV que contém uma linha de cabeçalho e uma linha para cada etapa de treinamento executada pelo trabalho de ajuste fino. O arquivo de resultados contém as seguintes colunas:
Nome da coluna | Descrição |
---|---|
step |
O número da etapa de formação. Uma etapa de treinamento representa uma única passagem, para frente e para trás, em um lote de dados de treinamento. |
train_loss |
A perda para o lote de treinamento. |
train_mean_token_accuracy |
A porcentagem de tokens no lote de treinamento corretamente prevista pelo modelo. Por exemplo, se o tamanho do lote estiver definido como 3 e os seus dados contiverem completações [[1, 2], [0, 5], [4, 2]] , este valor é definido como 0,83 (5 de 6) se o modelo previu [[1, 1], [0, 5], [4, 2]] . |
valid_loss |
A perda no conjunto de validação. |
validation_mean_token_accuracy |
A porcentagem de tokens no lote de validação corretamente prevista pelo modelo. Por exemplo, se o tamanho do lote estiver definido como 3 e os seus dados contiverem completações [[1, 2], [0, 5], [4, 2]] , este valor é definido como 0,83 (5 de 6) se o modelo previu [[1, 1], [0, 5], [4, 2]] . |
full_valid_loss |
A perda de validação calculada no final de cada época. Quando o treino corre 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 de results.csv como gráficos no portal do Azure AI Foundry. Selecione o link do seu modelo treinado, onde verá três gráficos: perda, taxa média de precisão 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 a sua perda diminua ao longo do tempo e que a sua precisão aumente. Se você vir uma divergência entre seus dados de treinamento e validação, isso pode indicar que você está sobreajustando. Tente treinar com menos iterações ou com um valor menor para o multiplicador da taxa de aprendizagem.
Implantar um modelo aperfeiçoado
Depois de estar satisfeito com as métricas do seu trabalho de ajuste fino, ou apenas querer passar para a inferência, você deve implantar o modelo.
Se estiver a implantar para validação adicional, considere implantar para teste usando uma implantação para desenvolvedores.
Se você estiver pronto para implantar para produção ou tiver necessidades específicas de residência de dados, siga nosso guia de implantação.
Usar um modelo aperfeiçoado em produção
Depois que seu modelo ajustado for implantado, você poderá usá-lo como qualquer outro modelo implantado. Você pode usar o Playground no Azure AI Foundry para experimentar sua nova implantação. Você pode também utilizar a API REST para invocar o seu modelo afinado a partir do seu próprio aplicativo. Você pode até começar a usar este modelo ajustado no seu fluxo de instruções para criar a sua aplicação de IA generativa.
Observação
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 a mesma que a mensagem do sistema usada para treinamento. Se você usar uma mensagem de sistema diferente, o modelo pode não ter o desempenho esperado.
Ajuste contínuo de afinamento
Depois de criar um modelo ajustado, você pode querer continuar a refiná-lo ao longo do tempo por meio de ajustes mais finos. O ajuste fino contínuo é o processo iterativo de selecionar um modelo já ajustado como 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, você usaria o mesmo processo descrito na criação de um modelo ajustado , mas em vez de especificar o nome de um modelo base genérico, você especificaria seu modelo já ajustado. Um modelo personalizado afinado se pareceria com gpt-4o-2024-08-06.ft-d93dda6110004b4da3472d96f4dd4777-ft
Limpe suas implantações, modelos personalizados e arquivos de treinamento
Quando terminar de usar seu modelo personalizado, você poderá excluir a implantação e o modelo. Você também pode excluir os arquivos de treinamento e validação que carregou para o serviço, se necessário.
Exclua a sua implementação de modelo
Importante
Depois de implantar um modelo personalizado, se a qualquer momento a implantação permanecer inativa por mais de quinze (15) dias, a implantação será excluída. A implantação de um modelo personalizado estará inativa se o modelo tiver sido implantado há mais de quinze (15) dias e nenhuma conclusão ou chamada de conclusão de bate-papo tiver sido feita para ele durante um período contínuo de 15 dias.
A exclusão de uma implantação inativa não exclui nem afeta o modelo personalizado subjacente, e o modelo personalizado pode ser reimplantado a qualquer momento. Conforme descrito nos preços do Azure OpenAI nos modelos do Azure AI Foundry, cada modelo personalizado (otimizado) implementado incorre em um custo de hospedagem à hora, independentemente de serem efetuadas chamadas de conclusão ou de bate-papo para o modelo. Para saber mais sobre como planejar e gerenciar custos com o Azure OpenAI, consulte as orientações em Planejar o gerenciamento de custos para o Azure OpenAI.
Você pode excluir a implantação do seu modelo personalizado no painel Implantações no portal do Azure AI Foundry. Selecione a implantação a ser excluída e, em seguida, selecione Excluir para excluir a implantação.
Excluir seu modelo personalizado
Você pode excluir um modelo personalizado no painel Modelos no portal do Azure AI Foundry. Selecione o modelo personalizado a ser excluído na guia Modelos personalizados e, em seguida, selecione Excluir para excluir o modelo personalizado.
Observação
Não é possível excluir um modelo personalizado se ele tiver uma implantação existente. Você deve primeiro eliminar a sua implementação de modelo antes de poder eliminar o seu modelo personalizado.
Excluir seus arquivos de treinamento
Opcionalmente, pode excluir arquivos de treinamento e validação que carregou e arquivos de resultados gerados durante o treinamento no painel Gestão de Dados>+ índices no portal do Azure AI Foundry. Selecione o arquivo a ser excluído e, em seguida, selecione Excluir para excluir o arquivo.
Pré-requisitos
- Leia o guia de quando usar o ajuste fino do Azure OpenAI.
- Uma assinatura do Azure. Crie um gratuitamente.
- Um recurso OpenAI do Azure. Para obter mais informações, consulte Criar um recurso e implantar um modelo com o Azure OpenAI.
- As seguintes bibliotecas Python:
os
,json
,requests
,openai
. - A biblioteca OpenAI Python deve ser pelo menos a versão 0.28.1.
- O ajuste fino do acesso requer Cognitive Services OpenAI Contributor.
- Se você ainda não tiver acesso para exibir a cota e implantar modelos no portal do Azure AI Foundry, precisará de permissões adicionais.
Observação
Atualmente, a API REST não oferece suporte a trabalhos de treinamento global . Inspecionar trabalhos de treinamento globais por meio da API pode retornar informações incorretas.
Modelos suportados
Consulte a página de modelos para verificar quais regiões atualmente oferecem suporte à personalização.
Ou você pode ajustar um modelo previamente ajustado, formatado como base-model.ft-{jobid}
.
Revise o fluxo de trabalho para o SDK do Python
Reserve um momento para revisar o fluxo de trabalho de ajuste fino para usar o SDK do Python com o Azure OpenAI:
- Prepare seus dados de treinamento e validação.
- Selecione um modelo base.
- Carregue seus dados de treinamento.
- Treine o seu novo modelo personalizado.
- Verifique o estado do seu modelo personalizado.
- Implante seu modelo personalizado para uso.
- Use o seu modelo personalizado.
- Opcionalmente, analise seu modelo personalizado quanto ao desempenho e ajuste.
Prepare seus dados de treinamento e validação
Os dados de preparação e os conjuntos de dados de validação consistem em exemplos de entrada e saída de como pretende que o modelo seja executado.
Os dados de treinamento e validação que você usa devem ser formatados como um documento JSON Lines (JSONL) e devem ser formatados no formato de conversação usado pela API de conclusão de chat .
Se você quiser um passo a passo de ajuste gpt-4o-mini-2024-07-18
fino, consulte o tutorial de ajuste fino do Azure OpenAI
Exemplo de formato de ficheiro
{"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 ficheiro de bate-papo de várias interacções
Vários turnos de uma conversa em uma única linha do seu arquivo de treinamento jsonl também são suportados. Para saltar o ajuste fino em mensagens específicas de assistente, adicione o par opcional de chave-valor 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 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ão do 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."}]}
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 bytes (BOM). O arquivo deve ter menos de 512 MB de tamanho.
Crie seus conjuntos de dados de treinamento e validação
Quanto mais exemplos de treinamento você tiver, melhor. Os trabalhos de ajuste fino não prosseguirã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 boa prática fornecer centenas, se não milhares, de exemplos de formação para serem bem sucedidos.
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 treinar o modelo numa grande quantidade de dados internos, sem primeiro separar o conjunto apenas para os exemplos de mais alta qualidade, poderá acabar com um modelo com um desempenho muito pior do que o esperado.
Carregue 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 os dados de treinamento, você pode carregar seus arquivos para o serviço. Há duas maneiras de carregar dados de treinamento:
Para arquivos de dados grandes, recomendamos que você importe de um repositório de Blob do Azure. Os ficheiros grandes podem tornar-se instáveis quando carregados através de formulários com várias partes porque os pedidos são atómicos e não podem ser repetidos ou retomados. Para obter mais informações sobre o armazenamento de Blob do Azure, consulte O que é o armazenamento de Blob do Azure?
Observação
Os arquivos de dados de treinamento devem ser formatados como arquivos JSONL, codificados em UTF-8 com uma marca de ordem de bytes (BOM). O arquivo deve ter menos de 512 MB de tamanho.
O exemplo Python a seguir carrega arquivos de treinamento e validação locais usando o SDK do Python e recupera as IDs de arquivo retornadas.
# Upload fine-tuning files
import os
from openai import AzureOpenAI
client = AzureOpenAI(
azure_endpoint = os.getenv("AZURE_OPENAI_ENDPOINT"),
api_key=os.getenv("AZURE_OPENAI_API_KEY"),
api_version="2024-10-21" # This API version or later is required to access seed/events/checkpoint capabilities
)
training_file_name = 'training_set.jsonl'
validation_file_name = 'validation_set.jsonl'
# Upload the training and validation dataset files to Azure OpenAI with the SDK.
training_response = client.files.create(
file=open(training_file_name, "rb"), purpose="fine-tune"
)
training_file_id = training_response.id
validation_response = client.files.create(
file=open(validation_file_name, "rb"), purpose="fine-tune"
)
validation_file_id = validation_response.id
print("Training file ID:", training_file_id)
print("Validation file ID:", validation_file_id)
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 com o SDK do Python:
Neste exemplo, também estamos passando o parâmetro "seed". A semente controla a reprodutibilidade do trabalho. Fornecer os mesmos parâmetros de semente e de trabalho deve produzir os mesmos resultados, mas poderá diferir em casos raros. Se uma semente não for especificada, uma será gerada para você.
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. Note that in Azure OpenAI the model name contains dashes and cannot contain dot/period characters.
seed = 105 # seed parameter controls reproducibility of the fine-tuning job. If no seed is specified one will be generated automatically.
)
job_id = response.id
# You can use the job ID to monitor the status of the fine-tuning job.
# The fine-tuning job will take some time to start and complete.
print("Job ID:", response.id)
print("Status:", response.id)
print(response.model_dump_json(indent=2))
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 que estão presentes sem especificar esses parâmetros.
Os hiperparâmetros suportados atualmente para ajuste fino são:
Nome | Tipo | Descrição |
---|---|---|
batch_size |
número inteiro | O tamanho do lote a ser usado para treinamento. O tamanho do lote é o número de exemplos de treinamento usados para treinar um único passe para frente e para trás. Em geral, descobrimos que lotes maiores tendem a funcionar melhor para conjuntos de dados maiores. O valor padrão, bem como o valor máximo para essa propriedade são específicos para um modelo base. Um tamanho de lote maior significa que os parâmetros do modelo são atualizados com menos frequência, mas com menor variância. |
learning_rate_multiplier |
número | O multiplicador da taxa de aprendizagem a utilizar na formação. A taxa de aprendizagem de ajuste fino é a taxa de aprendizagem original usada para pré-treinamento multiplicada por esse valor. Taxas de aprendizagem maiores tendem a ter um 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_epochs |
número inteiro | O número de épocas a serem usadas para treinar o modelo. Uma época refere-se a um ciclo completo através do conjunto de dados de formação. |
seed |
número inteiro | A semente controla a reprodutibilidade do trabalho. Fornecer os mesmos parâmetros de semente e de trabalho deve produzir os mesmos resultados, mas poderá diferir em casos raros. Se uma semente não for especificada, uma será gerada para você. |
Para definir hiperparâmetros personalizados com a versão 1.x da API Python do OpenAI:
from openai import AzureOpenAI
client = AzureOpenAI(
azure_endpoint = os.getenv("AZURE_OPENAI_ENDPOINT"),
api_key=os.getenv("AZURE_OPENAI_API_KEY"),
api_version="2024-10-21" # This API version or later is required
)
client.fine_tuning.jobs.create(
training_file="file-abc123",
model="gpt-4.1-2025-04-14", # Enter base model name. Note that in Azure OpenAI the model name contains dashes and cannot contain dot/period characters.
hyperparameters={
"n_epochs":2
}
)
Verificar o estado do processo de afinação
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, talvez seja necessário atualizar sua biblioteca de cliente OpenAI para a versão mais recente com pip install openai --upgrade
para executar este comando.
response = client.fine_tuning.jobs.list_events(fine_tuning_job_id=job_id, limit=10)
print(response.model_dump_json(indent=2))
Pontos de verificação
Quando cada época de treinamento se completa, 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 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 for concluído, você terá as três versões mais recentes do modelo disponíveis para implantação. A época final será representada pelo seu modelo afinado, enquanto as duas épocas anteriores estarão disponíveis como pontos de verificação.
Você pode executar o comando list checkpoints para recuperar a lista de pontos de verificação associados a um trabalho de ajuste fino individual. Talvez seja necessário atualizar a sua biblioteca de cliente OpenAI para a versão mais recente com pip install openai --upgrade
para executar este comando.
response = client.fine_tuning.jobs.checkpoints.list(job_id)
print(response.model_dump_json(indent=2))
Analise o seu modelo personalizado
O Azure OpenAI anexa um arquivo de resultado chamado results.csv a cada trabalho de ajuste fino após sua conclusão. Você pode usar o arquivo de resultados para analisar o desempenho de treinamento e validação do seu modelo personalizado. O ID do arquivo de resultado é listado para cada modelo personalizado, e você pode usar o SDK do Python para recuperar o ID do arquivo e baixar o arquivo de resultado para análise.
O exemplo Python a seguir recupera a ID do arquivo do primeiro arquivo de resultado anexado ao trabalho de ajuste fino para seu modelo personalizado e, em seguida, usa o SDK do Python para baixar o arquivo para seu 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 executada pelo trabalho de ajuste fino. O arquivo de resultados contém as seguintes colunas:
Nome da coluna | Descrição |
---|---|
step |
O número da etapa de formação. Uma etapa de treinamento representa uma única passagem, para frente e para trás, em um lote de dados de treinamento. |
train_loss |
A perda para o lote de treinamento. |
train_mean_token_accuracy |
A porcentagem de tokens no lote de treinamento corretamente prevista pelo modelo. Por exemplo, se o tamanho do lote estiver definido como 3 e os seus dados contiverem completações [[1, 2], [0, 5], [4, 2]] , este valor é definido como 0,83 (5 de 6) se o modelo previu [[1, 1], [0, 5], [4, 2]] . |
valid_loss |
A perda no conjunto de validação. |
validation_mean_token_accuracy |
A porcentagem de tokens no lote de validação corretamente prevista pelo modelo. Por exemplo, se o tamanho do lote estiver definido como 3 e os seus dados contiverem completações [[1, 2], [0, 5], [4, 2]] , este valor é definido como 0,83 (5 de 6) se o modelo previu [[1, 1], [0, 5], [4, 2]] . |
full_valid_loss |
A perda de validação calculada no final de cada época. Quando o treino corre 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 de results.csv como gráficos no portal do Azure AI Foundry. Selecione o link do seu modelo treinado, onde verá três gráficos: perda, taxa média de precisão 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 a sua perda diminua ao longo do tempo e que a sua precisão aumente. Se observares uma divergência entre os dados de treino e validação, isso pode indicar sobreajustamento. Tente treinar com menos iterações ou com um valor menor para o multiplicador da taxa de aprendizagem.
Implantar um modelo aperfeiçoado
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 estiver a implantar para validação adicional, considere implantar para teste usando uma implantação para desenvolvedores.
Ao contrário dos comandos anteriores do SDK, a implantação deve ser feita usando a API do plano de controle, que requer autorização separada, um caminho de API diferente e uma versão de API diferente.
variável | Definição |
---|---|
token | Há várias maneiras de gerar um token de autorização. O método mais fácil para teste inicial é iniciar o Cloud Shell a partir do portal do Azure. Em seguida, execute az account get-access-token . Você pode usar esse token como seu token de autorização temporária para testes de API. Recomendamos armazená-lo em uma nova variável de ambiente. |
subscrição | A ID de assinatura para o recurso associado do Azure OpenAI. |
grupo_de_recursos | O nome do grupo de recursos para seu recurso do Azure OpenAI. |
nome_do_recurso | O nome de recurso do Microsoft Azure OpenAI. |
Nome_de_implantação_do_modelo | O nome personalizado para a sua nova implementação de modelo ajustado. Este é o nome que será referenciado no seu código ao fazer chamadas de conclusão de chat. |
modelo ajustado | Recupere esse valor dos resultados do trabalho de ajuste fino na etapa anterior. Vai parecer gpt-4.1-2025-04-14.ft-b044a9d3cf9c4228b5d393567f693b83 . Você precisará agregar esse valor ao deploy_data json. Como alternativa, você também pode implantar um ponto de verificação, passando o ID do ponto de verificação que aparecerá 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 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())
Saiba mais sobre a implantação entre regiões e use o modelo implantado aqui.
Se você estiver pronto para implantar para produção ou tiver necessidades específicas de residência de dados, siga nosso guia de implantação.
Ajuste contínuo de afinamento
Depois de criar um modelo ajustado, você pode querer continuar a refinar o modelo ao longo do tempo por meio de ajustes mais finos. O ajuste fino contínuo é o processo iterativo de selecionar um modelo já ajustado como 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, você usaria o mesmo processo descrito em criar um modelo personalizado, mas em vez de especificar o nome de um modelo base genérico, você especificaria o ID do modelo já ajustado. O ID do modelo ajustado tem a seguinte aparência gpt-4.1-2025-04-14.ft-5fd1918ee65d4cd38a5dcf6835066ed7
from openai import AzureOpenAI
client = AzureOpenAI(
azure_endpoint = os.getenv("AZURE_OPENAI_ENDPOINT"),
api_key=os.getenv("AZURE_OPENAI_API_KEY"),
api_version="2024-10-21"
)
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))
Também recomendamos incluir o suffix
parâmetro para facilitar a distinção entre diferentes iterações do seu modelo ajustado.
suffix
usa uma cadeia de caracteres e é definido para identificar o modelo ajustado. Com a API OpenAI Python é suportada uma cadeia de até 18 caracteres que será adicionada ao seu nome de modelo ajustado.
Se você não tiver certeza da ID do seu modelo ajustado existente, essas informações podem ser encontradas na página Modelos do Azure AI Foundry, ou você pode gerar uma lista de modelos para um determinado recurso do Azure OpenAI usando a API REST.
Limpe suas implantações, modelos personalizados e arquivos de treinamento
Quando terminar de usar seu modelo personalizado, você poderá excluir a implantação e o modelo. Você também pode excluir os arquivos de treinamento e validação que carregou para o serviço, se necessário.
Exclua a sua implementação de modelo
Importante
Depois de implantar um modelo personalizado, se a qualquer momento a implantação permanecer inativa por mais de quinze (15) dias, a implantação será excluída. A implantação de um modelo personalizado estará inativa se o modelo tiver sido implantado há mais de quinze (15) dias e nenhuma conclusão ou chamada de conclusão de bate-papo tiver sido feita para ele durante um período contínuo de 15 dias.
A exclusão de uma implantação inativa não exclui nem afeta o modelo personalizado subjacente, e o modelo personalizado pode ser reimplantado a qualquer momento. Conforme descrito nos preços do Azure OpenAI nos modelos do Azure AI Foundry, cada modelo personalizado (otimizado) implementado incorre em um custo de hospedagem à hora, independentemente de serem efetuadas chamadas de conclusão ou de bate-papo para o modelo. Para saber mais sobre como planejar e gerenciar custos com o Azure OpenAI, consulte as orientações em Planejar o gerenciamento de custos para o Azure OpenAI.
Você pode usar vários métodos para excluir a implantação para seu modelo personalizado:
Excluir seu modelo personalizado
Da mesma forma, você pode usar vários métodos para excluir seu modelo personalizado:
Observação
Não é possível excluir um modelo personalizado se ele tiver uma implantação existente. Você deve primeiro eliminar a implementação do modelo antes de eliminar 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 do Azure OpenAI. Você pode usar os seguintes métodos para excluir seus arquivos de treinamento, validação e resultados:
- Azure AI Foundry
- REST APIs
- O SDK do Python
O exemplo Python a seguir usa o SDK do Python para excluir os arquivos de treinamento, validação e resultados do seu modelo personalizado:
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)
Pré-requisitos
- Leia o guia de quando usar o ajuste fino do Azure OpenAI.
- Uma assinatura do Azure. Crie um gratuitamente.
- Um recurso OpenAI do Azure. Para obter mais informações, consulte Criar um recurso e implantar um modelo com o Azure OpenAI.
- O ajuste fino do acesso requer Cognitive Services OpenAI Contributor.
- Se você ainda não tiver acesso para exibir a cota e implantar modelos no portal do Azure AI Foundry, precisará de permissões adicionais.
Observação
Atualmente, a API REST não oferece suporte a trabalhos de treinamento global . Inspecionar trabalhos de treinamento globais por meio da API pode retornar informações incorretas.
Modelos suportados
Consulte a página de modelos para verificar quais regiões atualmente oferecem suporte à personalização.
Ou você pode ajustar um modelo previamente ajustado, formatado como base-model.ft-{jobid}.
Revisar o fluxo de trabalho para a API REST
Reserve um momento para revisar o fluxo de trabalho de refinamento para usar as APIs REST e Python com Azure OpenAI.
- Prepare seus dados de treinamento e validação.
- Selecione um modelo base.
- Carregue seus dados de treinamento.
- Treine o seu novo modelo personalizado.
- Verifique o estado do seu modelo personalizado.
- Implante seu modelo personalizado para uso.
- Use o seu modelo personalizado.
- Opcionalmente, analise seu modelo personalizado quanto ao desempenho e ajuste.
Prepare seus dados de treinamento e validação
Os dados de preparação e os conjuntos de dados de validação consistem em exemplos de entrada e saída de como pretende que o modelo seja executado.
Os dados de treinamento e validação que você usa devem ser formatados como um documento JSON Lines (JSONL) e devem ser formatados no formato de conversação usado pela API de conclusão de chat .
Se pretender um passo a passo para ajustar um gpt-4o-mini-2024-07-18
, consulte o tutorial de ajuste fino do Azure OpenAI.
Exemplo de formato de ficheiro
{"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 ficheiro de bate-papo de várias interacções
Vários turnos de uma conversa em uma única linha do seu arquivo de treinamento jsonl também são suportados. Para saltar o ajuste fino em mensagens específicas de assistente, adicione o par opcional de chave-valor 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 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ão do 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."}]}
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 bytes (BOM). O arquivo deve ter menos de 512 MB de tamanho.
Crie seus conjuntos de dados de treinamento e validação
Quanto mais exemplos de treinamento você tiver, melhor. Os trabalhos de ajuste fino não prosseguirã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 boa prática fornecer centenas, se não milhares, de exemplos de formação para serem bem sucedidos.
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 primeiro remover o conjunto de dados apenas para os exemplos de mais alta qualidade, poderá acabar com um modelo com um desempenho muito pior do que o esperado.
Carregue 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 ajustar seu modelo. Depois de preparar os dados de treinamento, você pode carregar seus arquivos para o serviço. Há duas maneiras de carregar dados de treinamento:
Para arquivos de dados grandes, recomendamos que você importe de um repositório de Blob do Azure. Os ficheiros grandes podem tornar-se instáveis quando carregados através de formulários com várias partes porque os pedidos são atómicos e não podem ser repetidos ou retomados. Para obter mais informações sobre o armazenamento de Blob do Azure, consulte O que é o armazenamento de Blob do Azure?
Observação
Os arquivos de dados de treinamento devem ser formatados como arquivos JSONL, codificados em UTF-8 com uma marca de ordem de bytes (BOM). O arquivo deve ter menos de 512 MB de tamanho.
Carregar dados de formação
curl -X POST $AZURE_OPENAI_ENDPOINT/openai/files?api-version=2023-12-01-preview \
-H "Content-Type: multipart/form-data" \
-H "api-key: $AZURE_OPENAI_API_KEY" \
-F "purpose=fine-tune" \
-F "file=@C:\\fine-tuning\\training_set.jsonl;type=application/json"
Carregar dados de validação
curl -X POST $AZURE_OPENAI_ENDPOINT/openai/files?api-version=2023-12-01-preview \
-H "Content-Type: multipart/form-data" \
-H "api-key: $AZURE_OPENAI_API_KEY" \
-F "purpose=fine-tune" \
-F "file=@C:\\fine-tuning\\validation_set.jsonl;type=application/json"
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 com a API REST.
Neste exemplo, também estamos passando o parâmetro "seed". A semente controla a reprodutibilidade do trabalho. Usar os mesmos parâmetros de semente e de tarefa deverá produzir os mesmos resultados, mas poderá diferir em casos raros. Se uma semente não for especificada, uma será gerada para você.
curl -X POST $AZURE_OPENAI_ENDPOINT/openai/fine_tuning/jobs?api-version=2024-10-21 \
-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
}'
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 que estão presentes sem especificar esses parâmetros.
Os hiperparâmetros suportados atualmente para ajuste fino são:
Nome | Tipo | Descrição |
---|---|---|
batch_size |
número inteiro | O tamanho do lote a ser usado para treinamento. O tamanho do lote é o número de exemplos de treinamento usados para treinar um único passe para frente e para trás. Em geral, descobrimos que lotes maiores tendem a funcionar melhor para conjuntos de dados maiores. O valor padrão, bem como o valor máximo para essa propriedade são específicos para um modelo base. Um tamanho de lote maior significa que os parâmetros do modelo são atualizados com menos frequência, mas com menor variância. |
learning_rate_multiplier |
número | O multiplicador da taxa de aprendizagem a utilizar na formação. A taxa de aprendizagem de ajuste fino é a taxa de aprendizagem original usada para pré-treinamento multiplicada por esse valor. Taxas de aprendizagem maiores tendem a ter um 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_epochs |
número inteiro | O número de épocas a serem usadas para treinar o modelo. Uma época refere-se a um ciclo completo através do conjunto de dados de formação. |
seed |
número inteiro | A semente controla a reprodutibilidade do trabalho. Fornecer os mesmos parâmetros de semente e de trabalho deve produzir os mesmos resultados, mas poderá diferir em casos raros. Se uma semente não for especificada, uma será gerada para você. |
Verifique o estado do seu modelo personalizado
Depois de iniciar um processo de ajuste fino, ele pode levar algum tempo para ser concluído. Seu trabalho pode estar na fila atrás de outros trabalhos no sistema. O treinamento do 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/fine_tuning/jobs/<YOUR-JOB-ID>?api-version=2024-10-21 \
-H "api-key: $AZURE_OPENAI_API_KEY"
Listar eventos de ajuste fino
Para examinar os eventos individuais de ajuste fino que foram gerados durante o treinamento:
curl -X POST $AZURE_OPENAI_ENDPOINT/openai/fine_tuning/jobs/{fine_tuning_job_id}/events?api-version=2024-10-21 \
-H "Content-Type: application/json" \
-H "api-key: $AZURE_OPENAI_API_KEY"
Pontos de verificação
Quando cada época de treinamento se completa, 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 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 for concluído, você terá as três versões mais recentes do modelo disponíveis para implantação. A época final será representada pelo seu modelo afinado, enquanto as duas épocas anteriores estarão disponíveis como pontos de verificação.
Você pode executar o comando list checkpoints para recuperar a lista de pontos de verificação associados a um trabalho de ajuste fino individual:
curl -X POST $AZURE_OPENAI_ENDPOINT/openai/fine_tuning/jobs/{fine_tuning_job_id}/checkpoints?api-version=2024-10-21 \
-H "Content-Type: application/json" \
-H "api-key: $AZURE_OPENAI_API_KEY"
Analise o seu modelo personalizado
O Azure OpenAI anexa um arquivo de resultado chamado results.csv a cada trabalho de ajuste fino após sua conclusão. Você pode usar o arquivo de resultados para analisar o desempenho de treinamento e validação do seu modelo personalizado. O ID do arquivo de resultado é listado para cada modelo personalizado e você pode usar a API REST para recuperar o ID do arquivo e baixar o arquivo de resultado para análise.
O exemplo Python a seguir usa a API REST para recuperar a ID do arquivo do primeiro arquivo de resultado anexado ao trabalho de ajuste fino para seu modelo personalizado e, em seguida, baixa o arquivo para seu diretório de trabalho para análise.
curl -X GET "$AZURE_OPENAI_ENDPOINT/openai/fine_tuning/jobs/<JOB_ID>?api-version=2023-12-01-preview" \
-H "api-key: $AZURE_OPENAI_API_KEY")
curl -X GET "$AZURE_OPENAI_ENDPOINT/openai/files/<RESULT_FILE_ID>/content?api-version=2023-12-01-preview" \
-H "api-key: $AZURE_OPENAI_API_KEY" > <RESULT_FILENAME>
O arquivo de resultado é um arquivo CSV que contém uma linha de cabeçalho e uma linha para cada etapa de treinamento executada pelo trabalho de ajuste fino. O arquivo de resultados contém as seguintes colunas:
Nome da coluna | Descrição |
---|---|
step |
O número da etapa de formação. Uma etapa de treinamento representa uma única passagem, para frente e para trás, em um lote de dados de treinamento. |
train_loss |
A perda para o lote de treinamento. |
train_mean_token_accuracy |
A porcentagem de tokens no lote de treinamento corretamente prevista pelo modelo. Por exemplo, se o tamanho do lote estiver definido como 3 e os seus dados contiverem completações [[1, 2], [0, 5], [4, 2]] , este valor é definido como 0,83 (5 de 6) se o modelo previu [[1, 1], [0, 5], [4, 2]] . |
valid_loss |
A perda no conjunto de validação. |
validation_mean_token_accuracy |
A porcentagem de tokens no lote de validação corretamente prevista pelo modelo. Por exemplo, se o tamanho do lote estiver definido como 3 e os seus dados contiverem completações [[1, 2], [0, 5], [4, 2]] , este valor é definido como 0,83 (5 de 6) se o modelo previu [[1, 1], [0, 5], [4, 2]] . |
full_valid_loss |
A perda de validação calculada no final de cada época. Quando o treino corre 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 de results.csv como gráficos no portal do Azure AI Foundry. Selecione o link do seu modelo treinado, onde verá três gráficos: perda, taxa média de precisão 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 a sua perda diminua ao longo do tempo e que a sua precisão aumente. Se você vir uma divergência entre seus dados de treinamento e validação, isso pode indicar que você está sobreajustando. Tente treinar com menos iterações ou com um valor menor para o multiplicador da taxa de aprendizagem.
Implantar um modelo aperfeiçoado
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 estiver a implantar para validação adicional, considere implantar para teste usando uma implantação para desenvolvedores.
Se você estiver pronto para implantar para produção ou tiver necessidades específicas de residência de dados, siga nosso guia de implantação.
variável | Definição |
---|---|
token | Há várias maneiras de gerar um token de autorização. O método mais fácil para teste inicial é iniciar o Cloud Shell a partir do portal do Azure. Em seguida, execute az account get-access-token . Você pode usar esse token como seu token de autorização temporária para testes de API. Recomendamos armazená-lo em uma nova variável de ambiente. |
subscrição | A ID de assinatura para o recurso associado do Azure OpenAI. |
grupo_de_recursos | O nome do grupo de recursos para seu recurso do Azure OpenAI. |
nome_do_recurso | O nome de recurso do Microsoft Azure OpenAI. |
Nome_de_implantação_do_modelo | O nome personalizado para a sua nova implementação de modelo ajustado. Este é o nome que será referenciado no seu código ao fazer chamadas de conclusão de chat. |
modelo ajustado | Recupere esse valor dos resultados do trabalho de ajuste fino na etapa anterior. Vai parecer gpt-4.1-2025-04-14.ft-b044a9d3cf9c4228b5d393567f693b83 . Você precisará agregar esse valor ao deploy_data json. Como alternativa, você também pode implantar um ponto de verificação, passando o ID do ponto de verificação que aparecerá 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"
}
}
}'
Saiba mais sobre a implantação entre regiões e use o modelo implantado aqui.
Ajuste contínuo de afinamento
Depois de criar um modelo ajustado, convém continuar a refiná-lo ao longo do tempo por meio de ajustes mais finos. O ajuste fino contínuo é o processo iterativo de selecionar um modelo já ajustado como 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, você usaria o mesmo processo descrito em Criar um modelo personalizado, mas em vez de especificar o nome de um modelo base genérico, você especificaria a ID do modelo já ajustado. O ID do modelo ajustado tem a seguinte aparência gpt-4.1-2025-04-14.ft-5fd1918ee65d4cd38a5dcf6835066ed7
curl -X POST $AZURE_OPENAI_ENDPOINT/openai/fine_tuning/jobs?api-version=2023-12-01-preview \
-H "Content-Type: application/json" \
-H "api-key: $AZURE_OPENAI_API_KEY" \
-d '{
"model": "gpt-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 incluir o suffix
parâmetro para facilitar a distinção entre diferentes iterações do seu modelo ajustado.
suffix
usa uma cadeia de caracteres e é definido para identificar o modelo ajustado. O sufixo pode conter até 40 caracteres (a-z, A-Z, 0-9,- e _) que serão adicionados ao seu nome de modelo ajustado.
Se você não tiver certeza da ID do seu modelo ajustado, essas informações podem ser encontradas na página Modelos do Azure AI Foundry ou você pode gerar uma lista de modelos para um determinado recurso do Azure OpenAI usando a API REST.
Limpe suas implantações, modelos personalizados e arquivos de treinamento
Quando terminar de usar seu modelo personalizado, você poderá excluir a implantação e o modelo. Você também pode excluir os arquivos de treinamento e validação que carregou para o serviço, se necessário.
Exclua a sua implementação de modelo
Você pode usar vários métodos para excluir a implantação para seu modelo personalizado:
Excluir seu modelo personalizado
Da mesma forma, você pode usar vários métodos para excluir seu modelo personalizado:
Observação
Não é possível excluir um modelo personalizado se ele tiver uma implantação existente. Você deve primeiro eliminar a implementação do modelo antes de eliminar 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 do Azure OpenAI. Você pode usar os seguintes métodos para excluir seus arquivos de treinamento, validação e resultados:
Próximos passos
- Explore as capacidades de ajuste fino no tutorial de ajuste fino do Azure OpenAI.
- Revisar a afinação da disponibilidade regional do modelo
- Saiba mais sobre as cotas do Azure OpenAI