هل تريد إطار عمل يدعم التعلم الموحد على الحافة، في متصفحات سطح المكتب، ويتكامل جيدًا مع تطبيقات الأجهزة المحمولة، ويكون عالي الأداء، ويحافظ على الخصوصية؟ مرحبًا بك في XayNet، المكتوب بالكامل بلغة Rust!
إن أطر التعلم الآلي - بما في ذلك تلك المخصصة للتعلم الموحد - موجودة بالفعل. تعمل هذه الأطر عادةً على تسهيل التعلم الموحد لحالات الاستخدام المنعزلة - على سبيل المثال في التعلم التعاوني عبر عدد محدود من المستشفيات أو على سبيل المثال عبر بنوك متعددة تعمل على حالة استخدام مشترك دون الحاجة إلى مشاركة بيانات قيمة وحساسة.
يركز هذا المستودع على التعلم الموحد المقنع عبر الأجهزة لتمكين تنسيق التعلم الآلي في ملايين الأجهزة الطرفية منخفضة الطاقة، مثل الهواتف الذكية أو حتى السيارات. ومن خلال القيام بذلك، نأمل أيضًا في زيادة وتيرة ونطاق اعتماد التعلم الموحد في الممارسة العملية والسماح بشكل خاص بحماية بيانات المستخدم النهائي. تظل جميع البيانات في أماكن محلية خاصة، حيث يتم تجميع نماذج الذكاء الاصطناعي المشفرة فقط تلقائيًا وبشكل غير متزامن. وبالتالي، فإننا نقدم حلاً لمعضلة خصوصية الذكاء الاصطناعي ونسد الفجوة الموجودة غالبًا بين الخصوصية والراحة. تخيل، على سبيل المثال، مساعدًا صوتيًا لتعلم كلمات جديدة مباشرة على مستوى الجهاز ومشاركة هذه المعرفة مع جميع الحالات الأخرى، دون تسجيل وجمع مدخلاتك الصوتية مركزيًا. أو فكر في محرك البحث الذي يتعلم كيفية تخصيص نتائج البحث دون جمع استعلامات البحث الحساسة في كثير من الأحيان مركزيًا... هناك الآلاف من حالات الاستخدام هذه التي لا تزال اليوم تتاجر بالخصوصية من أجل الراحة. نعتقد أن الأمر لا ينبغي أن يكون كذلك، ونريد تقديم بديل للتغلب على هذه المعضلة.
بشكل ملموس، نحن نقدم للمطورين ما يلي:
إن إطار العمل الخاص بنا للتعلم الموحد ليس مجرد إطار عمل للتعلم الآلي في حد ذاته. بل إنه يدعم اتحاد التعلم الآلي الذي يحدث على أجهزة ربما تكون غير متجانسة وحيث تتضمن حالات الاستخدام العديد من هذه الأجهزة.
وبالتالي فإن لغة البرمجة التي كُتب بها هذا الإطار يجب أن تمنحنا دعمًا قويًا لما يلي:
يعد Rust أحد الخيارات القليلة جدًا للغات البرمجة الحديثة التي تلبي المتطلبات التالية:
روستك 1.51.0
هناك عدة طرق مختلفة لتشغيل الواجهة الخلفية: عبر عامل الإرساء، أو عن طريق نشرها إلى مجموعة Kubernetes أو عن طريق تجميع التعليمات البرمجية وتشغيل الملف الثنائي يدويًا.
docker
و docker-compose
) و/أو إعداد عملي (إذا قررت تجميع كود Rust وتشغيل الملف الثنائي يدويًا).ملحوظة:
مع Xaynet v0.11
يحتاج المنسق إلى اتصال بمثيل redis لحفظ حالته.
لا تقم بتوصيل المنسق بمثيل Redis المستخدم في الإنتاج!
نوصي بربط المنسق بمثيل Redis الخاص به. لقد استثمرنا الكثير من الوقت للتأكد من أن المنسق لا يحذف سوى بياناته الخاصة، ولكن في ظل حالة التطوير الحالية، لا يمكننا ضمان أن يكون هذا هو الحال دائمًا.
تكمن الراحة في استخدام إعداد عامل الإرساء في عدم الحاجة إلى إعداد بيئة عمل Rust على نظامك، حيث يتم كل شيء داخل الحاوية.
يتم توفير صور Docker لأحدث الإصدارات على Docker Hub.
يمكنك تجربتها باستخدام configs/docker-dev.toml
الافتراضي عن طريق تشغيل:
Xaynet أقل من الإصدار 0.11
docker run -v ${PWD} /configs/docker-dev.toml:/app/config.toml -p 8081:8081 xaynetwork/xaynet:v0.10.0 /app/coordinator -c /app/config.toml
زينيت v0.11+
# don't forget to adjust the Redis url in configs/docker-dev.toml
docker run -v ${PWD} /configs/docker-dev.toml:/app/config.toml -p 8081:8081 xaynetwork/xaynet:v0.11.0
تحتوي صورة عامل الإرساء على إصدار إصدار للمنسق بدون ميزات اختيارية.
ابدأ تشغيل المنسق بالإشارة إلى ملف docker/docker-compose.yml
. فهو يقوم بتدوير كل البنية التحتية الضرورية لتشغيل المنسق بميزات افتراضية أو اختيارية. ضع في اعتبارك أن هذا الملف يستخدم للتطوير فقط.
docker-compose -f docker/docker-compose.yml up --build
إذا كنت ترغب في ذلك، يمكنك إنشاء إصدار محسّن للمنسق، ولكن ضع في اعتبارك أن التجميع سيكون أبطأ.
docker build --build-arg RELEASE_BUILD=1 -f ./docker/Dockerfile .
يمكن تحديد الميزات الاختيارية عبر وسيطة البناء COORDINATOR_FEATURES
.
docker build --build-arg COORDINATOR_FEATURES=tls,metrics -f ./docker/Dockerfile .
لنشر مثيل المنسق إلى مجموعة Kubernetes الخاصة بك، استخدم البيانات الموجودة داخل مجلد k8s/coordinator
. تعتمد البيانات على kustomize
ليتم إنشاؤها ( kustomize
مدعوم رسميًا بواسطة kubectl
منذ الإصدار 1.14). ننصحك بالاطلاع على البيانات بدقة وتعديلها وفقًا لإعداداتك الخاصة (مساحة الاسم، والدخول، وما إلى ذلك).
تذكر أيضًا التحقق (وضبطه إذا لزم الأمر) من التكوين الافتراضي للمنسق، المتوفر على k8s/coordinator/development/config.toml
.
برجاء ضبط النطاق المستخدم في ملف k8s/coordinator/development/ingress.yaml
بحيث يتوافق مع احتياجاتك (يمكنك أيضًا تخطي ingress
تمامًا، فقط تأكد من إزالة مرجعه من k8s/coordinator/development/kustomization.yaml
).
ضع في اعتبارك أن تكوين ingress
الذي يظهر على k8s/coordinator/development/ingress.yaml
يعتمد على الموارد غير المتوفرة في هذا المستودع، نظرًا لطبيعتها الحساسة (مفتاح TLS والشهادة، على سبيل المثال).
للتحقق من البيانات التي تم إنشاؤها، قم بتشغيل:
kubectl kustomize k8s/coordinator/development
لتطبيقها:
kubectl apply -k k8s/coordinator/development
في حالة عدم كشف المنسق الخاص بك عبر ingress
، فلا يزال بإمكانك الوصول إليه باستخدام منفذ للأمام. يقوم المثال أدناه بإنشاء منفذ للأمام في المنفذ 8081
بافتراض أن حجرة المنسق لا تزال تستخدم تسمية app=coordinator
:
kubectl port-forward $( kubectl get pods -l " app=coordinator " -o jsonpath= " {.items[0].metadata.name} " ) 8081
يمكن بناء المنسق بدون ميزات اختيارية والبدء به:
cd rust
cargo run --bin coordinator -- -c ../configs/config.toml
يمكن العثور على المثال تحت الصدأ/أمثلة/. يستخدم نموذجًا وهميًا ولكنه قادر على الاتصال بالشبكة، لذا فهو نقطة بداية جيدة للتحقق من الاتصال مع المنسق.
test-drive
تأكد من أن لديك نسخة قيد التشغيل من المنسق وأن العملاء الذين ستولدهم بالأمر أدناه قادرون على الوصول إليه عبر الشبكة.
فيما يلي مثال على كيفية بدء 20
مشاركًا سيتصلون بمنسق يعمل على 127.0.0.1:8081
:
cd rust
RUST_LOG=info cargo run --example test-drive -- -n 20 -u http://127.0.0.1:8081
لمزيد من التفاصيل المتعمقة حول كيفية تشغيل الأمثلة، راجع دليل البدء المصاحب ضمن Rust/xaynet-server/src/examples.rs.
إذا واجهت أي صعوبات في تشغيل المشروع، يرجى التواصل معنا عن طريق فتح مشكلة ووصف الإعداد الخاص بك والمشكلات التي تواجهها.