# Candle

[Candle](https://github.com/huggingface/candle) هو إطار عمل لتعلم الآلة يوفر تنفيذات أصلية بلغة Rust لنماذج Transformers. يدعم بشكل أصلي [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` لاستخراج بيانات وصفية للنموذج، ثم يُنشئ فئة النموذج المطابقة بلغة Rust مع الأوزان من `VarBuilder`.

## الموارد

- توثيق [Candle](https://github.com/huggingface/candle)

