Personalize um modelo com ajuste fino

O Serviço OpenAI do Azure permite adaptar nossos modelos aos seus conjuntos de dados pessoais usando um processo conhecido como Ajuste Fino. Esta etapa de personalização permite que você obtenha mais informações do serviço fornecendo:

  • Resultados de qualidade mais altos do que o que você pode obter apenas da engenharia de prompt
  • A capacidade de treinar em mais exemplos do que pode se ajustar ao limite máximo de contexto de solicitação de um modelo.
  • Economia de tokens devido a solicitações mais curtas
  • Solicitações de latência inferior, especialmente ao usar modelos menores.

Em contraste com o aprendizado de poucas tentativas, o ajuste fino melhora o modelo treinando em muito mais exemplos do que cabe em uma solicitação, permitindo que você obtenha melhores resultados em um grande número de tarefas. Como o ajuste fino ajusta os pesos do modelo base para melhorar o desempenho na tarefa específica, não será necessário incluir tantos exemplos ou instruções na sua solicitação. Isso significa menos texto enviado e menos tokens processados em cada chamada de API, o que pode economizando custos e melhorar a latência das solicitações.

Usamos o LoRA, ou aproximação de baixa classificação, para ajustar os modelos de forma a reduzir sua complexidade sem afetar significativamente seu desempenho. Esse método funciona aproximando a matriz original de alta classificação com uma classificação mais baixa, ajustando assim apenas um subconjunto menor de parâmetros "importantes" durante a fase de treinamento supervisionado, tornando o modelo mais gerenciável e eficiente. Para os usuários, isso torna o treinamento mais rápido e mais acessível do que outras técnicas.

Observação

Atualmente, o OpenAI do Azure aceita apenas ao ajuste fino de texto em texto para todos os modelos com suporte, incluindo o GPT-4o mini.

Pré-requisitos

Modelos

Os seguintes modelos dão suporte ao ajuste fino:

  • babbage-002
  • davinci-002
  • gpt-35-turbo (0613)
  • gpt-35-turbo (1106)
  • gpt-35-turbo (0125)
  • gpt-4 (0613)*
  • gpt-4o (2024-08-06)
  • gpt-4o-mini (18/07/2024)

* O ajuste fino desse modelo está atualmente em visualização pública.

Ou você pode fazer o ajuste fino de um modelo previamente ajustado, formatado como base-model.ft-{jobid}.

Consulte a página de modelos para verificar quais regiões atualmente dão suporte ao ajuste fino.

Examinar o fluxo de trabalho do Azure OpenAI Studio

Reserve um momento para examinar o fluxo de trabalho de ajuste fino para usar o Azure OpenAI Studio:

  1. Preparar seus dados de treinamento e validação.
  2. Usar o assistente Criar modelo personalizado no Azure OpenAI Studio para treinar seu modelo personalizado.
    1. Selecionar um modelo base.
    2. Escolher seus dados de treinamento.
    3. Opcionalmente, escolha seus dados de validação.
    4. Opcionalmente, configure os parâmetros de tarefa para seu trabalho de ajuste fino.
    5. Examine suas escolhas e treine seu novo modelo personalizado
  3. Verifique o status do seu modelo personalizado ajustado.
  4. Implantar seu modelo personalizado para uso.
  5. Usar seu modelo personalizado.
  6. Opcionalmente, analise seu modelo personalizado para obter desempenho e ajuste.

Preparar seus dados de treinamento e validação

Seu conjunto de dados de treinamento e de validação consiste em exemplos de saída de entrada e saída para o desempenho do modelo.

Diferentes tipos de modelo exigem um formato diferente de dados de treinamento.

Os dados de treinamento e validação usados devem ser formatados como um documento JSONL (Linhas JSON). Para gpt-35-turbo (todas as versões), gpt-4, gpt-4o e gpt-4o-mini, o conjunto de dados de ajuste fino deve ser formatado no formato de conversação usado pela API de Conclusão de Chat.

Se você quiser ver um passo a passo de ajuste fino de um modelo gpt-4o-mini (2024-07-18), confira Tutorial de ajuste fino do Azure OpenAI.

Formato de arquivo de exemplo

{"messages": [{"role": "system", "content": "You are an Xbox customer support agent whose primary goal is to help users with issues they are experiencing with their Xbox devices. You are friendly and concise. You only provide factual answers to queries, and do not provide answers that are not related to Xbox."}, {"role": "user", "content": "Is Xbox better than PlayStation?"}, {"role": "assistant", "content": "I apologize, but I cannot provide personal opinions. My primary job is to assist you with any issues related to your Xbox device. Do you have any Xbox-related issues that need addressing?"}]}
{"messages": [{"role": "system", "content": "You are an Xbox customer support agent whose primary goal is to help users with issues they are experiencing with their Xbox devices. You are friendly and concise. You only provide factual answers to queries, and do not provide answers that are not related to Xbox."}, {"role": "user", "content": "Can I play PC games on my Xbox?"}, {"role": "assistant", "content": "While Xbox consoles don't natively support PC games, they can play an array of Xbox games, many of which are also available on PC. Can I assist you with finding games compatible with your Xbox device?"}]}
{"messages": [{"role": "system", "content": "You are an Xbox customer support agent whose primary goal is to help users with issues they are experiencing with their Xbox devices. You are friendly and concise. You only provide factual answers to queries, and do not provide answers that are not related to Xbox."}, {"role": "user", "content": "I'm having trouble connecting my Xbox to the Wi-Fi."}, {"role": "assistant", "content": "No worries, let's go through the network settings on your Xbox. Can you please tell me what happens when you try to connect it to the Wi-Fi?"}]}

Formato de arquivo de chat multiturno

Também há suporte para vários turnos de conversa em uma única linha do seu arquivo de treinamento jsonl. Para pular o ajuste fino em mensagens específicas do assistente, adicione o par de weight valores-chave opcional. 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}]}

Além do formato JSONL, os arquivos de dados de treinamento e validação devem ser codificados em UTF-8 e incluir uma marca de ordem de byte (BOM). O arquivo deve ter menos de 512 MB de tamanho.

Crie seus conjuntos de dados de treinamento e validação

Quanto mais exemplos de treinamento você tiver, melhor. Os trabalhos de ajuste fino não prosseguiram sem pelo menos 10 exemplos de treinamento, mas um número tão pequeno não é suficiente para influenciar visivelmente as respostas do modelo. A melhor prática é fornecer centenas, se não milhares, de exemplos de treinamento para ter sucesso.

Em geral, dobrar o tamanho do conjunto de dados pode levar a um aumento linear na qualidade do modelo. Mas tenha em mente que exemplos de baixa qualidade podem afetar negativamente o desempenho. Se você treinar o modelo em uma grande quantidade de dados internos, sem primeiro podar o conjunto de dados apenas para os exemplos de mais alta qualidade, você poderá acabar com um modelo que tenha um desempenho muito pior do que o esperado.

Usar o assistente Criar modelo personalizado

O Azure OpenAI Studio fornece o assistente Criar modelo personalizado, para que você possa criar e treinar interativamente um modelo ajustado para o recurso do Azure.

  1. Abra o OpenAI do Azure em https://oai.azure.com/ e entre com credenciais que tenham acesso ao recurso OpenAI do Azure. Durante o fluxo de trabalho de entrada, selecione o diretório apropriado, a assinatura do Azure e o recurso OpenAI do Azure.

  2. No Estúdio do OpenAI do Azure, navegue até o painel Ferramentas > Ajuste fino e selecione o modelo de Ajuste fino.

    Captura de tela que mostra como acessar o assistente Criar modelo personalizado no Azure OpenAI Studio.

O assistente Criar modelo personalizado é aberto.

Selecione um modelo base

A primeira etapa na criação de um modelo personalizado é escolher um modelo base. O painel Modelo básico permite que você escolha um modelo básico para usar em seu modelo personalizado. A sua escolha influencia tanto o desempenho quanto o custo do modelo.

Selecione o modelo básico na lista suspensa Tipo de modelo base e selecione Avançar para continuar.

Você pode criar um modelo personalizado de um dos seguintes modelos base disponíveis:

  • babbage-002

  • davinci-002

  • gpt-35-turbo (0613)

  • gpt-35-turbo (1106)

  • gpt-35-turbo (0125)

  • gpt-4 (0613)

  • Ou você pode fazer o ajuste fino de um modelo previamente ajustado, formatado como base-model.ft-{jobid}.

Captura de tela das opções de modelo com um modelo personalizado ajustado.

Para obter mais informações sobre nossos modelos básicos que podem ser ajustados, confira Modelos.

Escolher seus dados de treinamento

A próxima etapa é escolher dados de treinamento preparados existentes ou carregar novos dados de treinamento preparados para usar ao personalizar seu modelo. O painel Dados de treinamento exibe todos os conjuntos de dados existentes carregados anteriormente e também oferece opções para carregar novos dados de treinamento.

Captura de tela do painel Dados de treinamento do assistente Criar modelo personalizado no Azure OpenAI Studio.

Para arquivos de dados grandes, recomendamos que você importe de um armazenamento de Blob do Azure. Arquivos grandes podem se tornar instáveis quando carregados por meio de formulários de várias partes porque as solicitações são atômicas e não podem ser repetidas ou retomadas. Para obter mais informações sobre o Armazenamento de Blobs do Azure, confira O que é o Armazenamento de Blobs do Azure?

Observação

Arquivos de dados de treinamento devem ser formatados como arquivos JSONL, codificados em UTF-8 com uma marca de ordem de byte (BOM). O arquivo deve ter menos de 512 MB de tamanho.

Carregar dados de treinamento do arquivo local

Você pode carregar um novo conjunto de dados de treinamento para o serviço de um arquivo local usando um dos seguintes métodos:

  • Arraste e solte o arquivo na área do cliente do painel Dados de treinamento e selecione Carregar arquivo.

  • Selecione Procurar um arquivo na área do cliente do painel Dados de treinamento, escolha o arquivo a ser carregado na caixa de diálogo Abrir e selecione Carregar arquivo.

Depois de selecionar e carregar o conjunto de dados de treinamento, selecione Avançar para continuar.

Captura de tela do painel Dados de treinamento do assistente Criar modelo personalizado, com as opções de arquivo local.

Importar dados de treinamento de um repositório de Blobs do Azure

Você pode importar um conjunto de dados de treinamento do Blob do Azure ou de outro local da Web compartilhado fornecendo o nome e o local do arquivo.

  1. Insira o Nome do arquivo.

  2. Para o Local do arquivo, forneça a URL do Blob do Azure, a SAS (assinatura de acesso compartilhado) do Armazenamento do Azure ou outro link para um local da Web compartilhado acessível.

  3. Selecione Importar para importar o conjunto de dados de treinamento para o serviço.

Depois de selecionar e carregar o conjunto de dados de treinamento, selecione Avançar para continuar.

Captura de tela do painel Dados de treinamento para o assistente Criar modelo personalizado, com o Blob do Azure e opções de localização da Web compartilhadas.

Escolha seus dados de validação

A próxima etapa fornece opções para configurar o modelo para usar dados de validação no processo de treinamento. Se você não quiser usar dados de validação, você pode escolher Avançarpara continuar com as opções avançadas do modelo. Caso contrário, se você tiver um conjunto de dados de validação, poderá escolher os dados de validação preparados existentes ou carregar novos dados de validação preparados a serem usados ao personalizar seu modelo.

O painel Dados de validação exibe todos os conjuntos de dados de treinamento e validação existentes e carregados anteriormente e fornece opções pelas quais você pode carregar novos dados de validação.

Captura de tela do painel Dados de validação do assistente Criar modelo personalizado no Azure OpenAI Studio.

Para arquivos de dados grandes, recomendamos que você importe de um armazenamento de Blob do Azure. Arquivos grandes podem se tornar instáveis quando carregados por meio de formulários de várias partes porque as solicitações são atômicas e não podem ser repetidas ou retomadas.

Observação

Semelhante aos arquivos de dados de treinamento, os arquivos de dados de validação devem ser formatados como arquivos JSONL, codificados em UTF-8 com uma marca de ordem de byte (BOM). O arquivo deve ter menos de 512 MB de tamanho.

Carregar dados de validação do arquivo local

Você pode carregar um novo conjunto de dados de validação para o serviço de um arquivo local usando um dos seguintes métodos:

  • Arraste e solte o arquivo na área do cliente do painel Dados de validação e selecione Carregar arquivo.

  • Selecione Procurar um arquivo na área do cliente do painel Dados de validação, escolha o arquivo a ser carregado na caixa de diálogo Abrir e selecione Carregar arquivo.

Depois de selecionar e carregar o conjunto de dados de validação, selecione Avançar para continuar.

Captura de tela do painel Dados de validação do assistente Criar modelo personalizado, com as opções de arquivo local.

Importar dados de validação do armazenamento do Blobs do Azure

Você pode importar um conjunto de dados de validação do Blob do Azure ou de outro local da Web compartilhado fornecendo o nome e o local do arquivo.

  1. Insira o Nome do arquivo.

  2. Para o Local do arquivo, forneça a URL do Blob do Azure, a SAS (assinatura de acesso compartilhado) do Armazenamento do Azure ou outro link para um local da Web compartilhado acessível.

  3. Selecione Importar para importar o conjunto de dados de treinamento para o serviço.

Depois de selecionar e carregar o conjunto de dados de validação, selecione Avançar para continuar.

Captura de tela do painel Dados de validação para o assistente Criar modelo personalizado, com o Blob do Azure e opções de localização da Web compartilhadas.

Configurar os parâmetros de tarefa

O assistente Criar modelo personalizado mostra os parâmetros para treinar seu modelo ajustado no painel Parâmetros de tarefa. Estão disponíveis os seguintes parâmetros:

Nome Tipo Descrição
batch_size Número inteiro O tamanho do lote que será usado para treinamento. O tamanho do lote é o número de exemplos de treinamento usados para treinar uma única passagem para frente e para trás. Em geral, descobrimos que tamanhos de lote maiores tendem a funcionar melhor para conjuntos de dados maiores. O valor padrão, bem como o valor máximo dessa propriedade, são específicos para um modelo base. Um tamanho de lote maior significa que os parâmetros de modelo são atualizados com menos frequência, mas com menor variação.
learning_rate_multiplier número O multiplicador de taxa de aprendizado a ser usado para treinamento. A taxa de aprendizado de ajuste fino é a taxa de aprendizado original usada para pré-treinamento multiplicada por esse valor. Taxas de aprendizagem maiores tendem a ter um desempenho melhor com tamanhos de lote maiores. É recomendável experimentar valores no intervalo de 0,02 a 0,2 para ver o que produz os melhores resultados. Uma taxa de aprendizagem menor pode ser útil para evitar o sobreajuste.
n_epochs Número inteiro O número de períodos para treinamento do modelo. Um período refere-se a um ciclo completo através do conjunto de dados de treinamento.
seed Número inteiro A semente controla a reprodutibilidade do trabalho. Passar os mesmos parâmetros iniciais e de trabalho deve produzir os mesmos resultados, mas pode diferir em casos raros. Se uma semente não for especificada, uma será gerada para você

Captura de tela do painel Opções avançadas para o assistente Criar modelo personalizado, com opções padrão selecionadas.

Selecione Padrão para usar os valores padrão para o trabalho de ajuste fino ou selecione Personalizar para exibir e editar os valores do hiperparâmetro. Quando os padrões são selecionados, determinamos o valor correto por meio de algoritmos com base nos seus dados de treinamento.

Após configurar as opções avançadas, selecione Avançar para examinar suas escolhas e treinar seu modelo ajustado.

Examinar suas escolhas e treinar seu modelo

O painel Revisão do assistente exibe informações sobre suas opções de configuração.

Captura de tela do painel Revisão do assistente Criar modelo personalizado no Azure OpenAI Studio.

Se você estiver pronto para treinar seu modelo, selecione Iniciar trabalho de Treinamento para iniciar o trabalho de ajuste fino e retornar ao painel Modelos.

Verificar o status do seu modelo personalizado

O painel Modelos exibe informações sobre seu modelo personalizado na guia Modelos personalizados. A guia inclui informações sobre o status e a ID do trabalho de ajuste fino para seu modelo personalizado. Quando o trabalho for concluído, a guia exibirá a ID do arquivo de resultado. Talvez seja necessário selecionar Atualizar para ver um status atualizado para o trabalho de treinamento de modelo.

Captura de tela do painel Models do Azure OpenAI Studio, com um modelo personalizado exibido.

Depois de iniciar um trabalho de ajuste fino, pode levar algum tempo para ser concluído. Seu trabalho pode estar na fila por trás de outros trabalhos no sistema. O treinamento do modelo pode levar minutos ou horas, dependendo do tamanho do modelo e do conjunto de dados.

Aqui estão algumas das tarefas que você pode fazer no painel Modelos :

  • Verifique o status do trabalho de ajuste fino para seu modelo personalizado na coluna Status da guia Modelos personalizados.

  • Na coluna Nome do modelo, selecione o nome do modelo para exibir mais informações sobre o modelo personalizado. Você pode ver o status do trabalho de ajuste fino, resultados de treinamento, eventos de treinamento e hiperparâmetros usados no trabalho.

  • Selecione Baixar arquivo de treinamento para baixar os dados de treinamento usados para o modelo.

  • Selecione Baixar resultados para baixar o arquivo de resultados anexado ao trabalho de ajuste fino para seu modelo e analisar seu modelo personalizado para treinamento e desempenho de validação.

  • Selecione Atualizar para atualizar a informação a página.

Captura de tela do painel Models no Azure OpenAI Studio, com um modelo personalizado exibido.

Pontos de verificação

Quando cada época de treinamento é concluída, um ponto de verificação é gerado. Um ponto de verificação é uma versão totalmente funcional de um modelo que pode ser implantado e usado como modelo de destino para trabalhos de ajuste fino subsequentes. Os checkpoints podem ser particularmente úteis, pois podem fornecer um instantâneo do seu modelo antes de ocorrer o sobreajuste. Quando um trabalho de ajuste fino for concluído, você terá as três versões mais recentes do modelo disponíveis para implantação.

Avaliação de segurança de ajuste fino do GPT-4, GPT-4o e GPT-4o-mini – visualização pública

GPT-4o, GPT-4o-mini e GPT-4 são os nossos modelos mais avançados que podem ser ajustados às suas necessidades. Assim como acontece com os modelos do Azure OpenAI em geral, os recursos avançados de modelos com ajuste fino vêm com desafios de IA responsável maiores relacionados a conteúdo prejudicial, manipulação, comportamento humano, problemas de privacidade e muito mais. Saiba mais sobre riscos, funcionalidades e limitações na Visão geral das práticas de IA responsável e Nota de transparência. Para ajudar a atenuar os riscos associados a modelos avançados com ajuste fino, implementamos etapas de avaliação adicionais para ajudar a detectar e prevenir conteúdo nocivo no treinamento e nas saídas de modelos com ajuste fino. Essas etapas são fundamentadas na filtragem de conteúdo do Microsoft Responsible AI Standard e do Serviço OpenAI do Azure.

  • As avaliações são realizadas em workspaces dedicados, específicos do cliente e privados;
  • Os pontos de extremidade de avaliação estão na mesma área geográfica que o recurso do Azure OpenAI;
  • Os dados de treinamento não são armazenados em conexão com a execução de avaliações; somente a avaliação final do modelo (implantável ou não implantável) é mantida; e

Os filtros de avaliação de modelo com ajuste fino do GPT-4o, GPT-4o-mini e GPT-4 são definidos com limites predefinidos e não podem ser modificados pelos clientes; eles não estão vinculados a nenhuma configuração de filtragem de conteúdo personalizada que você possa ter criado.

Avaliação dos dados

Antes do início do treinamento, seus dados são avaliados quanto a conteúdo potencialmente prejudicial (violência, sexual, ódio e imparcialidade, automutilação – confira as definições de categoria aqui). Se conteúdo nocivo for detectado acima do nível de gravidade especificado, o trabalho de treinamento falhará e você receberá uma mensagem informando sobre as categorias de falha.

Mensagem de exemplo:

The provided training data failed RAI checks for harm types: [hate_fairness, self_harm, violence]. Please fix the data and try again.

Seus dados de treinamento são avaliados automaticamente em seu trabalho de importação de dados como parte do fornecimento da funcionalidade de ajuste fino.

Se o trabalho de ajuste fino falhar devido à detecção de conteúdo prejudicial nos dados de treinamento, você não será cobrado.

Avaliação de modelos

Após a conclusão do treinamento, mas antes que o modelo ajustado esteja disponível para implantação, o modelo resultante é avaliado quanto à presença de respostas potencialmente prejudiciais usando as métricas de risco e segurança internas do Azure. Usando a mesma abordagem de teste que usamos para os modelos de linguagem grandes de base, nossa capacidade de avaliação simula uma conversa com o seu modelo ajustado para avaliar o potencial de produzir conteúdo prejudicial, novamente usando categorias de conteúdo nocivo especificadas (violência, sexual, ódio e imparcialidade, automutilação).

Se for encontrado um modelo para gerar uma saída que contenha conteúdo detectado como prejudicial acima de uma taxa aceitável, você será informado de que seu modelo não está disponível para implantação, com informações sobre as categorias específicas de danos detectadas:

Mensagem de exemplo:

This model is unable to be deployed. Model evaluation identified that this fine tuned model scores above acceptable thresholds for [Violence, Self Harm]. Please review your training data set and resubmit the job.

Captura de tela de um trabalho de ajuste fino com falha devido à avaliação de segurança

Assim como na avaliação de dados, o modelo é avaliado automaticamente em seu trabalho de ajuste fino como parte do fornecimento da funcionalidade de ajuste fino. Somente a avaliação resultante (implantável ou não implantável) é registrada pelo serviço. Se a implantação do modelo com ajuste fino falhar devido à detecção de conteúdo prejudicial em saídas de modelo, você não será cobrado pela execução do treinamento.

Implantar um modelo ajustado

Quando o trabalho de ajuste fino for bem-sucedido, você poderá implantar o modelo personalizado no painel Modelos. Você deve implantar seu modelo personalizado para disponibilizá-lo para uso com chamadas de conclusão.

Importante

Depois de implantar um modelo personalizado, se, a qualquer momento, a implantação permanecer inativa por mais de quinze (15) dias, a implantação será excluída. A implantação de um modelo personalizado torna-se inativa se o modelo tiver sido implantado há mais de quinze (15) dias e não foram feitas chamadas de conclusão ou de chat durante 15 dias consecutivos.

A exclusão de uma implantação inativa não exclui ou afeta o modelo personalizado subjacente, e o modelo personalizado pode ser reimplantado a qualquer momento. Conforme descrito em Preços do Serviço OpenAI do Azure, cada modelo personalizado (ajustado) implantado incorre em um custo de hospedagem por hora, independentemente de as chamadas de conclusão ou conclusão de bate-papo estarem sendo feitas para o modelo. Para saber mais sobre como planejar e gerenciar custos com o OpenAI do Azure, consulte as orientações em Planejar o gerenciamento de custos para o Serviço OpenAI do Azure.

Observação

Somente uma implantação é permitida para um modelo personalizado. Uma mensagem de erro será exibida se você selecionar um modelo personalizado já implantado.

Para implantar seu modelo personalizado, selecione o modelo personalizado a ser implantado e, em seguida, selecione Implantar modelo.

Captura de tela que mostra como implantar um modelo personalizado no Azure OpenAI Studio.

A caixa de diálogo Implantar modelo é aberta. Na caixa de diálogo, insira o nome da implantação e selecione Criar para iniciar a implantação do modelo personalizado.

Captura de tela da caixa de diálogo Implantar Modelo do Estúdio OpenAI no Azure.

Você pode monitorar o progresso da implantação no painel Implantações no Estúdio OpenAI do Azure.

Implantação entre regiões

O ajuste fino dá suporte à implantação de um modelo ajustado em uma região diferente da qual o modelo foi ajustado originalmente. Você também pode implantar em uma assinatura/região diferente.

As únicas limitações são que a nova região também deve dar suporte ao ajuste fino e, ao implantar a assinatura cruzada, a conta que gera o token de autorização para a implantação deve ter acesso às assinaturas de origem e de destino.

A implantação entre assinaturas/regiões pode ser realizada por meio de Python ou REST.

Usar um modelo personalizado implantado

Depois que seu modelo personalizado for implantado, você poderá usá-lo como qualquer outro modelo implantado. Você pode usar os Playgrounds no Azure OpenAI Studio para experimentar sua nova implantação. Você pode continuar a usar os mesmos parâmetros com o seu modelo personalizado, como temperature e max_tokens, como faz com outros modelos implantados. Para modelos de babbage-002 e davinci-002 ajustados, você usará o playground de Conclusões e a API de Conclusões. Para modelos de gpt-35-turbo-0613 ajustados, você usará o playground de chat e a API de conclusão do Chat.

Captura de tela do painel Playground no Azure OpenAI Studio, com as seções destacadas.

Analisar seu modelo personalizado

O Azure OpenAI anexa um arquivo de resultados chamado results.csv a cada trabalho de ajuste fino após a conclusão. Você pode usar o arquivo de resultado para analisar o desempenho de treinamento e validação do modelo personalizado. A ID do arquivo de resultado é listada para cada modelo personalizado na coluna ID do arquivo de resultado do painel Modelos no Estúdio OpenAI do Azure. Você pode usar a ID do arquivo para identificar e baixar o arquivo de resultado do Arquivos de dados painel do Azure OpenAI Studio.

O arquivo de resultado é um arquivo CSV que contém uma linha de cabeçalho e uma linha para cada etapa de treinamento executada pelo trabalho de ajuste fino. O arquivo de resultado contém as seguintes colunas:

Nome da coluna Descrição
step O número da etapa de treinamento. Uma etapa de treinamento representa um único passe, para frente e para trás, em um lote de dados de treinamento.
train_loss A perda do lote de treinamento.
train_mean_token_accuracy A porcentagem de tokens no lote de treinamento previstos corretamente pelo modelo.
Por exemplo, se o tamanho do lote for definido como 3 e seus dados contiverem conclusões [[1, 2], [0, 5], [4, 2]], esse valor será definido como 0,83 (5 de 6) se o modelo previsto for [[1, 1], [0, 5], [4, 2]].
valid_loss A perda do lote de validação.
validation_mean_token_accuracy A porcentagem de tokens no lote de validação previstos corretamente pelo modelo.
Por exemplo, se o tamanho do lote for definido como 3 e seus dados contiverem conclusões [[1, 2], [0, 5], [4, 2]], esse valor será definido como 0,83 (5 de 6) se o modelo previsto for [[1, 1], [0, 5], [4, 2]].
full_valid_loss A perda de validação calculada no final de cada época. Quando o treino corre bem, a perda deve diminuir.
full_valid_mean_token_accuracy A precisão média válida do token calculada no final de cada época. Quando o treinamento está indo bem, a precisão do token deve aumentar.

Você também pode exibir os dados no arquivo results.csv como gráficos no Azure OpenAI Studio. Selecione o link de um modelo treinado e você verá três gráficos: perda, precisão média de token e precisão de token. Se você forneceu dados de validação, ambos os conjuntos de dados aparecerão no mesmo gráfico.

Observe que sua perda diminui com o tempo e sua precisão aumenta. Se houver uma divergência entre os dados de treinamento e de validação, isso pode indicar que você está com sobreajuste. Tente treinar com menos épocas ou com um multiplicador de taxa de aprendizado menor.

Limpar suas implantações, modelos de personalizados e arquivos de treinamento

Quando terminar o modelo personalizado, você poderá excluir a implantação e o modelo. Você também pode excluir os arquivos de treinamento e validação carregados no serviço, se necessário.

Excluir a implantação do modelo

Importante

Depois de implantar um modelo personalizado, se, a qualquer momento, a implantação permanecer inativa por mais de quinze (15) dias, a implantação será excluída. A implantação de um modelo personalizado torna-se inativa se o modelo tiver sido implantado há mais de quinze (15) dias e não foram feitas chamadas de conclusão ou de chat durante 15 dias consecutivos.

A exclusão de uma implantação inativa não exclui ou afeta o modelo personalizado subjacente, e o modelo personalizado pode ser reimplantado a qualquer momento. Conforme descrito em Preços do Serviço OpenAI do Azure, cada modelo personalizado (ajustado) implantado incorre em um custo de hospedagem por hora, independentemente de as chamadas de conclusão ou conclusão de bate-papo estarem sendo feitas para o modelo. Para saber mais sobre como planejar e gerenciar custos com o OpenAI do Azure, consulte as orientações em Planejar o gerenciamento de custos para o Serviço OpenAI do Azure.

Você pode excluir a implantação do seu modelo personalizado no painel Implantações no Azure OpenAI Studio. Selecione a implantação a ser excluída e, em seguida, selecione Excluir para excluir a implantação.

Usar seu modelo personalizado

Você pode excluir um modelo personalizado no painel Modelos no Azure OpenAI Studio. Selecione o modelo personalizado a ser excluído da guia Modelos personalizados e selecione Excluir para excluir o modelo personalizado.

Observação

Você não poderá excluir um modelo personalizado se ele tiver uma implantação existente. Primeiro, você deve excluir a implantação do modelo antes de poder excluir o modelo personalizado.

Excluir seus arquivos de treinamento

Opcionalmente, você pode excluir os arquivos de treinamento e validação carregados para treinamento e os arquivos de resultados gerados durante o treinamento, no painel Gerenciamento de >Arquivos de dados no Azure OpenAI Studio. Selecione o arquivo a ser excluído e, em seguida, selecione Excluir para excluir o arquivo.

Ajuste fino contínuo

Depois de criar um modelo ajustado, convém continuar a refinar o modelo ao longo do tempo por meio de ajustes mais finos. O ajuste fino contínuo é o processo iterativo de selecionar um modelo já ajustado como um modelo base e ajustá-lo ainda mais em novos conjuntos de exemplos de treinamento.

Para executar o ajuste fino em um modelo que você ajustou anteriormente, você usaria o mesmo processo descrito em criar um modelo personalizado mas, em vez de especificar o nome de um modelo base genérico, você especificaria seu modelo já ajustado. Um modelo personalizado e ajustado seria parecido com gpt-35-turbo-0613.ft-5fd1918ee65d4cd38a5dcf6835066ed7

Captura de tela da interface do usuário Criar um modelo personalizado com um modelo ajustado realçado.

Também recomendamos incluir o parâmetro suffix para facilitar a distinção entre diferentes iterações do seu modelo ajustado. suffix usa uma cadeia de caracteres e está definido para identificar o modelo ajustado. Com a API do Python OpenAI, há suporte para uma cadeia de caracteres de até 18 caracteres que será adicionada ao seu nome de modelo ajustado.

Importante

Os itens marcados (versão prévia) neste artigo estão atualmente em versão prévia pública. Essa versão prévia é fornecida sem um contrato de nível de serviço e não recomendamos isso para cargas de trabalho de produção. Alguns recursos podem não ter suporte ou podem ter restrição de recursos. Para obter mais informações, consulte Termos de Uso Complementares de Versões Prévias do Microsoft Azure.

Pré-requisitos

Modelos

Os seguintes modelos dão suporte ao ajuste fino:

  • babbage-002
  • davinci-002
  • gpt-35-turbo (0613)
  • gpt-35-turbo (1106)
  • gpt-35-turbo (0125)
  • gpt-4 (0613)*
  • gpt-4o (2024-08-06)
  • gpt-4o-mini (18/07/2024)

* O ajuste fino desse modelo está atualmente em visualização pública.

Ou você pode fazer o ajuste fino de um modelo previamente ajustado, formatado como base-model.ft-{jobid}.

Consulte a página de modelos para verificar quais regiões atualmente dão suporte ao ajuste fino.

Examinar o fluxo de trabalho do Estúdio de IA do Azure

Reserve um momento para examinar o fluxo de trabalho de ajuste fino para usar o Estúdio de IA do Azure:

  1. Preparar seus dados de treinamento e validação.
  2. Use o assistente para Fazer ajuste fino de modelo no Estúdio de IA do Azure para treinar seu modelo personalizado.
    1. Selecione um modelo.
    2. Escolher seus dados de treinamento.
    3. Opcionalmente, escolha seus dados de validação.
    4. Opcionalmente, configure seus parâmetros para seu trabalho de ajuste fino.
    5. Examine suas escolhas e treine seu novo modelo personalizado
  3. Verifique o status do seu modelo ajustado.
  4. Opcionalmente, analise o desempenho e adequação do seu modelo ajustado.
  5. Implante seu modelo ajustado para uso.
  6. Use seu modelo ajustado.

Preparar seus dados de treinamento e validação

Seu conjunto de dados de treinamento e de validação consiste em exemplos de saída de entrada e saída para o desempenho do modelo.

Diferentes tipos de modelo exigem um formato diferente de dados de treinamento.

Os dados de treinamento e validação usados devem ser formatados como um documento JSONL (Linhas JSON). Para gpt-35-turbo-0613 o conjunto de dados de ajuste fino deve ser formatado no formato de conversa que é usado pelas conclusões do Chat API.

Se você quiser um passo a passo de ajuste fino de um modelo gpt-35-turbo-0613, consulte o Tutorial de ajuste fino do OpenAI do Azure.

Formato de arquivo de exemplo

{"messages": [{"role": "system", "content": "You are an Xbox customer support agent whose primary goal is to help users with issues they are experiencing with their Xbox devices. You are friendly and concise. You only provide factual answers to queries, and do not provide answers that are not related to Xbox."}, {"role": "user", "content": "Is Xbox better than PlayStation?"}, {"role": "assistant", "content": "I apologize, but I cannot provide personal opinions. My primary job is to assist you with any issues related to your Xbox device. Do you have any Xbox-related issues that need addressing?"}]}
{"messages": [{"role": "system", "content": "You are an Xbox customer support agent whose primary goal is to help users with issues they are experiencing with their Xbox devices. You are friendly and concise. You only provide factual answers to queries, and do not provide answers that are not related to Xbox."}, {"role": "user", "content": "Can I play PC games on my Xbox?"}, {"role": "assistant", "content": "While Xbox consoles don't natively support PC games, they can play an array of Xbox games, many of which are also available on PC. Can I assist you with finding games compatible with your Xbox device?"}]}
{"messages": [{"role": "system", "content": "You are an Xbox customer support agent whose primary goal is to help users with issues they are experiencing with their Xbox devices. You are friendly and concise. You only provide factual answers to queries, and do not provide answers that are not related to Xbox."}, {"role": "user", "content": "I'm having trouble connecting my Xbox to the Wi-Fi."}, {"role": "assistant", "content": "No worries, let's go through the network settings on your Xbox. Can you please tell me what happens when you try to connect it to the Wi-Fi?"}]}

Formato de arquivo de chat multiturno

Também há suporte para vários turnos de conversa em uma única linha do seu arquivo de treinamento jsonl. Para pular o ajuste fino em mensagens específicas do assistente, adicione o par de weight valores-chave opcional. 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}]}

Além do formato JSONL, os arquivos de dados de treinamento e validação devem ser codificados em UTF-8 e incluir uma marca de ordem de byte (BOM). O arquivo deve ter menos de 512 MB de tamanho.

Crie seus conjuntos de dados de treinamento e validação

Quanto mais exemplos de treinamento você tiver, melhor. Os trabalhos de ajuste fino não prosseguirão sem pelo menos 10 exemplos de treinamento, mas um número tão pequeno não é suficiente para influenciar visivelmente as respostas do modelo. A melhor prática é fornecer centenas, se não milhares, de exemplos de treinamento para ter sucesso.

Em geral, dobrar o tamanho do conjunto de dados pode levar a um aumento linear na qualidade do modelo. Mas tenha em mente que exemplos de baixa qualidade podem afetar negativamente o desempenho. Se você treinar o modelo em uma grande quantidade de dados internos, sem primeiro podar o conjunto de dados apenas para os exemplos de mais alta qualidade, você poderá acabar com um modelo que tenha um desempenho muito pior do que o esperado.

Criar seu modelo ajustado

Para ajustar um modelo do OpenAI do Azure em um projeto existente do Estúdio de IA do Azure, siga estas etapas:

  1. Entre no Estúdio de IA do Azure e selecione seu projeto. Caso ainda não tenha um projeto, primeiro crie um.

  2. No menu esquerdo recolhível, selecione Ajuste fino>+ Modelo de ajuste fino.

    Captura de tela da opção de criar um modelo ajustado.

Selecione um modelo base

  1. Selecione um modelo base para o ajuste fino. Sua escolha influencia tanto o desempenho quanto o custo do modelo. Neste exemplo, escolhemos o modelo gpt-35-turbo. Em seguida, selecione Confirmar.

    Captura de tela da opção para selecionar um modelo para ajustar.

  2. Para gpt-35-turbo, temos versões diferentes disponíveis para ajuste fino, portanto, escolha qual versão você gostaria de ajustar. Escolheremos (0301).

  3. Também recomendamos incluir o parâmetro suffix para facilitar a distinção entre diferentes iterações do seu modelo ajustado. suffix usa uma cadeia de caracteres e está definido para identificar o modelo ajustado. Com a API do Python OpenAI, há suporte para uma cadeia de caracteres de até 18 caracteres que será adicionada ao seu nome de modelo ajustado.

Se você tiver mais de uma conexão do OpenAI do Azure habilitada para ajuste fino, escolha qual recurso usar. Observe que todos os usuários com acesso ao recurso do OpenAI do Azure terão acesso a esse modelo ajustado.

  1. Em seguida, selecione Avançar.

    Captura de tela das configurações básicas para fazer ajuste fino de um modelo.

Escolher seus dados de treinamento

A próxima etapa é escolher dados de treinamento preparados existentes ou carregar novos dados de treinamento preparados para usar ao personalizar seu modelo. O painel Dados de treinamento exibe todos os conjuntos de dados existentes carregados anteriormente e também oferece opções para carregar novos dados de treinamento.

Captura de tela do painel Dados de treinamento do assistente para Fazer ajuste fino de modelo no Estúdio de IA do Azure.

  • Se os dados de treinamento já estiverem no seu projeto, selecione Dados no Estúdio de IA do Azure.

    • Selecione o arquivo na lista mostrada no painel Dados de treinamento.
  • Se os dados de treinamento já estiverem carregados no serviço OpenAI do Azure, selecione sua conexão do OpenAI do Azure em Conexão OpenAI do Azure.

  • Para carregar dados de treinamento para ajustar seu modelo, selecione Carregar dados e selecione Carregar arquivo.

    • Verifique se todos os seus exemplos de treinamento seguem o formato esperado para inferência. Para ajustar os modelos com eficiência, garanta um conjunto de dados equilibrado e diversificado. Isso envolve manter o equilíbrio de dados, incluindo vários cenários e refinar periodicamente dados de treinamento para se alinhar às expectativas do mundo real, levando a respostas de modelo mais precisas e equilibradas. Confira a preparação de dados para obter mais informações.
    • Para arquivos de dados grandes, recomendamos que você importe de um armazenamento de Blob do Azure. Arquivos grandes podem se tornar instáveis quando carregados por meio de formulários de várias partes porque as solicitações são atômicas e não podem ser repetidas ou retomadas. Para obter mais informações sobre o Armazenamento de Blobs do Azure, confira O que é o Armazenamento de Blobs do Azure?

Observação

Arquivos de dados de treinamento devem ser formatados como arquivos JSONL, codificados em UTF-8 com uma marca de ordem de byte (BOM). O arquivo deve ter menos de 512 MB de tamanho.

Captura de tela da opção para carregar dados de treinamento localmente.

Depois de carregar os arquivos, você verá uma pré-visualização dos dados de treinamento. Selecione Avançar para continuar.

Captura de tela da pré-visualização de dados de treinamento.

Escolha seus dados de validação

Opcionalmente, você pode escolher fornecer dados de validação para ajustar seu modelo. Se você não quiser usar dados de validação, você pode selecionar Nenhum e Avançar para continuar com as opções avançadas do modelo.

Caso contrário, se você tiver um conjunto de dados de validação, poderá escolher os dados previamente carregados ou carregar novos dados de validação preparados a serem usados para ajuste fino do seu modelo.

Observação

Semelhante aos arquivos de dados de treinamento, os arquivos de dados de validação devem ser formatados como arquivos JSONL, codificados em UTF-8 com uma marca de ordem de byte (BOM). O arquivo deve ter menos de 512 MB de tamanho.

Configurar seus parâmetros

Opcionalmente, configure os parâmetros para seu trabalho de ajuste fino. Os itens a seguir estão disponíveis:

Nome Tipo Descrição
batch_size Número inteiro O tamanho do lote que será usado para treinamento. O tamanho do lote é o número de exemplos de treinamento usados para treinar uma única passagem para frente e para trás. Em geral, descobrimos que tamanhos de lote maiores tendem a funcionar melhor para conjuntos de dados maiores. O valor padrão, bem como o valor máximo dessa propriedade, são específicos para um modelo base. Um tamanho de lote maior significa que os parâmetros de modelo são atualizados com menos frequência, mas com menor variação. Quando definido como -1, batch_size é calculado como 0,2% dos exemplos no conjunto de treinamento e o máximo é 256.
learning_rate_multiplier número O multiplicador de taxa de aprendizado a ser usado para treinamento. A taxa de aprendizado de ajuste fino é a taxa de aprendizado original usada para pré-treinamento multiplicada por esse valor. Taxas de aprendizagem maiores tendem a ter um desempenho melhor com tamanhos de lote maiores. É recomendável experimentar valores no intervalo de 0,02 a 0,2 para ver o que produz os melhores resultados. Uma taxa de aprendizagem menor pode ser útil para evitar o sobreajuste.
n_epochs Número inteiro O número de períodos para treinamento do modelo. Um período refere-se a um ciclo completo através do conjunto de dados de treinamento. Se definido como -1, o número de épocas é determinado dinamicamente com base nos dados de entrada.
seed Número inteiro A semente controla a reprodutibilidade do trabalho. Passar os mesmos parâmetros iniciais e de trabalho deve produzir os mesmos resultados, mas pode diferir em casos raros. Se uma semente não for especificada, uma será gerada para você.

Você pode optar por deixar a configuração padrão ou personalizar os valores de acordo com sua preferência. Depois de terminar de fazer suas configurações, selecione Avançar.

Examinar suas escolhas e treinar seu modelo

Examine suas escolhas e selecione Enviar para começar a treinar seu novo modelo ajustado.

Verificar o status do seu modelo ajustado

Depois de enviar seu trabalho de ajuste fino, você verá uma página com detalhes sobre seu modelo ajustado. Você pode encontrar o status e mais informações sobre seu modelo ajustado na página Ajuste fino>Modelos no Estúdio de IA do Azure.

Seu trabalho pode estar na fila por trás de outros trabalhos no sistema. O treinamento do modelo pode levar minutos ou horas, dependendo do tamanho do modelo e do conjunto de dados.

Analisar seu modelo ajustado

Depois que o ajuste fino for concluído com êxito, você poderá baixar um arquivo de resultado chamado results.csv da página do modelo ajustado na guia Detalhes. Você pode usar o arquivo de resultado para analisar o desempenho de treinamento e validação do modelo personalizado.

O arquivo de resultado é um arquivo CSV que contém uma linha de cabeçalho e uma linha para cada etapa de treinamento executada pelo trabalho de ajuste fino. O arquivo de resultado contém as seguintes colunas:

Nome da coluna Descrição
step O número da etapa de treinamento. Uma etapa de treinamento representa um único passe, para frente e para trás, em um lote de dados de treinamento.
train_loss A perda do lote de treinamento.
train_mean_token_accuracy A porcentagem de tokens no lote de treinamento previstos corretamente pelo modelo.
Por exemplo, se o tamanho do lote for definido como 3 e seus dados contiverem conclusões [[1, 2], [0, 5], [4, 2]], esse valor será definido como 0,83 (5 de 6) se o modelo previsto for [[1, 1], [0, 5], [4, 2]].
valid_loss A perda do lote de validação.
validation_mean_token_accuracy A porcentagem de tokens no lote de validação previstos corretamente pelo modelo.
Por exemplo, se o tamanho do lote for definido como 3 e seus dados contiverem conclusões [[1, 2], [0, 5], [4, 2]], esse valor será definido como 0,83 (5 de 6) se o modelo previsto for [[1, 1], [0, 5], [4, 2]].
full_valid_loss A perda de validação calculada no final de cada época. Quando o treino corre bem, a perda deve diminuir.
full_valid_mean_token_accuracy A precisão média válida do token calculada no final de cada época. Quando o treinamento está indo bem, a precisão do token deve aumentar.

Você também pode ver os dados em seu arquivo results.csv como gráficos no Estúdio de IA do Azure na guia Métricas do seu modelo ajustado. Selecione o link para o modelo treinado e você verá dois gráficos: perda e precisão de token. Se você forneceu dados de validação, ambos os conjuntos de dados aparecerão no mesmo gráfico.

Captura de tela da interface do usuário das métricas.

Observe que sua perda diminui com o tempo e sua precisão aumenta. Se houver uma divergência entre os dados de treinamento e de validação, isso pode indicar que você está com sobreajuste. Tente treinar com menos épocas ou com um multiplicador de taxa de aprendizado menor.

Pontos de verificação

Quando cada época de treinamento é concluída, um ponto de verificação é gerado. Um ponto de verificação é uma versão totalmente funcional de um modelo que pode ser implantado e usado como modelo de destino para trabalhos de ajuste fino subsequentes. Os checkpoints podem ser particularmente úteis, pois podem fornecer um instantâneo do seu modelo antes de ocorrer o sobreajuste. Quando um trabalho de ajuste fino for concluído, você terá as três versões mais recentes do modelo disponíveis para implantação.

Captura de tela da interface do usuário dos pontos de verificação.

Avaliação de segurança do ajuste fino do GPT-4, GPT-4o, GPT-4o-mini – Visualização pública

GPT-4o, GPT-4o-mini e GPT-4 são os nossos modelos mais avançados que podem ser ajustados às suas necessidades. Assim como acontece com os modelos do Azure OpenAI em geral, os recursos avançados de modelos com ajuste fino vêm com desafios de IA responsável maiores relacionados a conteúdo prejudicial, manipulação, comportamento humano, problemas de privacidade e muito mais. Saiba mais sobre riscos, funcionalidades e limitações na Visão geral das práticas de IA responsável e Nota de transparência. Para ajudar a atenuar os riscos associados a modelos avançados com ajuste fino, implementamos etapas de avaliação adicionais para ajudar a detectar e prevenir conteúdo nocivo no treinamento e nas saídas de modelos com ajuste fino. Essas etapas são fundamentadas na filtragem de conteúdo do Microsoft Responsible AI Standard e do Serviço OpenAI do Azure.

  • As avaliações são realizadas em workspaces dedicados, específicos do cliente e privados;
  • Os pontos de extremidade de avaliação estão na mesma área geográfica que o recurso do Azure OpenAI;
  • Os dados de treinamento não são armazenados em conexão com a execução de avaliações; somente a avaliação final do modelo (implantável ou não implantável) é mantida; e

Os filtros de avaliação de modelo com ajuste fino do GPT-4o, GPT-4o-mini e GPT-4 são definidos com limites predefinidos e não podem ser modificados pelos clientes; eles não estão vinculados a nenhuma configuração de filtragem de conteúdo personalizada que você possa ter criado.

Avaliação dos dados

Antes do início do treinamento, seus dados são avaliados quanto a conteúdo potencialmente prejudicial (violência, sexual, ódio e imparcialidade, automutilação – confira as definições de categoria aqui). Se conteúdo nocivo for detectado acima do nível de gravidade especificado, o trabalho de treinamento falhará e você receberá uma mensagem informando sobre as categorias de falha.

Mensagem de exemplo:

The provided training data failed RAI checks for harm types: [hate_fairness, self_harm, violence]. Please fix the data and try again.

Seus dados de treinamento são avaliados automaticamente em seu trabalho de importação de dados como parte do fornecimento da funcionalidade de ajuste fino.

Se o trabalho de ajuste fino falhar devido à detecção de conteúdo prejudicial nos dados de treinamento, você não será cobrado.

Avaliação de modelos

Após a conclusão do treinamento, mas antes que o modelo ajustado esteja disponível para implantação, o modelo resultante é avaliado quanto à presença de respostas potencialmente prejudiciais usando as métricas de risco e segurança internas do Azure. Usando a mesma abordagem de teste que usamos para os modelos de linguagem grandes de base, nossa capacidade de avaliação simula uma conversa com o seu modelo ajustado para avaliar o potencial de produzir conteúdo prejudicial, novamente usando categorias de conteúdo nocivo especificadas (violência, sexual, ódio e imparcialidade, automutilação).

Se for encontrado um modelo para gerar uma saída que contenha conteúdo detectado como prejudicial acima de uma taxa aceitável, você será informado de que seu modelo não está disponível para implantação, com informações sobre as categorias específicas de danos detectadas:

Mensagem de exemplo:

This model is unable to be deployed. Model evaluation identified that this fine tuned model scores above acceptable thresholds for [Violence, Self Harm]. Please review your training data set and resubmit the job.

Captura de tela de um trabalho de ajuste fino com falha devido à avaliação de segurança

Assim como na avaliação de dados, o modelo é avaliado automaticamente em seu trabalho de ajuste fino como parte do fornecimento da funcionalidade de ajuste fino. Somente a avaliação resultante (implantável ou não implantável) é registrada pelo serviço. Se a implantação do modelo com ajuste fino falhar devido à detecção de conteúdo prejudicial em saídas de modelo, você não será cobrado pela execução do treinamento.

Implantar um modelo ajustado

Depois que o modelo estiver ajustado, você poderá implantar o modelo e usá-lo em seu próprio aplicativo. Não é possível implantar um modelo ajustado a partir da página de implantações ou da página de playground no Estúdio de IA do Azure. A única maneira, atualmente, de implantar um modelo ajustado é a partir da página de detalhes do modelo para este modelo.

Ao implantar o modelo, você disponibiliza o modelo para inferência e isso incorre em um custo de hospedagem por hora. Modelos ajustados, no entanto, podem ser armazenados no Estúdio de IA do Azure sem custo até tudo estar pronto para usá-los.

Importante

Depois de implantar um modelo personalizado, se, a qualquer momento, a implantação permanecer inativa por mais de quinze (15) dias, a implantação será excluída. A implantação de um modelo personalizado torna-se inativa se o modelo tiver sido implantado há mais de quinze (15) dias e não foram feitas chamadas de conclusão ou de chat durante 15 dias consecutivos.

A exclusão de uma implantação inativa não exclui ou afeta o modelo personalizado subjacente, e o modelo personalizado pode ser reimplantado a qualquer momento. Conforme descrito em Preços do Serviço OpenAI do Azure, cada modelo personalizado (ajustado) implantado incorre em um custo de hospedagem por hora, independentemente de as chamadas de conclusão ou conclusão de bate-papo estarem sendo feitas para o modelo. Para saber mais sobre como planejar e gerenciar custos com o OpenAI do Azure, consulte as orientações em Planejar o gerenciamento de custos para o Serviço OpenAI do Azure.

Observação

Somente uma implantação é permitida para um modelo ajustado. Uma mensagem de erro será exibida se você selecionar um modelo ajustado já implantado.

Você pode monitorar o progresso da implantação na página Implantações no Estúdio de IA do Azure.

Usar um modelo ajustado implantado

Depois que seu modelo ajustado for implantado, você pode usá-lo como qualquer outro modelo implantado. Você pode usar o Playground no Estúdio de IA do Azure para experimentar sua nova implantação. Você também pode usar a API REST para chamar seu modelo ajustado do seu próprio aplicativo. Você pode até começar a usar esse novo modelo ajustado em seu prompt flow para criar seu aplicativo de IA generativa.

Observação

Para modelos de chat, a mensagem do sistema que você usa para orientar seu modelo ajustado (seja ele implantado ou disponível para teste no playground) deve ser a mesma mensagem do sistema que você usa para treinamento. Se você usar uma mensagem de sistema diferente, o modelo pode não ter o desempenho esperado.

Limpar suas implantações, modelos de ajuste fino e arquivos de treinamento

Quando não for mais usar o modelo ajustado, você pode excluir a implantação e o modelo. Você também pode excluir os arquivos de treinamento e validação carregados no serviço, se necessário.

Excluir a implantação do seu modelo de ajuste fino

Importante

Depois de implantar um modelo personalizado, se, a qualquer momento, a implantação permanecer inativa por mais de quinze (15) dias, a implantação será excluída. A implantação de um modelo personalizado torna-se inativa se o modelo tiver sido implantado há mais de quinze (15) dias e não foram feitas chamadas de conclusão ou de chat durante 15 dias consecutivos.

A exclusão de uma implantação inativa não exclui ou afeta o modelo personalizado subjacente, e o modelo personalizado pode ser reimplantado a qualquer momento. Conforme descrito em Preços do Serviço OpenAI do Azure, cada modelo personalizado (ajustado) implantado incorre em um custo de hospedagem por hora, independentemente de as chamadas de conclusão ou conclusão de bate-papo estarem sendo feitas para o modelo. Para saber mais sobre como planejar e gerenciar custos com o OpenAI do Azure, consulte as orientações em Planejar o gerenciamento de custos para o Serviço OpenAI do Azure.

Você pode excluir a implantação do seu modelo ajustado na página Implantações no Estúdio de IA do Azure. Selecione a implantação a ser excluída e, em seguida, selecione Excluir para excluir a implantação.

Excluir seu modelo de fino ajuste

Você pode excluir um modelo ajustado na página Ajuste fino no Estúdio de IA do Azure. Selecione o modelo ajustado a ser excluído e, em seguida, selecione Excluir para excluir o modelo ajustado.

Observação

Você não pode excluir um modelo ajustado se ele tiver uma implantação existente. Primeiro, você deve excluir a implantação do modelo antes de poder excluir o modelo ajustado.

Excluir seus arquivos de treinamento

Opcionalmente, você pode excluir arquivos de treinamento e validação carregados para treinamento e arquivos de resultado gerados durante o treinamento. Para isso, você precisa acessar o Estúdio do OpenAI do Azure e navegar até o painel Gerenciamento>Arquivos de dados. Selecione o arquivo a ser excluído e, em seguida, selecione Excluir para excluir o arquivo.

Pré-requisitos

Modelos

Os seguintes modelos dão suporte ao ajuste fino:

  • babbage-002
  • davinci-002
  • gpt-35-turbo (0613)
  • gpt-35-turbo (1106)
  • gpt-35-turbo (0125)
  • gpt-4 (0613)*
  • gpt-4o (2024-08-06)
  • gpt-4o-mini (18/07/2024)

* O ajuste fino desse modelo está atualmente em visualização pública.

Ou você pode ajustar um modelo ajustado anteriormente, formatado como base-model.ft-{jobid}.

Captura de tela das opções de modelo com um modelo personalizado ajustado.

Consulte a página de modelos para verificar quais regiões atualmente dão suporte ao ajuste fino.

Examinar o fluxo de trabalho para o SDK do Python

Reserve um momento para examinar o fluxo de trabalho de ajuste fino para usar o SDK do Python com o OpenAI do Azure:

  1. Preparar seus dados de treinamento e validação.
  2. Selecionar um modelo base.
  3. Carregar os dados de treinamento.
  4. Treinar seu novo modelo personalizado.
  5. Verificar o status do seu modelo personalizado.
  6. Implantar seu modelo personalizado para uso.
  7. Usar seu modelo personalizado.
  8. Opcionalmente, analise seu modelo personalizado para obter desempenho e ajuste.

Preparar seus dados de treinamento e validação

Seu conjunto de dados de treinamento e de validação consiste em exemplos de saída de entrada e saída para o desempenho do modelo.

Diferentes tipos de modelo exigem um formato diferente de dados de treinamento.

Os dados de treinamento e validação usados devem ser formatados como um documento JSONL (Linhas JSON). Para gpt-35-turbo-0613 o conjunto de dados de ajuste fino deve ser formatado no formato de conversa que é usado pelas conclusões do Chat API.

Se você quiser um passo a passo de ajustar um gpt-35-turbo-0613 consulte o tutorial de ajuste fino do Azure OpenAI

Formato de arquivo de exemplo

{"messages": [{"role": "system", "content": "You are an Xbox customer support agent whose primary goal is to help users with issues they are experiencing with their Xbox devices. You are friendly and concise. You only provide factual answers to queries, and do not provide answers that are not related to Xbox."}, {"role": "user", "content": "Is Xbox better than PlayStation?"}, {"role": "assistant", "content": "I apologize, but I cannot provide personal opinions. My primary job is to assist you with any issues related to your Xbox device. Do you have any Xbox-related issues that need addressing?"}]}
{"messages": [{"role": "system", "content": "You are an Xbox customer support agent whose primary goal is to help users with issues they are experiencing with their Xbox devices. You are friendly and concise. You only provide factual answers to queries, and do not provide answers that are not related to Xbox."}, {"role": "user", "content": "Can I play PC games on my Xbox?"}, {"role": "assistant", "content": "While Xbox consoles don't natively support PC games, they can play an array of Xbox games, many of which are also available on PC. Can I assist you with finding games compatible with your Xbox device?"}]}
{"messages": [{"role": "system", "content": "You are an Xbox customer support agent whose primary goal is to help users with issues they are experiencing with their Xbox devices. You are friendly and concise. You only provide factual answers to queries, and do not provide answers that are not related to Xbox."}, {"role": "user", "content": "I'm having trouble connecting my Xbox to the Wi-Fi."}, {"role": "assistant", "content": "No worries, let's go through the network settings on your Xbox. Can you please tell me what happens when you try to connect it to the Wi-Fi?"}]}

Formato de arquivo de chat multiturno

Também há suporte para vários turnos de conversa em uma única linha do seu arquivo de treinamento jsonl. Para pular o ajuste fino em mensagens específicas do assistente, adicione o par de weight valores-chave opcional. 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}]}

Além do formato JSONL, os arquivos de dados de treinamento e validação devem ser codificados em UTF-8 e incluir uma marca de ordem de byte (BOM). O arquivo deve ter menos de 512 MB de tamanho.

Crie seus conjuntos de dados de treinamento e validação

Quanto mais exemplos de treinamento você tiver, melhor. Os trabalhos de ajuste fino não prosseguiram sem pelo menos 10 exemplos de treinamento, mas um número tão pequeno não é suficiente para influenciar visivelmente as respostas do modelo. A melhor prática é fornecer centenas, se não milhares, de exemplos de treinamento para ter sucesso.

Em geral, dobrar o tamanho do conjunto de dados pode levar a um aumento linear na qualidade do modelo. Mas tenha em mente que exemplos de baixa qualidade podem afetar negativamente o desempenho. Se você treinar o modelo em uma grande quantidade de dados internos, sem primeiro podar o conjunto de dados apenas para os exemplos de mais alta qualidade, você poderá acabar com um modelo que tenha um desempenho muito pior do que o esperado.

Carregar os dados de treinamento

A próxima etapa é escolher dados de treinamento preparados existentes ou carregar novos dados de treinamento preparados para usar ao personalizar seu modelo. Depois de preparar seus dados de treinamento, você pode carregar seus arquivos no serviço. Há duas maneiras de carregar dados de treinamento:

Para arquivos de dados grandes, recomendamos que você importe de um armazenamento de Blob do Azure. Arquivos grandes podem se tornar instáveis quando carregados por meio de formulários de várias partes porque as solicitações são atômicas e não podem ser repetidas ou retomadas. Para obter mais informações sobre o Armazenamento de Blobs do Azure, confira O que é o Armazenamento de Blobs do Azure?

Observação

Arquivos de dados de treinamento devem ser formatados como arquivos JSONL, codificados em UTF-8 com uma marca de ordem de byte (BOM). O arquivo deve ter menos de 512 MB de tamanho.

O exemplo do Python a seguir carrega arquivos locais de treinamento e validação usando o SDK do Python e recupera as IDs de arquivo retornadas.

# Upload fine-tuning files

import os
from openai import AzureOpenAI

client = AzureOpenAI(
  azure_endpoint = os.getenv("AZURE_OPENAI_ENDPOINT"), 
  api_key=os.getenv("AZURE_OPENAI_API_KEY"),  
  api_version="2024-05-01-preview"  # This API version or later is required to access seed/events/checkpoint capabilities
)

training_file_name = 'training_set.jsonl'
validation_file_name = 'validation_set.jsonl'

# Upload the training and validation dataset files to Azure OpenAI with the SDK.

training_response = client.files.create(
    file=open(training_file_name, "rb"), purpose="fine-tune"
)
training_file_id = training_response.id

validation_response = client.files.create(
    file=open(validation_file_name, "rb"), purpose="fine-tune"
)
validation_file_id = validation_response.id

print("Training file ID:", training_file_id)
print("Validation file ID:", validation_file_id)

Criar um modelo personalizado

Depois de carregar seus arquivos de treinamento e validação, você estará pronto para iniciar o trabalho de ajuste fino.

O código Python a seguir mostra um exemplo de como criar um novo trabalho de ajuste fino com o SDK do Python:

Nesse exemplo também estamos passando o parâmetro seed. A semente controla a reprodutibilidade do trabalho. Passar os mesmos parâmetros iniciais e de trabalho deve produzir os mesmos resultados, mas pode diferir em casos raros. Se uma semente não for especificada, uma será gerada para você.

response = client.fine_tuning.jobs.create(
    training_file=training_file_id,
    validation_file=validation_file_id,
    model="gpt-35-turbo-0613", # Enter base model name. Note that in Azure OpenAI the model name contains dashes and cannot contain dot/period characters. 
    seed = 105  # seed parameter controls reproducibility of the fine-tuning job. If no seed is specified one will be generated automatically.
)

job_id = response.id

# You can use the job ID to monitor the status of the fine-tuning job.
# The fine-tuning job will take some time to start and complete.

print("Job ID:", response.id)
print("Status:", response.id)
print(response.model_dump_json(indent=2))

Você também pode passar parâmetros opcionais adicionais, como hiperparâmetros, para ter maior controle do processo de ajuste fino. Para o treinamento inicial, recomendamos usar os padrões automáticos presentes sem especificar esses parâmetros.

Os hiperparâmetros com suporte atual para ajuste fino são:

Nome Tipo Descrição
batch_size Número inteiro O tamanho do lote que será usado para treinamento. O tamanho do lote é o número de exemplos de treinamento usados para treinar uma única passagem para frente e para trás. Em geral, descobrimos que tamanhos de lote maiores tendem a funcionar melhor para conjuntos de dados maiores. O valor padrão, bem como o valor máximo dessa propriedade, são específicos para um modelo base. Um tamanho de lote maior significa que os parâmetros de modelo são atualizados com menos frequência, mas com menor variação.
learning_rate_multiplier número O multiplicador de taxa de aprendizado a ser usado para treinamento. A taxa de aprendizado de ajuste fino é a taxa de aprendizado original usada para pré-treinamento multiplicada por esse valor. Taxas de aprendizagem maiores tendem a ter um desempenho melhor com tamanhos de lote maiores. É recomendável experimentar valores no intervalo de 0,02 a 0,2 para ver o que produz os melhores resultados. Uma taxa de aprendizagem menor pode ser útil para evitar o sobreajuste.
n_epochs Número inteiro O número de períodos para treinamento do modelo. Um período refere-se a um ciclo completo através do conjunto de dados de treinamento.
seed Número inteiro A semente controla a reprodutibilidade do trabalho. Passar os mesmos parâmetros iniciais e de trabalho deve produzir os mesmos resultados, mas pode diferir em casos raros. Se uma semente não for especificada, uma será gerada para você.

Para definir hiperparâmetros personalizados com a versão 1.x da API do Python OpenAI:

from openai import AzureOpenAI

client = AzureOpenAI(
  azure_endpoint = os.getenv("AZURE_OPENAI_ENDPOINT"), 
  api_key=os.getenv("AZURE_OPENAI_API_KEY"),  
  api_version="2024-02-01"  # This API version or later is required to access fine-tuning for turbo/babbage-002/davinci-002
)

client.fine_tuning.jobs.create(
  training_file="file-abc123", 
  model="gpt-35-turbo-0613", # Enter base model name. Note that in Azure OpenAI the model name contains dashes and cannot contain dot/period characters. 
  hyperparameters={
    "n_epochs":2
  }
)

Verificar o status do trabalho de ajuste fino

response = client.fine_tuning.jobs.retrieve(job_id)

print("Job ID:", response.id)
print("Status:", response.status)
print(response.model_dump_json(indent=2))

Listar eventos de ajuste fino

Para examinar os eventos individuais de ajuste fino gerados durante o treinamento:

Pode ser necessário atualizar sua biblioteca cliente OpenAI para a versão mais recente com pip install openai --upgrade para executar esse comando.

response = client.fine_tuning.jobs.list_events(fine_tuning_job_id=job_id, limit=10)
print(response.model_dump_json(indent=2))

Pontos de verificação

Quando cada época de treinamento é concluída, um ponto de verificação é gerado. Um ponto de verificação é uma versão totalmente funcional de um modelo que pode ser implantado e usado como modelo de destino para trabalhos de ajuste fino subsequentes. Os checkpoints podem ser particularmente úteis, pois podem fornecer um instantâneo do seu modelo antes de ocorrer o sobreajuste. Quando um trabalho de ajuste fino for concluído, você terá as três versões mais recentes do modelo disponíveis para implantação. A época final será representada pelo seu modelo ajustado, as duas épocas anteriores estarão disponíveis como pontos de verificação.

Você pode executar o comando lista de checkpoints para recuperar a lista de pontos de verificação associados a um trabalho de ajuste fino individual:

Pode ser necessário atualizar sua biblioteca cliente OpenAI para a versão mais recente com pip install openai --upgrade para executar esse comando.

response = client.fine_tuning.jobs.list_events(fine_tuning_job_id=job_id, limit=10)
print(response.model_dump_json(indent=2))

Avaliação de segurança do ajuste fino do GPT-4, GPT-4o, GPT-4o-mini – Visualização pública

GPT-4o, GPT-4o-mini e GPT-4 são os nossos modelos mais avançados que podem ser ajustados às suas necessidades. Assim como acontece com os modelos do Azure OpenAI em geral, os recursos avançados de modelos com ajuste fino vêm com desafios de IA responsável maiores relacionados a conteúdo prejudicial, manipulação, comportamento humano, problemas de privacidade e muito mais. Saiba mais sobre riscos, funcionalidades e limitações na Visão geral das práticas de IA responsável e Nota de transparência. Para ajudar a atenuar os riscos associados a modelos avançados com ajuste fino, implementamos etapas de avaliação adicionais para ajudar a detectar e prevenir conteúdo nocivo no treinamento e nas saídas de modelos com ajuste fino. Essas etapas são fundamentadas na filtragem de conteúdo do Microsoft Responsible AI Standard e do Serviço OpenAI do Azure.

  • As avaliações são realizadas em workspaces dedicados, específicos do cliente e privados;
  • Os pontos de extremidade de avaliação estão na mesma área geográfica que o recurso do Azure OpenAI;
  • Os dados de treinamento não são armazenados em conexão com a execução de avaliações; somente a avaliação final do modelo (implantável ou não implantável) é mantida; e

Os filtros de avaliação de modelo com ajuste fino do GPT-4o, GPT-4o-mini e GPT-4 são definidos com limites predefinidos e não podem ser modificados pelos clientes; eles não estão vinculados a nenhuma configuração de filtragem de conteúdo personalizada que você possa ter criado.

Avaliação dos dados

Antes do início do treinamento, seus dados são avaliados quanto a conteúdo potencialmente prejudicial (violência, sexual, ódio e imparcialidade, automutilação – confira as definições de categoria aqui). Se conteúdo nocivo for detectado acima do nível de gravidade especificado, o trabalho de treinamento falhará e você receberá uma mensagem informando sobre as categorias de falha.

Mensagem de exemplo:

The provided training data failed RAI checks for harm types: [hate_fairness, self_harm, violence]. Please fix the data and try again.

Seus dados de treinamento são avaliados automaticamente em seu trabalho de importação de dados como parte do fornecimento da funcionalidade de ajuste fino.

Se o trabalho de ajuste fino falhar devido à detecção de conteúdo prejudicial nos dados de treinamento, você não será cobrado.

Avaliação de modelos

Após a conclusão do treinamento, mas antes que o modelo ajustado esteja disponível para implantação, o modelo resultante é avaliado quanto à presença de respostas potencialmente prejudiciais usando as métricas de risco e segurança internas do Azure. Usando a mesma abordagem de teste que usamos para os modelos de linguagem grandes de base, nossa capacidade de avaliação simula uma conversa com o seu modelo ajustado para avaliar o potencial de produzir conteúdo prejudicial, novamente usando categorias de conteúdo nocivo especificadas (violência, sexual, ódio e imparcialidade, automutilação).

Se for encontrado um modelo para gerar uma saída que contenha conteúdo detectado como prejudicial acima de uma taxa aceitável, você será informado de que seu modelo não está disponível para implantação, com informações sobre as categorias específicas de danos detectadas:

Mensagem de exemplo:

This model is unable to be deployed. Model evaluation identified that this fine tuned model scores above acceptable thresholds for [Violence, Self Harm]. Please review your training data set and resubmit the job.

Captura de tela de um trabalho de ajuste fino com falha devido à avaliação de segurança

Assim como na avaliação de dados, o modelo é avaliado automaticamente em seu trabalho de ajuste fino como parte do fornecimento da funcionalidade de ajuste fino. Somente a avaliação resultante (implantável ou não implantável) é registrada pelo serviço. Se a implantação do modelo com ajuste fino falhar devido à detecção de conteúdo prejudicial em saídas de modelo, você não será cobrado pela execução do treinamento.

Implantar um modelo ajustado

Quando o trabalho de ajuste fino é bem-sucedido, o valor da variável fine_tuned_model no corpo da resposta é definido como o nome do modelo personalizado. Seu modelo agora também está disponível para descoberta na API de modelos de lista. No entanto, você não pode emitir chamadas de conclusão para seu modelo personalizado até que seu modelo personalizado seja implantado. Você deve implantar seu modelo personalizado para disponibilizá-lo para uso com chamadas de conclusão.

Importante

Depois de implantar um modelo personalizado, se, a qualquer momento, a implantação permanecer inativa por mais de quinze (15) dias, a implantação será excluída. A implantação de um modelo personalizado torna-se inativa se o modelo tiver sido implantado há mais de quinze (15) dias e não foram feitas chamadas de conclusão ou de chat durante 15 dias consecutivos.

A exclusão de uma implantação inativa não exclui ou afeta o modelo personalizado subjacente, e o modelo personalizado pode ser reimplantado a qualquer momento. Conforme descrito em Preços do Serviço OpenAI do Azure, cada modelo personalizado (ajustado) implantado incorre em um custo de hospedagem por hora, independentemente de as chamadas de conclusão ou conclusão de bate-papo estarem sendo feitas para o modelo. Para saber mais sobre como planejar e gerenciar custos com o OpenAI do Azure, consulte as orientações em Planejar o gerenciamento de custos para o Serviço OpenAI do Azure.

Você também pode usar o Estúdio de IA do Azure ou a CLI do Azure para implantar seu modelo personalizado.

Observação

Somente uma implantação é permitida para um modelo personalizado. Ocorrerá um erro se você selecionar um modelo personalizado já implantado.

Ao contrário dos comandos anteriores do SDK, a implantação deve ser feita usando a API do painel de controle que requer autorização separada, um caminho de API diferente e uma versão de API diferente.

variable Definição
token Há várias maneiras de gerar um token de autorização. O método mais fácil para teste inicial é iniciar o Cloud Shell do portal do Azure. Em seguida, execute az account get-access-token. Você pode usar esse token como token de autorização temporário para teste de API. Recomendamos armazenar isso em uma nova variável de ambiente.
subscription A ID de assinatura do recurso Azure OpenAI associado.
resource_group O nome do grupo de recursos do seu recurso Azure OpenAI.
resource_name O nome do recurso Azure OpenAI.
model_deployment_name O nome personalizado para sua nova implantação de modelo ajustada. Esse é o nome que será referenciado em seu código ao fazer chamadas de conclusão de chat.
fine_tuned_model Recupere esse valor dos resultados do trabalho de ajuste fino na etapa anterior. Ele será parecido com gpt-35-turbo-0613.ft-b044a9d3cf9c4228b5d393567f693b83. Você precisará adicionar esse valor ao json deploy_data. Alternativamente, você também pode implantar um ponto de verificação, passando o ID do ponto de verificação que aparecerá no formato ftchkpt-e559c011ecc04fc68eaa339d8227d02d
import json
import os
import requests

token= os.getenv("<TOKEN>") 
subscription = "<YOUR_SUBSCRIPTION_ID>"  
resource_group = "<YOUR_RESOURCE_GROUP_NAME>"
resource_name = "<YOUR_AZURE_OPENAI_RESOURCE_NAME>"
model_deployment_name ="gpt-35-turbo-ft" # custom deployment name that you will use to reference the model when making inference calls.

deploy_params = {'api-version': "2023-05-01"} 
deploy_headers = {'Authorization': 'Bearer {}'.format(token), 'Content-Type': 'application/json'}

deploy_data = {
    "sku": {"name": "standard", "capacity": 1}, 
    "properties": {
        "model": {
            "format": "OpenAI",
            "name": <"fine_tuned_model">, #retrieve this value from the previous call, it will look like gpt-35-turbo-0613.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())

Implantação entre regiões

O ajuste fino dá suporte à implantação de um modelo ajustado em uma região diferente da qual o modelo foi ajustado originalmente. Você também pode implantar em uma assinatura/região diferente.

As únicas limitações são que a nova região também deve dar suporte ao ajuste fino e, ao implantar a assinatura cruzada, a conta que gera o token de autorização para a implantação deve ter acesso às assinaturas de origem e de destino.

Veja abaixo um exemplo de implantação de um modelo que foi ajustado em uma assinatura/região para outra.

import json
import os
import requests

token= os.getenv("<TOKEN>") 

subscription = "<DESTINATION_SUBSCRIPTION_ID>"  
resource_group = "<DESTINATION_RESOURCE_GROUP_NAME>"
resource_name = "<DESTINATION_AZURE_OPENAI_RESOURCE_NAME>"

source_subscription = "<SOURCE_SUBSCRIPTION_ID>"
source_resource_group = "<SOURCE_RESOURCE_GROUP>"
source_resource = "<SOURCE_RESOURCE>"


source = f'/subscriptions/{source_subscription}/resourceGroups/{source_resource_group}/providers/Microsoft.CognitiveServices/accounts/{source_resource}'

model_deployment_name ="gpt-35-turbo-ft" # custom deployment name that you will use to reference the model when making inference calls.

deploy_params = {'api-version': "2023-05-01"} 
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_NAME">, # This value will look like gpt-35-turbo-0613.ft-0ab3f80e4f2242929258fff45b56a9ce 
            "version": "1",
            "source": source
        }
    }
}
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 implantar entre a mesma assinatura, mas regiões diferentes, você teria apenas assinatura e grupos de recursos idênticos para variáveis de origem e destino e apenas os nomes de recursos de origem e destino precisariam ser exclusivos.

Implantar um modelo com a CLI do Azure

O exemplo a seguir mostra como usar a CLI do Azure para implantar seu modelo personalizado. Com a CLI do Azure, você deve especificar um nome para a implantação do modelo personalizado. Para obter mais informações sobre como usar a CLI do Azure para implantar modelos personalizados, consulte az cognitiveservices account deployment.

Para executar este comando da CLI do Azure em uma janela do console, você deve substituir os seguintes <espaços reservados> pelos valores correspondentes para o modelo personalizado:

Espaço reservado Valor
<YOUR_AZURE_SUBSCRIPTION> O nome ou a ID da sua assinatura do Azure.
<YOUR_RESOURCE_GROUP> O nome do seu grupo de recursos do Azure.
<YOUR_RESOURCE_NAME> O nome do seu recurso OpenAI do Azure.
<YOUR_DEPLOYMENT_NAME> O nome que você deseja usar para sua implantação de modelo.
<YOUR_FINE_TUNED_MODEL_ID> O nome do seu tópico personalizado.
az cognitiveservices account deployment create 
    --resource-group <YOUR_RESOURCE_GROUP>
    --name <YOUR_RESOURCE_NAME>  
    --deployment-name <YOUR_DEPLOYMENT_NAME>
    --model-name <YOUR_FINE_TUNED_MODEL_ID>
    --model-version "1" 
    --model-format OpenAI 
    --sku-capacity "1" 
    --sku-name "Standard"

Usar um modelo personalizado implantado

Depois que seu modelo personalizado for implantado, você poderá usá-lo como qualquer outro modelo implantado. Você pode usar o Playground no Estúdio de IA do Azure para experimentar sua nova implantação. Você pode continuar a usar os mesmos parâmetros com o seu modelo personalizado, como temperature e max_tokens, como faz com outros modelos implantados. Para modelos de babbage-002 e davinci-002 ajustados, você usará o playground de Conclusões e a API de Conclusões. Para modelos de gpt-35-turbo-0613 ajustados, você usará o playground de chat e a API de conclusão do Chat.

import os
from openai import AzureOpenAI

client = AzureOpenAI(
  azure_endpoint = os.getenv("AZURE_OPENAI_ENDPOINT"), 
  api_key=os.getenv("AZURE_OPENAI_API_KEY"),  
  api_version="2024-02-01"
)

response = client.chat.completions.create(
    model="gpt-35-turbo-ft", # model = "Custom deployment name you chose for your fine-tuning model"
    messages=[
        {"role": "system", "content": "You are a helpful assistant."},
        {"role": "user", "content": "Does Azure OpenAI support customer managed keys?"},
        {"role": "assistant", "content": "Yes, customer managed keys are supported by Azure OpenAI."},
        {"role": "user", "content": "Do other Azure AI services support this too?"}
    ]
)

print(response.choices[0].message.content)

Analisar seu modelo personalizado

O Azure OpenAI anexa um arquivo de resultados chamado results.csv a cada trabalho de ajuste fino após sua conclusão. Você pode usar o arquivo de resultado para analisar o desempenho de treinamento e validação do modelo personalizado. A ID do arquivo de resultado é listada para cada modelo personalizado e você pode usar o SDK do Python para recuperar a ID do arquivo e baixar o arquivo de resultado para análise.

O exemplo do Python a seguir recupera a ID de arquivo do primeiro arquivo de resultado anexado ao trabalho de ajuste fino para seu modelo personalizado e, em seguida, usa o SDK do Python para baixar o arquivo no diretório de trabalho para análise.

# Retrieve the file ID of the first result file from the fine-tuning job
# for the customized model.
response = client.fine_tuning.jobs.retrieve(job_id)
if response.status == 'succeeded':
    result_file_id = response.result_files[0]

retrieve = client.files.retrieve(result_file_id)

# Download the result file.
print(f'Downloading result file: {result_file_id}')

with open(retrieve.filename, "wb") as file:
    result = client.files.content(result_file_id).read()
    file.write(result)

O arquivo de resultado é um arquivo CSV que contém uma linha de cabeçalho e uma linha para cada etapa de treinamento executada pelo trabalho de ajuste fino. O arquivo de resultado contém as seguintes colunas:

Nome da coluna Descrição
step O número da etapa de treinamento. Uma etapa de treinamento representa um único passe, para frente e para trás, em um lote de dados de treinamento.
train_loss A perda do lote de treinamento.
train_mean_token_accuracy A porcentagem de tokens no lote de treinamento previstos corretamente pelo modelo.
Por exemplo, se o tamanho do lote for definido como 3 e seus dados contiverem conclusões [[1, 2], [0, 5], [4, 2]], esse valor será definido como 0,83 (5 de 6) se o modelo previsto for [[1, 1], [0, 5], [4, 2]].
valid_loss A perda do lote de validação.
validation_mean_token_accuracy A porcentagem de tokens no lote de validação previstos corretamente pelo modelo.
Por exemplo, se o tamanho do lote for definido como 3 e seus dados contiverem conclusões [[1, 2], [0, 5], [4, 2]], esse valor será definido como 0,83 (5 de 6) se o modelo previsto for [[1, 1], [0, 5], [4, 2]].
full_valid_loss A perda de validação calculada no final de cada época. Quando o treino corre bem, a perda deve diminuir.
full_valid_mean_token_accuracy A precisão média válida do token calculada no final de cada época. Quando o treinamento está indo bem, a precisão do token deve aumentar.

Você também pode exibir os dados no arquivo results.csv como gráficos no Estúdio de IA do Azure. Selecione o link de um modelo treinado e você verá três gráficos: perda, precisão média de token e precisão de token. Se você forneceu dados de validação, ambos os conjuntos de dados aparecerão no mesmo gráfico.

Observe que sua perda diminui com o tempo e sua precisão aumenta. Se você observar uma divergência entre seus dados de treinamento e validação, isso pode indicar que você está se ajustando demais. Tente treinar com menos épocas ou com um multiplicador de taxa de aprendizado menor.

Limpar suas implantações, modelos de personalizados e arquivos de treinamento

Quando terminar o modelo personalizado, você poderá excluir a implantação e o modelo. Você também pode excluir os arquivos de treinamento e validação carregados no serviço, se necessário.

Excluir a implantação do modelo

Importante

Depois de implantar um modelo personalizado, se, a qualquer momento, a implantação permanecer inativa por mais de quinze (15) dias, a implantação será excluída. A implantação de um modelo personalizado torna-se inativa se o modelo tiver sido implantado há mais de quinze (15) dias e não foram feitas chamadas de conclusão ou de chat durante 15 dias consecutivos.

A exclusão de uma implantação inativa não exclui ou afeta o modelo personalizado subjacente, e o modelo personalizado pode ser reimplantado a qualquer momento. Conforme descrito em Preços do Serviço OpenAI do Azure, cada modelo personalizado (ajustado) implantado incorre em um custo de hospedagem por hora, independentemente de as chamadas de conclusão ou conclusão de bate-papo estarem sendo feitas para o modelo. Para saber mais sobre como planejar e gerenciar custos com o OpenAI do Azure, consulte as orientações em Planejar o gerenciamento de custos para o Serviço OpenAI do Azure.

Você pode usar vários métodos para excluir a implantação do modelo personalizado:

Excluir seu modelo personalizado

Da mesma forma, você pode usar vários métodos para excluir seu modelo personalizado:

Observação

Você não poderá excluir um modelo personalizado se ele tiver uma implantação existente. Primeiro, você deve excluir a implantação do modelo antes de poder excluir o modelo personalizado.

Excluir seus arquivos de treinamento

Opcionalmente, você pode excluir arquivos de treinamento e validação carregados para treinamento e arquivos de resultado gerados durante o treinamento em sua assinatura do Azure OpenAI. Você pode usar os seguintes métodos para excluir seus arquivos de treinamento, validação e resultado:

O exemplo do Python a seguir usa o SDK do Python para excluir os arquivos de treinamento, validação e resultado do modelo personalizado:

print('Checking for existing uploaded files.')
results = []

# Get the complete list of uploaded files in our subscription.
files = openai.File.list().data
print(f'Found {len(files)} total uploaded files in the subscription.')

# Enumerate all uploaded files, extracting the file IDs for the
# files with file names that match your training dataset file and
# validation dataset file names.
for item in files:
    if item["filename"] in [training_file_name, validation_file_name, result_file_name]:
        results.append(item["id"])
print(f'Found {len(results)} already uploaded files that match our files')

# Enumerate the file IDs for our files and delete each file.
print(f'Deleting already uploaded files.')
for id in results:
    openai.File.delete(sid = id)

Ajuste fino contínuo

Depois de criar um modelo ajustado, convém continuar a refinar o modelo ao longo do tempo por meio de ajustes mais finos. O ajuste fino contínuo é o processo iterativo de selecionar um modelo já ajustado como um modelo base e ajustá-lo ainda mais em novos conjuntos de exemplos de treinamento.

Para executar o ajuste fino em um modelo que você ajustou anteriormente, você usaria o mesmo processo descrito em criar um modelo personalizado mas, em vez de especificar o nome de um modelo base genérico, você especificaria a ID do seu modelo já ajustado. A ID do modelo ajustada parece com gpt-35-turbo-0613.ft-5fd1918ee65d4cd38a5dcf6835066ed7

from openai import AzureOpenAI

client = AzureOpenAI(
  azure_endpoint = os.getenv("AZURE_OPENAI_ENDPOINT"), 
  api_key=os.getenv("AZURE_OPENAI_API_KEY"),  
  api_version="2024-02-01"  
)

response = client.fine_tuning.jobs.create(
    training_file=training_file_id,
    validation_file=validation_file_id,
    model="gpt-35-turbo-0613.ft-5fd1918ee65d4cd38a5dcf6835066ed7" # Enter base model name. Note that in Azure OpenAI the model name contains dashes and cannot contain dot/period characters. 
)

job_id = response.id

# You can use the job ID to monitor the status of the fine-tuning job.
# The fine-tuning job will take some time to start and complete.

print("Job ID:", response.id)
print("Status:", response.id)
print(response.model_dump_json(indent=2))

Também recomendamos incluir o parâmetro suffix para facilitar a distinção entre diferentes iterações do seu modelo ajustado. suffix usa uma cadeia de caracteres e está definido para identificar o modelo ajustado. Com a API do Python OpenAI, há suporte para uma cadeia de caracteres de até 18 caracteres que será adicionada ao seu nome de modelo ajustado.

Se você não tiver certeza da ID do modelo ajustado existente, essas informações poderão ser encontradas na página Modelos do Estúdio de IA do Azure ou gerar uma lista de modelos para um determinado recurso do OpenAI do Azure usando a API REST.

Pré-requisitos

Modelos

Os seguintes modelos dão suporte ao ajuste fino:

  • babbage-002
  • davinci-002
  • gpt-35-turbo (0613)
  • gpt-35-turbo (1106)
  • gpt-35-turbo (0125)
  • gpt-4 (0613)*
  • gpt-4o (2024-08-06)
  • gpt-4o-mini (18/07/2024)

* O ajuste fino desse modelo está atualmente em visualização pública.

Ou você pode fazer o ajuste fino de um modelo previamente ajustado, formatado como base-model.ft-{jobid}.

Consulte a página de modelos para verificar quais regiões atualmente dão suporte ao ajuste fino.

Examinar o fluxo de trabalho da API REST

Reserve um momento para examinar o fluxo de trabalho de ajuste fino para usar a APIS REST e o Python com o Azure OpenAI:

  1. Preparar seus dados de treinamento e validação.
  2. Selecionar um modelo base.
  3. Carregar os dados de treinamento.
  4. Treinar seu novo modelo personalizado.
  5. Verificar o status do seu modelo personalizado.
  6. Implantar seu modelo personalizado para uso.
  7. Usar seu modelo personalizado.
  8. Opcionalmente, analise seu modelo personalizado para obter desempenho e ajuste.

Preparar seus dados de treinamento e validação

Seu conjunto de dados de treinamento e de validação consiste em exemplos de saída de entrada e saída para o desempenho do modelo.

Diferentes tipos de modelo exigem um formato diferente de dados de treinamento.

Os dados de treinamento e validação usados devem ser formatados como um documento JSONL (Linhas JSON). Para gpt-35-turbo-0613 e outros modelos relacionados, o conjunto de dados de ajuste fino deve ser formatado no formato conversacional usado pela API de conclusões de chat.

Se desejar um passo a passo do ajuste fino de um gpt-35-turbo-0613 consulte o tutorial de ajuste fino do Azure OpenAI.

Formato de arquivo de exemplo

{"messages": [{"role": "system", "content": "You are an Xbox customer support agent whose primary goal is to help users with issues they are experiencing with their Xbox devices. You are friendly and concise. You only provide factual answers to queries, and do not provide answers that are not related to Xbox."}, {"role": "user", "content": "Is Xbox better than PlayStation?"}, {"role": "assistant", "content": "I apologize, but I cannot provide personal opinions. My primary job is to assist you with any issues related to your Xbox device. Do you have any Xbox-related issues that need addressing?"}]}
{"messages": [{"role": "system", "content": "You are an Xbox customer support agent whose primary goal is to help users with issues they are experiencing with their Xbox devices. You are friendly and concise. You only provide factual answers to queries, and do not provide answers that are not related to Xbox."}, {"role": "user", "content": "Can I play PC games on my Xbox?"}, {"role": "assistant", "content": "While Xbox consoles don't natively support PC games, they can play an array of Xbox games, many of which are also available on PC. Can I assist you with finding games compatible with your Xbox device?"}]}
{"messages": [{"role": "system", "content": "You are an Xbox customer support agent whose primary goal is to help users with issues they are experiencing with their Xbox devices. You are friendly and concise. You only provide factual answers to queries, and do not provide answers that are not related to Xbox."}, {"role": "user", "content": "I'm having trouble connecting my Xbox to the Wi-Fi."}, {"role": "assistant", "content": "No worries, let's go through the network settings on your Xbox. Can you please tell me what happens when you try to connect it to the Wi-Fi?"}]}

Formato de arquivo de chat multiturno

Também há suporte para vários turnos de conversa em uma única linha do seu arquivo de treinamento jsonl. Para pular o ajuste fino em mensagens específicas do assistente, adicione o par de weight valores-chave opcional. 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}]}

Além do formato JSONL, os arquivos de dados de treinamento e validação devem ser codificados em UTF-8 e incluir uma marca de ordem de byte (BOM). O arquivo deve ter menos de 512 MB de tamanho.

Crie seus conjuntos de dados de treinamento e validação

Quanto mais exemplos de treinamento você tiver, melhor. Os trabalhos de ajuste fino não prosseguiram sem pelo menos 10 exemplos de treinamento, mas um número tão pequeno não é suficiente para influenciar visivelmente as respostas do modelo. A melhor prática é fornecer centenas, se não milhares, de exemplos de treinamento para ter sucesso.

Em geral, dobrar o tamanho do conjunto de dados pode levar a um aumento linear na qualidade do modelo. Mas tenha em mente que exemplos de baixa qualidade podem afetar negativamente o desempenho. Se você treinar o modelo em uma grande quantidade de dados internos, sem primeiro podar o conjunto de dados apenas para os exemplos de mais alta qualidade, você poderá acabar com um modelo que tenha um desempenho muito pior do que o esperado.

Selecione um modelo base

A primeira etapa na criação de um modelo personalizado é escolher um modelo base. O painel Modelo básico permite que você escolha um modelo básico para usar em seu modelo personalizado. A sua escolha influencia tanto o desempenho quanto o custo do modelo.

Selecione o modelo básico na lista suspensa Tipo de modelo base e selecione Avançar para continuar.

Você pode criar um modelo personalizado de um dos seguintes modelos base disponíveis:

  • babbage-002
  • davinci-002
  • gpt-35-turbo (0613)
  • gpt-35-turbo (1106)
  • gpt-35-turbo (0125)
  • gpt-4 (0613)
  • gpt-4o (2024-08-06)
  • gpt-4o-mini (2023-07-18)

Ou você pode fazer o ajuste fino de um modelo previamente ajustado, formatado como base-model.ft-{jobid}.

Captura de tela das opções de modelo com um modelo personalizado ajustado.

Para obter mais informações sobre nossos modelos básicos que podem ser ajustados, confira Modelos.

Carregar os dados de treinamento

A próxima etapa é escolher os dados de treinamento preparados existentes ou carregar novos dados de treinamento preparados para usar ao ajustar seu modelo. Depois de preparar seus dados de treinamento, você pode carregar seus arquivos no serviço. Há duas maneiras de carregar dados de treinamento:

Para arquivos de dados grandes, recomendamos que você importe de um armazenamento de Blob do Azure. Arquivos grandes podem se tornar instáveis quando carregados por meio de formulários de várias partes porque as solicitações são atômicas e não podem ser repetidas ou retomadas. Para obter mais informações sobre o Armazenamento de Blobs do Azure, confira O que é o Armazenamento de Blobs do Azure?

Observação

Arquivos de dados de treinamento devem ser formatados como arquivos JSONL, codificados em UTF-8 com uma marca de ordem de byte (BOM). O arquivo deve ter menos de 512 MB de tamanho.

Carregar dados de treinamento

curl -X POST $AZURE_OPENAI_ENDPOINT/openai/files?api-version=2023-12-01-preview \
  -H "Content-Type: multipart/form-data" \
  -H "api-key: $AZURE_OPENAI_API_KEY" \
  -F "purpose=fine-tune" \
  -F "file=@C:\\fine-tuning\\training_set.jsonl;type=application/json"

Carregar dados de validação

curl -X POST $AZURE_OPENAI_ENDPOINT/openai/files?api-version=2023-12-01-preview \
  -H "Content-Type: multipart/form-data" \
  -H "api-key: $AZURE_OPENAI_API_KEY" \
  -F "purpose=fine-tune" \
  -F "file=@C:\\fine-tuning\\validation_set.jsonl;type=application/json"

Criar um modelo personalizado

Depois de carregar seus arquivos de treinamento e validação, você estará pronto para iniciar o trabalho de ajuste fino. O código a seguir mostra um exemplo de como criar uma nova tarefa de ajuste fino com a API REST.

Nesse exemplo também estamos passando o parâmetro seed. A semente controla a reprodutibilidade do trabalho. Passar os mesmos parâmetros iniciais e de trabalho deve produzir os mesmos resultados, mas pode diferir em casos raros. Se uma semente não for especificada, uma será gerada para você.

curl -X POST $AZURE_OPENAI_ENDPOINT/openai/fine_tuning/jobs?api-version=2024-05-01-preview \
  -H "Content-Type: application/json" \
  -H "api-key: $AZURE_OPENAI_API_KEY" \
  -d '{
    "model": "gpt-35-turbo-0613", 
    "training_file": "<TRAINING_FILE_ID>", 
    "validation_file": "<VALIDATION_FILE_ID>",
    "seed": 105
}'

Você também pode passar parâmetros opcionais adicionais, como hiperparâmetros, para ter maior controle do processo de ajuste fino. Para o treinamento inicial, recomendamos usar os padrões automáticos presentes sem especificar esses parâmetros.

Os hiperparâmetros com suporte atual para ajuste fino são:

Nome Tipo Descrição
batch_size Número inteiro O tamanho do lote que será usado para treinamento. O tamanho do lote é o número de exemplos de treinamento usados para treinar uma única passagem para frente e para trás. Em geral, descobrimos que tamanhos de lote maiores tendem a funcionar melhor para conjuntos de dados maiores. O valor padrão, bem como o valor máximo dessa propriedade, são específicos para um modelo base. Um tamanho de lote maior significa que os parâmetros de modelo são atualizados com menos frequência, mas com menor variação.
learning_rate_multiplier número O multiplicador de taxa de aprendizado a ser usado para treinamento. A taxa de aprendizado de ajuste fino é a taxa de aprendizado original usada para pré-treinamento multiplicada por esse valor. Taxas de aprendizagem maiores tendem a ter um desempenho melhor com tamanhos de lote maiores. É recomendável experimentar valores no intervalo de 0,02 a 0,2 para ver o que produz os melhores resultados. Uma taxa de aprendizagem menor pode ser útil para evitar o sobreajuste.
n_epochs Número inteiro O número de períodos para treinamento do modelo. Um período refere-se a um ciclo completo através do conjunto de dados de treinamento.
seed Número inteiro A semente controla a reprodutibilidade do trabalho. Passar os mesmos parâmetros iniciais e de trabalho deve produzir os mesmos resultados, mas pode diferir em casos raros. Se uma semente não for especificada, uma será gerada para você.

Verificar o status do seu modelo personalizado

Depois de começar um trabalho de ajuste fino, pode levar algum tempo para ser concluído. Seu trabalho pode estar na fila por trás de outros trabalhos no sistema. O treinamento do modelo pode levar minutos ou horas, dependendo do tamanho do modelo e do conjunto de dados. O exemplo a seguir usa a API REST para verificar o status do seu trabalho de ajuste fino. O exemplo recupera informações sobre seu trabalho usando a ID do trabalho retornada do exemplo anterior:

curl -X GET $AZURE_OPENAI_ENDPOINT/openai/fine_tuning/jobs/<YOUR-JOB-ID>?api-version=2024-05-01-preview \
  -H "api-key: $AZURE_OPENAI_API_KEY"

Listar eventos de ajuste fino

Para examinar os eventos individuais de ajuste fino gerados durante o treinamento:

curl -X POST $AZURE_OPENAI_ENDPOINT/openai/fine_tuning/jobs/{fine_tuning_job_id}/events?api-version=2024-05-01-preview \
  -H "Content-Type: application/json" \
  -H "api-key: $AZURE_OPENAI_API_KEY" 

Pontos de verificação

Quando cada época de treinamento é concluída, um ponto de verificação é gerado. Um ponto de verificação é uma versão totalmente funcional de um modelo que pode ser implantado e usado como modelo de destino para trabalhos de ajuste fino subsequentes. Os checkpoints podem ser particularmente úteis, pois podem fornecer um instantâneo do seu modelo antes de ocorrer o sobreajuste. Quando um trabalho de ajuste fino for concluído, você terá as três versões mais recentes do modelo disponíveis para implantação. A época final será representada pelo seu modelo ajustado, as duas épocas anteriores estarão disponíveis como pontos de verificação.

Você pode executar o comando lista de checkpoints para recuperar a lista de pontos de verificação associados a um trabalho de ajuste fino individual:

curl -X POST $AZURE_OPENAI_ENDPOINT/openai/fine_tuning/jobs/{fine_tuning_job_id}/checkpoints?api-version=2024-05-01-preview \
  -H "Content-Type: application/json" \
  -H "api-key: $AZURE_OPENAI_API_KEY" 

Avaliação de segurança do ajuste fino do GPT-4, GPT-4o, GPT-4o-mini – Visualização pública

GPT-4o, GPT-4o-mini e GPT-4 são os nossos modelos mais avançados que podem ser ajustados às suas necessidades. Assim como acontece com os modelos do Azure OpenAI em geral, os recursos avançados de modelos com ajuste fino vêm com desafios de IA responsável maiores relacionados a conteúdo prejudicial, manipulação, comportamento humano, problemas de privacidade e muito mais. Saiba mais sobre riscos, funcionalidades e limitações na Visão geral das práticas de IA responsável e Nota de transparência. Para ajudar a atenuar os riscos associados a modelos avançados com ajuste fino, implementamos etapas de avaliação adicionais para ajudar a detectar e prevenir conteúdo nocivo no treinamento e nas saídas de modelos com ajuste fino. Essas etapas são fundamentadas na filtragem de conteúdo do Microsoft Responsible AI Standard e do Serviço OpenAI do Azure.

  • As avaliações são realizadas em workspaces dedicados, específicos do cliente e privados;
  • Os pontos de extremidade de avaliação estão na mesma área geográfica que o recurso do Azure OpenAI;
  • Os dados de treinamento não são armazenados em conexão com a execução de avaliações; somente a avaliação final do modelo (implantável ou não implantável) é mantida; e

Os filtros de avaliação de modelo com ajuste fino do GPT-4o, GPT-4o-mini e GPT-4 são definidos com limites predefinidos e não podem ser modificados pelos clientes; eles não estão vinculados a nenhuma configuração de filtragem de conteúdo personalizada que você possa ter criado.

Avaliação dos dados

Antes do início do treinamento, seus dados são avaliados quanto a conteúdo potencialmente prejudicial (violência, sexual, ódio e imparcialidade, automutilação – confira as definições de categoria aqui). Se conteúdo nocivo for detectado acima do nível de gravidade especificado, o trabalho de treinamento falhará e você receberá uma mensagem informando sobre as categorias de falha.

Mensagem de exemplo:

The provided training data failed RAI checks for harm types: [hate_fairness, self_harm, violence]. Please fix the data and try again.

Seus dados de treinamento são avaliados automaticamente em seu trabalho de importação de dados como parte do fornecimento da funcionalidade de ajuste fino.

Se o trabalho de ajuste fino falhar devido à detecção de conteúdo prejudicial nos dados de treinamento, você não será cobrado.

Avaliação de modelos

Após a conclusão do treinamento, mas antes que o modelo ajustado esteja disponível para implantação, o modelo resultante é avaliado quanto à presença de respostas potencialmente prejudiciais usando as métricas de risco e segurança internas do Azure. Usando a mesma abordagem de teste que usamos para os modelos de linguagem grandes de base, nossa capacidade de avaliação simula uma conversa com o seu modelo ajustado para avaliar o potencial de produzir conteúdo prejudicial, novamente usando categorias de conteúdo nocivo especificadas (violência, sexual, ódio e imparcialidade, automutilação).

Se for encontrado um modelo para gerar uma saída que contenha conteúdo detectado como prejudicial acima de uma taxa aceitável, você será informado de que seu modelo não está disponível para implantação, com informações sobre as categorias específicas de danos detectadas:

Mensagem de exemplo:

This model is unable to be deployed. Model evaluation identified that this fine tuned model scores above acceptable thresholds for [Violence, Self Harm]. Please review your training data set and resubmit the job.

Captura de tela de um trabalho de ajuste fino com falha devido à avaliação de segurança

Assim como na avaliação de dados, o modelo é avaliado automaticamente em seu trabalho de ajuste fino como parte do fornecimento da funcionalidade de ajuste fino. Somente a avaliação resultante (implantável ou não implantável) é registrada pelo serviço. Se a implantação do modelo com ajuste fino falhar devido à detecção de conteúdo prejudicial em saídas de modelo, você não será cobrado pela execução do treinamento.

Implantar um modelo ajustado

Importante

Depois de implantar um modelo personalizado, se, a qualquer momento, a implantação permanecer inativa por mais de quinze (15) dias, a implantação será excluída. A implantação de um modelo personalizado torna-se inativa se o modelo tiver sido implantado há mais de quinze (15) dias e não foram feitas chamadas de conclusão ou de chat durante 15 dias consecutivos.

A exclusão de uma implantação inativa não exclui ou afeta o modelo personalizado subjacente, e o modelo personalizado pode ser reimplantado a qualquer momento. Conforme descrito em Preços do Serviço OpenAI do Azure, cada modelo personalizado (ajustado) implantado incorre em um custo de hospedagem por hora, independentemente de as chamadas de conclusão ou conclusão de bate-papo estarem sendo feitas para o modelo. Para saber mais sobre como planejar e gerenciar custos com o OpenAI do Azure, consulte as orientações em Planejar o gerenciamento de custos para o Serviço OpenAI do Azure.

O exemplo do Python a seguir mostra como usar a API REST para criar uma implantação de modelo para seu modelo personalizado. A API REST gera um nome para a implantação do modelo personalizado.

variable Definição
token Há várias maneiras de gerar um token de autorização. O método mais fácil para teste inicial é iniciar o Cloud Shell do portal do Azure. Em seguida, execute az account get-access-token. Você pode usar esse token como token de autorização temporário para teste de API. Recomendamos armazenar isso em uma nova variável de ambiente.
subscription A ID de assinatura do recurso Azure OpenAI associado.
resource_group O nome do grupo de recursos do seu recurso Azure OpenAI.
resource_name O nome do recurso Azure OpenAI.
model_deployment_name O nome personalizado para sua nova implantação de modelo ajustada. Esse é o nome que será referenciado em seu código ao fazer chamadas de conclusão de chat.
fine_tuned_model Recupere esse valor dos resultados do trabalho de ajuste fino na etapa anterior. Ele será parecido com gpt-35-turbo-0613.ft-b044a9d3cf9c4228b5d393567f693b83. Você precisará adicionar esse valor ao json deploy_data. Alternativamente, você também pode implantar um ponto de verificação, passando o ID do ponto de verificação que aparecerá no formato ftchkpt-e559c011ecc04fc68eaa339d8227d02d
curl -X POST "https://management.azure.com/subscriptions/<SUBSCRIPTION>/resourceGroups/<RESOURCE_GROUP>/providers/Microsoft.CognitiveServices/accounts/<RESOURCE_NAME>/deployments/<MODEL_DEPLOYMENT_NAME>api-version=2023-05-01" \
  -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"
        }
    }
}'

Implantação entre regiões

O ajuste fino dá suporte à implantação de um modelo ajustado em uma região diferente da qual o modelo foi ajustado originalmente. Você também pode implantar em uma assinatura/região diferente.

As únicas limitações são que a nova região também deve dar suporte ao ajuste fino e, ao implantar a assinatura cruzada, a conta que gera o token de autorização para a implantação deve ter acesso às assinaturas de origem e de destino.

Veja abaixo um exemplo de implantação de um modelo que foi ajustado em uma assinatura/região para outra.

curl -X PUT "https://management.azure.com/subscriptions/<SUBSCRIPTION>/resourceGroups/<RESOURCE_GROUP>/providers/Microsoft.CognitiveServices/accounts/<RESOURCE_NAME>/deployments/<MODEL_DEPLOYMENT_NAME>api-version=2023-05-01" \
  -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",
            "source": "/subscriptions/{sourceSubscriptionID}/resourceGroups/{sourceResourceGroupName}/providers/Microsoft.CognitiveServices/accounts/{sourceAccount}" 
        }
    }
}'

Para implantar entre a mesma assinatura, mas regiões diferentes, você teria apenas assinatura e grupos de recursos idênticos para variáveis de origem e destino e apenas os nomes de recursos de origem e destino precisariam ser exclusivos.

Implantar um modelo com a CLI do Azure

O exemplo a seguir mostra como usar a CLI do Azure para implantar seu modelo personalizado. Com a CLI do Azure, você deve especificar um nome para a implantação do modelo personalizado. Para obter mais informações sobre como usar a CLI do Azure para implantar modelos personalizados, consulte az cognitiveservices account deployment.

Para executar este comando da CLI do Azure em uma janela do console, você deve substituir os seguintes <espaços reservados> pelos valores correspondentes para o modelo personalizado:

Espaço reservado Valor
<YOUR_AZURE_SUBSCRIPTION> O nome ou a ID da sua assinatura do Azure.
<YOUR_RESOURCE_GROUP> O nome do seu grupo de recursos do Azure.
<YOUR_RESOURCE_NAME> O nome do seu recurso OpenAI do Azure.
<YOUR_DEPLOYMENT_NAME> O nome que você deseja usar para sua implantação de modelo.
<YOUR_FINE_TUNED_MODEL_ID> O nome do seu tópico personalizado.
az cognitiveservices account deployment create 
    --resource-group <YOUR_RESOURCE_GROUP>
    --name <YOUR_RESOURCE_NAME>  
    --deployment-name <YOUR_DEPLOYMENT_NAME>
    --model-name <YOUR_FINE_TUNED_MODEL_ID>
    --model-version "1" 
    --model-format OpenAI 
    --sku-capacity "1" 
    --sku-name "Standard"

Usar um modelo personalizado implantado

Depois que seu modelo personalizado for implantado, você poderá usá-lo como qualquer outro modelo implantado. Você pode usar o Playground no Estúdio de IA do Azure para experimentar sua nova implantação. Você pode continuar a usar os mesmos parâmetros com o seu modelo personalizado, como temperature e max_tokens, como faz com outros modelos implantados. Para modelos de babbage-002 e davinci-002 ajustados, você usará o playground de Conclusões e a API de Conclusões. Para modelos de gpt-35-turbo-0613 ajustados, você usará o playground de chat e a API de conclusão do Chat.

curl $AZURE_OPENAI_ENDPOINT/openai/deployments/<deployment_name>/chat/completions?api-version=2023-05-15 \
  -H "Content-Type: application/json" \
  -H "api-key: $AZURE_OPENAI_API_KEY" \
  -d '{"messages":[{"role": "system", "content": "You are a helpful assistant."},{"role": "user", "content": "Does Azure OpenAI support customer managed keys?"},{"role": "assistant", "content": "Yes, customer managed keys are supported by Azure OpenAI."},{"role": "user", "content": "Do other Azure AI services support this too?"}]}'

Analisar seu modelo personalizado

O Azure OpenAI anexa um arquivo de resultados chamado results.csv a cada trabalho de ajuste fino após sua conclusão. Você pode usar o arquivo de resultado para analisar o desempenho de treinamento e validação do modelo personalizado. A ID do arquivo de resultado é listada para cada modelo personalizado e você pode usar a API REST para recuperar a ID do arquivo e baixar o arquivo de resultado para análise.

O exemplo do Python a seguir usa a API REST para recuperar a ID de arquivo do primeiro arquivo de resultado anexado ao trabalho de ajuste fino para seu modelo personalizado e, em seguida, baixa o arquivo no diretório de trabalho para análise.

curl -X GET "$AZURE_OPENAI_ENDPOINT/openai/fine_tuning/jobs/<JOB_ID>?api-version=2023-12-01-preview" \
  -H "api-key: $AZURE_OPENAI_API_KEY")
curl -X GET "$AZURE_OPENAI_ENDPOINT/openai/files/<RESULT_FILE_ID>/content?api-version=2023-12-01-preview" \
    -H "api-key: $AZURE_OPENAI_API_KEY" > <RESULT_FILENAME>

O arquivo de resultado é um arquivo CSV que contém uma linha de cabeçalho e uma linha para cada etapa de treinamento executada pelo trabalho de ajuste fino. O arquivo de resultado contém as seguintes colunas:

Nome da coluna Descrição
step O número da etapa de treinamento. Uma etapa de treinamento representa um único passe, para frente e para trás, em um lote de dados de treinamento.
train_loss A perda do lote de treinamento.
train_mean_token_accuracy A porcentagem de tokens no lote de treinamento previstos corretamente pelo modelo.
Por exemplo, se o tamanho do lote for definido como 3 e seus dados contiverem conclusões [[1, 2], [0, 5], [4, 2]], esse valor será definido como 0,83 (5 de 6) se o modelo previsto for [[1, 1], [0, 5], [4, 2]].
valid_loss A perda do lote de validação.
validation_mean_token_accuracy A porcentagem de tokens no lote de validação previstos corretamente pelo modelo.
Por exemplo, se o tamanho do lote for definido como 3 e seus dados contiverem conclusões [[1, 2], [0, 5], [4, 2]], esse valor será definido como 0,83 (5 de 6) se o modelo previsto for [[1, 1], [0, 5], [4, 2]].
full_valid_loss A perda de validação calculada no final de cada época. Quando o treino corre bem, a perda deve diminuir.
full_valid_mean_token_accuracy A precisão média válida do token calculada no final de cada época. Quando o treinamento está indo bem, a precisão do token deve aumentar.

Você também pode exibir os dados no arquivo results.csv como gráficos no Estúdio de IA do Azure. Selecione o link de um modelo treinado e você verá três gráficos: perda, precisão média de token e precisão de token. Se você forneceu dados de validação, ambos os conjuntos de dados aparecerão no mesmo gráfico.

Observe que sua perda diminui com o tempo e sua precisão aumenta. Se houver uma divergência entre os dados de treinamento e de validação, isso pode indicar que você está com sobreajuste. Tente treinar com menos épocas ou com um multiplicador de taxa de aprendizado menor.

Limpar suas implantações, modelos de personalizados e arquivos de treinamento

Quando terminar o modelo personalizado, você poderá excluir a implantação e o modelo. Você também pode excluir os arquivos de treinamento e validação carregados no serviço, se necessário.

Excluir a implantação do modelo

Você pode usar vários métodos para excluir a implantação do modelo personalizado:

Excluir seu modelo personalizado

Da mesma forma, você pode usar vários métodos para excluir seu modelo personalizado:

Observação

Você não poderá excluir um modelo personalizado se ele tiver uma implantação existente. Primeiro, você deve excluir a implantação do modelo antes de poder excluir o modelo personalizado.

Excluir seus arquivos de treinamento

Opcionalmente, você pode excluir arquivos de treinamento e validação carregados para treinamento e arquivos de resultado gerados durante o treinamento em sua assinatura do Azure OpenAI. Você pode usar os seguintes métodos para excluir seus arquivos de treinamento, validação e resultado:

Ajuste fino contínuo

Depois de criar um modelo ajustado, convém continuar a refinar o modelo ao longo do tempo por meio de ajustes mais finos. O ajuste fino contínuo é o processo iterativo de selecionar um modelo já ajustado como um modelo base e ajustá-lo ainda mais em novos conjuntos de exemplos de treinamento.

Para executar o ajuste fino em um modelo que você ajustou anteriormente, você usaria o mesmo processo descrito em criar um modelo personalizado mas, em vez de especificar o nome de um modelo base genérico, você especificaria a ID do seu modelo já ajustado. A ID do modelo ajustada parece com gpt-35-turbo-0613.ft-5fd1918ee65d4cd38a5dcf6835066ed7

curl -X POST $AZURE_OPENAI_ENDPOINT/openai/fine_tuning/jobs?api-version=2023-12-01-preview \
  -H "Content-Type: application/json" \
  -H "api-key: $AZURE_OPENAI_API_KEY" \
  -d '{
    "model": "gpt-35-turbo-0613.ft-5fd1918ee65d4cd38a5dcf6835066ed7", 
    "training_file": "<TRAINING_FILE_ID>", 
    "validation_file": "<VALIDATION_FILE_ID>",
    "suffix": "<additional text used to help identify fine-tuned models>"
}'

Também recomendamos incluir o parâmetro suffix para facilitar a distinção entre diferentes iterações do seu modelo ajustado. suffix usa uma cadeia de caracteres e está definido para identificar o modelo ajustado. O sufixo pode conter até 40 caracteres (a-z, A-Z, 0-9 e _) que serão adicionados ao seu nome de modelo ajustado.

Se você não tiver certeza da ID do modelo ajustado, essas informações poderão ser encontradas na página Modelos do Estúdio de IA do Azure ou gerar uma lista de modelos para um determinado recurso do OpenAI do Azure usando a API REST.

Solução de problemas

Como habilitar o ajuste fino? Criar um modelo personalizado está esmaecido no Azure OpenAI Studio?

Para acessar o ajuste fino com sucesso, é necessário ter o Colaborador de OpenAI de Serviços Cognitivos atribuído. Mesmo alguém com permissões de Administrador de Serviços de alto nível ainda precisaria dessa conta definida explicitamente para acessar o ajuste fino. Para obter mais informações, analise as diretrizes sobre controle de acesso baseado em função.

Por que meu upload falhou?

Se o upload do arquivo falhar no Estúdio do OpenAI do Azure, você poderá exibir a mensagem de erro em “arquivos de dados” no Estúdio do OpenAI do Azure. Passe o mouse sobre o local onde está escrito "erro" (sob a coluna de status) e uma explicação sobre a falha será exibida.

Captura de tela da mensagem de erro de ajuste fino.

Meu modelo ajustado não parece ter melhorado

  • Mensagem do sistema ausente: Você precisa fornecer uma mensagem do sistema ao fazer o ajuste fino; você deverá fornecer essa mesma mensagem do sistema ao usar o modelo ajustado. Se você fornecer uma mensagem de sistema diferente, poderá ver resultados diferentes daqueles que você ajustou.

  • Dados insuficientes: embora 10 seja o mínimo para que o pipeline seja executado, você precisa de centenas a milhares de pontos de dados para ensinar ao modelo uma nova habilidade. Um número muito pequeno de pontos de dados pode levar a um sobreajuste e a uma generalização ruim. Seu modelo ajustado pode ter um bom desempenho nos dados de treinamento, mas desempenho ruim em outros dados porque ele memorizou os exemplos de treinamento em vez de aprender padrões. Para obter os melhores resultados, planeje preparar um conjunto de dados com centenas ou milhares de pontos de dados.

  • Dados ruins: Um conjunto de dados mal coletado ou não representativo produzirá um modelo de baixa qualidade. Seu modelo pode aprender padrões imprecisos ou tendenciosos de seu conjunto de dados. Por exemplo, se você estiver treinando um chatbot para atendimento ao cliente, mas só fornecer dados de treinamento para um cenário (por exemplo, devoluções de itens), ele não saberá como responder a outros cenários. Ou, se os dados de treinamento forem ruins (contiverem respostas incorretas), o modelo aprenderá a fornecer resultados incorretos.

Próximas etapas