Skip to main content

Extensible network framework library for federated learning system

Project description

icon.png

Extensible network framework for federated learning system

FL-Network is a simple Network architecture for federated learning. It is suitable for parameter server mode and P2P mode of federated learning.FL-Network uses Redis as multi-terminal interaction messaging middleware, which supports the construction and simulation of federated learning networks in standalone and distributed environments. Researchers can use FL-Network to quickly build an extensible federated learning system. Through The API of FL-Network, multi-terminal message transmission, such as weight(FedAvg), gradient(FedSGD) etc., can be performed without considering the underlying Network. In this way, researchers can focus more on the implementation of federated learning algorithm on FL-Network. At the same time, there is no need to install complex federated learning framework, which is beneficial for researchers to learn the specific implementation process of federated learning algorithm.

Installation for FL-Network

You can install Fl-Network with pip or install manually.

With pip

~$ pip install fl-network

Manually

Download the source distribution or built distribution in release.

~$ tar -zxvf ./fl-network-0.0.1.tar.gz
~$ cd fl-network-0.0.1
~$ python setup.py install

or use built distribution.

~$ pip install fl_network-0.0.1-py3-none-any.whl # wheel
~$ pip install fl_network-0.0.1-py3.8.egg # egg

Installation for Redis

Fl-network uses Redis as multi-terminal interaction messaging middleware. You can install redis on WSL2(Windows Subsystem for Linux), Linux and MacOS. If you prefer to install redis on Windows, please refer to here.

Quick start with demo

Before getting start to program your FL algorithm, you must launch redis server on isolated server or localhost and export ip and port of redis. (default 127.0.0.1:6379)

from FLNetwork.paramServer import ParamServer
from FLNetwork.device import Device

if __name__ == '__main__':

    # setup()
    # setup FL device: dev_01 locally (ip=127.0.0.1, port=6379) 
    dev_01 = Device(name="dev_01",
                    server="param_sys", peers=["dev_02"],
                    args_from_ser=["weight", "grad"], args_from_peer=[],
                    ip="127.0.0.1", port=6379)

    # setup FL device: dev_02 locally (ip=127.0.0.1, port=6379) 
    dev_02 = Device(name="dev_02",
                    server="param_sys", peers=["dev_01"],
                    args_from_ser=["weight", "grad"], args_from_peer=[],
                    ip="127.0.0.1", port=6379)

    # setup FL parameters server: param_sys locally (ip=127.0.0.1, port=6379) 
    server = ParamServer(name="param_sys", 
                         devices=["dev_01", "dev_02"], args_from_dev=["weight", "grad"],
                         ip="127.0.0.1", port=6379)

The setup parameters Illustration

Class Parameter Illustration
Device name The device name is used as the identifier
- server The server name is used as the identifier
- peers The list of other peers
- args_from_ser The predefined args that will be received from servere
- args_from_peer The predefined args that will be received from peer
- ip Ip of redis
- port Port of redis
ParamServer name The server name is used as the identifier
- devices The list of devices
- args_from_dev The predefined args that will be received from devices
- ip Ip of redis
- port Port of redis

API

Parameters Server


Define a new arg from device:

server.set_from_arg(arg, device) # arg: arg name (str), device: target device name (str)

Send a arg to device by predefined arg channel above:

server.send(arg, value) # arg: arg name (str), value: value of arg (Any)

Read arg from device:

server.read(dev, arg) # dev: device name (str), arg: name of arg to read (str)

Get arg channel (to be received):

channel = server.get_channel() # return channel dict

Set global arg (anyone can read):

server.set(global_arg, value) # global_arg: global arg name (str), value: value of arg (Any)

Get global arg:

arg = server.get(global_arg) # global_arg: global arg name (str)

Device


Define a new arg from peer or server:

dev_01.set_from_arg(arg, dev_ser, is_server=False) # arg: arg name (str), dev_ser: target device/server name (str)

Send a arg to device/server by predefined arg channel above:

dev_01.send(arg, value) # arg: arg name (str), value: value of arg (Any)

Read arg from device:

dev_01.read_dev(dev, arg) # dev: device name (str), arg: name of arg to read (str)

Read arg from server:

dev_01.read_ser(ser, arg) # dev: server name (str), arg: name of arg to read (str)

Get arg channel (to be received):

channel = dev_01.get_channel() # return channel dict

Set global arg (anyone can read):

dev_01.set(global_arg, value) # global_arg: global arg name (str), value: value of arg (Any)

Get global arg:

arg = dev_01.get(global_arg) # global_arg: global arg name (str)

Working Example

# 1. dev_01 define a new arg from server
dev_01.set_from_arg("init_weight", server.name)
# 2. parameters server initialize model
import torch
weight = torch.zeros((1000, 1000))
server.send("init_weight", weight)
# 3. device receive model weight
init_weight = dev_01.rend_ser(server.name, "init_weight")
# 4. set init_weight as net.parameters() in Pytorch

Contact

Project Investigator: Rostar (luosida@qq.com)

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

fl-network-1.0.2.tar.gz (5.4 kB view details)

Uploaded Source

Built Distributions

fl_network-1.0.2-py3.8.egg (8.9 kB view details)

Uploaded Egg

fl_network-1.0.2-py3-none-any.whl (6.2 kB view details)

Uploaded Python 3

File details

Details for the file fl-network-1.0.2.tar.gz.

File metadata

  • Download URL: fl-network-1.0.2.tar.gz
  • Upload date:
  • Size: 5.4 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.0 CPython/3.8.13

File hashes

Hashes for fl-network-1.0.2.tar.gz
Algorithm Hash digest
SHA256 05adebf792c5d1cc987e807f16c1b3c7b49165a5ece1d573ac72c679f9fe4014
MD5 7edb6e0dd9ac34d89f7c6314a97deb1c
BLAKE2b-256 1a1a398d90200f9848c0e8ce14d072f9d285b0de454b9ec0d46f5b91a953b91f

See more details on using hashes here.

File details

Details for the file fl_network-1.0.2-py3.8.egg.

File metadata

  • Download URL: fl_network-1.0.2-py3.8.egg
  • Upload date:
  • Size: 8.9 kB
  • Tags: Egg
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.0 CPython/3.8.13

File hashes

Hashes for fl_network-1.0.2-py3.8.egg
Algorithm Hash digest
SHA256 2874adfae3894e1d4cec859ed8e0b97ad3448b584dc1ec1db50a87664db83a62
MD5 2b19a51dfa21e1978c3b949827ee7703
BLAKE2b-256 64797513f302b2082dbfb9132433082f37d2d86a360741f89cc274aefd1e8642

See more details on using hashes here.

File details

Details for the file fl_network-1.0.2-py3-none-any.whl.

File metadata

  • Download URL: fl_network-1.0.2-py3-none-any.whl
  • Upload date:
  • Size: 6.2 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.0 CPython/3.8.13

File hashes

Hashes for fl_network-1.0.2-py3-none-any.whl
Algorithm Hash digest
SHA256 ff4ce40b7bec69e7a5f4a93aac3d4ffaa48e94e06a1e63bd5f309b5a76df4eca
MD5 74b96591523880088a50d07cde67cb57
BLAKE2b-256 3888661b260cfd258f4a202c972c54a5b5b1db167f9452e101781b02f611d1e4

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page