1
resposta

Erro ao instanciar SFTTrainer()

Nas versões atuais das bibliotecas, ao instanciar o SFTrainer é gerado um erro: aparentemente o parâmetro formattingfunc passou a ser obrigatório.

trainer = SFTTrainer(
    model = modelo,
    tokenizer = tokenizador,
    train_dataset = dataset,
    dataset_text_field = 'texto',
    max_seq_length= 2048,
    dataset_num_proc = 2,
    packing = False,
    args = TrainingArguments(
        per_device_train_batch_size = 2,
        gradient_accumulation_steps = 4,
        warmup_steps = 5,
        learning_rate = 2e-5,
        max_steps = 60,
        fp16 = not is_bfloat16_supported(),
        bf16 = is_bfloat16_supported(),
        logging_steps = 1,
        optim = 'adamw_8bit',
        weight_decay = 0.01,
        lr_scheduler_type = 'linear',
        seed = 10,
        output_dir = 'outputs'
    )
)

(...)
 if formatting_func is None:
        raise RuntimeError("Unsloth: You must specify a `formatting_func`")
        pass

RuntimeError: Unsloth: You must specify a `formatting_func`

Não consegui configurar o treinamento com o código apresentado.

1 resposta

Oi Vicente!

Pelo terminal, no seu caso, o erro indica que o parâmetro formatting_func agora é necessário ao instanciar o SFTTrainer.

Para resolver isso, como você bem falou, você precisará definir uma função de formatação que atenda às necessidades do seu treinamento. Essa função geralmente é usada para pré-processar ou formatar os dados de entrada antes de serem passados para o modelo. Vou te dar um exemplo simples de como você poderia definir essa função:

def minha_formatting_func(exemplo):
    # Aqui você pode adicionar lógica para formatar o texto
    # Por exemplo, você pode querer apenas retornar o texto como está
    return exemplo['texto']

trainer = SFTTrainer(
    model = modelo,
    tokenizer = tokenizador,
    train_dataset = dataset,
    dataset_text_field = 'texto',
    max_seq_length= 2048,
    dataset_num_proc = 2,
    packing = False,
    formatting_func = minha_formatting_func,  # Adicione sua função aqui
    args = TrainingArguments(
        per_device_train_batch_size = 2,
        gradient_accumulation_steps = 4,
        warmup_steps = 5,
        learning_rate = 2e-5,
        max_steps = 60,
        fp16 = not is_bfloat16_supported(),
        bf16 = is_bfloat16_supported(),
        logging_steps = 1,
        optim = 'adamw_8bit',
        weight_decay = 0.01,
        lr_scheduler_type = 'linear',
        seed = 10,
        output_dir = 'outputs'
    )
)

Esse é um exemplo básico e você pode ajustar a minha_formatting_func de acordo com as necessidades específicas do seu conjunto de dados e do modelo que está utilizando. Teste isso por favor.

Bons estudos!

Sucesso

Imagem da comunidade