التعلم الآلي باستخدام Rust: نظرة عامة على المكتبات لعلم البيانات

مدرب بايثون أونلاين للمبتدئين

تعلم Python بسهولة دون إرهاق نظري. حل مهام عملية مع التحقق التلقائي واكتب الكود مباشرة في المتصفح.

ابدأ الدورة

التعلم الآلي باستخدام Rust: المكتبات والأدوات الحديثة

لطالما ارتبطت بيئة التعلم الآلي حصريًا بلغة Python. ومع ذلك، فإن Rust، بفضل أدائها العالي، وأمان الذاكرة، والتكاليف الإضافية الصفرية، تخترق بشكل متزايد أدوات ML. في هذه المقالة، سنستعرض المكتبات الرئيسية للتعلم الآلي بلغة Rust، والتي تتيح بناء وتدريب ونشر النماذج بكفاءة لا يمكن تحقيقها باستخدام اللغات المفسرة.



لماذا Rust للتعلم الآلي؟

تقدم Rust ثلاث مزايا رئيسية لـ ML:

  • الأداء — سرعة تنفيذ الكود مماثلة لـ C/C++.
  • الأمان — نظام الملكية (ownership) يستبعد فئات كاملة من أخطاء الذاكرة.
  • التوازي — نموذج مدمج للخيوط دون سباق البيانات.

ومع ذلك، لا تحاول Rust استبدال Python في الجزء البحثي. مجالها هو بيئة الإنتاج (production)، والأنظمة المدمجة، والخدمات عالية التحميل، والحوسبة الطرفية (edge computing).



1. Linfa — مجموعة كاملة من خوارزميات ML الكلاسيكية

مشروع linfa (المكافئ لـ scikit-learn في Rust) يوفر بنية معيارية لمهام التعلم الخاضع للإشراف وغير الخاضع للإشراف. المكتبة تتطور بنشاط بدعم من مجتمع Rust-ML.



المكونات الرئيسية لـ Linfa

  • linfa-clustering — K-Means، DBSCAN، Gaussian Mixture
  • linfa-linear — الانحدار الخطي واللوجستي
  • linfa-svm — آلة المتجهات الداعمة
  • linfa-trees — أشجار القرار والغابة العشوائية
  • linfa-nn — طرق أقرب الجيران


مثال: الانحدار الخطي باستخدام Linfa

use linfa::prelude::*;use linfa_linear::LinearRegression;use ndarray::array;

fn main() { // بيانات التدريب: (x, y) let x = array![[1.0], [2.0], [3.0], [4.0]]; let y = array![2.0, 4.0, 6.0, 8.0];

// إنشاء مجموعة البيانات let dataset = Dataset::new(x, y);

// تدريب النموذج let model = LinearRegression::default().fit(&dataset).unwrap();

// التنبؤ لـ x=5 let pred = model.predict(&array![[5.0]]); println!("التنبؤ: {}", pred);}


2. Burn — إطار عمل للتعلم العميق مع دعم GPU

Burn هو إطار عمل حديث للشبكات العصبية، مكتوب بلغة Rust. يدعم التفاضل التلقائي، والعمل على GPU عبر WGPU و Vulkan، بالإضافة إلى التصدير إلى ONNX.



الإمكانيات الرئيسية لـ Burn

  • الرسوم البيانية الحسابية الديناميكية والثابتة
  • الخلفيات: Torch، WGPU، Ndarray، Fusion
  • المحسنات المدمجة (Adam، SGD، AdamW)
  • دعم الالتفافات 1D، 2D، 3D


مثال: بيرسبترون بسيط باستخدام Burn

use burn::tensor::{Tensor, backend::Backend};use burn::nn::{Linear, LinearConfig};use burn::module::Module;

#[derive(Module)]struct MLP<B: Backend> { layer1: Linear<B>, layer2: Linear<B>,}

impl<B: Backend> MLP<B> { fn new(device: &B::Device) -> Self { Self { layer1: LinearConfig::new(2, 16).init(device), layer2: LinearConfig::new(16, 1).init(device), } }

fn forward(&self, input: Tensor<B, 2>) -> Tensor<B, 2> { let x = self.layer1.forward(input).relu(); self.layer2.forward(x) }}


3. Candle — إطار عمل بسيط من Hugging Face

تم تطويره بواسطة فريق Hugging Face، يركز Candle على البساطة والسرعة. لا يستخدم CUDA (فقط CPU و Metal)، مما يجعله مثاليًا للاستدلال على أجهزة Mac والأجهزة الطرفية.



ميزات Candle

  • حجم الملف الثنائي أقل من 10 ميجابايت
  • دعم جاهز للنماذج: LLaMA، Whisper، BERT

توصيات