# Nanotron

[Nanotron](https://github.com/huggingface/nanotron) é um framework de treinamento distribuído com paralelismo de tensor, paralelismo paralelo e paralelismo de dados (paralelismo 3D). Ele foi projetado para cargas de trabalho de treinamento em larga escala em centenas de GPUs.

Converta qualquer modelo do Transformers para uma implementação otimizada de modelo transformer Nanotron para pré-treino com o script [convert_hf_to_nanotron.py](https://github.com/huggingface/nanotron/blob/main/examples/llama/convert_hf_to_nanotron.py).

```bash
torchrun --nproc_per_node=1 examples/llama/convert_hf_to_nanotron.py \
    --checkpoint_path=meta-llama/Llama-2-7b-hf \
    --save_path=./llama-7b-nanotron
```

## Integração com Transformers

1. Carregue um modelo compatível com o Transformers, como `Llama`, com a função [from_pretrained()](/docs/transformers/main/pt/main_classes/model#transformers.PreTrainedModel.from_pretrained). Isso lê o arquivo `config.json` do diretório do checkpoint e cria um [LlamaConfig](/docs/transformers/main/pt/model_doc/llama2#transformers.LlamaConfig).
2. O Nanotron mapeia [LlamaConfig](/docs/transformers/main/pt/model_doc/llama2#transformers.LlamaConfig) para seu próprio formato de configuração e cria um modelo Nanotron.
3. Converte os pesos do Transformers para o Nanotron. Um mapeamento de pesos orienta como mapear os nomes dos parâmetros do Nanotron para os nomes dos parâmetros do Transformers. Isso inclui o tratamento de transformações, como a fusão das projeções QKV e das projeções gate/up.

O Nanotron também depende do [AutoTokenizer](/docs/transformers/main/pt/model_doc/auto#transformers.AutoTokenizer) para converter texto em ids de tokens durante o pré-processamento e a geração.

## Recursos

- repositório [Nanotron](https://github.com/huggingface/nanotron)
- [Ultrascale Playbook](https://huggingface.co/spaces/nanotron/ultrascale-playbook) descreve como escalar o treinamento de forma eficiente com Nanotron

