# Candle

[Candle](https://github.com/huggingface/candle) é um framework de machine learning que fornece implementações nativas em Rust para modelos Transformers. Ele suporta nativamente [safetensors](https://huggingface.co/docs/safetensors/en/index) para carregar modelos Transformers diretamente.

```rust
/// load model config
let config: Config = 
    serde_json::from_reader(std::fs::File::open(config_filename)?)?;

/// load safetensors and memory-maps them
let vb = unsafe {
    VarBuilder::from_mmaped_safetensors(&filenames, dtype, &device)?
};

/// materialize tensors from VarBuilder into model class
let model = Model::new(args.use_flash_attn, &config, vb)?;
```

## Integração com Transformers

1. O crate [hf-hub](https://github.com/huggingface/hf-hub) verifica o [cache local do Hugging Face](../installation#cache-directory) em busca de um modelo. Se ele não estiver presente, o crate baixa os pesos e as configurações do modelo do Hub.
2. [VarBuilder](https://github.com/huggingface/candle/blob/f526033db7ea880c7189628a2dc00e3e2008a9e7/candle-nn/src/var_builder.rs#L38) carrega os arquivos safetensor de forma preguiçosa. Ele mapeia os nomes das chaves do state-dict para structs em Rust que representam as camadas do modelo. Isso espelha a forma como o Transformers organiza seus pesos.
3. O Candle faz o parsing de `config.json` para extrair metadados do modelo e instancia a classe de modelo Rust correspondente com os pesos de `VarBuilder`.

## Recursos

- Documentação do [Candle](https://github.com/huggingface/candle)

