DeepSeek-V3 : como implementar o DeepSeek Trainer do zero

O PyImageSearch publica o último artigo de uma série dedicada à construção do DeepSeek-V3 « do zero », centrado desta vez no treino do modelo e na geração de texto. Escrito por Puneet Mangla, o tutorial detalha o ciclo de treino, os hiperparâmetros e os dados utilizados para um modelo de pequena dimensão.

Esta sexta parte conclui uma série que abordou, passo a passo, a configuração e os Rotary Position Embeddings (RoPE), a Multi-head Latent Attention (MLA), a Mixture of Experts (MoE), a Multi-Token Prediction (MTP), e depois a montagem da arquitetura em PyTorch. O tutorial apresenta o « trainer », o componente que faz funcionar a arquitetura confrontando-a com dados.

Um treino baseado no Hugging Face

Treinar um modelo do tipo transformer implica coordenar o carregamento de dados, a otimização, a gestão dos pontos de salvaguarda e a avaliação. O autor baseia-se para isso na API Trainer do Hugging Face, com as versões transformers==4.57.3, datasets==4.8.5 e accelerate==1.15.0. O modelo devolvendo um par (logits, loss), um método compute_loss personalizado adapta a sua saída ao formato esperado pelo Trainer.

Várias técnicas são implementadas. A acumulação de gradientes simula lotes grandes quando a memória da GPU é limitada: com um lote de 4 exemplos e 4 passos de acumulação, o tamanho efetivo atinge 16 num único dispositivo. A taxa de aprendizagem segue uma fase de aquecimento progressivo (warmup), seguida de um decaimento linear. Por fim, o treino em precisão mista (FP16) pode acelerar o cálculo, embora o ganho dependa do hardware e da carga de trabalho.

Dados e configuração

O modelo é treinado com TinyStories, um conjunto de dados de histórias simples para crianças, concebido para um vocabulário e uma gramática adaptados a pequenos modelos de linguagem. O autor retém apenas os primeiros 10 000 exemplos, distribuídos sem mistura em 9 000 para treino e 1 000 para avaliação. Este segundo conjunto provém, portanto, do subconjunto escolhido, e não da validação oficial do conjunto de dados.

O texto é tokenizado com o tokenizer GPT-2, que utiliza a codificação por pares de bytes (BPE). As posições de preenchimento são excluídas do cálculo da perda graças ao valor -100. A configuração fixa uma taxa de aprendizagem de 5e-4, 10 passos de warmup, uma regularização de 0,01 e 2 épocas de treino. São criados pontos de salvaguarda a cada 50 passos, três são mantidos, e o modelo final retido é aquele que apresenta a menor perda de validação.

Para testar a geração, o autor utiliza uma temperatura de 0,8 e uma amostragem top-k de 50, com 150 novos tokens. A história apresentada como exemplo é explicitamente ilustrativa e não provém de uma execução registada. O tutorial esclarece que este pequeno modelo não rivalizará com os grandes modelos pré-treinados e que as suas produções podem repetir-se, derivar ou perder coerência. O tutorial completo e o seu código fonte estão disponíveis no site do PyImageSearch.