Nota
O acesso a esta página requer autorização. Podes tentar iniciar sessão ou mudar de diretório.
O acesso a esta página requer autorização. Podes tentar mudar de diretório.
Aprenda a afinar modelos no Microsoft Foundry para os seus conjuntos de dados e casos de uso. O ajuste fino permite:
- Resultados de melhor qualidade do que o que se pode obter só com engenharia rápida.
- A capacidade de treinar com mais exemplos do que aquilo que cabe no limite de contexto de pedido de um modelo.
- Poupança de tokens devido a prompts mais curtos.
- Pedidos de menor latência, especialmente quando utilizas modelos mais pequenos.
Em contraste com a aprendizagem por poucos disparos, o ajuste fino melhora o modelo ao treinar com mais exemplos do que aquilo que cabe num prompt. Como os pesos adaptam-se à sua tarefa, inclui menos exemplos ou instruções. A inclusão de menos elementos reduz o número de tokens por chamada e potencialmente diminui o custo e a latência.
Usamos adaptação de baixo nível (LoRA) para ajustar modelos de forma a reduzir a sua complexidade sem afetar significativamente o seu desempenho. Este método funciona aproximando a matriz original de alta classificação com uma de ordem inferior. Afinar um subconjunto mais pequeno de parâmetros importantes durante a fase de treino supervisionado torna o modelo mais gerível e eficiente. Para os utilizadores, também torna o treino mais rápido e acessível do que outras técnicas.
Neste artigo, você aprenderá a:
- Escolha conjuntos de dados e formatos apropriados para ajustes finos.
- Inicie um trabalho de ajuste fino, monitorize o estado e obtenha resultados.
- Implante e avalie um modelo ajustado.
- Itere com base no feedback da avaliação.
Pré-requisitos
- Leia o guia sobre quando usar o ajuste fino da Foundry.
- Precisa de uma subscrição do Azure. Crie um gratuitamente.
- Precisas de um recurso para projetos Foundry. Para criar uma, inicie sessão no portal da Foundry.
- O ajuste fino do acesso requer a função "Azure AI User".
- Se ainda não tiver acesso para ver quotas e implementar modelos no portal Foundry, precisa de mais permissões.
Modelos suportados
Para verificar quais as regiões que atualmente suportam ajuste fino, consulte o artigo sobre modelos.
Ou pode afinar finamente um modelo previamente ajustado, formatado como base-model.ft-{jobid}.
Prepare os seus dados
Os seus conjuntos de dados de treino e validação consistem em exemplos de entrada e saída sobre como deseja que o modelo funcione.
Os dados de treino e validação que utiliza devem ser formatados como um documento de Linhas JSON (JSONL). Deve também ser formatado no formato conversacional que a API de Conversas Completas utiliza.
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). Cada ficheiro deve ter menos de 512 MB.
Recomendamos que utilize as instruções e prompts que considerou que funcionaram melhor em todos os exemplos de treino. Esta abordagem ajuda-o a obter os melhores resultados, especialmente se tiver menos de cem exemplos.
Se não tiver um conjunto de dados já preparado, pode usar as capacidades de geração de dados para criar um novo.
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 de múltiplas voltas
Também são suportados múltiplos turnos de uma conversa numa única linha do seu ficheiro de treino JSONL. Para ignorar ajustes finos em 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 biggest city in France?"}, {"role": "assistant", "content": "Paris", "weight": 0}, {"role": "user", "content": "Can you be more sarcastic?"}, {"role": "assistant", "content": "Paris, as if everyone doesn't know that already.", "weight": 1}]}
{"messages": [{"role": "system", "content": "Marv is a factual chatbot that is also sarcastic."}, {"role": "user", "content": "Who wrote 'Romeo and Juliet'?"}, {"role": "assistant", "content": "William Shakespeare", "weight": 0}, {"role": "user", "content": "Can you be more sarcastic?"}, {"role": "assistant", "content": "Oh, just some guy named William Shakespeare. Ever heard of him?", "weight": 1}]}
{"messages": [{"role": "system", "content": "Marv is a factual chatbot that is also sarcastic."}, {"role": "user", "content": "How far is the Moon from Earth?"}, {"role": "assistant", "content": "384,400 kilometers", "weight": 0}, {"role": "user", "content": "Can you be more sarcastic?"}, {"role": "assistant", "content": "Around 384,400 kilometers. Give or take a few, like that really matters.", "weight": 1}]}
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."}]}
Considerações sobre o tamanho do conjunto de dados
Quanto mais exemplos de treinamento você tiver, melhor. Os trabalhos de ajuste fino não avançam sem pelo menos 10 exemplos de treino, mas um número tão pequeno não é suficiente para influenciar de forma notória as respostas do modelo. Uma boa prática para um ajuste fino bem-sucedido é fornecer centenas, senão milhares, de exemplos de treino. Recomendamos que 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 treinar o modelo com uma grande quantidade de dados internos sem primeiro podar o conjunto de dados apenas para os exemplos de maior qualidade, o seu modelo pode ter um desempenho pior do que o esperado.
Crie o seu modelo finamente ajustado
Para afinar um modelo num projeto Foundry existente, siga estes passos:
Inicie sessão no Foundry e selecione o seu projeto. Se você ainda não tem um projeto, primeiro crie um projeto.
Vai à página Build>Fine-tune e depois seleciona o botão Fine-tune no canto superior direito.
Agora você deve ver a experiência Ajustar um modelo para criar um novo trabalho de ajuste fino. Use as secções seguintes para ajudar na configuração do trabalho e depois selecione Enviar para começar a treinar o seu novo modelo afinado.
Seleção do modelo de base
A região do projeto pode limitar os modelos disponíveis. A sua escolha de modelo influencia tanto o desempenho como o custo do seu modelo.
Também pode selecionar um modelo previamente ajustado.
Método de personalização
Os métodos de personalização suportados dependem do modelo selecionado:
Ajuste fino supervisionado (SFT): Treina o modelo em pares de entrada/saída rotulados. Ideal para a maioria dos cenários, incluindo especialização de tarefas.
Otimização direta de preferências (DPO): Alinha o modelo com as respostas preferidas pelo humano. Ideal para melhorar a qualidade da resposta.
Ajuste fino de reforço (RFT): Utiliza sinais de recompensa dos avaliadores de modelos para otimizar comportamentos complexos.
Observação
O resto deste artigo aborda os passos para o método SFT. Para instruções específicas para outros métodos de personalização, consulte o guia para DPO e o guia para RFT.
Tipo de formação
Selecione o nível de formação com base no seu caso de uso e orçamento:
Padrão: A formação ocorre na região do recurso atual da Foundry e fornece garantias para a residência de dados. Ideal para cargas de trabalho em que os dados devem permanecer em uma região específica.
Global: Oferece preços mais acessíveis em comparação com o Standard, utilizando capacidade para além da sua região atual. Os dados e pesos são copiados para a região onde ocorre o treinamento. Ideal se a residência de dados não for uma restrição e você quiser tempos de fila mais rápidos.
Developer (versão prévia): Proporciona economias significativas de custos ao utilizar capacidade ociosa para treino. Não há garantias de latência ou SLA, por isso os empregos neste nível podem ser automaticamente preemptados e retomados mais tarde. Não há garantias para a localização dos dados. Ideal para experimentação e cargas de trabalho sensíveis ao preço.
Dados de formação e validação
Se tiver conjuntos de dados existentes no projeto Foundry, selecione Conjunto de dados existente para Fonte de dados e depois selecione o seu conjunto de dados.
Para carregar conjuntos de dados recém-preparados, selecione Carregar novo conjunto de dados para Data Source e depois carregue o seu ficheiro JSONL.
Depois de selecionar ou carregar os seus ficheiros de dados, são feitas verificações automáticas de validação para confirmar que os ficheiros estão formatados como JSONL, codificados em UTF-8 com um BOM, e têm menos de 512 MB de tamanho.
Parâmetros opcionais
Sufixo
Recomendamos que forneça um valor Sufixo para facilitar a distinção entre diferentes iterações do seu modelo ajustado. Um sufixo é aplicado a uma sequência de até 18 caracteres e é usado para nomear o modelo ajustado com precisão resultante.
Seed
Uma semente controla a reprodutibilidade do trabalho. Passar os mesmos parâmetros de inicialização e de tarefa devem produzir os mesmos resultados sem que haja diferença, mas isso pode variar em casos raros. Se não especificares uma semente, uma é gerada aleatoriamente para ti.
Hiperparâmetros
Podes configurar manualmente os hiperparâmetros para o teu trabalho de ajuste fino ou deixá-los como predefinidos.
Os seguintes hiperparâmetros estão disponíveis:
| 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 e 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. Quando o valor é definido para -1, o tamanho do lote é calculado como 0,2% de exemplos no conjunto de treino. O máximo é 256. |
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 o pré-treino, multiplicada por este valor. Taxas de aprendizagem maiores tendem a ter um 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 |
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. Se o valor for definido para -1, o número de épocas é determinado dinamicamente com base nos dados de entrada. |
Implementação automática
[!IMPORTANTE] Para a implementação automática, precisas-te de ser atribuído à função
Azure AI ownerou qualquer função com a ação 'Microsoft.CognitiveServices/accounts/deployments/write".
Para poupar tempo, pode ativar a implementação automática do modelo resultante. Se o treino terminar com sucesso, o modelo é implementado de acordo com o tipo de implementação selecionado. O nome da implementação baseia-se no nome único gerado para o seu modelo personalizado e no sufixo opcional que poderá ter fornecido anteriormente.
A implementação automática é suportada apenas para modelos OpenAI.
Monitorizar e analisar os resultados
Depois de submeteres o teu trabalho de ajuste fino, uma visualização em tabela lista todas as submissões de trabalhos de ajuste fino. Para ver mais informações sobre os resultados individuais, abra a página de detalhes do emprego .
Seu trabalho pode estar na fila atrás de outros trabalhos no sistema. Treinar o seu modelo pode demorar minutos a horas, dependendo do modelo e do tamanho do conjunto de dados.
Metrics
Pode monitorizar as seguintes métricas acedendo à secção Monitor:
train_loss: A perda para o grupo de treino. Cada etapa de treinamento no eixo x representa uma única passagem, para frente e para trás, em um lote de dados de treinamento.full_valid_loss: A perda de validação calculada no final de cada época. Quando o treino corre bem, a perda deve diminuir.train_mean_token_accuracy: A porcentagem de tokens no lote de treino que o modelo previu corretamente.Por exemplo, se o tamanho do lote estiver definido como
3e os seus dados conterem completações[[1, 2], [0, 5], [4, 2]], este valor é definido para0.83(5 de 6) se o modelo previu[[1, 1], [0, 5], [4, 2]].full_valid_mean_token_accuracy: A precisão média válida dos tokens calculada no final de cada época. Quando o treinamento está indo bem, a precisão do token deve aumentar.
Procure que a sua perda diminua ao longo do tempo e que a sua precisão aumente. Se os seus dados de treino e validação divergirem, pode estar a ocorrer sobreajuste. Tenta treinar com menos épocas ou com um multiplicador de taxa de aprendizagem mais pequeno.
Pontos de verificação
Quando cada época de treino termina, é gerado um ponto de controlo. Podes ver os pontos de controlo acedendo ao separador Pontos de Controlo.
Um checkpoint é uma versão totalmente funcional de um modelo que pode ser tanto implementada como usada como modelo-alvo para trabalhos subsequentes de ajuste fino. Os checkpoints podem ser particularmente úteis, pois podem fornecer instantâneos antes do overfitting. Quando um trabalho de afinação termina, tens as três versões mais recentes do modelo disponíveis para implementar. Pode copiar checkpoints entre recursos e subscrições usando a API REST.
Observação
Durante a formação, pode visualizar as métricas e pausar o trabalho conforme necessário. Pausar pode ser útil se as métricas não convergirem ou se sentires que o modelo não está a aprender ao ritmo certo. Quando você pausa uma tarefa de treino, um checkpoint implantável é criado após a conclusão das avaliações de segurança. Este checkpoint está disponível para implementares e usares para inferência, ou podes retomar o trabalho para o concluir.
A operação de pausa é aplicável apenas a tarefas que tenham sido treinadas por pelo menos uma etapa e que estejam em estado de execução. A pausa é suportada apenas para modelos OpenAI.
Implantar o modelo aperfeiçoado
[!IMPORTANTE] Para implementar modelos, precisa de ser designado como
Azure AI ownerfunção ou qualquer função com a ação `Microsoft.CognitiveServices/contas/implementações/escrever".
Quando estiver satisfeito com as métricas do seu trabalho de ajuste fino, pode implementar o modelo selecionando o botão Implementar na página de detalhes e depois configurando as definições de implementação.
Para mais informações, consulte o guia de ajuste fino de implantação.
Usar um modelo aperfeiçoado em produção
Depois de implementares o teu modelo afinado, podes usá-lo como qualquer outro modelo implementado. Podes usar o playground no Foundry para experimentar a tua nova implementaçã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 usas para guiar o teu modelo afinado (quer esteja implementado ou disponível para testes no playground) deve ser a mesma da mensagem do sistema que usaste para o treino. Se você usar uma mensagem de sistema diferente, o modelo pode não ter o desempenho esperado.
Realizar ajustes finos contínuos
Depois de criar um modelo afinado, pode querer continuar a refinar o modelo ao longo do tempo através de mais ajustes 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 realizar o ajuste fino num modelo que já ajustou finamente, utiliza-se o mesmo processo descrito em Criar o seu modelo finamente ajustado. Mas em vez de especificar o nome de um modelo base genérico, especifica o seu modelo já afinado. Um modelo personalizado afinado parece-se com gpt-4o-2024-08-06.ft-d93dda6110004b4da3472d96f4dd4777-ft.
O ajuste fino contínuo é suportado apenas para modelos OpenAI.
Limpe os seus recursos
Quando deixar de precisar do seu modelo afinado, pode eliminar a implementação e o modelo. Também pode apagar os ficheiros de treino e validação que carregou para o serviço, se necessário.
Exclua sua implantação de modelo ajustado
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 implementação de um modelo personalizado está inativa se o modelo foi implementado há mais de 15 dias e não foram feitas chamadas de chat ou respostas à API durante um período contínuo de 15 dias.
A eliminação de uma implementação inativa não apaga nem afeta o modelo personalizado subjacente. O modelo personalizado pode ser redistribuído a qualquer momento.
Como descrito no Azure OpenAI na definição de preços do Microsoft Foundry Models, cada modelo personalizado (ajustado finamente) implementado implica um custo horário de alojamento, independentemente de serem feitas chamadas de chat ou de API de resposta ao modelo. Para saber mais sobre planeamento e gestão de custos com Azure OpenAI, consulte Planear e gerir custos para Azure OpenAI.
Pode eliminar a implementação do seu modelo ajustado na página de Modelos de Construção> no portal Foundry.
Excluir o seu modelo aperfeiçoado
Pode apagar um modelo afinado na página de Ajuste Fino no portal da Foundry. Seleciona o modelo afinado para eliminar e depois seleciona Eliminar.
Observação
Não é possível excluir um modelo ajustado se ele tiver uma implantação existente. Deve eliminar a implementação do seu modelo antes de poder eliminar o modelo finamente ajustado.
Pré-requisitos
- Leia o guia sobre quando usar o ajuste fino do Azure OpenAI.
- Precisa de uma subscrição do Azure. Crie um gratuitamente.
- Precisas de um recurso Azure OpenAI. Para obter mais informações, consulte Criar um recurso e implantar um modelo com o Azure OpenAI.
- Precisa das seguintes bibliotecas Python:
os,json,requests,openai. - Precisas da biblioteca Python da OpenAI.
- O ajuste fino do acesso requer a função "Azure AI User".
- Se ainda não tiver acesso para ver quotas e implementar modelos no portal Foundry, precisa de mais permissões.
Modelos suportados
Para verificar quais as regiões que atualmente suportam ajuste fino, consulte o artigo sobre modelos.
Ou pode afinar finamente 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 seus conjuntos de dados de treino e validação consistem em exemplos de entrada e saída sobre como deseja que o modelo funcione.
Os dados de treino e validação que utiliza devem ser formatados como um documento de Linhas JSON (JSONL). Deve também ser formatado no formato conversacional que a API de Conversas Completas utiliza.
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). Cada ficheiro deve ter menos de 512 MB.
Se quiseres um guia passo a passo do ajuste fino gpt-4o-mini-2024-07-18, consulta 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 chat de múltiplas voltas
Também são suportados múltiplos turnos de uma conversa numa única linha do seu ficheiro de treino JSONL. Para ignorar ajustes finos em 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 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."}]}
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 avançam sem pelo menos 10 exemplos de treino, mas um número tão pequeno não é suficiente para influenciar de forma notória as respostas do modelo. Uma boa prática para um ajuste fino bem-sucedido é fornecer centenas, senão milhares, de exemplos de treino.
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 com uma grande quantidade de dados internos sem primeiro podar o conjunto de dados apenas para os exemplos de maior qualidade, o seu modelo pode ter um desempenho pior do que o esperado.
Carregue seus dados de treinamento
O passo seguinte é escolher os dados de treino preparados existentes ou carregar novos dados preparados para usar quando estiver a personalizar o 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 ficheiros de dados grandes, recomendamos que importe a partir do Blob Storage. Ficheiros grandes podem tornar-se instáveis quando são carregados através de formulários multipartes porque os pedidos são atómicos e não podem ser repetidos ou continuados. Para mais informações sobre Blob Storage, consulte O que é Azure Blob Storage?.
O exemplo seguinte em Python carrega ficheiros de treino e validação locais usando o SDK Python e recupera os IDs dos ficheiros devolvidos:
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 seguinte 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))
Observação
Recomendamos o uso do nível Global Standard para o tipo de formação, pois oferece poupanças de custos e utiliza a capacidade global para tempos de fila mais rápidos. No entanto, copia dados e pesos fora da região atual de recursos. Se a residência de dados for um requisito, utilize um modelo que suporte formação de nível Standard.
Também pode passar parâmetros opcionais adicionais, como hiperparâmetros, para obter maior controlo do processo de afinação. Para o treino inicial, recomendamos usar os valores automáticos que estão presentes sem especificar esses parâmetros.
Os hiperparâmetros atualmente suportados para ajuste fino supervisionado 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 e 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 o pré-treino, multiplicada por este valor. Taxas de aprendizagem maiores tendem a ter um 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 |
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 que controla a reprodutibilidade do trabalho. Passar os mesmos parâmetros de inicialização e de tarefa devem produzir os mesmos resultados sem que haja diferença, mas isso pode variar em casos raros. Se não especificares uma semente, é gerada uma para ti. |
Para definir hiperparâmetros personalizados com a versão 1.x da API Python do OpenAI, forneça-os como parte de 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 sobre os hiperparâmetros suportados para os outros métodos de personalização, consulte o guia para otimização direta de preferências e o guia para ajuste fino de reforços.
Tipo de formação
Selecione o nível de formação com base no seu caso de uso e orçamento:
Padrão: A formação ocorre na região do recurso atual da Foundry e fornece garantias para a residência de dados. Ideal para cargas de trabalho em que os dados devem permanecer em uma região específica.
Global: Oferece preços mais acessíveis em comparação com o Standard, utilizando capacidade para além da sua região atual. Os dados e pesos são copiados para a região onde ocorre o treinamento. Ideal se a residência de dados não for uma restrição e você quiser tempos de fila mais rápidos.
Developer (versão prévia): Proporciona economias significativas de custos ao utilizar capacidade ociosa para treino. Não há garantias de latência ou SLA, por isso os empregos neste nível podem ser automaticamente preemptados e retomados mais tarde. Não há garantias para a localização dos 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 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 individuais de ajuste fino gerados durante o treino, execute o seguinte comando. Antes de executar o comando, pode ser necessário atualizar a biblioteca cliente 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 treino gera um ponto de controlo. Um checkpoint é uma versão totalmente funcional de um modelo que pode ser tanto implementada como usada como modelo-alvo para trabalhos subsequentes de ajuste fino. Os checkpoints podem ser particularmente úteis, pois podem fornecer instantâneos antes do overfitting.
Quando um trabalho de afinação termina, tens as três versões mais recentes do modelo disponíveis para implementar. O seu modelo afinado representa a época final. As duas épocas anteriores estão disponíveis como pontos de controlo.
Pode executar o comando seguinte para recuperar a lista de pontos de verificação associados a um trabalho individual de ajuste fino. Antes de executar o comando, pode ser necessário atualizar a biblioteca cliente 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))
Analise o seu modelo personalizado
O Azure OpenAI anexa um ficheiro de resultado nomeado results.csv a cada trabalho de ajuste fino após a 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 ficheiro do resultado está listado para cada modelo personalizado. Pode usar o SDK Python para recuperar o ID do ficheiro e descarregar o ficheiro de resultado para análise.
O exemplo seguinte em Python recupera o ID do ficheiro do primeiro resultado anexado ao trabalho de afinação do seu modelo personalizado. Depois, utiliza o SDK em Python para descarregar o ficheiro para o 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 ficheiro de resultados é um ficheiro CSV que contém uma linha de cabeçalho e uma linha para cada passo de treino realizado 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 percentagem de tokens do lote de treino que o modelo previu corretamente. Por exemplo, se o tamanho do lote estiver definido como 3 e os seus dados conterem completações [[1, 2], [0, 5], [4, 2]], este valor é definido para 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 percentagem de tokens no lote de validação que o modelo previu corretamente. Por exemplo, se o tamanho do lote estiver definido como 3 e os seus dados conterem completações [[1, 2], [0, 5], [4, 2]], este valor é definido para 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. |
Também pode visualizar os dados no seu results.csv ficheiro como gráficos no portal Microsoft Foundry. Ao selecionar o link para o seu modelo treinado, aparecem três gráficos: perda, média de precisão por token e precisão do token. Se forneceu dados de validação, ambos os conjuntos de dados aparecem no mesmo gráfico.
Procure que a sua perda diminua ao longo do tempo e que a sua precisão aumente. Se os seus dados de treino e validação divergirem, pode estar a ocorrer sobreajuste. Tenta treinar com menos épocas ou com um multiplicador de taxa de aprendizagem mais pequeno.
Implantar um modelo aperfeiçoado
Quando estiver satisfeito com as métricas do seu trabalho de ajuste fino, ou simplesmente quiser avançar para inferência, deve implementar o modelo.
Se estiveres a implementar para validação adicional, considera implementar para testes usando uma implementação Developer.
Ao contrário dos comandos anteriores do SDK, deve usar a API do plano de controlo para a implementação. Esta tarefa requer autorização separada, um caminho de API diferente e uma versão diferente da API.
| Variable | 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 testes iniciais é abrir o Azure Cloud Shell a partir 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 testes de API. Recomendamos armazenar este token numa nova variável de ambiente. |
subscription |
A ID de assinatura para o recurso associado do Azure OpenAI. |
resource_group |
O nome do grupo de recursos para seu recurso do Azure OpenAI. |
resource_name |
O nome de recurso do Microsoft Azure OpenAI. |
model_deployment_name |
O nome personalizado para a sua nova implementação de modelo ajustado. Este nome é referido no seu código durante as chamadas de conclusão do chat. |
fine_tuned_model |
O teu modelo afinado. Recupere esse valor dos resultados do trabalho de ajuste fino na etapa anterior. É semelhante a gpt-4.1-2025-04-14.ft-b044a9d3cf9c4228b5d393567f693b83. Tens de acrescentar valor ao deploy_data JSON. Alternativamente, pode implementar um ponto de controlo passando pelo ID do ponto de controlo, 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 aprender sobre a implementação multi-região e como usar o modelo implementado, consulte: O seu modelo ajustado com precisão implementado.
Se estiver pronto para implementar para produção ou tiver necessidades específicas de residência de dados, siga o guia de implementação.
Realizar ajustes finos contínuos
Depois de criar um modelo afinado, pode querer continuar a refinar o modelo ao longo do tempo através de mais ajustes 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. O ajuste fino contínuo é suportado apenas para modelos OpenAI.
Para realizar o ajuste fino de um modelo que já afinou anteriormente, utiliza-se o mesmo processo descrito em Criar um modelo personalizado. Mas em vez de especificar o nome de um modelo base genérico, especifica o ID do seu modelo finamente ajustado. O ID do modelo afinado parece 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))
Recomendamos também que inclua o suffix parâmetro para distinguir mais facilmente as iterações do seu modelo ajustado. O suffix parâmetro assume uma cadeia e é definido para identificar o modelo finamente ajustado. Com a API Python da OpenAI, pode adicionar uma cadeia de até 18 caracteres ao nome do seu modelo afinado.
Se não tiver a certeza do ID do seu modelo ajustado existente, pode encontrar esta informação na página Modelos do Microsoft Foundry. Ou pode gerar uma lista de modelos para um recurso Azure OpenAI usando a API REST.
Limpe suas implantações, modelos personalizados e arquivos de treinamento
Quando deixar de precisar do seu modelo personalizado, pode apagar a implementação e o modelo. Também pode apagar os ficheiros de treino 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 15 dias, a implantação será excluída. A implementação de um modelo personalizado está inativa se o modelo foi implementado há mais de 15 dias e não foram feitas chamadas de chat ou respostas à API durante um período contínuo de 15 dias.
A eliminação de uma implementação inativa não apaga nem afeta o modelo personalizado subjacente. O modelo personalizado pode ser redistribuído a qualquer momento.
Como descrito no Azure OpenAI na definição de preços do Microsoft Foundry Models, cada modelo personalizado (ajustado finamente) implementado implica um custo horário de alojamento, independentemente de serem feitas chamadas de chat ou de API de resposta ao modelo. Para saber mais sobre planeamento e gestão de custos com Azure OpenAI, consulte Planear e gerir custos para Azure OpenAI.
Pode usar qualquer um destes métodos para eliminar a implementação do seu modelo personalizado:
- Fundição
- Azure CLI
Excluir seu modelo personalizado
Pode eliminar o seu modelo personalizado usando o Foundry.
Observação
Não é possível excluir um modelo personalizado se ele tiver uma implantação existente. Deve eliminar a implementação do seu modelo antes de poder eliminar o seu 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:
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 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 ajuste fino do Azure OpenAI.
- Precisa de uma subscrição do Azure. Crie um gratuitamente.
- Precisas de um recurso Azure OpenAI. Para obter mais informações, consulte Criar um recurso e implantar um modelo com o Azure OpenAI.
- O ajuste fino do acesso requer a função "Azure AI User".
- Se ainda não tiver acesso para ver quotas e implementar modelos no portal Foundry, precisa de mais permissões.
Modelos suportados
Para verificar quais as regiões que atualmente suportam ajuste fino, consulte o artigo sobre modelos.
Ou pode afinar finamente um modelo previamente ajustado, formatado como base-model.ft-{jobid}.
Revisar o fluxo de trabalho para a API REST
Tire um momento para rever o fluxo de trabalho de afinação para a utilização da API REST e do Python no 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 seus conjuntos de dados de treino e validação consistem em exemplos de entrada e saída sobre como deseja que o modelo funcione.
Os dados de treino e validação que utiliza devem ser formatados como um documento de Linhas JSON (JSONL). Deve também ser formatado no formato conversacional que a API de Conversas Completas utiliza.
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). Cada ficheiro deve ter menos de 512 MB.
Se quiseres um guia passo a passo do ajuste fino gpt-4o-mini-2024-07-18, consulta 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 chat de múltiplas voltas
Também são suportados múltiplos turnos de uma conversa numa única linha do seu ficheiro de treino JSONL. Para ignorar ajustes finos em 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 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."}]}
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 avançam sem pelo menos 10 exemplos de treino, mas um número tão pequeno não é suficiente para influenciar de forma notória as respostas do modelo. Uma boa prática para um ajuste fino bem-sucedido é fornecer centenas, senão milhares, de exemplos de treino.
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 com uma grande quantidade de dados internos sem primeiro podar o conjunto de dados apenas para os exemplos de maior qualidade, o seu modelo pode ter um desempenho pior do que o esperado.
Carregue seus dados de treinamento
O passo seguinte é escolher os dados de treino preparados existentes ou carregar novos dados preparados para usar quando estiver a personalizar o 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 ficheiros de dados grandes, recomendamos que importe a partir do Blob Storage. Ficheiros grandes podem tornar-se instáveis quando são carregados através de formulários multipartes porque os pedidos são atómicos e não podem ser repetidos ou continuados. Para mais informações sobre Blob Storage, consulte O que é Azure Blob Storage?.
Carregar dados de formaçã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\\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 seguinte mostra um exemplo de como criar um novo trabalho de ajuste fino usando a API REST.
Este exemplo inclui a passagem do parâmetro "seed". A semente controla a reprodutibilidade do trabalho. Passar os mesmos parâmetros de inicialização e de tarefa devem produzir os mesmos resultados sem que haja diferença, mas isso pode variar em casos raros. Se não especificares uma semente, é gerada uma para ti.
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 estiver a afinar um modelo que suporta treino global, pode especificar o tipo de treino usando o argumento extra_body 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 treino inicial, recomendamos usar os valores automáticos que estão presentes sem especificar esses parâmetros.
Os hiperparâmetros atualmente suportados para ajuste fino supervisionado 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 e 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 o pré-treino, multiplicada por este valor. Taxas de aprendizagem maiores tendem a ter um 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 |
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 que controla a reprodutibilidade do trabalho. |
Para saber sobre os hiperparâmetros suportados para os outros métodos de personalização, consulte o guia para otimização direta de preferências e o guia para ajuste fino de reforços.
Selecione um tipo de treino
Selecione o nível de formação com base no seu caso de uso e orçamento:
Padrão: A formação ocorre na região do recurso atual da Foundry e fornece garantias para a residência de dados. Ideal para cargas de trabalho em que os dados devem permanecer em uma região específica.
Global: Oferece preços mais acessíveis em comparação com o Standard, utilizando capacidade para além da sua região atual. Os dados e pesos são copiados para a região onde ocorre o treinamento. Ideal se a residência de dados não for uma restrição e você quiser tempos de fila mais rápidos.
Developer (versão prévia): Proporciona economias significativas de custos ao utilizar capacidade ociosa para treino. Não há garantias de latência ou SLA, por isso os empregos neste nível podem ser automaticamente preemptados e retomados mais tarde. Também não há garantias de residência de dados. 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"}"
Verifique o estado do seu modelo personalizado
Depois de começar um trabalho de afinação, pode demorar algum tempo a terminar. Seu trabalho pode estar na fila atrás de outros trabalhos no sistema. Treinar o seu modelo pode demorar minutos ou horas, dependendo do modelo e do tamanho 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 o seu trabalho usando o ID do trabalho devolvido 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 individuais de ajuste fino 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 treino gera um ponto de controlo. Um checkpoint é uma versão totalmente funcional de um modelo que pode ser tanto implementada como usada como modelo-alvo para trabalhos subsequentes de ajuste fino. Os checkpoints podem ser particularmente úteis, pois podem fornecer instantâneos antes do overfitting.
Quando um trabalho de afinação termina, tens as três versões mais recentes do modelo disponíveis para implementar. O seu modelo afinado representa a época final. As duas épocas anteriores estão disponíveis como pontos de controlo.
Pode executar o seguinte comando para recuperar a lista de checkpoints associados a um trabalho individual de ajuste fino:
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"
Colocar em pausa e retomar
Durante a formação, pode ver os registos e métricas e pausar o trabalho conforme necessário. Pausar pode ser útil se as métricas não convergirem ou se sentires que o modelo não está a aprender ao ritmo certo.
Após a pausa do trabalho de formação e a conclusão das avaliações de segurança, é criado um ponto de controlo implantável. Este checkpoint está disponível para implementares e usares para inferência, ou podes retomar o trabalho para o concluir.
A operação de pausa é aplicável apenas a tarefas que tenham sido treinadas por pelo menos uma etapa e que estejam em estado de 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"
Resumo
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 (pré-visualização)
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 utiliza APIs dedicadas para ajudar a garantir transferências eficientes e seguras. Atualmente, esse recurso está disponível apenas com a API e não através do portal do Foundry.
Depois de o modelo ser copiado da região A para a região B, pode afinar continuamente o modelo na região B e implantá-lo a partir dessa localização.
Observação
A eliminação do ponto de verificação do modelo na região de origem não faz com que o modelo seja eliminado na região de destino. Para eliminar o modelo em ambas as regiões depois de ser copiado, tens de implantar o modelo separadamente em cada região.
Pré-requisitos
- O recurso de destino ou a conta deve ter pelo menos uma tarefa de ajuste fino.
- O recurso de destino ou a conta não devem desativar o acesso à rede pública (pelo menos enquanto envia o pedido de cópia).
- Só pode copiar para a conta de destino, se a conta que inicia a cópia tiver permissões suficientes para aceder à conta de destino.
Configurar permissões
- Crie uma identidade gerenciada atribuída pelo usuário.
- Dê a função Azure AI User à identidade gerida atribuída a utilizador no seu recurso de destino ou conta.
- 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 esta é uma operação de longa duração, verifique o estado da cópia do modelo ajustada fornecendo o ID do checkpoint da conta de origem usada na POST chamada.
Verifica o estado 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'
Observação
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 o mesmo nome para ajustes finos, implementaçã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.
Analise o seu modelo personalizado
O Azure OpenAI anexa um ficheiro de resultado nomeado results.csv a cada trabalho de ajuste fino após a 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 ficheiro do resultado está listado para cada modelo personalizado. Pode usar a API REST para recuperar o ID do ficheiro e descarregar o ficheiro de resultados para análise.
O exemplo seguinte em Python utiliza a API REST para recuperar o ID do ficheiro do primeiro resultado associado ao trabalho de ajuste fino para o seu modelo personalizado. Depois, descarrega o ficheiro para o seu 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 ficheiro de resultados é um ficheiro CSV que contém uma linha de cabeçalho e uma linha para cada passo de treino realizado 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 percentagem de tokens do lote de treino que o modelo previu corretamente. Por exemplo, se o tamanho do lote estiver definido como 3 e os seus dados conterem completações [[1, 2], [0, 5], [4, 2]], este valor é definido para 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 percentagem de tokens no lote de validação que o modelo previu corretamente. Por exemplo, se o tamanho do lote estiver definido como 3 e os seus dados conterem completações [[1, 2], [0, 5], [4, 2]], este valor é definido para 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. |
Também pode visualizar os dados no seu results.csv ficheiro como gráficos no portal Foundry. Ao selecionar o link para o seu modelo treinado, aparecem três gráficos: perda, média de precisão por token e precisão do token. Se forneceu dados de validação, ambos os conjuntos de dados aparecem no mesmo gráfico.
Procure que a sua perda diminua ao longo do tempo e que a sua precisão aumente. Se os seus dados de treino e validação divergirem, pode estar a ocorrer sobreajuste. Tenta treinar com menos épocas ou com um multiplicador de taxa de aprendizagem mais pequeno.
Implantar um modelo aperfeiçoado
Quando estiver satisfeito com as métricas do seu trabalho de ajuste fino, ou simplesmente quiser avançar para inferência, deve implementar o modelo.
Se estiveres a implementar para validação adicional, considera implementar para testes usando uma implementação Developer.
Se estiver pronto para implementar para produção ou tiver necessidades específicas de residência de dados, siga o guia de implementação.
| Variable | 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 testes iniciais é abrir o Azure Cloud Shell a partir 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 testes de API. Recomendamos armazenar este token numa nova variável de ambiente. |
subscription |
A ID de assinatura para o recurso associado do Azure OpenAI. |
resource_group |
O nome do grupo de recursos para seu recurso do Azure OpenAI. |
resource_name |
O nome de recurso do Microsoft Azure OpenAI. |
model_deployment_name |
O nome personalizado para a sua nova implementação de modelo ajustado. Este nome é referido no seu código durante as chamadas de conclusão do chat. |
fine_tuned_model |
O teu modelo afinado. Recupere esse valor dos resultados do trabalho de ajuste fino na etapa anterior. É semelhante a gpt-4.1-2025-04-14.ft-b044a9d3cf9c4228b5d393567f693b83. Tens de acrescentar valor ao deploy_data JSON. Alternativamente, pode implementar um ponto de controlo passando pelo ID do ponto de controlo, 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 aprender sobre a implementação multi-região e como usar o modelo implementado, consulte: O seu modelo ajustado com precisão implementado.
Realizar ajustes finos contínuos
Depois de criar um modelo afinado, pode querer continuar a refinar o modelo ao longo do tempo através de mais ajustes 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. O ajuste fino contínuo é suportado apenas para modelos OpenAI.
Para realizar o ajuste fino de um modelo que já afinou anteriormente, utiliza-se o mesmo processo descrito em Criar um modelo personalizado. Mas em vez de especificar o nome de um modelo base genérico, especifica o ID do seu modelo finamente ajustado. O ID do modelo afinado parece 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>"
}'
Recomendamos também que inclua o suffix parâmetro para distinguir mais facilmente as iterações do seu modelo ajustado. O suffix parâmetro assume uma cadeia e é definido para identificar o modelo finamente 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 seu modelo afinado.
Se não tiver a certeza do ID do seu modelo afinado atual, pode encontrar esta informação na página de Modelos da Foundry. Ou pode gerar uma lista de modelos para um recurso Azure OpenAI usando a API REST.
Limpe suas implantações, modelos personalizados e arquivos de treinamento
Quando deixar de precisar do seu modelo personalizado, pode apagar a implementação e o modelo. Também pode apagar os ficheiros de treino e validação que carregou para o serviço, se necessário.
Exclua a sua implementação de modelo
Pode usar qualquer um destes métodos para eliminar a implementação do seu modelo personalizado:
- Fundição
- Azure CLI
Excluir seu modelo personalizado
Pode eliminar o seu modelo personalizado usando o Foundry.
Observação
Não é possível excluir um modelo personalizado se ele tiver uma implantação existente. Deve eliminar a implementação do seu modelo antes de poder eliminar o seu 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. Podes usar o Foundry para apagar os ficheiros.
Existem duas experiências únicas de ajuste fino no portal Microsoft Foundry:
- Hub ou vista de projeto: Suporta afinamento de modelos de múltiplos fornecedores, como Azure OpenAI, Meta Llama e Microsoft Phi.
- Vista centrada no Azure OpenAI: Suporta apenas a otimização fina dos modelos Azure OpenAI, mas tem suporte para funcionalidades adicionais como a integração de pré-visualização Weights & Biases (W&B). Se está apenas a afinar modelos Azure OpenAI, recomendamos esta experiência.
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 sobre quando usar o ajuste fino do Azure OpenAI.
- Precisa de uma subscrição do Azure. Crie um gratuitamente.
- Precisa de um recurso Azure OpenAI localizado numa região que suporte o ajuste fino do modelo Azure OpenAI. Para a lista de modelos disponíveis por região e funcionalidades suportadas, consulte a tabela de resumo de modelos e a disponibilidade por região. Para obter mais informações, consulte Criar um recurso e implantar um modelo com o Azure OpenAI.
- O ajuste fino do acesso requer a função "Azure AI User".
- Se ainda não tiver acesso para ver quotas e implementar modelos no portal Foundry, precisa de mais permissões.
Modelos suportados
Para verificar quais as regiões que atualmente suportam ajuste fino, consulte o artigo sobre modelos.
Ou pode afinar finamente um modelo previamente ajustado, formatado como base-model.ft-{jobid}.
Revise o fluxo de trabalho do portal Foundry
Reserve um momento para rever o fluxo de trabalho de ajuste fino para usar o portal Foundry:
- Prepare seus dados de treinamento e validação.
- Use a caixa de diálogo Criar um modelo finamente ajustado no portal Foundry para treinar o seu modelo personalizado.
- Selecione um método de treinamento.
- Selecione um modelo base.
- Escolha o seu tipo de treino.
- Escolha os seus dados de treino.
- Opcionalmente, escolha os seus dados de validação.
- Opcionalmente, configure os parâmetros da tarefa para o seu trabalho de ajustamento fino.
- Opcionalmente, ative a implementação automática do modelo personalizado resultante.
- Revise 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 seus conjuntos de dados de treino e validação consistem em exemplos de entrada e saída sobre como deseja que o modelo funcione.
Os dados de treino e validação que utiliza devem ser formatados como um documento de Linhas JSON (JSONL). Deve também ser formatado no formato conversacional que a API de Conversas Completas utiliza.
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). Cada ficheiro deve ter menos de 512 MB.
De um modo geral, recomendamos que utilize as instruções e prompts que achou que funcionaram melhor em todos os exemplos de treino. Esta abordagem ajuda-o a obter os melhores resultados, especialmente se tiver menos de cem 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 para conversas em múltiplas etapas no Azure OpenAI
Também são suportados múltiplos turnos de uma conversa numa única linha do seu ficheiro de treino JSONL. Para ignorar ajustes finos em 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 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."}]}
Considerações sobre o tamanho do conjunto de dados
Quanto mais exemplos de treinamento você tiver, melhor. Os trabalhos de ajuste fino não avançam sem pelo menos 10 exemplos de treino, mas um número tão pequeno não é suficiente para influenciar de forma notória as respostas do modelo. Uma boa prática para um ajuste fino bem-sucedido é fornecer centenas, senão milhares, de exemplos de treino. Recomendamos que 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 treinar o modelo com uma grande quantidade de dados internos sem primeiro podar o conjunto de dados apenas para os exemplos de maior qualidade, o seu modelo pode ter um desempenho pior do que o esperado.
Criar um modelo afinado
O portal Foundry oferece o Criar um modelo finamente ajustado para que possas criar e treinar um modelo finamente ajustado para o teu recurso Azure num só local.
Vai ao portal da Foundry e inicia sessão com credenciais que tenham acesso ao teu recurso Azure OpenAI. Durante o fluxo de trabalho de entrada, selecione o diretório apropriado, a assinatura do Azure e o recurso do Azure OpenAI.
Vá a Ferramentas>Ajuste Fino, e em seguida selecione modelo de Ajuste Fino.
Seleciona um modelo para afinar e depois seleciona Próximo.
Aparece a caixa de diálogo Criar um modelo ajustado.
Escolha o seu método de treino
O primeiro passo é confirmar a escolha do modelo e o método de treino. Nem todos os modelos suportam todos os métodos de formação.
- Ajuste fino supervisionado: Suportado por todos os modelos não-raciocinantes.
- Otimização direta de preferências (pré-visualização): Suportado por GPT-4o.
- Ajuste fino de reforço: Suportado por modelos de raciocínio, como o4-mini.
Ao selecionar o modelo, também pode selecionar um modelo previamente ajustado, conforme descrito mais adiante neste artigo.
Escolher o tipo de treino.
A Foundry oferece três níveis de formação para satisfazer as necessidades dos clientes.
Nível de treino padrão
O nível Standard oferece capacidade dedicada para ajustes finos com desempenho e SLAs previsíveis. É ideal para cargas de trabalho de produção que exigem rendimento garantido.
Nível de formação Global Standard
O nível de Formação Global expande o alcance da personalização de modelos com preços mais acessíveis de outras ofertas Globais. Não oferece residência de dados. Se precisar de residência de dados, consulte a lista de regiões disponíveis para o modelo escolhido.
Os teus dados de treino e os pesos resultantes do modelo podem ser copiados para outra região do Azure.
Quando utiliza esta camada, pode:
- Treine os modelos OpenAI mais recentes de mais de uma dúzia de regiões Azure OpenAI.
- Beneficie de taxas de treino por token mais baixas em comparação com o nível Standard.
Nível de formação para programadores
O nível Developer é uma opção económica que utiliza capacidade inativa para cargas de trabalho não urgentes ou exploratórias. Empregos neste nível podem ser interrompidos e reiniciados mais tarde, por isso são ideais para experimentação e casos de uso onde o custo é uma preocupação.
Escolha seus dados de treinamento
O passo seguinte é escolher os dados de treino preparados existentes ou carregar novos dados preparados para usar quando estiver a personalizar o seu modelo, selecionando Adicionar dados de treino.
O diálogo de dados de treino mostra quaisquer conjuntos de dados existentes e previamente carregados. Também oferece opções para carregar novos dados de treino.
Se os dados de treinamento já tiverem sido carregados para o serviço, selecione Arquivos do recurso de IA conectada. depois seleciona o ficheiro 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 outras localizações web partilhadas para importar dados de treino do Azure Blob Storage ou de outra localização web partilhada.
Para ficheiros de dados grandes, recomendamos que importe a partir do Blob Storage. Ficheiros grandes podem tornar-se instáveis quando são carregados através de formulários multipartes porque os pedidos são atómicos e não podem ser repetidos ou continuados. Para mais informações sobre Blob Storage, consulte O que é Azure Blob Storage?.
Escolha os seus dados de validação (opcional)
Se você tiver um conjunto de dados de validação, selecione Adicionar dados de treinamento. Pode escolher dados de validação preparados existentes ou carregar novos dados de validação preparados para usar quando estiver a personalizar o seu modelo.
O diálogo de Dados de Validação mostra quaisquer conjuntos de dados de treino e validação existentes e previamente carregados. Também oferece opções para 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. depois seleciona o ficheiro 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 outras localizações web partilhadas para importar dados de validação do Azure Blob Storage ou de outra localização web partilhada.
Para ficheiros de dados grandes, recomendamos que importe a partir do Blob Storage. Ficheiros grandes podem tornar-se instáveis quando são carregados através de formulários multipartes porque os pedidos são atómicos e não podem ser repetidos ou continuados.
Torne o seu modelo identificável (opcional)
Recomendamos que inclua um suffix parâmetro para distinguir mais facilmente entre iterações do seu modelo afinado. Um suffix parâmetro utiliza uma sequência de até 18 caracteres e é usado para nomear o modelo finamente ajustado resultante.
Configurar parâmetros de treinamento (opcional)
Podes fornecer uma seed opcional e ajustar hiperparâmetros adicionais.
Uma semente controla a reprodutibilidade do trabalho. Passar os mesmos parâmetros de inicialização e de tarefa devem produzir os mesmos resultados sem que haja diferença, mas isso pode variar em casos raros. Se não especificares uma semente, uma é gerada aleatoriamente para ti.
Os seguintes hiperparâmetros estão disponíveis para ajuste através do portal 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 e 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 de 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 o pré-treino, multiplicada por este 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. |
Ativar implementação automática (opcional)
Para poupar tempo, pode, opcionalmente, ativar a implementação automática do modelo resultante. Se o treino terminar com sucesso, o modelo é implementado de acordo com o tipo de implementação selecionado. O nome da implementação baseia-se no nome único gerado para o seu modelo personalizado e no sufixo opcional que poderá ter fornecido anteriormente.
Observação
Atualmente, apenas implementações de Padrões Globais e Desenvolvedores são suportadas para implementação automática. Nenhuma destas opções oferece residência de dados. Para mais informações, consulte a documentação sobre os tipos de implementação.
Reveja as suas escolhas e treine o seu modelo
Revê as tuas escolhas e depois seleciona Enviar para começar a treinar o teu novo modelo afinado.
Verificar o estado do seu modelo personalizado
Depois de submeteres o teu trabalho de afinação, aparece uma página com detalhes sobre o teu modelo afinado. Pode encontrar o estado e mais informações sobre o seu modelo afinado na página Fine-tuning no portal da Foundry.
Seu trabalho pode estar na fila atrás de outros trabalhos no sistema. Treinar o seu modelo pode demorar minutos ou horas, dependendo do modelo e do tamanho do conjunto de dados.
Gerar pontos de controlo
Quando cada época de treino termina, é gerado um ponto de controlo. Um checkpoint é uma versão totalmente funcional de um modelo que pode ser tanto implementada como usada como modelo-alvo para trabalhos subsequentes de ajuste fino.
Os checkpoints podem ser particularmente úteis, pois podem fornecer instantâneos antes do overfitting. Quando um trabalho de afinação termina, tens as três versões mais recentes do modelo disponíveis para implementar. Pode copiar checkpoints entre recursos e subscrições usando a API REST.
Colocar em pausa e retomar
Pode acompanhar o progresso em ambas as perspetivas de ajuste fino do portal da Foundry. O seu trabalho passa pelos mesmos estados que os trabalhos normais de ajuste fino (Enfileirado, Em Execução, Concluído com sucesso).
Também pode rever os ficheiros de resultados durante os treinos, para ter uma ideia do progresso e se o seu treino está a decorrer como esperado.
Durante a formação, pode visualizar as métricas e pausar o trabalho conforme necessário. Pausar pode ser útil se as métricas não convergirem ou se sentires que o modelo não está a aprender ao ritmo certo. Quando você pausa uma tarefa de treino, um checkpoint implantável é criado após a conclusão das avaliações de segurança. Este checkpoint está disponível para implementares e usares para inferência, ou podes retomar o trabalho para o concluir. A operação de pausa é aplicável apenas a tarefas que tenham sido treinadas por pelo menos uma etapa e que estejam em estado de execução.
Analise seu modelo personalizado
O Azure OpenAI anexa um ficheiro de resultado nomeado results.csv a cada trabalho de ajuste fino após a 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 resultados está listado para cada modelo personalizado na coluna ID do arquivo de resultados no painel Modelos do portal Foundry. Pode usar o ID do ficheiro para identificar e descarregar o ficheiro de resultado a partir do painel de ficheiros de dados do portal Foundry.
O ficheiro de resultados é um ficheiro CSV que contém uma linha de cabeçalho e uma linha para cada passo de treino realizado 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 percentagem de tokens do lote de treino que o modelo previu corretamente. Por exemplo, se o tamanho do lote estiver definido como 3 e os seus dados conterem completações [[1, 2], [0, 5], [4, 2]], este valor é definido para 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 percentagem de tokens no lote de validação que o modelo previu corretamente. Por exemplo, se o tamanho do lote estiver definido como 3 e os seus dados conterem completações [[1, 2], [0, 5], [4, 2]], este valor é definido para 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. |
Também pode visualizar os dados no seu results.csv ficheiro como gráficos no portal Foundry. Ao selecionar o link para o seu modelo treinado, aparecem três gráficos: perda, média de precisão por token e precisão do token. Se forneceu dados de validação, ambos os conjuntos de dados aparecem no mesmo gráfico.
Procure que a sua perda diminua ao longo do tempo e que a sua precisão aumente. Se os seus dados de treino e validação divergirem, pode estar a ocorrer sobreajuste. Tenta treinar com menos épocas ou com um multiplicador de taxa de aprendizagem mais pequeno.
Implantar um modelo aperfeiçoado
Quando estiver satisfeito com as métricas do seu trabalho de ajuste fino, ou simplesmente quiser avançar para inferência, deve implementar o modelo.
Se estiveres a implementar para validação adicional, considera implementar para testes usando uma implementação Developer.
Se estiver pronto para implementar para produção ou tiver necessidades específicas de residência de dados, siga o guia de implementação.
Usar um modelo aperfeiçoado em produção
Depois de implementares o teu modelo afinado, podes usá-lo como qualquer outro modelo implementado. Podes usar o playground no Foundry para experimentar a tua nova implementaçã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 usas para guiar o teu modelo afinado (quer esteja implementado ou disponível para testes no playground) deve ser a mesma da mensagem do sistema que usaste para o treino. Se você usar uma mensagem de sistema diferente, o modelo pode não ter o desempenho esperado.
Realizar ajustes finos contínuos
Depois de criar um modelo afinado, pode querer continuar a refinar o modelo ao longo do tempo através de mais ajustes 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 realizar afinação fina num modelo que previamente ajustou, utiliza-se o mesmo processo descrito em Criar um modelo finamente ajustado. Mas em vez de especificar o nome de um modelo base genérico, especifica o seu modelo já afinado. Um modelo personalizado afinado parece-se com gpt-4o-2024-08-06.ft-d93dda6110004b4da3472d96f4dd4777-ft.
Limpe suas implantações, modelos personalizados e arquivos de treinamento
Quando já não precisares do teu modelo personalizado, podes eliminar a implementação e o modelo. Também pode apagar os ficheiros de treino 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 15 dias, a implantação será excluída. A implementação de um modelo personalizado está inativa se o modelo foi implementado há mais de 15 dias e não foram feitas chamadas de chat ou respostas à API durante um período contínuo de 15 dias.
A eliminação de uma implementação inativa não apaga nem afeta o modelo personalizado subjacente. O modelo personalizado pode ser redistribuído a qualquer momento.
Como descrito no Azure OpenAI na definição de preços do Microsoft Foundry Models, cada modelo personalizado (ajustado finamente) implementado implica um custo horário de alojamento, independentemente de serem feitas chamadas de chat ou de API de resposta ao modelo. Para saber mais sobre planeamento e gestão de custos com Azure OpenAI, consulte Planear e gerir custos para Azure OpenAI.
Podes eliminar a implementação do teu modelo personalizado no painel de Implementações no portal Foundry. Selecione a implementação a eliminar e depois selecione Eliminar.
Excluir seu modelo personalizado
Podes eliminar um modelo personalizado no painel de Modelos no portal Foundry. Selecione o modelo personalizado a eliminar no separador Modelos Personalizados e depois selecione Eliminar.
Observação
Não é possível excluir um modelo personalizado se ele tiver uma implantação existente. Tens de eliminar a implementação do teu modelo antes de poderes eliminar o teu modelo personalizado.
Excluir seus arquivos de treinamento
Pode, opcionalmente, eliminar os ficheiros de treino e validação que carregou para treino, juntamente com os ficheiros de resultados gerados durante o treino, no painel de Gestão>Dados + índices do portal Foundry. Seleciona o ficheiro a eliminar e depois seleciona Apagar.
Pré-requisitos
- Leia o guia sobre quando usar o ajuste fino do Azure OpenAI.
- Precisa de uma subscrição do Azure. Crie um gratuitamente.
- Precisas de um recurso Azure OpenAI. Para obter mais informações, consulte Criar um recurso e implantar um modelo com o Azure OpenAI.
- Precisa das seguintes bibliotecas Python:
os,json,requests,openai. - Precisas da biblioteca Python da OpenAI.
- O ajuste fino do acesso requer a função "Azure AI User".
- Se ainda não tiver acesso para ver quotas e implementar modelos no portal Foundry, precisa de mais permissões.
Modelos suportados
Para verificar quais as regiões que atualmente suportam ajuste fino, consulte o artigo sobre modelos.
Ou pode afinar finamente 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 seus conjuntos de dados de treino e validação consistem em exemplos de entrada e saída sobre como deseja que o modelo funcione.
Os dados de treino e validação que utiliza devem ser formatados como um documento de Linhas JSON (JSONL). Deve também ser formatado no formato conversacional que a API de Conversas Completas utiliza.
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). Cada ficheiro deve ter menos de 512 MB.
Se quiseres um guia passo a passo do ajuste fino gpt-4o-mini-2024-07-18, consulta 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 chat de múltiplas voltas
Também são suportados múltiplos turnos de uma conversa numa única linha do seu ficheiro de treino JSONL. Para ignorar ajustes finos em 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 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."}]}
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 avançam sem pelo menos 10 exemplos de treino, mas um número tão pequeno não é suficiente para influenciar de forma notória as respostas do modelo. Uma boa prática para um ajuste fino bem-sucedido é fornecer centenas, senão milhares, de exemplos de treino.
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 com uma grande quantidade de dados internos sem primeiro podar o conjunto de dados apenas para os exemplos de maior qualidade, o seu modelo pode ter um desempenho pior do que o esperado.
Carregue seus dados de treinamento
O passo seguinte é escolher os dados de treino preparados existentes ou carregar novos dados preparados para usar quando estiver a personalizar o 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 ficheiros de dados grandes, recomendamos que importe a partir do Blob Storage. Ficheiros grandes podem tornar-se instáveis quando são carregados através de formulários multipartes porque os pedidos são atómicos e não podem ser repetidos ou continuados. Para mais informações sobre Blob Storage, consulte O que é Azure Blob Storage?.
O exemplo seguinte em Python carrega ficheiros de treino e validação locais usando o SDK Python e recupera os IDs dos ficheiros devolvidos:
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 seguinte 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))
Observação
Recomendamos o uso do nível Global Standard para o tipo de formação, pois oferece poupanças de custos e utiliza a capacidade global para tempos de fila mais rápidos. No entanto, copia dados e pesos fora da região atual de recursos. Se a residência de dados for um requisito, utilize um modelo que suporte formação de nível Standard.
Também pode passar parâmetros opcionais adicionais, como hiperparâmetros, para obter maior controlo do processo de afinação. Para o treino inicial, recomendamos usar os valores automáticos que estão presentes sem especificar esses parâmetros.
Os hiperparâmetros atualmente suportados para ajuste fino supervisionado 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 e 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 o pré-treino, multiplicada por este valor. Taxas de aprendizagem maiores tendem a ter um 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 |
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 que controla a reprodutibilidade do trabalho. Passar os mesmos parâmetros de inicialização e de tarefa devem produzir os mesmos resultados sem que haja diferença, mas isso pode variar em casos raros. Se não especificares uma semente, é gerada uma para ti. |
Para definir hiperparâmetros personalizados com a versão 1.x da API Python do OpenAI, forneça-os como parte de 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 sobre os hiperparâmetros suportados para os outros métodos de personalização, consulte o guia para otimização direta de preferências e o guia para ajuste fino de reforços.
Tipo de formação
Selecione o nível de formação com base no seu caso de uso e orçamento:
Padrão: A formação ocorre na região do recurso atual da Foundry e fornece garantias para a residência de dados. Ideal para cargas de trabalho em que os dados devem permanecer em uma região específica.
Global: Oferece preços mais acessíveis em comparação com o Standard, utilizando capacidade para além da sua região atual. Os dados e pesos são copiados para a região onde ocorre o treinamento. Ideal se a residência de dados não for uma restrição e você quiser tempos de fila mais rápidos.
Developer (versão prévia): Proporciona economias significativas de custos ao utilizar capacidade ociosa para treino. Não há garantias de latência ou SLA, por isso os empregos neste nível podem ser automaticamente preemptados e retomados mais tarde. Não há garantias para a localização dos 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 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 individuais de ajuste fino gerados durante o treino, execute o seguinte comando. Antes de executar o comando, pode ser necessário atualizar a biblioteca cliente 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 treino gera um ponto de controlo. Um checkpoint é uma versão totalmente funcional de um modelo que pode ser tanto implementada como usada como modelo-alvo para trabalhos subsequentes de ajuste fino. Os checkpoints podem ser particularmente úteis, pois podem fornecer instantâneos antes do overfitting.
Quando um trabalho de afinação termina, tens as três versões mais recentes do modelo disponíveis para implementar. O seu modelo afinado representa a época final. As duas épocas anteriores estão disponíveis como pontos de controlo.
Pode executar o comando seguinte para recuperar a lista de pontos de verificação associados a um trabalho individual de ajuste fino. Antes de executar o comando, pode ser necessário atualizar a biblioteca cliente 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))
Analise o seu modelo personalizado
O Azure OpenAI anexa um ficheiro de resultado nomeado results.csv a cada trabalho de ajuste fino após a 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 ficheiro do resultado está listado para cada modelo personalizado. Pode usar o SDK Python para recuperar o ID do ficheiro e descarregar o ficheiro de resultado para análise.
O exemplo seguinte em Python recupera o ID do ficheiro do primeiro resultado anexado ao trabalho de afinação do seu modelo personalizado. Depois, utiliza o SDK em Python para descarregar o ficheiro para o 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 ficheiro de resultados é um ficheiro CSV que contém uma linha de cabeçalho e uma linha para cada passo de treino realizado 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 percentagem de tokens do lote de treino que o modelo previu corretamente. Por exemplo, se o tamanho do lote estiver definido como 3 e os seus dados conterem completações [[1, 2], [0, 5], [4, 2]], este valor é definido para 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 percentagem de tokens no lote de validação que o modelo previu corretamente. Por exemplo, se o tamanho do lote estiver definido como 3 e os seus dados conterem completações [[1, 2], [0, 5], [4, 2]], este valor é definido para 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. |
Também pode visualizar os dados no seu results.csv ficheiro como gráficos no portal Microsoft Foundry. Ao selecionar o link para o seu modelo treinado, aparecem três gráficos: perda, média de precisão por token e precisão do token. Se forneceu dados de validação, ambos os conjuntos de dados aparecem no mesmo gráfico.
Procure que a sua perda diminua ao longo do tempo e que a sua precisão aumente. Se os seus dados de treino e validação divergirem, pode estar a ocorrer sobreajuste. Tenta treinar com menos épocas ou com um multiplicador de taxa de aprendizagem mais pequeno.
Implantar um modelo aperfeiçoado
Quando estiver satisfeito com as métricas do seu trabalho de ajuste fino, ou simplesmente quiser avançar para inferência, deve implementar o modelo.
Se estiveres a implementar para validação adicional, considera implementar para testes usando uma implementação Developer.
Ao contrário dos comandos anteriores do SDK, deve usar a API do plano de controlo para a implementação. Esta tarefa requer autorização separada, um caminho de API diferente e uma versão diferente da API.
| Variable | 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 testes iniciais é abrir o Azure Cloud Shell a partir 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 testes de API. Recomendamos armazenar este token numa nova variável de ambiente. |
subscription |
A ID de assinatura para o recurso associado do Azure OpenAI. |
resource_group |
O nome do grupo de recursos para seu recurso do Azure OpenAI. |
resource_name |
O nome de recurso do Microsoft Azure OpenAI. |
model_deployment_name |
O nome personalizado para a sua nova implementação de modelo ajustado. Este nome é referido no seu código durante as chamadas de conclusão do chat. |
fine_tuned_model |
O teu modelo afinado. Recupere esse valor dos resultados do trabalho de ajuste fino na etapa anterior. É semelhante a gpt-4.1-2025-04-14.ft-b044a9d3cf9c4228b5d393567f693b83. Tens de acrescentar valor ao deploy_data JSON. Alternativamente, pode implementar um ponto de controlo passando pelo ID do ponto de controlo, 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 aprender sobre a implementação multi-região e como usar o modelo implementado, consulte: O seu modelo ajustado com precisão implementado.
Se estiver pronto para implementar para produção ou tiver necessidades específicas de residência de dados, siga o guia de implementação.
Realizar ajustes finos contínuos
Depois de criar um modelo afinado, pode querer continuar a refinar o modelo ao longo do tempo através de mais ajustes 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. O ajuste fino contínuo é suportado apenas para modelos OpenAI.
Para realizar o ajuste fino de um modelo que já afinou anteriormente, utiliza-se o mesmo processo descrito em Criar um modelo personalizado. Mas em vez de especificar o nome de um modelo base genérico, especifica o ID do seu modelo finamente ajustado. O ID do modelo afinado parece 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))
Recomendamos também que inclua o suffix parâmetro para distinguir mais facilmente as iterações do seu modelo ajustado. O suffix parâmetro assume uma cadeia e é definido para identificar o modelo finamente ajustado. Com a API Python da OpenAI, pode adicionar uma cadeia de até 18 caracteres ao nome do seu modelo afinado.
Se não tiver a certeza do ID do seu modelo ajustado existente, pode encontrar esta informação na página Modelos do Microsoft Foundry. Ou pode gerar uma lista de modelos para um recurso Azure OpenAI usando a API REST.
Limpe suas implantações, modelos personalizados e arquivos de treinamento
Quando deixar de precisar do seu modelo personalizado, pode apagar a implementação e o modelo. Também pode apagar os ficheiros de treino 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 15 dias, a implantação será excluída. A implementação de um modelo personalizado está inativa se o modelo foi implementado há mais de 15 dias e não foram feitas chamadas de chat ou respostas à API durante um período contínuo de 15 dias.
A eliminação de uma implementação inativa não apaga nem afeta o modelo personalizado subjacente. O modelo personalizado pode ser redistribuído a qualquer momento.
Como descrito no Azure OpenAI na definição de preços do Microsoft Foundry Models, cada modelo personalizado (ajustado finamente) implementado implica um custo horário de alojamento, independentemente de serem feitas chamadas de chat ou de API de resposta ao modelo. Para saber mais sobre planeamento e gestão de custos com Azure OpenAI, consulte Planear e gerir custos para Azure OpenAI.
Pode usar qualquer um destes métodos para eliminar a implementação do seu modelo personalizado:
- Fundição
- Azure CLI
Excluir seu modelo personalizado
Pode eliminar o seu modelo personalizado usando o Foundry.
Observação
Não é possível excluir um modelo personalizado se ele tiver uma implantação existente. Deve eliminar a implementação do seu modelo antes de poder eliminar o seu 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:
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 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 ajuste fino do Azure OpenAI.
- Precisa de uma subscrição do Azure. Crie um gratuitamente.
- Precisas de um recurso Azure OpenAI. Para obter mais informações, consulte Criar um recurso e implantar um modelo com o Azure OpenAI.
- O ajuste fino do acesso requer a função "Azure AI User".
- Se ainda não tiver acesso para ver quotas e implementar modelos no portal Foundry, precisa de mais permissões.
Modelos suportados
Para verificar quais as regiões que atualmente suportam ajuste fino, consulte o artigo sobre modelos.
Ou pode afinar finamente um modelo previamente ajustado, formatado como base-model.ft-{jobid}.
Revisar o fluxo de trabalho para a API REST
Tire um momento para rever o fluxo de trabalho de afinação para a utilização da API REST e do Python no 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 seus conjuntos de dados de treino e validação consistem em exemplos de entrada e saída sobre como deseja que o modelo funcione.
Os dados de treino e validação que utiliza devem ser formatados como um documento de Linhas JSON (JSONL). Deve também ser formatado no formato conversacional que a API de Conversas Completas utiliza.
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). Cada ficheiro deve ter menos de 512 MB.
Se quiseres um guia passo a passo do ajuste fino gpt-4o-mini-2024-07-18, consulta 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 chat de múltiplas voltas
Também são suportados múltiplos turnos de uma conversa numa única linha do seu ficheiro de treino JSONL. Para ignorar ajustes finos em 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 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."}]}
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 avançam sem pelo menos 10 exemplos de treino, mas um número tão pequeno não é suficiente para influenciar de forma notória as respostas do modelo. Uma boa prática para um ajuste fino bem-sucedido é fornecer centenas, senão milhares, de exemplos de treino.
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 com uma grande quantidade de dados internos sem primeiro podar o conjunto de dados apenas para os exemplos de maior qualidade, o seu modelo pode ter um desempenho pior do que o esperado.
Carregue seus dados de treinamento
O passo seguinte é escolher os dados de treino preparados existentes ou carregar novos dados preparados para usar quando estiver a personalizar o 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 ficheiros de dados grandes, recomendamos que importe a partir do Blob Storage. Ficheiros grandes podem tornar-se instáveis quando são carregados através de formulários multipartes porque os pedidos são atómicos e não podem ser repetidos ou continuados. Para mais informações sobre Blob Storage, consulte O que é Azure Blob Storage?.
Carregar dados de formaçã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\\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 seguinte mostra um exemplo de como criar um novo trabalho de ajuste fino usando a API REST.
Este exemplo inclui a passagem do parâmetro "seed". A semente controla a reprodutibilidade do trabalho. Passar os mesmos parâmetros de inicialização e de tarefa devem produzir os mesmos resultados sem que haja diferença, mas isso pode variar em casos raros. Se não especificares uma semente, é gerada uma para ti.
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 estiver a afinar um modelo que suporta treino global, pode especificar o tipo de treino usando o argumento extra_body 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 treino inicial, recomendamos usar os valores automáticos que estão presentes sem especificar esses parâmetros.
Os hiperparâmetros atualmente suportados para ajuste fino supervisionado 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 e 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 o pré-treino, multiplicada por este valor. Taxas de aprendizagem maiores tendem a ter um 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 |
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 que controla a reprodutibilidade do trabalho. |
Para saber sobre os hiperparâmetros suportados para os outros métodos de personalização, consulte o guia para otimização direta de preferências e o guia para ajuste fino de reforços.
Selecione um tipo de treino
Selecione o nível de formação com base no seu caso de uso e orçamento:
Padrão: A formação ocorre na região do recurso atual da Foundry e fornece garantias para a residência de dados. Ideal para cargas de trabalho em que os dados devem permanecer em uma região específica.
Global: Oferece preços mais acessíveis em comparação com o Standard, utilizando capacidade para além da sua região atual. Os dados e pesos são copiados para a região onde ocorre o treinamento. Ideal se a residência de dados não for uma restrição e você quiser tempos de fila mais rápidos.
Developer (versão prévia): Proporciona economias significativas de custos ao utilizar capacidade ociosa para treino. Não há garantias de latência ou SLA, por isso os empregos neste nível podem ser automaticamente preemptados e retomados mais tarde. Também não há garantias de residência de dados. 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"}"
Verifique o estado do seu modelo personalizado
Depois de começar um trabalho de afinação, pode demorar algum tempo a terminar. Seu trabalho pode estar na fila atrás de outros trabalhos no sistema. Treinar o seu modelo pode demorar minutos ou horas, dependendo do modelo e do tamanho 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 o seu trabalho usando o ID do trabalho devolvido 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 individuais de ajuste fino 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 treino gera um ponto de controlo. Um checkpoint é uma versão totalmente funcional de um modelo que pode ser tanto implementada como usada como modelo-alvo para trabalhos subsequentes de ajuste fino. Os checkpoints podem ser particularmente úteis, pois podem fornecer instantâneos antes do overfitting.
Quando um trabalho de afinação termina, tens as três versões mais recentes do modelo disponíveis para implementar. O seu modelo afinado representa a época final. As duas épocas anteriores estão disponíveis como pontos de controlo.
Pode executar o seguinte comando para recuperar a lista de checkpoints associados a um trabalho individual de ajuste fino:
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"
Colocar em pausa e retomar
Durante a formação, pode ver os registos e métricas e pausar o trabalho conforme necessário. Pausar pode ser útil se as métricas não convergirem ou se sentires que o modelo não está a aprender ao ritmo certo.
Após a pausa do trabalho de formação e a conclusão das avaliações de segurança, é criado um ponto de controlo implantável. Este checkpoint está disponível para implementares e usares para inferência, ou podes retomar o trabalho para o concluir.
A operação de pausa é aplicável apenas a tarefas que tenham sido treinadas por pelo menos uma etapa e que estejam em estado de 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"
Resumo
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 (pré-visualização)
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 utiliza APIs dedicadas para ajudar a garantir transferências eficientes e seguras. Atualmente, esse recurso está disponível apenas com a API e não através do portal do Foundry.
Depois de o modelo ser copiado da região A para a região B, pode afinar continuamente o modelo na região B e implantá-lo a partir dessa localização.
Observação
A eliminação do ponto de verificação do modelo na região de origem não faz com que o modelo seja eliminado na região de destino. Para eliminar o modelo em ambas as regiões depois de ser copiado, tens de implantar o modelo separadamente em cada região.
Pré-requisitos
- O recurso de destino ou a conta deve ter pelo menos uma tarefa de ajuste fino.
- O recurso de destino ou a conta não devem desativar o acesso à rede pública (pelo menos enquanto envia o pedido de cópia).
- Só pode copiar para a conta de destino, se a conta que inicia a cópia tiver permissões suficientes para aceder à conta de destino.
Configurar permissões
- Crie uma identidade gerenciada atribuída pelo usuário.
- Dê a função Azure AI User à identidade gerida atribuída a utilizador no seu recurso de destino ou conta.
- 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 esta é uma operação de longa duração, verifique o estado da cópia do modelo ajustada fornecendo o ID do checkpoint da conta de origem usada na POST chamada.
Verifica o estado 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'
Observação
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 o mesmo nome para ajustes finos, implementaçã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.
Analise o seu modelo personalizado
O Azure OpenAI anexa um ficheiro de resultado nomeado results.csv a cada trabalho de ajuste fino após a 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 ficheiro do resultado está listado para cada modelo personalizado. Pode usar a API REST para recuperar o ID do ficheiro e descarregar o ficheiro de resultados para análise.
O exemplo seguinte em Python utiliza a API REST para recuperar o ID do ficheiro do primeiro resultado associado ao trabalho de ajuste fino para o seu modelo personalizado. Depois, descarrega o ficheiro para o seu 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 ficheiro de resultados é um ficheiro CSV que contém uma linha de cabeçalho e uma linha para cada passo de treino realizado 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 percentagem de tokens do lote de treino que o modelo previu corretamente. Por exemplo, se o tamanho do lote estiver definido como 3 e os seus dados conterem completações [[1, 2], [0, 5], [4, 2]], este valor é definido para 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 percentagem de tokens no lote de validação que o modelo previu corretamente. Por exemplo, se o tamanho do lote estiver definido como 3 e os seus dados conterem completações [[1, 2], [0, 5], [4, 2]], este valor é definido para 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. |
Também pode visualizar os dados no seu results.csv ficheiro como gráficos no portal Foundry. Ao selecionar o link para o seu modelo treinado, aparecem três gráficos: perda, média de precisão por token e precisão do token. Se forneceu dados de validação, ambos os conjuntos de dados aparecem no mesmo gráfico.
Procure que a sua perda diminua ao longo do tempo e que a sua precisão aumente. Se os seus dados de treino e validação divergirem, pode estar a ocorrer sobreajuste. Tenta treinar com menos épocas ou com um multiplicador de taxa de aprendizagem mais pequeno.
Implantar um modelo aperfeiçoado
Quando estiver satisfeito com as métricas do seu trabalho de ajuste fino, ou simplesmente quiser avançar para inferência, deve implementar o modelo.
Se estiveres a implementar para validação adicional, considera implementar para testes usando uma implementação Developer.
Se estiver pronto para implementar para produção ou tiver necessidades específicas de residência de dados, siga o guia de implementação.
| Variable | 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 testes iniciais é abrir o Azure Cloud Shell a partir 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 testes de API. Recomendamos armazenar este token numa nova variável de ambiente. |
subscription |
A ID de assinatura para o recurso associado do Azure OpenAI. |
resource_group |
O nome do grupo de recursos para seu recurso do Azure OpenAI. |
resource_name |
O nome de recurso do Microsoft Azure OpenAI. |
model_deployment_name |
O nome personalizado para a sua nova implementação de modelo ajustado. Este nome é referido no seu código durante as chamadas de conclusão do chat. |
fine_tuned_model |
O teu modelo afinado. Recupere esse valor dos resultados do trabalho de ajuste fino na etapa anterior. É semelhante a gpt-4.1-2025-04-14.ft-b044a9d3cf9c4228b5d393567f693b83. Tens de acrescentar valor ao deploy_data JSON. Alternativamente, pode implementar um ponto de controlo passando pelo ID do ponto de controlo, 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 aprender sobre a implementação multi-região e como usar o modelo implementado, consulte: O seu modelo ajustado com precisão implementado.
Realizar ajustes finos contínuos
Depois de criar um modelo afinado, pode querer continuar a refinar o modelo ao longo do tempo através de mais ajustes 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. O ajuste fino contínuo é suportado apenas para modelos OpenAI.
Para realizar o ajuste fino de um modelo que já afinou anteriormente, utiliza-se o mesmo processo descrito em Criar um modelo personalizado. Mas em vez de especificar o nome de um modelo base genérico, especifica o ID do seu modelo finamente ajustado. O ID do modelo afinado parece 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>"
}'
Recomendamos também que inclua o suffix parâmetro para distinguir mais facilmente as iterações do seu modelo ajustado. O suffix parâmetro assume uma cadeia e é definido para identificar o modelo finamente 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 seu modelo afinado.
Se não tiver a certeza do ID do seu modelo afinado atual, pode encontrar esta informação na página de Modelos da Foundry. Ou pode gerar uma lista de modelos para um recurso Azure OpenAI usando a API REST.
Limpe suas implantações, modelos personalizados e arquivos de treinamento
Quando deixar de precisar do seu modelo personalizado, pode apagar a implementação e o modelo. Também pode apagar os ficheiros de treino e validação que carregou para o serviço, se necessário.
Exclua a sua implementação de modelo
Pode usar qualquer um destes métodos para eliminar a implementação do seu modelo personalizado:
- Fundição
- Azure CLI
Excluir seu modelo personalizado
Pode eliminar o seu modelo personalizado usando o Foundry.
Observação
Não é possível excluir um modelo personalizado se ele tiver uma implantação existente. Deve eliminar a implementação do seu modelo antes de poder eliminar o seu 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. Podes usar o Foundry para apagar os ficheiros.