데스크톱 브라우저의 에지에서 연합 학습을 지원하고, 모바일 앱과 잘 통합되고, 성능이 뛰어나며, 개인정보를 보호하는 프레임워크를 원하시나요? 완전히 Rust로 작성된 XayNet에 오신 것을 환영합니다!
명시적으로 연합 학습을 위한 프레임워크를 포함하여 기계 학습을 위한 프레임워크는 이미 존재합니다. 이러한 프레임워크는 일반적으로 사일로 간 사용 사례에 대한 연합 학습을 촉진합니다. 예를 들어 제한된 수의 병원 전체 또는 가치 있고 민감한 데이터를 공유할 필요 없이 공통 사용 사례를 작업하는 여러 은행에서 협업 학습이 가능합니다.
이 저장소는 스마트폰이나 심지어 자동차와 같은 수백만 개의 저전력 에지 장치에서 기계 학습의 오케스트레이션을 가능하게 하는 마스크된 교차 장치 연합 학습에 중점을 둡니다. 이를 통해 실제로 연합 학습 채택의 속도와 범위를 높이고 특히 최종 사용자 데이터를 보호할 수 있기를 바랍니다. 모든 데이터는 비공개 로컬 구내에 유지되므로 암호화된 AI 모델만 자동 및 비동기식으로 집계됩니다. 따라서 우리는 AI 개인 정보 보호 딜레마에 대한 솔루션을 제공하고 개인 정보 보호와 편의성 사이에 자주 존재하는 격차를 해소합니다. 예를 들어, 음성 입력을 중앙에서 녹음하고 수집하지 않고도 장치 수준에서 직접 새로운 단어를 배우고 이 지식을 다른 모든 인스턴스와 공유하는 음성 도우미를 상상해 보세요. 또는 민감한 검색 쿼리를 중앙에서 수집하지 않고 검색 결과를 개인화하는 방법을 학습하는 검색 엔진에 대해 생각해 보십시오. 오늘날에도 여전히 편의를 위해 개인 정보를 거래하는 수천 가지 사용 사례가 있습니다. 우리는 이것이 있어서는 안 된다고 생각하며, 이러한 딜레마를 극복할 수 있는 대안을 제공하고자 합니다.
구체적으로 우리는 개발자에게 다음을 제공합니다.
연합 학습을 위한 우리의 프레임워크는 단순히 기계 학습을 위한 프레임워크가 아닙니다. 오히려 이기종 장치에서 발생하고 사용 사례에 이러한 장치가 많이 포함되는 기계 학습 연합을 지원합니다.
따라서 이 프레임워크가 작성된 프로그래밍 언어는 다음에 대한 강력한 지원을 제공해야 합니다.
Rust는 이러한 요구 사항을 충족하는 몇 안되는 최신 프로그래밍 언어 중 하나입니다.
녹슨 1.51.0
백엔드를 실행하는 방법에는 docker를 통하거나 Kubernetes 클러스터에 배포하거나 코드를 컴파일하고 바이너리를 수동으로 실행하는 등 몇 가지 방법이 있습니다.
docker
및 docker-compose
) 및/또는 작업 설정(Rust 코드를 컴파일하고 바이너리를 수동으로 실행하기로 결정한 경우)에 대한 기존 지식이 있다고 가정합니다.메모:
Xaynet v0.11
사용하면 코디네이터는 상태를 저장하기 위해 Redis 인스턴스에 대한 연결이 필요합니다.
프로덕션에 사용되는 Redis 인스턴스에 코디네이터를 연결하지 마세요!
코디네이터를 자체 Redis 인스턴스에 연결하는 것이 좋습니다. 우리는 코디네이터가 자신의 데이터만 삭제할 수 있도록 많은 시간을 투자했지만 현재 개발 상태에서는 이것이 항상 유지된다는 보장은 없습니다.
docker 설정을 사용하면 모든 것이 컨테이너 내부에서 이루어지기 때문에 시스템에 작동하는 Rust 환경을 설정할 필요가 없다는 것이 편리합니다.
최신 릴리스의 Docker 이미지는 Docker Hub에서 제공됩니다.
다음을 실행하여 기본 configs/docker-dev.toml
로 시험해 볼 수 있습니다.
v0.11 이하의 Xaynet
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에 있는 시작하기 가이드를 참조하세요.
프로젝트를 실행하는 데 어려움이 있는 경우 문제를 열고 설정과 직면한 문제를 설명하여 저희에게 연락해 주세요.