Ajustar modelos usando implantações de API sem servidor no Microsoft Foundry (clássico)

Aplica-se somente a:Portal Foundry (clássico). Este artigo não está disponível para o novo portal do Foundry. Saiba mais sobre o novo portal.

Nota

Links neste artigo podem abrir conteúdo na nova documentação do Microsoft Foundry em vez da documentação da Foundry (clássica) que você está exibindo agora.

Importante

Itens marcados (versão prévia) neste artigo estão atualmente em versão prévia pública. Essa versão prévia é fornecida sem um contrato de nível de serviço e não recomendamos isso para cargas de trabalho de produção. Alguns recursos podem não ter suporte ou ter recursos restritos. Para obter mais informações, consulte Supplemental Terms of Use for Microsoft Azure Previews.

Saiba como implantar modelos ajustados usando implantações de API sem servidor no Microsoft Foundry. Este guia abrangente mostra como ajustar llms (modelos de linguagem grandes) aos seus conjuntos de dados específicos e implantá-los com infraestrutura sem servidor, oferecendo melhor desempenho, eficiência de custo, latência reduzida e saídas personalizadas.

Eficiência de custo: o ajuste fino da Foundry pode ser mais econômico, especialmente para implantações em larga escala, graças aos preços de pagamento conforme o uso.

Variedade de modelos: o ajuste fino da implantação de API sem servidor da Foundry oferece suporte para modelos proprietários e de software livre, fornecendo aos usuários a flexibilidade para selecionar os modelos que melhor atendem às suas necessidades sem serem restritos a um único tipo.

Personalização e controle: a Foundry fornece maior personalização e controle sobre o processo de ajuste fino, o que permite que os usuários adaptem modelos com mais precisão aos seus requisitos específicos.

Este artigo explica como ajustar modelos implantados usando implantações de API sem servidor no Foundry.

Pré-requisitos

  • Um projeto do Foundry.

  • Os controles de acesso baseados em função do Azure (Azure RBAC) são usados para conceder acesso às operações no portal Foundry. Para executar as etapas neste artigo, sua conta de usuário deve receber a função Owner ou Contributor para a assinatura Azure. Para obter mais informações sobre permissões, consulte o controle de acesso baseado em função no portal do Foundry.

Verificar o registro do provedor de assinatura

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

  1. Entre no portal Azure.
  2. Selecione a assinatura que você deseja usar.
  3. Em Configurações no menu da barra lateral, selecione Provedores de recursos.
  4. Selecione Microsoft. Rede e escolha Register se não estiver registrado.

Localizar modelos com suporte de ajuste fino

O catálogo de modelos do Foundry oferece suporte para refinamento de vários tipos de modelos, incluindo conclusões de conversas e geração de texto. Para obter uma lista de modelos e regiões que dão suporte ao ajuste fino, consulte a disponibilidade da região para modelos em APIs sem servidor.

As tarefas de ajuste fino estão disponíveis somente para usuários cuja assinatura Azure pertence a uma conta de cobrança em uma região em que o provedor de modelo disponibiliza a oferta. Se a oferta estiver disponível na região relevante, o usuário deverá ter um recurso de projeto na região Azure em que o modelo está disponível para implantação ou ajuste fino, conforme aplicável.

Acesse o portal do Foundry para exibir todos os modelos que contêm suporte de ajuste fino:

  1. Entre no Microsoft Foundry. Certifique-se de que o alternador New Foundry está desativado. Essas etapas se referem ao Foundry (clássico).

  2. Se você ainda não estiver em seu projeto, selecione-o.

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

  4. Selecione o filtro tarefas de ajuste fino.

    Captura de tela 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 seus dados de treinamento e validação para ajustar 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.

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 diversificado mantendo o equilíbrio de dados, incluindo vários cenários, e refinando periodicamente dados de treinamento para se alinhar às expectativas do mundo real. Essas ações, em última análise, levam a respostas de modelo mais precisas e equilibradas.

Dica

Diferentes tipos de modelo exigem dados de treinamento em formatos diferentes.

Formato de arquivo de exemplo

O tipo de arquivo com suporte é JSON Lines (JSONL). Os arquivos são carregados no armazenamento de dados padrão 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 Foundry fornece um assistente personalizado para criar e treinar interativamente um modelo otimizado para o seu recurso do Azure.

Selecione o modelo base

  1. Selecione Ajuste fino no menu da barra lateral e escolha + Ajustar modelo.
  2. Selecione o modelo que você deseja ajustar na lista em modelos base e selecione Avançar.

Escolha 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 de dados Treinamento exibe todos os conjuntos de dados existentes e carregados anteriormente e também fornece opções para carregar novos dados de treinamento.

Selecione + Adicionar dados de treinamento.

  • Se os dados de treinamento já estiverem carregados no serviço, selecione Arquivos existentes neste recurso.
    • Selecione o arquivo na lista suspensa mostrada.
  • Para carregar novos dados de treinamento, use uma das seguintes opções:
    • Selecione Carregar arquivos para carregar dados de treinamento de um arquivo local.
    • Selecione Azure blob ou outros locais da Web compartilhados para importar dados de treinamento de Azure Blob ou outro local da Web compartilhado.
  • Para usar um conjunto de dados pronto-para-uso para afinamento rápido, escolha na lista em Selecionar dados.

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

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, escolha Enviar para continuar para as opções avançadas do modelo. Caso contrário, se você tiver um conjunto de dados de validação, escolha os dados de validação preparados existentes ou carregue novos dados de validação preparados para usar ao personalizar seu modelo.

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

  • Se os dados de validação já estiverem carregados no serviço, selecione Arquivos existentes neste recurso.
    • Selecione o arquivo na lista mostrada no painel de dados de validação.
  • Para carregar novos dados de validação, use uma das seguintes opções:
    • Selecione Carregar arquivos para carregar dados de validação de um arquivo local.
    • Selecione Azure blob ou outros locais da Web compartilhados para importar dados de validação de Azure Blob ou outro local da Web compartilhado.

Para arquivos de dados grandes, recomendamos que você importe de um repositório de Blobs 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.

Nota

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

Configurar parâmetros de tarefa

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

Nome Tipo Descrição
Tamanho do lote (1-32) 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, tamanhos de lote maiores tendem a funcionar melhor para conjuntos de dados maiores. O valor padrão e o valor máximo dessa propriedade são específicos para um modelo base. Um tamanho de lote maior significa que os parâmetros de modelo são atualizados com menos frequência, mas com menor variação.
Multiplicador de taxa de aprendizagem (0.0-10.0) Número O multiplicador de taxa de aprendizagem 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. 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 a sobreajuste.
Número de épocas (1 a 10) inteiro O número de épocas para as quais treinar o modelo. Uma época refere-se a um ciclo completo por meio do conjunto de dados de treinamento.

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 algoritmicamente com base em seus dados de treinamento.

Depois de configurar as opções avançadas, selecione Enviar.

Verificar o status do seu modelo personalizado

A guia de Ajuste Fino exibe informações sobre seu modelo personalizado. A guia inclui informações sobre o status e a ID do trabalho ajustado 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 de projetos em execução.

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

Captura de tela do painel de detalhes de ajuste fino.

Cenários empresariais com suporte para ajuste fino

Há suporte para vários cenários empresariais para ajuste fino de implantação de API sem servidor. A tabela a seguir descreve as configurações com suporte para a autenticação e a rede de armazenamento do usuário para garantir uma operação tranquila em cenários empresariais:

Nota

  • A autenticação de conexões de dados pode ser alterada no Foundry selecionando a conexão do armazenamento de dados onde seu conjunto de dados está armazenado e navegando até os detalhes de Access>Método de Autenticação.
  • A autenticação de armazenamento pode ser alterada na página de >Configurações> de Configurações do Armazenamento do Azure >Permitir acesso à chave da conta de armazenamento.
  • A rede de armazenamento pode ser alterada na página Armazenamento do Azure >Networking.
Rede de armazenamento Autenticação de armazenamento Autenticação de conexão de dados Apoio
Acesso à rede pública = Habilitado Chave de conta habilitada Chave de Conta SAS Sim, UX e SDK
Acesso à rede pública = Habilitado Chave da conta desabilitada Autenticação baseada em Entra (sem uso de credenciais) Sim, UX e SDK

Observação: para UX, talvez seja necessário adicionar o papel de Leitor de Dados de Blob de Armazenamento ou o papel de Colaborador de Dados de Blob de Armazenamento para sua ID de usuário, ou alterar a autenticação da conexão para usar a chave de conta/token SAS.
Habilitado em redes virtuais selecionadas e endereços IP Chave de conta habilitada Chave da conta Sim, UX e SDK

Observação: para UX, o IP da computação que executa o navegador deve estar na lista selecionada
Habilitado em redes virtuais selecionadas e endereços IP Chave de conta habilitada SAS Sim, Experiência do Usuário (UX) e Kit de Desenvolvimento de Software (SDK)

Observação: para UX, o IP da computação que executa o navegador deve estar na lista selecionada
Habilitado em redes virtuais selecionadas e endereços IP Chave da conta desabilitada Autenticação baseada em entra (sem credencial) Sim, UX e SDK.

Observação: para UX, talvez seja necessário adicionar o Leitor de Dados de Blob de Armazenamento ou o Colaborador de Dados de Blob de Armazenamento ao ID de usuário na conta de armazenamento ou alterar a autenticação da conexão para usar a chave de conta ou o token SAS. Verifique também se o IP da computação que executa o navegador deve estar na lista selecionada
Acesso à rede pública = Desabilitado Chave de conta habilitada Chave SAS/Conta Sim, UX e SDK.

Observação: para que o upload e envio de dados de UX funcionem, o workspace precisa ser acessado de dentro da rede virtual que tenha acesso apropriado ao armazenamento.
Acesso à rede pública = Desabilitado Chave da conta desabilitada Autenticação sem credenciais baseada em Entra Sim, UX e SDK.

Observação: para que o envio e upload de dados de UX funcione, o workspace precisa ser acessado a partir da rede virtual que tenha acesso apropriado ao armazenamento.

Os cenários anteriores também devem funcionar em um workspace de rede virtual gerenciado. Para saber como configurar o hub foundry de rede virtual gerenciada, confira Como configurar uma rede gerenciada para hubs do Foundry.

O uso de CMKs (chaves gerenciadas pelo cliente) não é suportado como um cenário empresarial com ajuste fino na implantação de API sem servidor.

Dificuldades no ajuste fino devido a configurações de rede exclusivas no espaço de trabalho e no armazenamento geralmente apontam para um problema de configuração de rede.


Implantar um modelo refinado

Depois que o trabalho de ajuste fino estiver concluído com sucesso, implante o modelo personalizado na aba Ajuste fino. Você deve implantar seu modelo personalizado para que ele esteja disponível para chamadas de conclusão.

Importante

Depois de implantar um modelo personalizado e terminar com o ponto de extremidade, lembre-se de limpar os pontos de extremidade inativos. 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 nos preços do Foundry, cada modelo personalizado (ajustado) implantado incorre em um custo de hospedagem por hora, independentemente de conclusões ou chamadas de conclusão de chat estarem sendo feitas no modelo.

Para saber mais sobre como planejar e gerenciar custos com a Foundry, consulte as diretrizes em Planejar e gerenciar custos para o Foundry Service.

Nota

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 selecione Implantar modelo.

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

Você também pode implantar um modelo ajustado por meio da guia Modelos + pontos de extremidade, clicando no botão Implantar modelo e depois em Implantar modelo ajustado na lista suspensa.

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

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

Implantação entre regiões

O ajuste fino permite a implantação de um modelo ajustado finamente em uma região diferente daquela onde o modelo foi ajustado finamente originalmente. Você também pode implantar em uma assinatura ou 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 cruzada entre assinaturas ou regiões pode ser realizada por meio de Python.

Usar um modelo personalizado implantado

Após a implantação do modelo personalizado, você pode usá-lo como qualquer outro modelo implantado. Você pode usar o Playgrounds no portal 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 você pode com outros modelos implantados.

Limpar seus modelos afinados

Você pode excluir um modelo ajustado da lista de modelos de ajuste fino no Foundry ou na página de detalhes do modelo. Para excluir o modelo ajustado da página de Fine-tuning,

  1. Selecione Ajuste fino no menu da barra lateral em seu projeto do Foundry.
  2. Selecione o botão Excluir para excluir o modelo ajustado.

Nota

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

Criar um cliente para consumir o modelo

As seções a seguir explicam como ajustar um modelo no Python. Para encontrar um exemplo de notebook desse código, consulte Fine-tuning LLM com o modelo como um serviço.

  1. Instale dependências para começar a ajustar seu modelo.
%pip install azure-ai-ml
%pip install azure-identity

%pip install mlflow
%pip install azureml-mlflow
  1. Crie o programa cliente para consumir 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. Substitua <SUBSCRIPTION_ID>, <RESOURCE_GROUP_NAME> e <WORKSPACE_NAME> por seus próprios valores.
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

Localizar modelos com suporte de ajuste fino

O catálogo de modelos do Foundry oferece suporte de ajuste fino para vários tipos de modelos, incluindo conclusões de chat e geração de texto. Para obter uma lista de modelos e regiões que dão suporte ao ajuste fino, consulte a disponibilidade de região para modelos em APIs sem servidor.

As tarefas de ajuste fino estão disponíveis somente para usuários cuja assinatura do Azure pertence a uma conta de cobrança em uma região onde o provedor de modelo disponibiliza a oferta. Se a oferta estiver disponível na região relevante, o usuário deverá ter um recurso de projeto na região Azure em que o modelo está disponível para implantação ou ajuste fino, conforme aplicável.

Este exemplo usa um modelo Phi-4-mini-instruct . Neste trecho de código, a propriedade de ID do modelo é passada como entrada para o trabalho de afinamento do modelo. 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 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 seus dados de treinamento e validação para ajustar 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.

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 diversificado mantendo o equilíbrio de dados, incluindo vários cenários, e refinando periodicamente dados de treinamento para se alinhar às expectativas do mundo real. Essas ações, em última análise, levam a respostas de modelo mais precisas e equilibradas.

Dica

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

Formato de arquivo de exemplo

O tipo de arquivo com suporte é JSON Lines (JSONL). Os arquivos são carregados no armazenamento de dados padrão 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 snippet 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 você não quiser usar dados de validação, ignore esta etapa e continue 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 assinatura do Marketplace para modelos de parceiro

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

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)

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

O seguinte conjunto de parâmetros é necessário para ajustar seu modelo.

  • model: modelo base para ajustar
  • training_data: dados de treinamento para ajustar o modelo base
  • validation_data: dados de validação para ajustar o modelo base
  • task: tarefa de ajuste fino a ser executada, por exemplo, CHAT_COMPLETION para trabalhos de ajuste fino de conclusão de chat
  • outputs: nome do modelo registrado de saída

Os seguintes parâmetros são opcionais:

  • hyperparameters: parâmetros que controlam o comportamento de ajuste fino em tempo de execução
  • name: nome da tarefa de ajuste fino
  • experiment_name: nome do experimento para a tarefa de ajuste fino
  • display_name: nome de exibição da tarefa de ajuste fino
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 refinado

Depois que 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 os pontos de extremidade inativos. 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 nos preços do Foundry, cada modelo personalizado (ajustado) implantado incorre em um custo de hospedagem por hora, independentemente de conclusões ou chamadas de conclusão de chat estarem sendo feitas no modelo.

Para saber mais sobre como planejar e gerenciar custos com a Foundry, consulte as orientações em Planejar e gerenciar custos para Foundry hubs.

# 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 com suporte para ajuste fino

Há suporte para vários cenários empresariais para ajuste fino de implantação de API sem servidor. A tabela a seguir descreve as configurações com suporte para a autenticação e a rede de armazenamento do usuário para garantir uma operação tranquila em cenários empresariais:

Nota

  • A autenticação das conexões de dados pode ser alterada através do Foundry selecionando a conexão do armazenamento de dados onde seu conjunto de dados está armazenado e navegando até os detalhes de acesso> configuração do Método de Autenticação.
  • A autenticação de armazenamento pode ser alterada na página de Configurações do Armazenamento do Azure, na seção Permitir acesso com chave da conta de armazenamento.
  • A rede de armazenamento pode ser alterada na página Armazenamento do Azure >Networking.
Rede de armazenamento Autenticação de armazenamento Autenticação de conexão de dados Apoio
Acesso à rede pública = Habilitado Chave de conta habilitada CHAVE SAS/Conta Sim, UX e SDK
Acesso à rede pública = Habilitado Chave da conta desabilitada Autenticação baseada em Entra (sem credenciais) Sim, UX e SDK

Observação: para UX, talvez seja necessário adicionar o Leitor de Dados de Blob de Armazenamento ou o Colaborador de Dados de Blob de Armazenamento para sua ID de usuário na conta de armazenamento, ou alterar a autenticação da conexão para usar a chave de conta/token SAS
Habilitado em redes virtuais selecionadas e endereços IP Chave de conta habilitada Chave da conta Sim, UX e SDK

Observação: para UX, o IP da computação que executa o navegador deve estar na lista selecionada
Habilitado em redes virtuais selecionadas e endereços IP Chave de conta habilitada SAS Sim, UX e SDK

Observação: para UX, o IP da computação que executa o navegador deve estar na lista selecionada
Habilitado em redes virtuais selecionadas e endereços IP Chave da conta desabilitada Autenticação baseada em entra (sem credencial) Sim, UX e SDK.

Observação: para a UX, pode ser necessário adicionar as permissões de Leitor de Dados de Blob de Armazenamento ou de Colaborador de Dados de Blob de Armazenamento para seu ID de usuário na conta de armazenamento, ou alterar a autenticação da conexão para usar a chave da conta ou o token SAS. Verifique também se o IP da computação que executa o navegador deve estar na lista selecionada
Acesso à rede pública = Desabilitado Chave de conta habilitada Chave SAS/Chave de Conta Sim, UX e SDK.

Observação: para o carregamento e envio dos dados de UX funcionarem, o espaço de trabalho precisa ser acessado de dentro da rede virtual que tenha acesso apropriado ao armazenamento
Acesso à rede pública = Desabilitado Chave da conta desabilitada Autenticação baseada em Entra (sem necessidade de credenciais) Sim, UX e SDK.

Observação: para que o carregamento e envio de dados de UX funcionem, o workspace precisa ser acessado de dentro da rede virtual que tenha acesso apropriado ao armazenamento

Os cenários anteriores também devem funcionar em um workspace de rede virtual gerenciado. Para saber como configurar o hub foundry de rede virtual gerenciada, confira Como configurar uma rede gerenciada para hubs do Foundry.

O uso de CMKs (chaves gerenciadas pelo cliente) não é compatível em cenários empresariais que envolvam otimização de implantação de APIs sem servidor.

Problemas de otimização com configurações de rede exclusivas no workspace e no armazenamento geralmente indicam um problema na configuração de rede.

Implantação entre regiões

O ajuste fino dá suporte à implantação de um modelo ajustado para uma região diferente da qual o modelo foi ajustado originalmente. Você também pode implantar em uma assinatura ou 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 ou regiões pode ser efetuada utilizando 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

Após a implantação do modelo personalizado, você pode usá-lo como qualquer outro modelo implantado. Você pode continuar a usar os mesmos parâmetros com seu modelo personalizado, como temperature e max_tokens, como você pode 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()

Limpar seus modelos finamente ajustados

Depois de concluir o trabalho com seu modelo, execute o código a seguir para limpar seu modelo afinado.

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

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

A cota é gerenciada por implantação. Cada implantação tem um limite de taxa de 200.000 tokens por minuto e 1.000 solicitações de API por minuto. No entanto, no momento, limitamos uma implantação por modelo por projeto. Entre em contato com Microsoft Azure Suporte se os limites de taxa atuais não forem suficientes para seus cenários.

Custo para modelos de Microsoft

Você pode encontrar 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 não Microsoft

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

Sempre que um projeto assina uma determinada oferta de Azure Marketplace, um novo recurso é criado para acompanhar os custos associados ao seu consumo. O mesmo recurso é usado para monitorar os custos associados à inferência e ajuste fino; no entanto, vários medidores estão disponíveis para monitorar cada cenário separadamente.

Para obter mais informações sobre como rastrear os custos, consulte Monitorar custos para modelos oferecidos via Azure Marketplace.

Captura de tela mostrando recursos diferentes correspondentes a diferentes ofertas de modelo e seus medidores associados.

Bloco de anotações de exemplo

Você pode usar este notebook 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 são o conjunto de dados ultrachat_200k, que é dividido em quatro divisões adequadas para ajuste fino supervisionado (sft) e classificação de geração (gen). O bloco de anotações emprega os modelos de IA Azure disponíveis para a tarefa de conclusão de chat (se você quiser usar um modelo diferente do usado no notebook, poderá substituir o nome do modelo).

O notebook inclui a configuração de pré-requisitos, a seleção de um modelo para ajustar, a criação de conjuntos de dados de treinamento e validação, a configuração e o envio do trabalho de ajuste fino e, por fim, a criação de uma implantação sem servidor usando o modelo ajustado para inferência de exemplo.

CLI de exemplo

Além disso, você pode usar essa CLI sample 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 notebook do SDK. A CLI emprega os modelos de IA de Azure disponíveis para a tarefa de conclusão de chat. Se preferir usar um modelo diferente do da amostra da CLI, você poderá atualizar os argumentos, como model path, de acordo.

Filtragem de conteúdo

Os modelos de implantação de API sem servidor são protegidos por Segurança de Conteúdo de IA do Azure. Quando implantado em pontos de extremidade em tempo real, você pode optar por desativar essa funcionalidade.

Com Segurança de Conteúdo de IA do Azure habilitado, o prompt e a conclusão passam por um conjunto de modelos de classificação destinados a detectar e impedir a saída de conteúdo prejudicial. O sistema de filtragem de conteúdo detecta e toma medidas em categorias específicas de conteúdo potencialmente prejudicial em solicitações de entrada e resultados de saída.

Para saber mais sobre Segurança de Conteúdo de IA do Azure, consulte filtro de conteúdo no portal Foundry.