@startuml

title traditionally

cloud cloud {
        cloud AWS
        cloud Azure
        cloud GCP
}

node device1
node device2

AWS <---- device1 : request
AWS ----> device1 : return
AWS <---- device2 : request
AWS ----> device2 : return

newpage
title now

cloud cloud {
        cloud AWS
        cloud Azure
        cloud GCP
}
cloud edge
node device1
node device2

AWS <---- edge : request
AWS ----> edge : return

edge <- device1 : request
edge -down-> device1 : return
edge <- device2 : request
edge -down-> device2 : return

newpage
title Edge Issues

cloud cloud {
        cloud AWS
        cloud Azure
        cloud GCP
}
cloud edge
note left
Privacy
Bandwidth
Latency
Reliability
Energy
end note

rectangle On-premises {
        collections device
        database battery
        database privacy
}


AWS <---- edge : request
AWS ----> edge : return

edge <.down. device : request
edge .down.> device : return

device <- privacy : request
battery .> device : power


newpage
title future

cloud cloud {
        cloud AWS
        cloud Azure
        cloud GCP
}
cloud edge
rectangle On-premises {
        node device1
        node device2
        node device3
}

AWS <---- edge : request
AWS ----> edge : return

edge <.down.> device1
edge <.down.> device2

device1 <-> device2
device1 <-down-> device3
device2 <-down-> device3 : offloading
device3 <-> device3 : in place


newpage
title Web experience

cloud "Web/linux\n" #5DADE2 {
        cloud cloud {
                cloud AWS
                cloud Azure
                cloud GCP
        }
        cloud edge
}

rectangle on-premises {
        node device1
        node device2
        node device3
}

AWS <-- edge : request
AWS --> edge : return

edge <.down.> device1
edge <.down.> device2

device1 <-> device2

device1 <-down-> device3
device2 <-down-> device3

newpage
title Gap between web and embedded

cloud "Web/linux\n" #5DADE2 {
        cloud cloud {
                cloud AWS
                cloud Azure
                cloud GCP
        }
        cloud edge
}

AWS <-- edge : request
AWS --> edge : return

rectangle "On-premises/\nEmbedded" #F39C12 {
        node device1
        node device2
        node device3
}

edge <.down.> device1
edge <.down.> device2
device1 <-> device2
device1 <-down-> device3
device2 <-down-> device3 : offloading
device3 <-> device3 : in place


newpage
title Gap between Web and Embedded

cloud "Web/linux\n" #5DADE2 {
        cloud cloud {
                cloud AWS
                cloud Azure
                cloud GCP
        }
        cloud edge
}

note right of cloud : Container based microservices\non-demand service orchestration

rectangle Embedded #F39C12 {
        node device1
        node device2
        node device3
}

note right of Embedded : variety of RTOSes\nFixed services\nno orchestration

AWS <-- edge : request
AWS --> edge : return

edge <.down.> device1
edge <.down.> device2
device1 <-right-> device2
device1 <-down-> device3
device2 <-down-> device3 : offloading
device3 <-> device3 : in place

newpage
title ML environment

cloud "Web/linux\n" #5DADE2 {
        cloud cloud {
                cloud AWS
                cloud Azure
                cloud GCP
        }
        cloud edge
}

note right of cloud
variety of python ML frameworks
heavy training & inference
multi-node GPUs
end note

rectangle Embedded #F39C12 {
        node device1
        node device2
        node device3
}

note right of Embedded
<s>python ML runtime</s>
<s>training</s>
Any inference in place?
end note

AWS <-- edge : request
AWS --> edge : return

edge <.down.> device1
edge <.down.> device2
device1 <-right-> device2
device1 <-down-> device3
device2 <-down-> device3 : offloading
device3 <-> device3 : in place

newpage
title Current

cloud "Web/linux\n" #5DADE2 {
        cloud cloud {
                cloud AWS
                cloud Azure
                cloud GCP
        }
        cloud edge
}

rectangle Embedded #F39C12 {
        node device1
        node device2
        node device3
}

AWS <-- edge : request
AWS --> edge : return

edge <.down.> device1
edge <.down.> device2
device1 <-right-> device2
device1 <-down-> device3
device2 <-down-> device3 : offloading
device3 <-> device3 : in place

newpage
title Proposal: TinyML as-a-Service

cloud "Web/linux\n" #5DADE2 {
        cloud cloud {
                cloud AWS
                cloud Azure
                cloud GCP
        }
        cloud edge
}

database Zoo {
        collections "model"
}

cloud "TinyMLaaS\n" #F012F3 {
        folder SaaS {
                ("Build\nService") as TBS
        }
}

TBS <-up- Zoo : downloading

rectangle Embedded #F39C12 {
        node device1
        node device2
        node device3
}


note "image\nruntime" as download
TBS -down- download : downloading
device2 -up-> SaaS : info
device2 <-up- download

AWS <-- edge : request
AWS --> edge : return

edge <.down.> device1
edge <.down.> device2
device1 <-right-> device2
device1 <-down-> device3
device2 <-down-> device3 : offloading
device3 <-> device3 : in place
device2 <-> device2 : ML in place

@enduml
