Conceitos Fundamentais do Fine-tuning
O fine-tuning (ajuste fino) de grandes modelos de linguagem é o processo de adaptar um modelo pré-treinado (chamado de "modelo base") para executar tarefas específicas ou operar em domínios particulares. Essa técnica utiliza conjuntos de dados anotados para refinar as capacidades do modelo, indo além do conhecimento generalista adquirido durante o pré-treinamento.
Embora modelos base como o Qwen2.5 possam realizar diversas funções, como responder perguntas, resumir textos e gerar código, eles podem carecer de conhecimento especializado. Por exemplo, uma firma de advocacia poderia precisar de um assistente de IA que compreenda terminologia jurídica complexa. O fine-tuning com um dataset de documentos legais permitiria que o modelo gerasse análises mais precisas e contextualizadas.
As principais motivações para realizar o fine-tuning incluem:
- Melhoria de Desempenho em Tarefas Específicas: O modelo aprende padrões e características mais relevantes para a tarefa alvo a partir de dados rotulados.
- Adaptação a Domínios: O modelo se ajusta aos termos, estruturas semânticas e nuances de um campo de conhecimento específico.
- Eficiência com Dados Limitados: Permite alcançar bom desempenho mesmo com conjuntos de dados de tamanho moderado.
- Prevenção de Overfitting: O treinamento supervisionado com dados específicos ajuda a regular o modelo.
- Custo-Efetividade: Modelos menores, após fine-tuning, podem superar modelos maiores generalistas em tarefas alvo, oferecendo menor latência e custo de inferência.
Métodos Populares de Ajuste Fino
Diversas técnicas surgem para o fine-tuning eficiente de LLMs, incluindo Adapter Tuning, Prefix Tuning, P-Tuning, e os muito populares LoRA (Low-Rank Adaptation) e QLoRA (Quantized LoRA). Esses métodos são baseados em PEFT (Ajuste Eficiente de Parâmetros), onde apenas uma fração dos parâmetros do modelo é atualizada, reduzindo drasticamente os requisitos de memória e computação.
Em contraste, o Ajuste Fino Completo (FFT - Full Fine-Tuning) atualiza todos os parâmetros do modelo. Este guia focará no Supervised Fine-Tuning (SFT), onde o modelo é treinado em um dataset de pares (instrução, resposta) já verificado.
O processo geral de SFT segue estas etapas:
- Preparação dos Dados: Coleta e formatação de dados em um formato de instruções adequado.
- Execução do Treinamento: O modelo calcula a diferença entre suas previsões e os rótulos reais, ajustando seus pesos via otimização (ex.: gradiente descendente).
- Iteração e Validação: O processo é repetido por múltiplas épocas, validando o desempenho em um conjunto de dados separado.
- Atualização do Modelo: Os pesos do modelo são refinados continuamente para minimizar o erro na tarefa específica.
Implementação Prática com ModelScope e LLaMA-Factory
Este guia demonstra o fine-tuning do modelo Qwen2.5-7B-Instruct utilizando a plataforma ModelScope (魔搭社区) e o framework de baixo código LLaMA-Factory. O ModelScope fornece um ambiente Notebook com recursos de GPU pré-configurados, simplificando a execução.
1. Configuração do Ambiente
Após criar uma conta no ModelScope, localize o modelo desejado. Para este exemplo, usaremos o Qwen2.5-7B-Instruct. No perfil do modelo, selecione a opção de desenvolvimento rápido "Notebook" e escolha o ambiente GPU.
No JupyterLab que é aberto, crie um novo Notebook e execute o seguinte bloco para instalar as dependências iniciais:
!pip install -q --upgrade pip
!pip install -q bitsandbytes>=0.39.0 accelerate
Em seguida, clone o repositório do LLaMA-Factory:
!git clone --depth 1 https://github.com/hiyouga/LLaMA-Factory.git
Navegue até o diretório clonado no Terminal (Launcher > Terminal) e instale os restante das dependências. Este passo pode levar alguns minutos.
cd LLaMA-Factory
pip install -e ".[torch,metrics]"
2. Download do Modelo Base
Ainda no Terminal, clone o modelo base do Qwen2.5-7B-Instruct usando git. Isso criará um diretório local com os arquivos do modelo.
git clone https://modelscope.cn/Qwen/Qwen2.5-7B-Instruct.git
Download do modelo base via Git no ModelScope.
3. Configuração e Execução do Fine-tuning (LoRA)
Crie um arquivo de configuração para o treinamento. No diretório examples/train_qlora do LLaMA-Factory, crie uma cópia do arquivo de exemplo e renomeie para qwen25_lora_sft_4bit.yaml. Edite-o com o seguinte conteúdo, ajustando o caminho do modelo:
### Configuração do Modelo
model_name_or_path: ./Qwen2.5-7B-Instruct
quantization_bit: 4
### Parâmetros do Fine-Tuning
stage: sft
do_train: true
finetuning_type: lora
lora_target: all
### Configuração dos Dados
dataset: identity
template: qwen
cutoff_len: 1024
max_samples: 1000
overwrite_cache: true
preprocessing_num_workers: 16
### Diretório de Saída
output_dir: saves/qwen25-7b/qlora_sft
logging_steps: 10
save_steps: 500
plot_loss: true
overwrite_output_dir: true
### Hiperparâmetros de Treinamento
per_device_train_batch_size: 1
gradient_accumulation_steps: 8
learning_rate: 2e-4
num_train_epochs: 3.0
lr_scheduler_type: cosine
warmup_ratio: 0.1
bf16: true
### Validação
val_size: 0.1
per_device_eval_batch_size: 1
eval_strategy: steps
eval_steps: 500
Inicie o treinamento executando o comando no diretório LLaMA-Factory:
llamafactory-cli train examples/train_qlora/qwen25_lora_sft_4bit.yaml
Um indicador de progresso aparecerá no terminal, mostrando que o treinamento está em andamento.
4. Inferência e Teste do Modelo Ajustado
Para testar o modelo após o fine-tuning, crie um arquivo de configuração de inferência em examples/inference. Copie um arquivo de exemplo e renomeie para qwen25_qlora_chat.yaml. Configure-o assim:
model_name_or_path: ./Qwen2.5-7B-Instruct
adapter_name_or_path: saves/qwen25-7b/qlora_sft
template: qwen
finetuning_type: lora
Inicie uma sessão de chat interativa com o modelo ajustado:
llamafactory-cli chat examples/inference/qwen25_qlora_chat.yaml
Após o carregamento do modelo, você poderá interagir com ele. Perguntas como "Quem é você?" revelarão que a identidade do modelo (definida no dataset identity) foi alterada com sucesso, demonstrando o efeito do fine-tuning.
Este processo completo - desde a configuração do ambiente, download do modelo, até o treinamento e teste - demonstra o ciclo básico de fine-tuning de um LLM moderno usando ferramentas acessíveis.