Partilhar via


Ajuste modelos usando implantações de API sem servidor no Azure AI Foundry

Importante

Os itens marcados (pré-visualização) neste artigo estão atualmente em pré-visualização pública. Esta visualização é fornecida sem um acordo de nível de serviço e não a recomendamos para ambientes de produção. Algumas funcionalidades poderão não ser suportadas ou poderão ter capacidades limitadas. Para obter mais informações, veja Termos Suplementares de Utilização para Pré-visualizações do Microsoft Azure.

O Azure AI Foundry permite que você personalize modelos de linguagem grandes para seus conjuntos de dados específicos por meio de um processo chamado ajuste fino. Este processo oferece benefícios significativos, permitindo a personalização e otimização sob medida para tarefas e aplicações específicas. As vantagens incluem melhor desempenho, eficiência de custos, latência reduzida e saídas personalizadas.

Eficiência de custos: o ajuste fino do Azure AI Foundry pode ser mais econômico, especialmente para implantações em grande escala, graças aos preços pré-pagos.

Variedade de modelos: o ajuste fino da implantação de API sem servidor do Azure AI Foundry oferece suporte para modelos proprietários e de código aberto, fornecendo aos usuários a flexibilidade de selecionar os modelos que melhor atendem às suas necessidades sem ficar restrito a um único tipo.

Personalização e controlo: o Azure AI Foundry proporciona uma maior personalização e controlo sobre o processo de afinação, permitindo aos utilizadores adaptar os modelos com maior precisão aos seus requisitos específicos.

Neste artigo, você descobrirá como ajustar modelos implantados usando implantações de API sem servidor no Azure AI Foundry.

Pré-requisitos

  • Uma subscrição do Azure com um método de pagamento válido. As subscrições gratuitas ou de avaliação do Azure não funcionarão. Se você não tiver uma assinatura do Azure, crie uma conta paga do Azure para começar.

  • Acesso ao portal do Azure.

  • Um projeto do Azure AI Foundry.

  • Os controles de acesso baseados em função do Azure (Azure RBAC) são usados para conceder acesso a operações no portal do Azure AI Foundry. Para executar os passos neste artigo, sua conta de utilizador deve ter atribuída a função de proprietário ou contribuinte para a subscrição do Azure. Para obter mais informações sobre permissões, consulte Controle de acesso baseado em função no portal do Azure AI Foundry.

Verificar o registo do fornecedor de subscrição

Verifique se a assinatura está registrada no provedor de recursos Microsoft.Network.

  1. Inicie sessão no portal Azure.
  2. Selecione Assinaturas no menu à esquerda.
  3. selecione a subscrição que quer utilizar.
  4. Selecione Configurações>Provedores de recursos no menu à esquerda.
  5. Adicione Microsoft.Network à lista de provedores de recursos se não estiver na lista.

Encontre modelos com suporte para ajuste fino

O catálogo de modelos do AI Foundry oferece suporte de ajuste fino para vários tipos de modelos, incluindo conclusão de bate-papo e geração de texto. Para obter uma lista de modelos que dão suporte ao ajuste fino e as regiões do Azure de suporte para ajuste fino, consulte Disponibilidade de região para modelos como implantação de API sem servidor. As tarefas de ajuste fino estão disponíveis apenas para usuários cuja assinatura do Azure pertence a uma conta de cobrança em um país/região onde o provedor de modelo disponibilizou a oferta. Se a oferta estiver disponível na região relevante, o usuário deverá ter um recurso de projeto na região do Azure onde o modelo está disponível para implantação ou ajuste fino, conforme aplicável.

Você também pode ir para o portal do Azure AI Foundry para exibir todos os modelos que contêm suporte para ajuste fino:

  1. Entre no Azure AI Foundry.

  2. Se ainda não estiver no seu projeto, selecione-o.

  3. Navegue até o catálogo de modelos.

  4. Selecione o filtro Tarefas de ajuste fino.

    Captura de ecrã das opções de filtro de ajuste fino do catálogo de modelos.

  5. Selecione Tudo ou selecione uma tarefa específica.

Preparar dados para ajuste fino

Prepare os dados de preparação e de validação para otimizar o seu modelo. Seus dados de treinamento e validação consistem em exemplos de entrada e saída de como você gostaria que o modelo fosse executado.

Certifique-se de que todos os seus exemplos de treinamento sigam o formato esperado para inferência. Para ajustar modelos de forma eficaz, garanta um conjunto de dados diversificado mantendo o equilíbrio de dados, incluindo vários cenários, e refinando periodicamente os dados de treinamento para alinhá-los às expectativas do mundo real. Estas ações conduzem, em última análise, a respostas de modelos mais precisas e equilibradas.

Sugestão

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

Exemplo de formato de ficheiro

O tipo de ficheiro suportado é JSON Lines. Os ficheiros são carregados para o arquivo de dados predefinido e disponibilizados em seu projeto.

    {"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?"}]}

Usar o assistente de Ajuste Fino de modelo

O portal do Azure AI Foundry fornece o assistente Criar modelo personalizado, para que você possa criar e treinar interativamente um modelo ajustado para seu recurso do Azure.

Selecione o modelo base

  1. Escolha o modelo que deseja ajustar no catálogo de modelos do Azure AI Foundry.
  2. Na página Detalhes do modelo, selecione Ajustar. Alguns modelos básicos suportam a implantação de API sem servidor e a computação gerenciada, enquanto outros suportam um ou outro.
  3. Se forem apresentadas as opções para implantação de API sem servidor e computação gerenciada, selecione implantação de API sem servidor para ajuste fino. Esta ação abre um assistente que mostra informações sobre o ajuste fino da API sem servidor para o seu modelo.

Escolha seus dados de treinamento

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

  • Se os seus dados de formação já tiverem sido carregados para o serviço, selecione Ficheiros do Azure AI Foundry.
    • Selecione o ficheiro na lista suspensa mostrada.
  • Para carregar novos dados de treinamento, use uma das seguintes opções:
    • Selecione Arquivo local para carregar dados de treinamento de um arquivo local.
    • Selecione Blob do Azure ou outros locais da Web compartilhados para importar dados de treinamento do Blob do Azure ou outro local da Web compartilhado.

Para arquivos de dados grandes, recomendamos que você importe de um repositório de Blob do Azure. Para obter mais informações sobre o Armazenamento de Blobs do Azure, consulte O que é o Armazenamento de Blobs do Azure?

Carregar dados de treinamento do arquivo local

Você pode carregar um novo conjunto de dados de treinamento para o serviço a partir 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.

Escolha os 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 não quiser usar dados de validação, escolha 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 de validação preparados existentes ou carregar novos dados de validação preparados para usar 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.

Dividir dados de treinamento

Você pode dividir automaticamente seus dados de treinamento para gerar um conjunto de dados de validação. Depois de selecionar Divisão automática de dados de treinamento, selecione Avançar para continuar.

Usar dados existentes no Azure AI Foundry

  • Se os dados de validação já tiverem sido carregados para o serviço, selecione Escolher conjunto de dados.
    • Selecione o arquivo na lista mostrada no painel Dados de validação .
  • Para carregar novos dados de validação, use uma das seguintes opções:
    • Selecione Arquivo local para carregar dados de validação de um arquivo local.
    • Selecione Blob do Azure ou outros locais da Web compartilhados para importar dados de validação do Blob do Azure ou outro local da Web compartilhado. Para arquivos de dados grandes, recomendamos que você importe de um repositório de Blob do Azure. Os ficheiros grandes podem tornar-se instáveis quando carregados através de formulários com várias partes porque os pedidos são atómicos e não podem ser repetidos ou retomados.

Observação

  • Semelhante aos arquivos de dados de treinamento, os arquivos de dados de validação devem ser formatados como arquivos JSONL,
  • codificado em UTF-8 com uma BOM (marca de ordem de bytes). 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 a partir 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 Open e selecione Carregar arquivo. Depois de selecionar e carregar o conjunto de dados de validação, selecione Avançar para continuar.

Configurar parâmetros de tarefa

O assistente Ajustar modelo mostra os parâmetros para treinar seu modelo ajustado no painel Parâmetros da tarefa . Os parâmetros seguintes estão disponíveis:

Nome Tipo Descrição
batch_size número inteiro O tamanho do lote a ser usado para treinamento. O tamanho do lote é o número de exemplos de treinamento usados para treinar um único passe para frente e para trás. Em geral, descobrimos que lotes maiores tendem a funcionar melhor para conjuntos de dados maiores. O valor padrão, bem como o valor máximo para essa propriedade são específicos para um modelo base. Um tamanho de lote maior significa que os parâmetros do modelo são atualizados com menos frequência, mas com menor variância.
learning_rate_multiplier número O multiplicador da taxa de aprendizagem a utilizar na formação. A taxa de aprendizagem de ajuste fino é a taxa de aprendizagem original usada para pré-treinamento multiplicada por esse valor. Taxas de aprendizagem maiores tendem a ter um melhor desempenho com lotes maiores. Recomendamos experimentar valores no intervalo de 0,02 a 0,2 para ver o que produz os melhores resultados. Uma taxa de aprendizagem menor pode ser útil para evitar o sobreajuste.
n_epochs número inteiro O número de épocas a serem usadas para treinar o modelo. Uma época refere-se a um ciclo completo através do conjunto de dados de treinamento.

Selecione Padrão para usar os valores padrão para o trabalho de ajuste fino ou selecione Personalizado para exibir e editar os valores de hiperparâmetro. Quando os padrões são selecionados, determinamos o valor correto algoritmicamente com base em seus dados de treinamento. Depois de configurar as opções avançadas, selecione Avançar para revisar suas escolhas e treinar seu modelo ajustado.

Reveja as suas escolhas e treine o seu modelo

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

Se você estiver pronto para treinar seu modelo, selecione Iniciar trabalho de treinamento para iniciar o trabalho de ajuste fino e retornar à guia Modelos .

Verificar o estado do seu modelo personalizado

A guia de Ajuste de precisão exibe informações sobre o seu modelo personalizado. O separador inclui informações sobre o estado e a ID do trabalho de ajuste personalizado para o 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 modelo.

Captura de tela do painel de projetos em execução.

Depois de iniciar um trabalho de ajuste fino, ele pode levar algum tempo para ser concluído. Seu trabalho pode estar na fila atrás de outros trabalhos no sistema. O treinamento do seu modelo pode levar minutos ou horas, dependendo do tamanho do modelo e do conjunto de dados. Aqui estão algumas das tarefas que você pode fazer na guia 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 estado da tarefa de afinação, resultados do treino, eventos do treino e hiperparâmetros usados na tarefa.
  • Selecione Atualizar para atualizar as informações da página.

Captura de ecrã do painel de detalhes de ajuste fino.

Cenários empresariais suportados para ajuste fino

Vários cenários empresariais são suportados para ajuste fino de implantação de API sem servidor. A tabela abaixo descreve as configurações suportadas para rede de armazenamento do usuário e autenticação para garantir o bom funcionamento em cenários corporativos:

Observação

  • As conexões de dados podem ser alteradas por meio do AI Foundry clicando na conexão de armazenamento onde o seu conjunto de dados está localizado e navegando até a definição de Detalhes de Acesso>Método de Autenticação.
  • A autenticação de armazenamento pode ser alterada na página >Definições> de Configurações do Azure >Permitir acesso à chave da conta de armazenamento.
  • A rede de armazenamento pode ser alterada na página Rede de Armazenamento > do Azure.
Rede de armazenamento Autenticação de armazenamento Autenticação de conexão de dados Suporte
Acesso à rede pública = Ativado Chave de conta ativada SAS/Chave de Acesso da Conta Sim, UX e SDK
Acesso à rede pública = Ativado Chave de conta desativada Auth baseada em Entra (sem credenciais) Sim, UX e SDK

Nota: para UX, talvez seja necessário adicionar o Storage Blob Data Reader ou o Storage Blob Data Contributor para seu ID de usuário na conta de armazenamento ou alterar a autenticação da conexão para usar a chave de conta/token SAS
Ativado a partir de redes virtuais e endereços IP selecionados Chave de conta ativada Chave da conta Sim, UX e SDK

Nota: para UX, o IP do computador que executa o navegador deve estar na lista selecionada
Ativado a partir de redes virtuais e endereços IP selecionados Chave de conta ativada SAS Sim, UX e SDK

Nota: para UX, o IP do computador que executa o navegador deve estar na lista selecionada
Ativado a partir de redes virtuais e endereços IP selecionados Chave de conta desativada Auth baseada em Entra (sem credenciais) Sim, UX e SDK.

Nota: para UX, talvez seja necessário adicionar o Storage Blob Data Reader ou o Storage Blob Data Contributor para seu ID de usuário na conta de armazenamento ou alterar a autenticação da conexão para usar a chave de conta/token SAS. Certifique-se também de que o IP do computador que executa o navegador deve estar na lista selecionada
Acesso à rede pública = desativado Chave de conta ativada SAS/Chave de Acesso da Conta Sim, UX e SDK.

Nota: para o upload de dados de UX e envio para o trabalho, o espaço de trabalho precisa ser acessado de dentro da Vnet que tem acesso apropriado ao armazenamento
Acesso à rede pública = desativado Chave de conta desativada Auth baseada em Entra (sem credenciais) Sim, UX e SDK.

Nota: para o upload de dados de UX e envio para o trabalho, o espaço de trabalho precisa ser acessado de dentro da Vnet que tem acesso apropriado ao armazenamento

Os cenários acima também devem funcionar em um espaço de trabalho Vnet gerenciado. Consulte a configuração do hub Managed Vnet AI Foundry aqui: Como configurar uma rede gerenciada para hubs do Azure AI Foundry

Customer-Managed Keys (CMKs) não é um cenário empresarial suportado com ajuste fino de implantação de API sem servidor.

Problemas de otimização com configurações de rede únicas no espaço de trabalho e armazenamento geralmente indicam um problema de configuração de rede.


Implantar um modelo aperfeiçoado

Quando o trabalho de ajuste fino for bem-sucedido, poderá desplegar o modelo personalizado no separador Fine-tune. Deve desplegar o seu modelo personalizado para o disponibilizar para uso com requisições de conclusão.

Importante

Depois de implantar um modelo personalizado e terminar com o ponto de extremidade, lembre-se de limpar todos os pontos de extremidade inativos. A exclusão de uma implantação inativa não exclui nem afeta o modelo personalizado subjacente, e o modelo personalizado pode ser reimplantado a qualquer momento. Conforme descrito nos Preços do Azure AI Foundry, cada modelo personalizado (ajustado e afinado) implantado incorre num custo de alojamento por hora, independentemente de serem realizadas chamadas de completamento ou de conversa para o modelo. Para saber mais sobre como planejar e gerenciar custos com o Azure AI Foundry, consulte as orientações em Planejar o gerenciamento de custos para o Azure AI Foundry Service.

Observação

Apenas 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.

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

Você também pode implementar um modelo finamente ajustado através da guia Modelos + endpoints, selecionando o botão Implementar modelo e, em seguida, selecionando Implementar modelo finamente ajustado na lista suspensa.

Captura de tela do painel de gerenciamento de implantações de ajuste fino.

Em seguida, selecione o modelo ajustado que deseja implantar e selecione Implantar.

Implantação entre regiões

O ajuste fino suporta a implantação de um modelo ajustado em uma região diferente daquela em que o modelo foi originalmente ajustado. Você também pode implantar noutra assinatura ou região diferente. As únicas limitações são que a nova região também deve oferecer 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 implementação entre assinaturas/regiões pode ser realizada via Python

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 portal do Azure AI Foundry para experimentar sua nova implantação. Você pode continuar a usar os mesmos parâmetros com seu modelo personalizado, como temperatura e max_tokens, como pode fazer com outros modelos implantados.

Limpe os seus modelos afinados

Você pode excluir um modelo ajustado da lista de modelos de ajuste fino no Azure AI Foundry ou da página de detalhes do modelo. Para excluir o modelo ajustado da página Ajuste fino,

  1. Selecione Ajuste fino na navegação à esquerda no seu projeto do Azure AI Foundry.
  2. Selecione o botão Excluir para excluir o modelo ajustado.

Observação

Não é possível excluir um modelo personalizado se ele tiver uma implantação existente. Deve primeiro eliminar a implementação do modelo antes de eliminar o modelo personalizado.

Criar um cliente para consumir o modelo

As seções a seguir orientam você sobre como ajustar um modelo em python. Para encontrar um exemplo de bloco de anotações desse código, consulte Ajuste fino do LLM com modelo como serviço

  1. Certifique-se de instalar as dependências para começar a aperfeiçoar o seu modelo.
%pip install azure-ai-ml
%pip install azure-identity

%pip install mlflow
%pip install azureml-mlflow
  1. Crie o cliente para utilizar o modelo. O código a seguir usa uma URL de ponto de extremidade e uma chave que são armazenadas em variáveis de ambiente.
from azure.ai.ml import MLClient
from azure.identity import (
    DefaultAzureCredential,
    InteractiveBrowserCredential,
)

try:
    credential = DefaultAzureCredential()
    credential.get_token("https://management.azure.com/.default")
except Exception as ex:
    credential = InteractiveBrowserCredential()

try:
    workspace_ml_client = MLClient.from_config(credential=credential)
except:
    workspace_ml_client = MLClient(
        credential,
        subscription_id="<SUBSCRIPTION_ID>",
        resource_group_name="<RESOURCE_GROUP_NAME>",
        workspace_name="<PROJECT_NAME OR WORKSPACE_NAME>",
    )

# the models, fine tuning pipelines and environments are available in various AzureML system registries,
# Example: Phi family of models are in "azureml", Llama family of models are in "azureml-meta" registry.
registry_ml_client = MLClient(credential, registry_name="azureml")

# Get AzureML workspace object.
workspace = workspace_ml_client._workspaces.get(workspace_ml_client.workspace_name)
workspace.id

Encontre modelos com suporte para ajuste fino

O catálogo de modelos do AI Foundry oferece suporte de ajuste fino para vários tipos de modelos, incluindo conclusão de bate-papo e geração de texto. Para obter uma lista de modelos que dão suporte ao ajuste fino e as regiões do Azure de suporte para ajuste fino, consulte Disponibilidade de região para modelos em uma implantação de API sem servidor. As tarefas de ajuste fino estão disponíveis apenas para usuários cuja assinatura do Azure pertence a uma conta de cobrança em um país/região onde o provedor de modelo disponibilizou a oferta. Se a oferta estiver disponível na região relevante, o usuário deverá ter um recurso de projeto na região do Azure onde o modelo está disponível para implantação ou ajuste fino, conforme aplicável.

Para este exemplo, usamos um modelo Phi-4-mini-instruct. Neste trecho de código, a propriedade identificador do modelo será passada como entrada para a tarefa de ajuste fino. Isso também está disponível como o campo ID do ativo na página de detalhes do modelo no Catálogo de modelos do Azure AI Foundry.

model_name = "Phi-4-mini-instruct"
model_to_finetune = registry_ml_client.models.get(model_name, label="latest")
print(
    "\n\nUsing model name: {0}, version: {1}, id: {2} for fine tuning".format(
        model_to_finetune.name, model_to_finetune.version, model_to_finetune.id
    )
)

Preparar dados para ajuste fino

Prepare os dados de preparação e de validação para otimizar o seu modelo. Seus dados de treinamento e validação consistem em exemplos de entrada e saída de como você gostaria que o modelo fosse executado.

Certifique-se de que todos os seus exemplos de treinamento sigam o formato esperado para inferência. Para ajustar modelos de forma eficaz, garanta um conjunto de dados diversificado mantendo o equilíbrio de dados, incluindo vários cenários, e refinando periodicamente os dados de treinamento para alinhá-los às expectativas do mundo real. Estas ações conduzem, em última análise, a respostas de modelos mais precisas e equilibradas.

Sugestão

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

Exemplo de formato de ficheiro

O tipo de ficheiro suportado é JSON Lines. Os ficheiros são carregados para o arquivo de dados predefinido e disponibilizados em seu projeto.

    {"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?"}]}

Criar entradas de dados de treinamento

Este trecho de código mostra como definir um conjunto de dados de treinamento.

from azure.ai.ml.constants import AssetTypes
from azure.ai.ml.entities import Data

dataset_version = "1"
train_dataset_name = "chat_training_small"
try:
    train_data_asset = workspace_ml_client.data.get(
        train_dataset_name, version=dataset_version
    )
    print(f"Dataset {train_dataset_name} already exists")
except:
    print("creating dataset")
    train_data = Data(
        path=f"./train.jsonl",
        type=AssetTypes.URI_FILE,
        description="Training dataset",
        name=train_dataset_name,
        version="1",
    )
    train_data_asset = workspace_ml_client.data.create_or_update(train_data)

Criar 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 não quiser usar dados de validação, você pode optar por ignorar esta etapa para continuar para a próxima seção. 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 para usar ao personalizar seu modelo.

from azure.ai.ml.entities import Data

dataset_version = "1"
validation_dataset_name = "chat_validation_small"
try:
    validation_data_asset = workspace_ml_client.data.get(
        validation_dataset_name, version=dataset_version
    )
    print(f"Dataset {validation_dataset_name} already exists")
except:
    print("creating dataset")
    validation_data = Data(
        path=f"./validation.jsonl",
        type=AssetTypes.URI_FILE,
        description="Validation dataset",
        name=validation_dataset_name,
        version="1",
    )
    validation_data_asset = workspace_ml_client.data.create_or_update(validation_data)

Criar subscrição do marketplace para modelos de terceiros

Esta etapa é necessária para todos os modelos que não sejam da Microsoft. Um exemplo de um modelo da Microsoft é a família de modelos Phi.

model_id_to_subscribe = "/".join(model_to_finetune.id.split("/")[:-2])
print(model_id_to_subscribe)

normalized_model_name = model_name.replace(".", "-")

from azure.ai.ml.entities import MarketplaceSubscription


subscription_name = f"{normalized_model_name}-sub"

marketplace_subscription = MarketplaceSubscription(
    model_id=model_id_to_subscribe,
    name=subscription_name,
)

# note: this will throw exception if the subscription already exists or subscription is not required (for example, if the model is not in the marketplace like Phi family)
try:
    marketplace_subscription = (
        workspace_ml_client.marketplace_subscriptions.begin_create_or_update(
            marketplace_subscription
        ).result()
    )
except Exception as ex:
    print(ex)

Envie o trabalho de ajuste fino usando o modelo e os dados como entradas

Há um conjunto de parâmetros que são necessários para ajustar seu modelo. Cada parâmetro é definido da seguinte forma:

  • modelo: Modelo base para ajustar.
  • training_data: Dados de treinamento para ajuste fino do modelo base.
  • validation_data: Dados de validação para ajuste fino do modelo base.
  • tarefa: Tarefa de ajuste fino a ser executada. por exemplo. CHAT_COMPLETION para trabalhos de aperfeiçoamento de conclusão de conversa.
  • outputs: Nome do modelo registrado de saída.

Os seguintes parâmetros são opcionais:

  • hiperparâmetros: são parâmetros que controlam o comportamento de ajuste fino durante a execução.
  • nome: Ajuste fino do nome do trabalho
  • experiment_name: Nome do experimento para o trabalho de ajuste fino.
  • display_name: Nome de exibição do trabalho de ajuste.
from azure.ai.ml.finetuning import FineTuningTaskType, create_finetuning_job
import uuid

guid = uuid.uuid4()
short_guid = str(guid)[:8]
display_name = f"{model_name}-display-name-{short_guid}-from-sdk"
name = f"{model_name}t-{short_guid}-from-sdk"
output_model_name_prefix = f"{model_name}-{short_guid}-from-sdk-finetuned"
experiment_name = f"{model_name}-from-sdk"

finetuning_job = create_finetuning_job(
    task=FineTuningTaskType.CHAT_COMPLETION,
    training_data=train_data_asset.id,
    validation_data=validation_data_asset.id,
    hyperparameters={
        "per_device_train_batch_size": "1",
        "learning_rate": "0.00002",
        "num_train_epochs": "1",
    },
    model=model_to_finetune.id,
    display_name=display_name,
    name=name,
    experiment_name=experiment_name,
    tags={"foo_tag": "bar"},
    properties={"my_property": "my_value"},
    output_model_name_prefix=output_model_name_prefix,
created_job = workspace_ml_client.jobs.create_or_update(finetuning_job)
workspace_ml_client.jobs.get(created_job.name)

status = workspace_ml_client.jobs.get(created_job.name).status

import time

while True:
    status = workspace_ml_client.jobs.get(created_job.name).status
    print(f"Current job status: {status}")
    if status in ["Failed", "Completed", "Canceled"]:
        print("Job has finished with status: {0}".format(status))
        break
    else:
        print("Job is still running. Checking again in 30 seconds.")
        time.sleep(30)
finetune_model_name = created_job.outputs["registered_model"]["name"]
finetune_model_name

Implantar um modelo aperfeiçoado

Quando o trabalho de ajuste fino for bem-sucedido, você poderá implantar o modelo personalizado.

Importante

Depois de implantar um modelo personalizado e terminar com o ponto de extremidade, lembre-se de limpar todos os pontos de extremidade inativos. A exclusão de uma implantação inativa não exclui nem afeta o modelo personalizado subjacente, e o modelo personalizado pode ser reimplantado a qualquer momento. Conforme descrito nos Preços do Azure AI Foundry, cada modelo personalizado (ajustado e afinado) implantado incorre num custo de alojamento por hora, independentemente de serem realizadas chamadas de completamento ou de conversa para o modelo. Para saber mais sobre como planejar e gerenciar custos com o Azure AI Foundry, consulte as orientações em Planejar o gerenciamento de custos para o Azure AI Foundry Service.

# Deploy the model as a serverless endpoint

endpoint_name = f"{normalized_model_name}-ft-{short_guid}"  # Name must be unique
model_id = f"azureml://locations/{workspace.location}/workspaces/{workspace._workspace_id}/models/{finetune_model_name}/versions/1"

Cenários empresariais suportados para ajuste fino

Vários cenários empresariais são suportados para ajuste fino de implantação de API sem servidor. A tabela abaixo descreve as configurações suportadas para rede de armazenamento do usuário e autenticação para garantir o bom funcionamento em cenários corporativos:

Observação

  • As conexões de dados podem ser alteradas por meio do AI Foundry clicando na conexão de armazenamento onde o seu conjunto de dados está localizado e navegando até a definição de Detalhes de Acesso>Método de Autenticação.
  • A autenticação de armazenamento pode ser alterada na página >Definições> de Configurações do Azure >Permitir acesso à chave da conta de armazenamento.
  • A rede de armazenamento pode ser alterada na página Rede de Armazenamento > do Azure.
Rede de armazenamento Autenticação de armazenamento Autenticação de conexão de dados Suporte
Acesso à rede pública = Ativado Chave de conta ativada SAS/Chave de Acesso da Conta Sim, UX e SDK
Acesso à rede pública = Ativado Chave de conta desativada Auth baseada em Entra (sem credenciais) Sim, UX e SDK

Nota: para UX, talvez seja necessário adicionar o Storage Blob Data Reader ou o Storage Blob Data Contributor para seu ID de usuário na conta de armazenamento ou alterar a autenticação da conexão para usar a chave de conta/token SAS
Ativado a partir de redes virtuais e endereços IP selecionados Chave de conta ativada Chave da conta Sim, UX e SDK

Nota: para UX, o IP do computador que executa o navegador deve estar na lista selecionada
Ativado a partir de redes virtuais e endereços IP selecionados Chave de conta ativada SAS Sim, UX e SDK

Nota: para UX, o IP do computador que executa o navegador deve estar na lista selecionada
Ativado a partir de redes virtuais e endereços IP selecionados Chave de conta desativada Auth baseada em Entra (sem credenciais) Sim, UX e SDK.

Nota: para UX, talvez seja necessário adicionar o Storage Blob Data Reader ou o Storage Blob Data Contributor para seu ID de usuário na conta de armazenamento ou alterar a autenticação da conexão para usar a chave de conta/token SAS. Certifique-se também de que o IP do computador que executa o navegador deve estar na lista selecionada
Acesso à rede pública = desativado Chave de conta ativada SAS/Chave de Acesso da Conta Sim, UX e SDK.

Nota: para o upload de dados de UX e envio para o trabalho, o espaço de trabalho precisa ser acessado de dentro da Vnet que tem acesso apropriado ao armazenamento
Acesso à rede pública = desativado Chave de conta desativada Auth baseada em Entra (sem credenciais) Sim, UX e SDK.

Nota: para o upload de dados de UX e envio para o trabalho, o espaço de trabalho precisa ser acessado de dentro da Vnet que tem acesso apropriado ao armazenamento

Os cenários acima também devem funcionar em um espaço de trabalho Vnet gerenciado. Consulte a configuração do hub Managed Vnet AI Foundry aqui: Como configurar uma rede gerenciada para hubs do Azure AI Foundry

Customer-Managed Keys (CMKs) não é um cenário empresarial suportado com a otimização da implantação de API sem servidor.

Problemas de otimização com configurações de rede únicas no espaço de trabalho e armazenamento geralmente indicam um problema de configuração de rede.

Implantação entre regiões

O ajuste fino suporta a implantação de um modelo ajustado em uma região diferente daquela em que o modelo foi originalmente ajustado. Você também pode implantar noutra assinatura ou região diferente. As únicas limitações são que a nova região também deve oferecer 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 implementação entre assinaturas/regiões pode ser realizada via Python


# Create Cross region FT deployment client
from azure.ai.ml.entities import ServerlessEndpoint
from azure.ai.ml import MLClient
from azure.identity import (
    DefaultAzureCredential,
    InteractiveBrowserCredential,
)

try:
    credential = DefaultAzureCredential()
    credential.get_token("https://management.azure.com/.default")
except Exception as ex:
    credential = InteractiveBrowserCredential()
try:
    workspace_ml_client = MLClient.from_config(credential=credential)
except:
    workspace_ml_client = MLClient(
        credential,
        subscription_id="<TARGET_SUBSCRIPTION_ID>",
        resource_group_name="<TARGET_RESOURCE_GROUP_NAME>",
        workspace_name="<TARGET_PROJECT_NAME>",
    )

workspace = workspace_ml_client._workspaces.get(workspace_ml_client.workspace_name)
workspace_region = workspace.location
model_to_finetune.tags
supported_regions = model_to_finetune.tags["maas-finetuning-deploy-regions"]
supported_regions
if workspace_region in supported_regions:
    print(f"Creating endpoint in the region:{workspace_region}")
    serverless_endpoint = ServerlessEndpoint(name=endpoint_name, model_id=model_id)
    created_endpoint = workspace_ml_client.serverless_endpoints.begin_create_or_update(
        serverless_endpoint
    ).result()
else:
    raise ValueError(
        f"For the model : {model_to_finetune}, the target region: {workspace_region} is not supported for deployment, the supported regions: {supported_regions}"
    )

Usar um modelo personalizado implantado

Depois que seu modelo personalizado for implantado, você poderá usá-lo como qualquer outro modelo implantado. Você pode continuar a usar os mesmos parâmetros com seu modelo personalizado, como temperatura e max_tokens, como pode fazer com outros modelos implantados.

endpoint = workspace_ml_client.serverless_endpoints.get(endpoint_name)
endpoint_keys = workspace_ml_client.serverless_endpoints.get_keys(endpoint_name)
auth_key = endpoint_keys.primary_key

import requests

url = f"{endpoint.scoring_uri}/v1/chat/completions"

payload = {
    "max_tokens": 1024,
    "messages": [
        {
            "content": "This script is great so far. Can you add more dialogue between Amanda and Thierry to build up their chemistry and connection?",
            "role": "user",
        }
    ],
}
headers = {"Content-Type": "application/json", "Authorization": f"{auth_key}"}

response = requests.post(url, json=payload, headers=headers)

response.json()

Limpe os seus modelos afinados

Depois de terminar de ajustar o seu modelo, execute o código a seguir para limpar o seu modelo ajustado.

workspace_ml_client.serverless_endpoints.begin_delete(endpoint_name).result()

Considerações sobre custo e cota para modelos implantados como uma implantação de API sem servidor

A quota é gerida por cada implementação. Cada implementação tem um limite de taxa de 200 000 tokens por minuto e 1000 pedidos de API por minuto. No entanto, atualmente, limitamos uma implementação por modelo por projeto. Contacte o Suporte do Microsoft Azure se os limites de taxa atuais não forem suficientes para os seus cenários.

Custo para modelos Microsoft

Você pode encontrar as informações de preços na guia Preços e termos do assistente de implantação ao implantar modelos da Microsoft (como modelos Phi-3) como uma implantação de API sem servidor.

Custo para modelos que não sejam da Microsoft

Os modelos que não são da Microsoft implantados como uma implantação de API sem servidor são oferecidos por meio do Azure Marketplace e integrados ao Azure AI Foundry para uso. Você pode encontrar os preços do Azure Marketplace ao implantar ou ajustar esses modelos.

Sempre que um projeto subscreve uma determinada oferta do Azure Marketplace, é criado um novo recurso para controlar os custos associados ao seu consumo. O mesmo recurso é usado para monitorizar os custos associados à inferência e à otimização; no entanto, estão disponíveis vários medidores para monitorizar cada cenário de forma independente.

Para obter mais informações sobre como controlar custos, consulte Monitorar custos para modelos oferecidos por meio do Azure Marketplace.

Uma captura de tela mostrando diferentes recursos correspondentes a diferentes ofertas de modelos e seus medidores associados.

Exemplo de caderno

Você pode usar este bloco de anotações de exemplo para criar um trabalho de ajuste fino autônomo para aprimorar a capacidade de um modelo de resumir diálogos entre duas pessoas usando o conjunto de dados Samsum. Os dados de treinamento utilizados são o conjunto de dados ultrachat_200k, que é dividido em quatro partições adequadas para afinação supervisionada (sft) e classificação de geração (gen). O bloco de anotações emprega os modelos de IA do Azure disponíveis para a tarefa de conclusão de bate-papo (se você quiser usar um modelo diferente do usado no bloco de anotações, poderá substituir o nome do modelo). O caderno inclui a configuração de pré-requisitos, a seleção de um modelo para aprimorar, a criação de conjuntos de dados de treino e validação, a configuração e envio do trabalho de ajuste fino e, finalmente, a criação de uma implementação sem servidor usando o modelo aprimorado para inferência de exemplo.

Exemplo de Interface de Linha de Comando (CLI)

Além disso, você pode usar esta CLI de exemplo para criar um trabalho de ajuste fino autônomo para aprimorar a capacidade de um modelo de resumir diálogos entre duas pessoas usando um conjunto de dados.

type: finetuning

name: "Phi-3-mini-4k-instruct-with-amlcompute"
experiment_name: "Phi-3-mini-4k-instruct-finetuning-experiment"
display_name: "Phi-3-mini-4k-instruct-display-name"
task: chat_completion
model_provider: custom
model: 
  path: "azureml://registries/azureml/models/Phi-3-mini-4k-instruct/versions/14"
  type: mlflow_model
training_data: train.jsonl
validation_data:
  path: validation.jsonl
  type: uri_file
hyperparameters:
  num_train_epochs: "1"
  per_device_train_batch_size: "1"
  learning_rate: "0.00002"
properties:
  my_property: "my_value"
tags:
  foo_tag: "bar"
outputs:
  registered_model:
    name: "Phi-3-mini-4k-instruct-finetuned-model"
    type: mlflow_model 

Os dados de treinamento usados são os mesmos demonstrados no bloco de anotações do SDK. A CLI emprega os modelos de IA do Azure disponíveis para a tarefa de conclusão de chat. Se preferir usar um modelo diferente do do exemplo da CLI, você pode atualizar os argumentos, como 'caminho do modelo', de acordo.

Filtragem de conteúdos

Os modelos de implantação de API sem servidor são protegidos pelo Azure AI Content Safety. Quando implantado em pontos de extremidade em tempo real, você pode desativar esse recurso. Com a Segurança de Conteúdo de IA do Azure habilitada, tanto o prompt quanto a conclusão passam por um conjunto de modelos de classificação destinados a detetar e prevenir a saída de conteúdo nocivo. O sistema de filtragem de conteúdo deteta e age em categorias específicas de conteúdo potencialmente nocivo em prompts de entrada e finalizações de saída. Saiba mais sobre a Segurança de Conteúdos do Azure AI.

Próximos passos