# Candle

[Candle](https://github.com/huggingface/candle)は、TransformersモデルのネイティブなRust実装を提供する機械学習フレームワークです。[safetensors](https://huggingface.co/docs/safetensors/en/index)をネイティブにサポートしており、Transformersモデルを直接ロードできます。

```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)?;
```

## Transformers の統合

1. [hf-hub](https://github.com/huggingface/hf-hub) クレートは、ローカルの[Hugging Face キャッシュ](../installation#cache-directory)にモデルがあるかを確認します。存在しない場合、Hub からモデルの重みと設定をダウンロードします。
2. [VarBuilder](https://github.com/huggingface/candle/blob/f526033db7ea880c7189628a2dc00e3e2008a9e7/candle-nn/src/var_builder.rs#L38) は、safetensor ファイルを遅延読み込みします。state-dict のキー名を、モデルのレイヤーを表す Rust の構造体にマッピングします。これは、Transformers が重みを整理する方式を反映したものです。
3. Candle は `config.json` を解析してモデルのメタデータを抽出し、`VarBuilder` からの重みを使用して、対応する Rust のモデルクラスをインスタンス化します。

## リソース

- [Candle](https://github.com/huggingface/candle)のドキュメント

