Preparar dados para o ajuste fino do modelo de fundação
Importante
Esse recurso está em Visualização Pública nas seguintes regiões: centralus
, eastus
, eastus2
, northcentralus
e westus
.
Este artigo descreve os formatos de arquivo de dados de treinamento e avaliação aceitos para as tarefas de ajuste fino do modelo básico (agora parte do Treinamento do modelo de IA do Mosaic): ajuste fino supervisionado, conclusão de bate-papo e pré-treinamento contínuo.
O notebook a seguir mostra como validar seus dados. Ele foi projetado para ser executado de forma independente antes de você começar a treinar. Ele valida se seus dados estão no formato correto para o ajuste fino do modelo de base e inclui código para ajudá-lo a estimar os custos durante a execução do treinamento, tokenizando seu conjunto de dados bruto.
Validar dados para o notebook de execuções de treinamento
Preparar dados para o ajuste supervisionado
Para as tarefas de ajuste supervisionado, os dados de treinamento podem estar em um dos seguintes esquemas:
Pares de prompts e resposta.
{"prompt": "your-custom-prompt", "response": "your-custom-response"}
Pares de prompts e conclusão.
{"prompt": "your-custom-prompt", "completion": "your-custom-response"}
Observação
As respostas de prompt e preenchimentos de prompts não são modelados, então qualquer modelagem específica do modelo, como a formatação de instrução do Mistral, deve ser executada como uma etapa de pré-processamento.
Os formatos de dados aceitos são:
Um volume do Catálogo do Unity com um arquivo
.jsonl
. Os dados de treinamento devem estar no formato JSONL, em que cada linha é um objeto JSON válido. O exemplo a seguir mostra um exemplo do par prompt e resposta:{"prompt": "What is Databricks?","response": "Databricks is a cloud-based data engineering platform that provides a fast, easy, and collaborative way to process large-scale data."}
Uma tabela Delta que adere a um dos esquemas aceitos mencionados acima. Para tabelas Delta, você deve fornecer um parâmetro
data_prep_cluster_id
para o processamento de dados. Consulte Configurar uma execução de treinamento.Um conjunto de dados público do Hugging Face.
Se você usar um conjunto de dados do Hugging Face público 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 os conjuntos de dados que têm esquemas de divisão diferentes. Não há suporte para os conjuntos de dados aninhados do Hugging Face.Para obter um exemplo mais abrangente, consulte o conjunto de dados
mosaicml/dolly_hhrlhf
no Hugging Face.As linhas de dados de exemplo a seguir são do conjunto de dados
mosaicml/dolly_hhrlhf
.{"prompt": "Below is an instruction that describes a task. Write a response that appropriately completes the request. ### Instruction: what is Databricks? ### Response: ","response": "Databricks is a cloud-based data engineering platform that provides a fast, easy, and collaborative way to process large-scale data."} {"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 a conclusão do chat
Para tarefas de conclusão de chat, os dados formatados para chat devem estar em um formato de arquivo .jsonl
, em que cada linha é um objeto JSON separado que representa uma única sessão de chat. Cada sessão de chat é representada como um objeto JSON com uma única chave, "messages"
, que é mapeada para uma matriz de objetos de mensagem. Para treinar com dados de chat, basta fornecer o task_type = 'CHAT_COMPLETION'
.
As mensagens no formato de chat são formatadas automaticamente de acordo com o modelo de chat, portanto, não há necessidade de adicionar tokens de chat especiais para sinalizar manualmente o início ou o fim de um turno de chat. Um exemplo de modelo que usa um modelo de chat personalizado é a Instrução Mistral.
Observação
Os modelos de 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 cadeia de caracteres que indica o autor da mensagem. Os valores possíveis são"system"
,"user"
e"assistant"
. Se a função forsystem
, deverá ser o primeiro chat na lista de mensagens. Deve haver pelo menos uma mensagem com a função"assistant"
, e todas as mensagens após o prompt do sistema (opcional) devem 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 cadeia de caracteres que contém o texto da mensagem.
A seguir, um exemplo de dados formatados para chat:
{"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 os dados para o pré-treinamento contínuo
Para as tarefas de pré-treinamento contínuas, os dados de treinamento são seus dados de texto não estruturados. Os dados de treinamento devem estar em um volume do Catálogo do Unity contendo arquivos .txt
. Cada arquivo .txt
é tratado como uma única amostra. Se os arquivos .txt
estiverem em uma pasta de volume do Catálogo do Unity, esses arquivos também serão obtidos para os dados de treinamento. Quaisquer arquivos que não sejam txt
no volume serão ignorados. Consulte Carregar arquivos em um volume do Catálogo do Unity.
A imagem a seguir mostra o exemplo de arquivos .txt
em um volume do Catálogo do Unity. Para usar esses dados na configuração de execução de pré-treinamento contínua, defina train_data_path = "dbfs:/Volumes/main/finetuning/cpt-data"
.