Ajuste fino (Snowflake Cortex)

A função Snowflake Cortex Fine-tuning oferece uma maneira de personalizar modelos de linguagem grandes para sua tarefa específica. Este tópico descreve como o recurso funciona e como começar a criar seu próprio modelo com ajuste fino.

Visão geral

O Cortex Fine-tuning permite que os usuários aproveitem o ajuste fino com eficiência de parâmetros (PEFT) para criar adaptadores personalizados para uso com modelos pré-treinados em tarefas mais especializadas. Se você não quiser pagar o alto custo de treinar um modelo grande do zero, mas precisa de melhor latência e resultados do que os que você obtém com engenharia de prompts ou mesmo geração aumentada de recuperação (RAG), o ajuste fino de um modelo grande existente é uma opção. O ajuste fino permite que você use exemplos para ajustar o comportamento do modelo e melhorar o conhecimento do modelo sobre tarefas específicas do domínio.

Cortex Fine-tuning é um serviço totalmente gerenciado que permite que você ajuste os populares LLMs usando seus dados, tudo dentro do Snowflake.

Os recursos do Cortex Fine-tuning são fornecidos como uma função do Snowflake Cortex, FINETUNE, com os seguintes argumentos:

  • CREATE: Cria um trabalho de ajuste fino com os dados de treinamento fornecidos.

  • SHOW: Lista todos os trabalhos de ajuste fino aos quais a função atual tem acesso.

  • DESCRIBE: Descreve o progresso e o status de um trabalho de ajuste fino específico.

  • CANCEL: Cancela um determinado trabalho de ajuste fino.

Considerações sobre custo

A função Snowflake Cortex Fine-tuning incorre em custo de computação com base no número de tokens usados no treinamento. Além disso, executar a função COMPLETE em um modelo com ajuste fino incorre em custos de computação com base no número de tokens processados. Consulte a Tabela de consumo do serviço Snowflake para cada custo em créditos por milhão de tokens.

Um token é a menor unidade de texto processada pela função Snowflake Cortex Fine-tuning, aproximadamente igual a quatro caracteres de texto. A equivalência do texto bruto de entrada ou saída com tokens pode variar de acordo com o modelo.

  • Para a função COMPLETE, que gera um novo texto na resposta, tanto os tokens de entrada quanto os de saída são contados.

  • Os tokens treinados de ajuste fino são calculados da seguinte forma:

    Fine-tuning trained tokens = number of input tokens * number of epochs trained
    
    Copy

    Use FINETUNE ('DESCRIBE') (SNOWFLAKE.CORTEX) para ver o número de tokens treinados para seu trabalho de ajuste fino.

Outras considerações

  • Além dos custos incorridos com ajuste e inferência, existem custos normais de armazenamento e warehouse para armazenar os adaptadores personalizados de saída, bem como para executar quaisquer comandos SQL.

  • Os trabalhos de ajuste fino geralmente são demorados e não estão vinculados a uma sessão de planilha.

  • Os seguintes limites se aplicam ao tamanho do conjunto de dados de treinamento/validação para cada modelo:

    Modelo

    Limite de dados de treinamento

    llama3-8b

    1 GB

    llama3-70b

    250 MB

    llama3.1-8b

    1 GB

    llama3.1-70b

    250 MB

    mistral-7b

    1 GB

    mixtral-8x7b

    250 MB

Requisitos de controle de acesso

Para executar um trabalho de ajuste fino, a função que cria o trabalho de ajuste fino precisa dos seguintes privilégios:

Privilégio

Objeto

Notas

USAGE

DATABASE

O banco de dados do qual os dados de treinamento (e validação) são consultados.

(CREATE MODEL e USAGE) ou OWNERSHIP

SCHEMA

O esquema no qual o modelo é salvo.

O SQL a seguir é um exemplo da concessão do privilégio CREATE MODEL para uma função, my_role, em my_schema.

GRANT CREATE MODEL ON SCHEMA my_schema TO ROLE my_role;
Copy

Além disso, para usar a função FINETUNE, a função ACCOUNTADMIN deve conceder a função de banco de dados SNOWFLAKE.CORTEX_USER ao usuário que chamará a função. Consulte o tópico Privilégios obrigatórios funções LLM para obter mais detalhes.

Para dar a outras funções acesso para usar o modelo ajustado, você deve conceder uso no modelo. Para obter mais detalhes, consulte Privilégios do modelo.

Modelos disponíveis para ajuste fino

Você tem os seguintes modelos básicos que pode ajustar. Modelos disponíveis para ajuste fino podem ser adicionados ou removidos no futuro:

Nome

Descrição

llama3-8b

Um modelo de linguagem grande da Meta é ideal para tarefas que exigem raciocínio baixo a moderado com melhor precisão do que o modelo llama2-70b-chat, como classificação de texto, resumo e análise de sentimento.

llama3-70b

Um LLM da Meta oferece desempenho de última geração, sendo ideal para aplicativos de bate-papo, criação de conteúdo e aplicativos corporativos.

llama3.1-8b

Um modelo de linguagem grande da Meta é ideal para tarefas que exigem raciocínio baixo a moderado. É um modelo leve e ultrarrápido com uma janela de contexto de 128K.

llama3.1-70b

Um modelo de código aberto que demonstra desempenho de última geração, ideal para aplicativos de bate-papo, criação de conteúdo e aplicativos corporativos. É um modelo de alto desempenho e baixo custo que permite diversos casos de uso com uma janela de contexto de 128 mil. llama3-70b ainda é suportado e tem uma janela de contexto de 8 mil.

mistral-7b

Modelo de linguagem grande de 7 bilhões de parâmetros da Mistral AI que é ideal para suas tarefas mais simples de resumo, estruturação e resposta a perguntas que precisam ser feitas rapidamente. Ele oferece processamento de baixa latência e alta taxa de transferência para várias páginas de texto com sua janela de contexto de 32K.

mixtral-8x7b

Um modelo de linguagem grande da Mistral AI é ideal para geração de texto, classificação e resposta a perguntas. Os modelos da Mistral são otimizados para baixa latência com baixos requisitos de memória, o que se traduz em maior rendimento para casos de uso empresarial.

Como fazer o ajuste fino de um modelo

O fluxo de trabalho geral para ajustar um modelo é o seguinte:

  1. Preparar os dados de treinamento.

  2. Iniciar o trabalho de ajuste fino com os parâmetros necessários.

  3. Monitorar o trabalho de treinamento.

Após a conclusão do treinamento, você pode usar o nome do modelo fornecido por Cortex Fine-tuning para executar inferências em seu modelo.

Preparo dos dados de treinamento

Os dados de treinamento devem vir de uma tabela ou exibição do Snowflake e o resultado da consulta deve conter colunas nomeadas prompt e completion. Se sua tabela ou exibição não contiver colunas com os nomes necessários, use um alias de coluna em sua consulta para nomeá-las. Esta consulta é fornecida como parâmetro para a função FINETUNE. Você receberá um erro se os resultados não contiverem os nomes de coluna prompt e completion.

Nota

Todas as colunas, exceto as colunas de prompt e conclusão, serão ignoradas pela função FINETUNE. A Snowflake recomenda usar uma consulta que selecione apenas as colunas necessárias.

O código a seguir chama a função FINETUNE e usa a sintaxe SELECT ... AS para definir duas das colunas no resultado da consulta para prompt e completion.

SELECT SNOWFLAKE.CORTEX.FINETUNE(
  'CREATE',
  'my_tuned_model',
  'mistral-7b',
  'SELECT a AS prompt, d AS completion FROM train',
  'SELECT a AS prompt, d AS completion FROM validation'
);
Copy

Um prompt é uma entrada para o LLM e a conclusão é a resposta do LLM. Seus dados de treinamento devem incluir pare de prompt e conclusão que mostrem como você deseja que o modelo responda a prompts específicos.

A seguir estão recomendações e requisitos adicionais relacionados aos seus dados de treinamento para obter o desempenho ideal do ajuste fino.

  • Comece com algumas centenas de exemplos. Começar com muitos exemplos pode aumentar drasticamente o tempo de ajuste, com melhoria mínima no desempenho.

  • Para cada exemplo, você deve usar apenas uma parte da janela de contexto alocada ao modelo base que está ajustando. A janela de contexto é definida em termos de tokens. Um token é a menor unidade de texto processada pelas funções do Snowflake Cortex, aproximadamente igual a quatro caracteres de texto.

  • A parte da janela de contexto alocada ao prompt e à completion para cada modelo base é definido na tabela a seguir:

    Modelo

    Janela de contexto

    Contexto de entrada (prompt)

    Contexto de saída (conclusão)

    lhama3-8b

    8 mil

    6 mil

    2 mil

    lhama3-70b

    8 mil

    6 mil

    2 mil

    llama3.1-8b

    128k

    120k

    8 mil

    llama3.1-70b

    128k

    120k

    8 mil

    mistral-7b

    32 mil

    28 mil

    4 mil

    mistral-8x7b

    32 mil

    28 mil

    4 mil

Início do trabalho de ajuste fino

Você pode iniciar um trabalho de ajuste fino chamando a função SNOWFLAKE.CORTEX.FINETUNE e passando ‘CREATE’ como o primeiro argumento ou usando Snowsight.

Uso de SQL

Este exemplo usa o modelo mistral-7b como modelo base para criar um trabalho com um nome de saída de modelo de my_tuned_model e treinamento e validação de consulta de dados de tabelas my_training_data e my_validation_data respectivamente.

USE DATABASE mydb;
USE SCHEMA myschema;

SELECT SNOWFLAKE.CORTEX.FINETUNE(
  'CREATE',
  'my_tuned_model',
  'mistral-7b',
  'SELECT prompt, completion FROM my_training_data',
  'SELECT prompt, completion FROM my_validation_data'
);
Copy

Você pode usar caminhos absolutos para cada um dos objetos de banco de dados, como o modelo ou os dados, se quiser usar bancos de dados e esquemas diferentes para cada um. O exemplo a seguir mostra a criação de um trabalho de ajuste fino com os dados do banco de dados e esquema mydb2.myschema2 e salvando o modelo com ajuste fino para o banco de dados e esquema mydb.myschema.

SELECT SNOWFLAKE.CORTEX.FINETUNE(
  'CREATE',
  'mydb.myschema.my_tuned_model',
  'mistral-7b',
  'SELECT prompt, completion FROM mydb2.myschema2.my_training_data',
  'SELECT prompt, completion FROM mydb2.myschema2.my_validation_data'
);
Copy

A função SNOWFLAKE.CORTEX.FINETUNE com “CREATE” como o primeiro argumento retorna um ID de modelo com ajuste fino como saída. Use este ID para obter o status ou progresso do trabalho usando a unção SNOWFLAKE.CORTEX.FINETUNE com “DESCRIBE” como primeiro argumento.

Uso de Snowsight

Siga estas etapas para criar um trabalho de ajuste fino em Snowsight:

  1. Faça login no Snowsight.

  2. Escolha uma função que tenha a função de banco de dados SNOWFLAKE.CORTEX_USER concedida.

  3. No menu de navegação, selecione AI & ML » Studio.

  4. Selecione Fine-tune da caixa Create Custom LLM.

  5. Selecione um modelo base usando o menu suspenso.

  6. Selecione a função sob a qual o trabalho de ajuste fino será executado e o warehouse onde ele será executado. A função deve receber a função de banco de dados SNOWFLAKE.CORTEX_USER.

  7. Selecione um banco de dados no qual o modelo ajustado deve ser armazenado.

  8. Insira um nome para seu modelo ajustado e selecione Let’s go.

  9. Selecione a tabela ou exibição que contém seus dados de treinamento e selecione Next. Os dados de treinamento podem vir de qualquer banco de dados ou esquema ao qual a função tenha acesso.

  10. Selecione a coluna que contém os prompts nos seus dados de treinamento e selecione Next.

  11. Selecione a coluna que contém as conclusões nos seus dados de treinamento e selecione Next.

  12. Se você tiver um conjunto de dados de validação, selecione a tabela ou exibição que contém seus dados de validação e, em seguida, selecione Next. Se você não tiver dados de validação separados, selecione Skip this option.

  13. Verifique suas escolhas e selecione Start training.

A etapa final confirma que seu trabalho de ajuste fino foi iniciado e exibe o Job ID. Use este ID para obter o status ou progresso do trabalho usando a unção SNOWFLAKE.CORTEX.FINETUNE com “DESCRIBE” como primeiro argumento.

Gerenciamento de modelos com ajuste fino

Os trabalhos com ajuste fino são de longa duração, o que significa que não estão vinculados a uma sessão de planilha. Você pode verificar o status de seu trabalho de ajuste usando a função SNOWFLAKE.CORTEX.FINETUNE com “SHOW” ou “DESCRIBE” como primeiro argumento.

Se você não precisar mais de um trabalho de ajuste fino, você pode usar a função SNOWFLAKE.CORTEX.FINETUNE com “CANCELd” como primeiro argumento e o ID de trabalho como segundo argumento para encerrá-lo.

Como usar seu modelo com ajuste fino para inferência

Use a função COMPLETE LLM com o nome de seu modelo com ajuste fino para fazer inferências.

Este exemplo mostra uma chamada para a função COMPLETE com o nome de seu modelo com ajuste fino.

SELECT SNOWFLAKE.CORTEX.COMPLETE(
  'my_tuned_model',
  'How to fine-tune mistral models'
);
Copy

A seguir está um trecho de código da saída da chamada de exemplo:

Mistral models are a type of deep learning model used for image recognition and classification. Fine-tuning a Mistral model involves adjusting the model's parameters to ...

Limitações e problemas conhecidos

  • Os trabalhos de ajuste fino podem ser listados somente ao nível da conta.

  • Os trabalhos de ajuste fino retornados de FINETUNE ('SHOW') (SNOWFLAKE.CORTEX) não são permanentes e podem ser coletados periodicamente.

  • Se um modelo base for removido das funções de LLM Cortex, seu modelo com ajuste fino não funcionará mais.

Compartilhamento de modelos

Modelos ajustados podem ser compartilhados com outras contas com o privilégio USAGE via Data Sharing.

Replicação de modelos

Inferência entre regiões não oferece suporte a modelos com ajuste fino. A inferência deve ocorrer na mesma região onde o objeto modelo está localizado. Você pode usar a replicação de banco de dados para replicar o objeto de modelo ajustado para uma região da qual deseja fazer inferência, caso ela seja diferente da região em que o modelo foi treinado.

Por exemplo, se você criar um modelo ajustado com base em mistral-7b em sua conta na região AWS US West 2, poderá usar o compartilhamento de dados para compartilhá-lo com outra conta nessa região, ou poderá usar a replicação de banco de dados para replicar o modelo para outra conta em sua organização em uma região diferente que ofereça suporte ao modelo mistral-7b, como AWS Europe West. Para obter detalhes sobre como replicar objetos, consulte Replicação de bancos de dados e objetos de conta em diversas contas.