Ingin kerangka kerja yang mendukung pembelajaran gabungan di edge, di browser desktop, terintegrasi dengan baik dengan aplikasi seluler, berkinerja baik, dan menjaga privasi? Selamat datang di XayNet, seluruhnya ditulis dalam Rust!
Kerangka kerja untuk pembelajaran mesin - termasuk kerangka kerja untuk pembelajaran gabungan - sudah ada. Kerangka kerja ini biasanya memfasilitasi pembelajaran gabungan mengenai kasus penggunaan lintas silo - misalnya dalam pembelajaran kolaboratif di sejumlah rumah sakit atau misalnya di beberapa bank yang mengerjakan kasus penggunaan umum tanpa perlu berbagi data yang berharga dan sensitif.
Repositori ini berfokus pada pembelajaran gabungan lintas perangkat untuk memungkinkan orkestrasi pembelajaran mesin di jutaan perangkat edge berdaya rendah, seperti ponsel cerdas atau bahkan mobil. Dengan melakukan hal ini, kami berharap dapat meningkatkan kecepatan dan cakupan penerapan pembelajaran gabungan dalam praktiknya dan khususnya memungkinkan perlindungan data pengguna akhir. Semua data tetap berada di lokasi lokal pribadi, sehingga hanya model AI terenkripsi yang dikumpulkan secara otomatis dan asinkron. Oleh karena itu, kami memberikan solusi terhadap dilema privasi AI dan menjembatani kesenjangan yang sering ada antara privasi dan kenyamanan. Bayangkan, misalnya, asisten suara mempelajari kata-kata baru secara langsung di tingkat perangkat dan berbagi pengetahuan ini dengan semua perangkat lain, tanpa merekam dan mengumpulkan masukan suara Anda secara terpusat. Atau, pikirkan tentang mesin telusur yang belajar mempersonalisasi hasil penelusuran tanpa mengumpulkan kueri penelusuran sensitif Anda secara terpusat… Ada ribuan kasus penggunaan yang saat ini masih memperdagangkan privasi demi kenyamanan. Kami pikir hal ini tidak seharusnya terjadi dan kami ingin memberikan alternatif untuk mengatasi dilema ini.
Secara konkret, kami menyediakan kepada pengembang:
Kerangka kerja kami untuk pembelajaran gabungan bukan hanya kerangka kerja untuk pembelajaran mesin saja. Sebaliknya, ini mendukung federasi pembelajaran mesin yang dilakukan pada perangkat yang mungkin heterogen dan kasus penggunaan melibatkan banyak perangkat tersebut.
Oleh karena itu, bahasa pemrograman di mana kerangka ini ditulis harus memberi kita dukungan kuat untuk hal-hal berikut:
Rust adalah salah satu dari sedikit pilihan bahasa pemrograman modern yang memenuhi persyaratan berikut:
karat 1.51.0
Ada beberapa cara berbeda untuk menjalankan backend: melalui buruh pelabuhan, atau dengan menerapkannya ke cluster Kubernetes atau dengan mengkompilasi kode dan menjalankan biner secara manual.
docker
dan docker-compose
) dan/atau pengaturan yang berfungsi (jika Anda memutuskan untuk mengkompilasi kode Rust dan menjalankan biner secara manual).Catatan:
Dengan Xaynet v0.11
koordinator memerlukan koneksi ke instance redis untuk menyimpan statusnya.
Jangan sambungkan koordinator ke instance Redis yang digunakan dalam produksi!
Kami merekomendasikan untuk menghubungkan koordinator ke instance Redis miliknya sendiri. Kami telah menginvestasikan banyak waktu untuk memastikan bahwa koordinator hanya menghapus datanya sendiri, tetapi dalam perkembangan saat ini, kami tidak dapat menjamin bahwa hal ini akan selalu terjadi.
Kenyamanan menggunakan pengaturan buruh pelabuhan adalah tidak perlu menyiapkan lingkungan Rust yang berfungsi di sistem Anda, karena semuanya dilakukan di dalam container.
Gambar Docker dari rilis terbaru disediakan di Docker Hub.
Anda dapat mencobanya dengan configs/docker-dev.toml
default dengan menjalankan:
Xaynet di bawah v0.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
Xaynet 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
Gambar buruh pelabuhan berisi versi rilis koordinator tanpa fitur opsional.
Mulai koordinator dengan menunjuk ke file docker/docker-compose.yml
. Ini menjalankan semua infrastruktur yang penting untuk menjalankan koordinator dengan fitur default atau opsional. Perlu diingat bahwa file ini hanya digunakan untuk pengembangan.
docker-compose -f docker/docker-compose.yml up --build
Jika mau, Anda dapat membuat build rilis yang dioptimalkan dari koordinator, namun perlu diingat bahwa kompilasi akan lebih lambat.
docker build --build-arg RELEASE_BUILD=1 -f ./docker/Dockerfile .
Fitur opsional dapat ditentukan melalui argumen build COORDINATOR_FEATURES
.
docker build --build-arg COORDINATOR_FEATURES=tls,metrics -f ./docker/Dockerfile .
Untuk men-deploy instance koordinator ke cluster Kubernetes Anda, gunakan manifes yang terletak di dalam folder k8s/coordinator
. Manifes bergantung pada kustomize
untuk dihasilkan ( kustomize
secara resmi didukung oleh kubectl
sejak v1.14). Kami menyarankan Anda memeriksa manifes secara menyeluruh dan menyesuaikannya sesuai dengan pengaturan Anda sendiri (namespace, ingress, dll.).
Ingatlah untuk juga memeriksa (dan menyesuaikan jika perlu) konfigurasi default untuk koordinator, tersedia di k8s/coordinator/development/config.toml
.
Silakan sesuaikan domain yang digunakan pada file k8s/coordinator/development/ingress.yaml
agar sesuai dengan kebutuhan Anda (Anda juga dapat melewati ingress
sama sekali, pastikan Anda menghapus referensinya dari k8s/coordinator/development/kustomization.yaml
).
Perlu diingat bahwa konfigurasi ingress
yang ditampilkan di k8s/coordinator/development/ingress.yaml
bergantung pada sumber daya yang tidak tersedia di repositori ini, karena sifatnya yang sensitif (misalnya kunci dan sertifikat TLS).
Untuk memverifikasi manifes yang dihasilkan, jalankan:
kubectl kustomize k8s/coordinator/development
Untuk menerapkannya:
kubectl apply -k k8s/coordinator/development
Jika Anda tidak mengekspos koordinator Anda melalui ingress
, Anda masih dapat menghubunginya menggunakan port-forward. Contoh di bawah ini membuat port-forward pada port 8081
dengan asumsi pod koordinator masih menggunakan label app=coordinator
:
kubectl port-forward $( kubectl get pods -l " app=coordinator " -o jsonpath= " {.items[0].metadata.name} " ) 8081
Koordinator tanpa fitur opsional dapat dibuat dan dimulai dengan:
cd rust
cargo run --bin coordinator -- -c ../configs/config.toml
Contohnya dapat ditemukan di bawah karat/contoh/. Ini menggunakan model tiruan tetapi berkemampuan jaringan, jadi ini merupakan titik awal yang baik untuk memeriksa konektivitas dengan koordinator.
test-drive
Pastikan Anda menjalankan instance koordinator dan klien yang akan Anda hasilkan dengan perintah di bawah ini dapat menjangkaunya melalui jaringan.
Berikut contoh cara memulai 20
peserta yang akan terhubung ke koordinator yang berjalan pada 127.0.0.1:8081
:
cd rust
RUST_LOG=info cargo run --example test-drive -- -n 20 -u http://127.0.0.1:8081
Untuk detail lebih mendalam tentang cara menjalankan contoh, lihat panduan Memulai yang disertakan di bawah Rust/xaynet-server/src/examples.rs.
Jika Anda mengalami kesulitan dalam menjalankan proyek, silakan hubungi kami dengan membuka masalah dan menjelaskan pengaturan Anda serta masalah yang Anda hadapi.