Sedna is an edge-cloud synergy AI project incubated in KubeEdge SIG AI.

English | 简体中文

Sedna

CI Go Report Card LICENSE

What is Sedna?

Sedna is an edge-cloud synergy AI project incubated in KubeEdge SIG AI. Benefiting from the edge-cloud synergy capabilities provided by KubeEdge, Sedna can implement across edge-cloud collaborative training and collaborative inference capabilities, such as joint inference, incremental learning, and federated learning. Sedna supports popular AI frameworks, such as TensorFlow, Pytorch, PaddlePaddle, MindSpore.

Sedna can simply enable edge-cloud synergy capabilities to existing training and inference scripts, bringing the benefits of reducing costs, improving model performance, and protecting data privacy.

Features

Sedna has the following features:

  • Provide the edge-cloud synergy AI framework.

    • Provide dataset and model management across edge-cloud, helping developers quickly implement synergy AI applications.
  • Provide edge-cloud synergy training and inference frameworks.

    • Joint inference: under the condition of limited resources on the edge, difficult inference tasks are offloaded to the cloud to improve the overall performance, keeping the throughput.
    • Incremental training: For small samples and non-iid data on the edge, models can be adaptively optimized on the cloud or edge. The more the models are used, the smarter they are.
    • Federated learning: For those scenarios that the data being too large, or unwilling to migrate raw data to the cloud, or high privacy protection requirements, models are trained at the edge and parameters are aggregated on the cloud to resolve data silos effectively.
    • etc..
  • Compatibility

    • Compatible with mainstream AI frameworks such as TensorFlow, Pytorch, PaddlePaddle, and MindSpore.
    • Provides extended interfaces for developers to quickly integrate third-party algorithms, and some necessary algorithms for edge-cloud synergy have been preset, such as hard sample discovering, aggregation algorithm.

Architecture

Sedna's edge-cloud synergy is implemented based on the following capabilities provided by KubeEdge:

  • Unified orchestration of across edge-cloud applications.
  • Router: across edge-cloud message channel in management plane.
  • EdgeMesh: across edge-cloud microservice discovery and traffic governance in data plane.

Component

Sedna consists of the following components:

GlobalManager

  • Unified edge-cloud synergy AI task management
  • Cross edge-cloud synergy management and collaboration
  • Central Configuration Management

LocalController

  • Local process control of edge-cloud synergy AI tasks
  • Local general management: model, dataset, and status synchronization

Worker

  • Do inference or training, based on existing ML framework.
  • Launch on demand, imagine they are docker containers.
  • Different workers for different features.
  • Could run on edge or cloud.

Lib

  • Expose the Edge AI features to applications, i.e. training or inference programs.

Guides

Installation

Follow the Sedna installation document to install Sedna.

Examples

Example1:Joint Inference Service in Helmet Detection Scenario.

Roadmap

Meeting

Regular Community Meeting:

Resources:

Contact

If you have questions, feel free to reach out to us in the following ways:

License

Sedna is under the Apache 2.0 license. See the LICENSE file for details.

Comments
  • Joint Inference Service is failed on the agent

    Joint Inference Service is failed on the agent

    I am deploying Example1:Using Joint Inference Service in Helmet Detection Scenario.

    In the last step Create joint inference service, master is okay, but joint-inference-helmet-detection-little can't work on the edge: you can see there is no pod on the edge(I have already had the big and little images locally and version is v0.4.3) image

    kubectl describe ji

      Edge Worker:
        Hard Example Mining:
          Name:  IBT
          Parameters:
            Key:    threshold_img
            Value:  0.9
            Key:    threshold_box
            Value:  0.9
        Model:
          Name:  helmet-detection-inference-little-model
        Template:
          Spec:
            Containers:
              Env:
                Name:             input_shape
                Value:            416,736
                Name:             video_url
                Value:            rtsp://localhost/video
                Name:             all_examples_inference_output
                Value:            /data/output
                Name:             hard_example_cloud_inference_output
                Value:            /data/hard_example_cloud_inference_output
                Name:             hard_example_edge_inference_output
                Value:            /data/hard_example_edge_inference_output
              Image:              kubeedge/sedna-example-joint-inference-helmet-detection-little:v0.4.3
              Image Pull Policy:  IfNotPresent
              Name:               little-model
              Resources:
                Limits:
                  Memory:  2Gi
                Requests:
                  Cpu:     100m
                  Memory:  64M
              Volume Mounts:
                Mount Path:  /data/
                Name:        outputdir
            Node Name:       wspn2
            Volumes:
              Host Path:
                Path:  /joint_inference/output
                Type:  Directory
              Name:    outputdir
    Status:
      Active:  1
      Conditions:
        Last Heartbeat Time:   2022-03-23T13:34:59Z
        Last Transition Time:  2022-03-23T13:34:59Z
        Status:                True
        Type:                  Running
        Last Heartbeat Time:   2022-03-23T13:34:59Z
        Last Transition Time:  2022-03-23T13:34:59Z
        Message:               the worker of service failed
        Reason:                workerFailed
        Status:                True
        Type:                  Failed
      Failed:                  1
      Start Time:              2022-03-23T13:34:59Z
    Events:                    <none>
    
    

    on the edge, edgemesh and sedna are okay, but there is no joint-inference-helmet-detection-little image

    docker logs k8s_lc_lc-zlrzg_sedna
    

    image

    I have already tried to uninstall sdena and restart it again, the problem still exists.

  • [Enhancement Request] Integrate Plato into Sedna as a backend for supporting federated learning - Phase one

    [Enhancement Request] Integrate Plato into Sedna as a backend for supporting federated learning - Phase one

    This is a PR for integrating Plato into Sedna to support federated learning (#50). @li-ch @baochunli @jaypume

    • We currently support Fedavg and Mistnet in Sedna via Plato.
    • We add one example for each federated learning job.

    Finished

    • [x] A tool to automatically generate Plato configuration file based on the CRD.
    • [x] ~~Replace the communication libs with Sedna build-in libs.~~ S3 and asyncio are used.
    • [x] Examples and demo presentation
      • [x] CV: Yolo-v5 demo
    • [x] Trainer and Estimator
    • [x] datasource is from sedna dataset
  • Join_inference cannot be connected to the cloud for analysis

    Join_inference cannot be connected to the cloud for analysis

    What happened: When I use the example which is joint_inference/helmet_detection_inference, there are some errors in the log helmet-detection-inference-example-edge-5pg66 logs: [2021-04-16 02:32:48,383][sedna.joint_inference.joint_inference][ERROR][124]: send request to http://192.168.2.211:30691 failed, error is HTTPConnectionPool(host='192.168.2.211', port=30691): Max retries exceeded with url: / (Caused by NewConnectionError('<urllib3.connection.HTTPConnection object at 0x7efe5409dcf8>: Failed to establish a new connection: [Errno 111] Connection refused',)), retry times: 5 [2021-04-16 02:32:48,384][sedna.joint_inference.joint_inference][WARNING][365]: retrieve cloud infer service failed, use edge result

    What you expected to happen: The above error does not exist

    How to reproduce it (as minimally and precisely as possible): Just follow the example: https://github.com/kubeedge/sedna/blob/main/examples/joint_inference/helmet_detection_inference/README.md

    Anything else we need to know?:

    Environment:

    Sedna Version
    $ kubectl get -n sedna deploy gm -o jsonpath='{.spec.template.spec.containers[0].image}'
    # paste output here
    kubeedge/sedna-gm:v0.1.0
    $ kubectl get -n sedna ds lc -o jsonpath='{.spec.template.spec.containers[0].image}'
    # paste output here
    

    kubeedge/sedna-lc:v0.1.0

    Kubernets Version
    $ kubectl version
    # paste output here
    

    Client Version: version.Info{Major:"1", Minor:"18", GitVersion:"v1.18.3", GitCommit:"2e7996e3e2712684bc73f0dec0200d64eec7fe40", GitTreeState:"clean", BuildDate:"2020-05-20T12:52:00Z", GoVersion:"go1.13.9", Compiler:"gc", Platform:"linux/amd64"} Server Version: version.Info{Major:"1", Minor:"18", GitVersion:"v1.18.3", GitCommit:"2e7996e3e2712684bc73f0dec0200d64eec7fe40", GitTreeState:"clean", BuildDate:"2020-05-20T12:43:34Z", GoVersion:"go1.13.9", Compiler:"gc", Platform:"linux/amd64"}

    KubeEdge Version
    $ cloudcore --version
    # paste output here
    1.6
    $ edgecore --version
    # paste output here
    

    1.6

    CloudSide Environment:

    Hardware configuration
    $ lscpu
    # paste output here
    
    OS
    $ cat /etc/os-release
    # paste output here
    
    Kernel
    $ uname -a
    # paste output here
    
    Others

    EdgeSide Environment:

    Hardware configuration
    $ lscpu
    # paste output here
    
    OS
    $ cat /etc/os-release
    # paste output here
    
    Kernel
    $ uname -a
    # paste output here
    
    Others
  • Add e2e code framework

    Add e2e code framework

    try to fix #14, with other test cases to be added

    1. Add e2e framework code stolen from k8s.io/test/e2e/framework and remove unnecessary code for simplicity.
    2. Add run-e2e.sh and a github action job to run e2e tests.
    3. Add a simple dataset testcase, TODO for other CRs.
    4. Update local-up.sh to support run-e2e.sh.
  • Add shared storage support for dataset/model

    Add shared storage support for dataset/model

    What would you like to be added:

    Add shared storage support for dataset/model, such as s3/http protocols.

    Why is this needed:

    Currently only dataset/model uri with host localpath is supported, thus limiting cross node model training/serving.

  • buildx: speed the language having builtin build

    buildx: speed the language having builtin build

    We use docker-buildx to build our components images for different platforms.

    But for some languages, such as golang, have good builtin build for multi platforms, and buildx support that.

    In Sedna, we have GM/LC written by golang. This commit supports this function.

    Signed-off-by: llhuii [email protected]

  • Improve build script of examples

    Improve build script of examples

    This new version of the example build script allows to selective build a type of example rather than all the Docker images. Moreover, it automatically pushes to a target repository.

  • [OSPP]The proposal for TinyMS support in Python SDK

    [OSPP]The proposal for TinyMS support in Python SDK

    What type of PR is this? /kind feature

    What this PR does: This PR is a proposal that analyses Python SDK architecture of sedna and discusses the way to implement Python SDK support for TinyMS and demos of MindSpore and TinyMS

    Fixes #307

  • joint_inference: bug fix and interface reconstruction

    joint_inference: bug fix and interface reconstruction

    1. fix example bug: save result which get from cloud if is hard example
    2. Add docs and code comment
    3. rename: TSBigModelService -> BigModelService
    4. fix #133
  • [Incremental Learning] Add the support with different `nodeName` of train/eval workers

    [Incremental Learning] Add the support with different `nodeName` of train/eval workers

    What would you like to be added/modified: Currently in the feature of incremental learning, the nodeNames of dataset and train/eval workers should be same.

    When the dataset is in shared storage, the support with different nodeName could be added

    Why is this needed:

    1. In principle we can't require the user must train and eval model in same node.
    2. Train requires much more resources than eval worker, they may not in the same node.
    3. Sometimes the user may need to do evalution in the same/similar node with infer-worker, such as both at edge.
  • ospp Lifelong Learning exporter and Visualization

    ospp Lifelong Learning exporter and Visualization

    Signed-off-by: wjf [email protected]

    What type of PR is this? /kind feature

    What this PR does / why we need it:

    Which issue(s) this PR fixes:

    Fixes https://github.com/kubeedge/sedna/issues/306

  • update the path of installation document in README.md

    update the path of installation document in README.md

    Signed-off-by: Ryan [email protected]

    What type of PR is this?

    /kind documentation

    What this PR does / why we need it: the old path is deprecated

    Which issue(s) this PR fixes:

    Fixes #

  • Failed to unmarshal configfile /etc/kubeedge/config/edgecore.yaml

    Failed to unmarshal configfile /etc/kubeedge/config/edgecore.yaml

    What happened: curl https://raw.githubusercontent.com/kubeedge/sedna/master/scripts/installation/all-in-one.sh | NUM_EDGE_NODES=1 bash - What you expected to happen:

    How to reproduce it (as minimally and precisely as possible):

    Anything else we need to know?: uname -r 3.10.0-1160.71.1.el7.x86_64 docker -v Docker version 20.10.17, build 100c701 Environment:

    Sedna Version
    $ kubectl get -n sedna deploy gm -o jsonpath='{.spec.template.spec.containers[0].image}'
    # paste output here
    
    $ kubectl get -n sedna ds lc -o jsonpath='{.spec.template.spec.containers[0].image}'
    # paste output here
    
    Kubernets Version
    $ kubectl version
    # paste output here
    
    KubeEdge Version
    $ cloudcore --version
    # paste output here
    
    $ edgecore --version
    # paste output here
    

    CloudSide Environment:

    Hardware configuration
    $ lscpu
    # paste output here
    
    OS
    $ cat /etc/os-release
    # paste output here
    
    Kernel
    $ uname -a
    # paste output here
    
    Others

    EdgeSide Environment:

    Hardware configuration
    $ lscpu
    # paste output here
    
    OS
    $ cat /etc/os-release
    # paste output here
    
    Kernel
    $ uname -a
    # paste output here
    
    Others
  • Model update CANNOT be triggered in the second round of incremental learning

    Model update CANNOT be triggered in the second round of incremental learning

    What happened: In the second round of incremental learning, the task is in the Deploy Running state for a long time, but the deploy model in the edge is not updated

    What you expected to happen:

    How to reproduce it (as minimally and precisely as possible):

    Anything else we need to know?:

    1. In sedna/pkg/localcontroller/managers/incrementallearning/incrementallearningjob.go:283, only when variable job.JobConfig.HotModelUpdateDeployTriggerStatus is in ready status, can it enter the model hot update process.
    2. However, In sedna/pkg/localcontroller/managers/incrementallearning/incrementallearningjob.go:283, this variable is set to competed after the last round of model hot update process.
    3. Therefore, I think it is because the variable is not set back to ready in time, which causes BUG in the model hot update

    Environment:

    Sedna Version
    $ kubectl get -n sedna deploy gm -o jsonpath='{.spec.template.spec.containers[0].image}'
    # paste output here
    
    $ kubectl get -n sedna ds lc -o jsonpath='{.spec.template.spec.containers[0].image}'
    # paste output here
    
    Kubernets Version
    $ kubectl version
    # paste output here
    
    KubeEdge Version
    $ cloudcore --version
    # paste output here
    
    $ edgecore --version
    # paste output here
    

    CloudSide Environment:

    Hardware configuration
    $ lscpu
    # paste output here
    
    OS
    $ cat /etc/os-release
    # paste output here
    
    Kernel
    $ uname -a
    # paste output here
    
    Others

    EdgeSide Environment:

    Hardware configuration
    $ lscpu
    # paste output here
    
    OS
    $ cat /etc/os-release
    # paste output here
    
    Kernel
    $ uname -a
    # paste output here
    
    Others
  • Question about lifelong learning example

    Question about lifelong learning example

    When Sedna and lifelong learning are deployed successfully, the inference worker has nothing to output like this image

    When I ran the inference.py inside the container, it still got no results.

  • two missing line in mindspore backend

    two missing line in mindspore backend

    Signed-off-by: Lj1ang [email protected]

    What type of PR is this? /kind bug backend_type is missing here https://github.com/kubeedge/sedna/blob/main/lib/sedna/backend/init.py#L23 perhaps I delete it accidently in https://github.com/kubeedge/sedna/pull/376

    What this PR does / why we need it: add backend_type

    Which issue(s) this PR fixes:

    Fixes #

Secure Edge Networking Based On Kubernetes And KubeEdge.
Secure Edge Networking Based On Kubernetes And KubeEdge.

What is FabEdge FabEdge is an open source edge networking solution based on kubernetes and kubeedge. It solves the problems including complex network

Jan 3, 2023
An edge-native container management system for edge computing
An edge-native container management system for edge computing

SuperEdge is an open source container management system for edge computing to manage compute resources and container applications in multiple edge regions. These resources and applications, in the current approach, are managed as one single Kubernetes cluster. A native Kubernetes cluster can be easily converted to a SuperEdge cluster.

Dec 29, 2022
Sig - Statistics in Go - CLI tool for quick statistical analysis of data streams

Statistics in Go - CLI tool for quick statistical analysis of data streams

May 16, 2022
provide api for cloud service like aliyun, aws, google cloud, tencent cloud, huawei cloud and so on

cloud-fitter 云适配 Communicate with public and private clouds conveniently by a set of apis. 用一套接口,便捷地访问各类公有云和私有云 对接计划 内部筹备中,后续开放,有需求欢迎联系。 开发者社区 开发者社区文档

Dec 20, 2022
Dapr is a portable, event-driven, runtime for building distributed applications across cloud and edge.
Dapr is a portable, event-driven, runtime for building distributed applications across cloud and edge.

Dapr is a portable, serverless, event-driven runtime that makes it easy for developers to build resilient, stateless and stateful microservices that run on the cloud and edge and embraces the diversity of languages and developer frameworks.

Jan 5, 2023
MOSN is a cloud native proxy for edge or service mesh. https://mosn.io
MOSN is a cloud native proxy for edge or service mesh. https://mosn.io

中文 MOSN is a network proxy written in Golang. It can be used as a cloud-native network data plane, providing services with the following proxy functio

Dec 30, 2022
MatrixOne is a planet scale, cloud-edge native big data engine crafted for heterogeneous workloads.
MatrixOne is a planet scale, cloud-edge native big data engine crafted for heterogeneous workloads.

What is MatrixOne? MatrixOne is a planet scale, cloud-edge native big data engine crafted for heterogeneous workloads. It provides an end-to-end data

Dec 26, 2022
Project Flogo is an open source ecosystem of opinionated event-driven capabilities to simplify building efficient & modern serverless functions, microservices & edge apps.
Project Flogo is an open source ecosystem of opinionated  event-driven capabilities to simplify building efficient & modern serverless functions, microservices & edge apps.

Project Flogo is an Open Source ecosystem for event-driven apps Ecosystem | Core | Flows | Streams | Flogo Rules | Go Developers | When to use Flogo |

Dec 31, 2022
Kubernetes Native Edge Computing Framework (project under CNCF)
Kubernetes Native Edge Computing Framework (project under CNCF)

KubeEdge KubeEdge is built upon Kubernetes and extends native containerized application orchestration and device management to hosts at the Edge. It c

Jan 1, 2023
Microshift is a research project that is exploring how OpenShift1 Kubernetes can be optimized for small form factor and edge computing.

Microshift is a research project that is exploring how OpenShift1 Kubernetes can be optimized for small form factor and edge computing.

Nov 1, 2021
OpenYurt - Extending your native Kubernetes to edge(project under CNCF)
OpenYurt - Extending your native Kubernetes to edge(project under CNCF)

openyurtio/openyurt English | 简体中文 What is NEW! Latest Release: September 26th, 2021. OpenYurt v0.5.0. Please check the CHANGELOG for details. First R

Jan 7, 2023
Edge Orchestration project is to implement distributed computing between Docker Container enabled devices.
Edge Orchestration project is to implement distributed computing between Docker Container enabled devices.

Edge Orchestration Introduction The main purpose of Edge Orchestration project is to implement distributed computing between Docker Container enabled

Dec 17, 2021
stratus is a cross-cloud identity broker that allows workloads with an identity issued by one cloud provider to exchange this identity for a workload identity issued by another cloud provider.
stratus is a cross-cloud identity broker that allows workloads with an identity issued by one cloud provider to exchange this identity for a workload identity issued by another cloud provider.

stratus stratus is a cross-cloud identity broker that allows workloads with an identity issued by one cloud provider to exchange this identity for a w

Dec 26, 2021
Cloud-Z gathers information and perform benchmarks on cloud instances in multiple cloud providers.

Cloud-Z Cloud-Z gathers information and perform benchmarks on cloud instances in multiple cloud providers. Cloud type, instance id, and type CPU infor

Jun 8, 2022
The GCP Enterprise Cloud Cost Optimiser, or gecco for short, helps teams optimise their cloud project costs.
The GCP Enterprise Cloud Cost Optimiser, or gecco for short, helps teams optimise their cloud project costs.

gecco helps teams optimise their cloud resource costs. Locate abandoned, idle, and inefficiently configured resources quickly. gecco helps teams build

Jan 9, 2022
This Go based project of Aadhyarupam Innovators demonstrate the code examples for building microservices, integration with cloud services (Google Cloud Firestore), application configuration management (Viper) etc.

This Go based project of Aadhyarupam Innovators demonstrate the code examples for building microservices, integration with cloud services (Google Cloud Firestore), application configuration management (Viper) etc.

Dec 22, 2022
Tiny cross-platform webview library for C/C++/Golang. Uses WebKit (Gtk/Cocoa) and Edge (Windows)

webview A tiny cross-platform webview library for C/C++/Golang to build modern cross-platform GUIs. Also, there are Rust bindings, Python bindings, Ni

Dec 28, 2022
🦖 Streaming-Serverless Framework for Low-latency Edge Computing applications, running atop QUIC protocol, engaging 5G technology.
🦖 Streaming-Serverless Framework for Low-latency Edge Computing applications, running atop QUIC protocol, engaging 5G technology.

YoMo YoMo is an open-source Streaming Serverless Framework for building Low-latency Edge Computing applications. Built atop QUIC Transport Protocol an

Dec 29, 2022
Simple edge server / reverse proxy

reproxy Reproxy is simple edge HTTP(s) sever / reverse proxy supporting various providers (docker, static, file). One or more providers supply informa

Dec 29, 2022
Simplified network and services for edge applications
Simplified network and services for edge applications

English | 简体中文 EdgeMesh Introduction EdgeMesh is a part of KubeEdge, and provides a simple network solution for the inter-communications between servi

Jan 1, 2023