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

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

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

ابدأ الدورة

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



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



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

توفر Rust مزايا فريدة:

  • الأداء: الكود المترجم في Rust يمكن مقارنته من حيث السرعة مع C/C++، وهو أمر بالغ الأهمية لتدريب النماذج الكبيرة.
  • الأمان: نظام الملكية (ownership) والاقتراض (borrowing) يستبعد فئات كاملة من الأخطاء (data races، المؤشرات الفارغة).
  • التعددية المنصات: يمكن تجميعه بسهولة إلى WebAssembly والأجهزة المحمولة والأنظمة المدمجة.
  • التكامل مع Python: يمكن كتابة وحدات عالية الأداء في Rust واستدعائها من Python عبر PyO3.


المكتبات الرئيسية لـ ML في Rust



1. Linfa — سكين الجيش السويسري لـ ML

Linfa هي النظير لـ scikit-learn في Rust. توفر واجهة موحدة للخوارزميات القياسية. تدعم:

  • الانحدار الخطي واللوجستي
  • آلة المتجهات الداعمة (SVM)
  • التجميع (K-Means، DBSCAN)
  • طرق تقليل الأبعاد (PCA)
  • أشجار القرار والغابة العشوائية

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

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

fn main() -> Result<(), Box<dyn std::error::Error>> { // إنشاء بيانات اصطناعية: 100 نقطة، 3 ميزات let x = Array2::random((100, 3), rand::distributions::Uniform::new(-1.0, 1.0)); let true_weights = arr2(&[[2.0], [-1.0], [0.5]]); let y = x.dot(&true_weights) + 0.1; // إضافة ضوضاء

let dataset = Dataset::new(x, y); // تدريب النموذج let model = LinearRegression::default().fit(&dataset)?; // معاملات النموذج println!("الأوزان: {:?}", model.params()); // التنبؤ let predicted = model.predict(&dataset); println!("MSE: {:?}", predicted.mean_squared_error(&dataset)?); Ok(())}


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

Burn هو إطار عمل مرن للشبكات العصبية، مكتوب بالكامل بلغة Rust. مميزاته:

  • دعم GPU (CUDA، Vulkan، Metal، WebGPU)
  • التفاضل التلقائي (autograd)
  • نظام خلفيات مرن (torch، ndarray، wgpu)
  • رسوم بيانية ديناميكية للحسابات
  • التصدير إلى ONNX

مثال على شبكة عصبية بسيطة باستخدام Burn:

use burn::tensor::{Tensor, backend::Backend};use burn::nn::{Linear, Relu, Sequential};

// تعريف بنية الشبكةstruct MyModel<B: Backend> { linear1: Linear<B>, linear2: Linear<B>, activation: Relu,}

impl<B: Backend> MyModel<B> { fn new(device: &B::Device) -> Self { Self { linear1: Linear::new(784, 256, device), linear2: Linear::new(256, 10, device), activation: Relu::new(), } } fn forward(&self, input: Tensor<B, 2>) -> Tensor<B, 2> { let x = self.linear1.forward(input); let x = self.activation.forward(x); self.linear2.forward(x) }}

fn main() { // استخدام الخلفية على CPU (ndarray) type MyBackend = burn::backend::NdArray; let device = Default::default(); let model = MyModel::<MyBackend>::new(&device); let input = Tensor::<MyBackend, 2>::ra

توصيات