Preparação dos dados para o Mosaic AI Model Training

Importante

Este recurso está em prévia pública em us-east-1 e us-west-2.

Este artigo descreve os formatos de arquivo de dados de treinamento e avaliação aceitos nas tarefas suportadas: ajuste fino supervisionado, conclusão de bate-papo e pré-treinamento contínuo para o Mosaic AI Model Training (antigo Foundation Model Training).

O notebook a seguir mostra como validar seus dados. Ele foi criado para ser executado de forma independente antes do começo do treinamento. O objetivo deste notebook é verificar se os dados estão no formato correto para o Mosaic AI Model Training. Ele também inclui código para tokenizar seu dataset bruto e estimar os custos durante sua execução de treinamento.

Validar dados para o notebook de execução de treinamento

Abra o bloco de anotações em outra tab

Preparar dados para treinamento supervisionado

Para tarefas de treinamento supervisionado, os dados de treinamento podem estar em um dos seguintes esquemas:

  • Pares de instrução e resposta.

    {"prompt": "your-custom-prompt", "response": "your-custom-response"}
    
  • Pares de instrução e conclusão.

    {"prompt": "your-custom-prompt", "completion": "your-custom-response"}
    

Observação

A resposta à instrução e a conclusão da conclusão não são modeladas, portanto, qualquer modelagem específica do modelo, como a formatação de instruções do Mistral, deve ser executada como etapa de pré-processamento.

Os formatos de dados aceitos são:

  • Um volume do Unity Catalog com um arquivo .jsonl. Os dados de treinamento devem estar no formato JSONL, onde cada linha é um objeto do JSON válido.

  • Uma tabela Delta que segue um dos esquemas aceitos mencionados acima. Para tabelas Delta, você deve especificar um parâmetro data_prep_cluster_id para processamento de dados. Consulte Configurar uma execução de treinamento.

  • Um dataset público do Hugging Face.

    Se usar um conjunto de dados público do Hugging Face como seus dados de treinamento, especifique o caminho completo com a divisão, por exemplo, mosaicml/instruct-v3/train and mosaicml/instruct-v3/test. Isso leva em conta conjuntos de dados que têm esquemas de divisão diferentes. Não são aceitos conjuntos de dados aninhados do Hugging Face.

    Para ver um exemplo mais amplo, consulte o conjunto de dados mosaicml/dolly_hhrlhf no Hugging Face.

    As linhas de dados de exemplo a seguir são do dataset mosaicml/dolly_hhrlhf.

    {"prompt": "Below is an instruction that describes a task. Write a response that appropriately completes the request. ### Instruction: what is Kubernetes? ### Response: ","response": "Kubernetes is an open source container orchestration system for automating software deployment, scaling, and management. Originally designed by Google, the project is now maintained by the Cloud Native Computing Foundation."}
    {"prompt": "Below is an instruction that describes a task. Write a response that appropriately completes the request. ### Instruction: Van Halen famously banned what color M&Ms in their rider? ### Response: ","response": "Brown."}
    

Preparar dados para conclusão da conversa

Para tarefas de conclusão de conversa, os dados formatados para conversa devem estar em formato de arquivo .jsonl, em que cada linha é um objeto JSON separado que representa uma única sessão de conversa. Cada sessão de conversa é representada como objeto JSON com uma única chave, "messages", que mapeia para uma matriz de objetos de mensagem. Para ensinar com dados de conversa, basta disponibilizar o task_type = 'CHAT_COMPLETION'.

As mensagens no formato de conversa são formatadas automaticamente de acordo com o padrão de conversa do modelo, portanto não há necessidade de adicionar tokens de conversa especiais para sinalizar manualmente o início ou o fim de um turno de conversa. Um exemplo de um modelo que utiliza um padrão de conversa personalizado é o Mistral-instruct.

Observação

Os modelos Mistral não aceitam funções system em seus formatos de dados.

Cada objeto de mensagem na matriz representa uma única mensagem na conversa e tem a seguinte estrutura:

  • role: uma string que indica o autor da mensagem. Os valores possíveis são "system", "user" e "assistant". Se a função for system, ela deverá ser a primeira conversa na lista de mensagens. Deve haver pelo menos uma mensagem com a função "assistant", e qualquer mensagem após a instrução (opcional) do sistema deve alternar as funções entre usuário/assistente. Não pode haver duas mensagens adjacentes com a mesma função. A última mensagem na matriz "messages" deve ter a função "assistant".

  • content: uma string que contém o texto da mensagem.

A seguir, um exemplo de dados formatados para conversa:

{"messages": [
  {"role": "system", "content": "A conversation between a user and a helpful assistant."},
  {"role": "user", "content": "Hi there. What's the capital of the moon?"},
  {"role": "assistant", "content": "This question doesn't make sense as nobody currently lives on the moon, meaning it would have no government or political institutions. Furthermore, international treaties prohibit any nation from asserting sovereignty over the moon and other celestial bodies."},
  ]
}

Preparar dados para pré-treinamento contínuo

Para tarefas pré-treinamento contínuo, os dados de treinamento são seus dados de texto não estruturados. Os dados de treinamento devem estar em um volume do Unity Catalog contendo arquivos .txt. Cada arquivo .txt é tratado como uma única amostra. Se seus arquivos .txt estiverem em uma pasta de volume do Unity Catalog, eles também serão obtidos para seus dados de treinamento. Quaisquer arquivos que não sejamtxt no volume serão ignorados. Consulte Fazer upload de arquivos para um volume do Unity Catalog.

A imagem a seguir mostra exemplos de arquivos .txt em um volume do Unity Catalog. Para usar esses dados em sua configuração de execução de pré-treinamento contínuo, defina train_data_path = "dbfs:/Volumes/main/finetuning/cpt-data".

Volume do UC com exemplos de arquivos de dataset de pré-treinamento contínuo