デスクトップブラウザーでのエッジでのフェデレーテッドラーニングをサポートし、モバイルアプリとうまく統合し、パフォーマンスを高め、プライバシーを保護するフレームワークが必要ですか?すべて Rust で書かれた XayNet へようこそ!
機械学習のフレームワーク (フェデレーテッド ラーニング専用のものを含む) はすでに存在します。これらのフレームワークは通常、サイロを越えたユースケースのフェデレーテッド ラーニングを促進します。たとえば、限られた数の病院間での共同学習や、貴重な機密データを共有する必要なく、共通のユースケースに取り組んでいる複数の銀行間での共同学習などです。
このリポジトリは、マスクされたクロスデバイス フェデレーテッド ラーニングに焦点を当てており、スマートフォンや自動車など、数百万台の低電力エッジ デバイスでの機械学習のオーケストレーションを可能にします。これにより、フェデレーテッド ラーニングの実際の導入ペースと範囲を増やし、特にエンド ユーザー データの保護を可能にしたいと考えています。すべてのデータはプライベートなローカル施設に残り、暗号化された AI モデルのみが自動的かつ非同期に集約されます。したがって、私たちは AI のプライバシーのジレンマに対する解決策を提供し、プライバシーと利便性の間に存在するギャップを橋渡しします。たとえば、音声入力を一元的に記録して収集することなく、音声アシスタントがデバイス レベルで新しい単語を直接学習し、この知識を他のすべてのインスタンスと共有することを想像してください。あるいは、機密性の高い検索クエリを一元的に収集することなく、検索結果をパーソナライズすることを学習する検索エンジンについて考えてみましょう。今日でも利便性のためにプライバシーを犠牲にしているそのようなユースケースは何千もあります。私たちは、このようなことはあってはならないと考えており、このジレンマを克服するための代替案を提供したいと考えています。
具体的には、開発者に次のものを提供します。
私たちのフェデレーション ラーニングのフレームワークは、機械学習そのもののフレームワークであるだけではありません。むしろ、異種デバイスが混在する可能性があり、そのようなデバイスが多数関与するユースケースで行われる機械学習のフェデレーションをサポートします。
したがって、このフレームワークが記述されているプログラミング言語は、次のものに対する強力なサポートを提供する必要があります。
Rust は、次の要件を満たす最新のプログラミング言語の数少ない選択肢の 1 つです。
錆びた1.51.0
バックエンドを実行するには、Docker を使用する方法、Kubernetes クラスターにデプロイする方法、コードをコンパイルしてバイナリを手動で実行する方法など、いくつかの方法があります。
docker
やdocker-compose
など) や作業セットアップ (Rust コードをコンパイルしてバイナリを手動で実行する場合) に関する既存の知識があることを前提としています。注記:
Xaynet v0.11
では、コーディネーターは状態を保存するために Redis インスタンスに接続する必要があります。
本番環境で使用される Redis インスタンスにコーディネーターを接続しないでください。
コーディネーターを独自の Redis インスタンスに接続することをお勧めします。私たちは、コーディネーターが自身のデータのみを削除するようにするために多くの時間を費やしてきましたが、現在の開発状況では、これが常に当てはまることを保証することはできません。
Docker セットアップを使用する便利な点は、すべてがコンテナー内で行われるため、システム上に動作する Rust 環境をセットアップする必要がないことです。
最新リリースの Docker イメージは Docker Hub で提供されます。
以下を実行することで、デフォルトのconfigs/docker-dev.toml
を使用してそれらを試すことができます。
Xaynet 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
ザイネット 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/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
v1.14 以降、 kubectl
によって正式にサポートされています)。マニフェストを徹底的に調べ、独自の設定 (名前空間、イングレスなど) に従って調整することをお勧めします。
k8s/coordinator/development/config.toml
で入手可能なコーディネーターのデフォルト構成も忘れずに確認してください (必要に応じて調整してください)。
k8s/coordinator/development/ingress.yaml
ファイルで使用されるドメインをニーズに合うように調整してください ( ingress
完全にスキップすることもできますが、その参照をk8s/coordinator/development/kustomization.yaml
から削除するようにしてください)。
k8s/coordinator/development/ingress.yaml
に示されているingress
構成は、機密性の高い性質のため、このリポジトリでは利用できないリソース (TLS キーや証明書など) に依存していることに注意してください。
生成されたマニフェストを確認するには、次を実行します。
kubectl kustomize k8s/coordinator/development
それらを適用するには:
kubectl apply -k k8s/coordinator/development
ingress
経由でコーディネーターを公開していない場合でも、ポート転送を使用してコーディネーターに到達できます。以下の例では、コーディネーター ポッドがまだapp=coordinator
ラベルを使用していると仮定して、ポート8081
でポート転送を作成します。
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
サンプルは、rust/examples/ にあります。ダミー モデルを使用しますが、ネットワーク対応であるため、コーディネーターとの接続を確認するための良い出発点となります。
test-drive
コーディネーターのインスタンスが実行中であること、および以下のコマンドで生成するクライアントがネットワーク経由でそのインスタンスにアクセスできることを確認してください。
次に、 127.0.0.1:8081
で実行されているコーディネータに接続する20
参加者を開始する方法の例を示します。
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 にある付属の入門ガイドを参照してください。
プロジェクトの実行で問題が発生した場合は、問題を開いてセットアップと直面している問題を説明して、ご連絡ください。