在不會被注入 XSS 的部分允許 innerHTML
CSS 輪播效果不強制動畫
第四週使用 JWT 做會員系統
非同步概念
bootstrap css design pattern 一個元素多個 class name,老師一個元素一個 class name,除非狀態 active
https://www.quora.com/How-do-I-upload-a-file-to-REST-API
https://sass-guidelin.es/#the-7-1-pattern

Pending
Judging

Final Project Concept

Definition

Person

  • User: Frontend user from browser
  • Infra: Infrastructure engineer for deployment who Known docker but not AI background

Program

  • Frontend: Frontend brower (e.g. Chrome)
  • Backend: backend server (e.g. EC2)
  • Storage: Storage server (e.g. S3)
  • DLServer: Deep learning server which is user deployment in docker image
  • DLClient: Deep learning client which is user deployment in docker image
  • DLMonitor: Deep learning DLMonitor which is User deployment in docker image
  • InferSrv: A server provide inference api (e.g. EC2)

Hardware

  • EC2: backend + InferSrv
  • S3: storage
  • Training Server: DLServer + DLClient + DLMonitor

AI

  • model: A file or files. It can do specific things like object detection. Just like the flow of the algorithm
  • fine-tuning model: A base model for start training
  • dataset: A group of images and annotations

AI process explanation

  • training: A method to generate a new model
  • inference: Use model to get result

User story

Create Account

  1. User click login on frontend
  2. User input necessary information on frontend
  3. User click signup
  4. Frontend send information to backend
  5. Backend response the result

backend

  • GET: /api/member/signout
  • POST: /api/member/signin
  • POST: /api/member/signup

Create Dataset

  1. User prepare images and annotations by himself
  2. User upload images and annotations on frontend
  3. ??? How to send image to storage ???
  4. Select a group of images as dataset

backend

  • POST: /api/image/upload
  • POST: /api/annotation/upload
  • PUT: /api/dataset/id/select

Create Training Project

  1. User select fine-tuning model on frontend
  2. User select dataset on frontend
  3. Frontend send info to backend

backend

  • PUT: /api/training/project/model
  • PUT: /api/training/project/dataset

Deploy Training Server

  1. Infra prepare a server with docker
  2. Download docker image which is provide on frontend, docker image including
    1. GPU driver
    2. Training enviroment (python/tensorflow)
    3. Training server
    4. Training client
    5. Training DLMonitor
    6. — Tunneling Protocol??? vscode 127.0.0.1 —
  3. Run docker — [more detail see validate training server]
    1. Run training server
    2. Run training DLMonitor (checking state per 10 sec)
  4. Infra/user comfire server info on frontend (how to switch key??) — [more detail see validate training server]

backend

  • GET: /api/training/state

Validate training server

  1. DLMonitor request auth key to backend
  2. Frontend pop up an info for user (how to do it???)
  3. User comfirm info on frontend and click
  4. DLMonitor get a key (???)

Training Process

  1. User click start training on frontend
  2. Backend update “training request” to pending
  3. DLMonitor is obtained “training request” by polling (10s)
  4. DLMonitor start a DLClient process
  5. DLClient is the middle man between DLServer and backend
  6. DLClient tranfer fine-tuning model and dataset url to DLServer
  7. DLClient send a training request to DLServer
  8. DLServer download fine-tuning model and dataset url
  9. DLServer training
  10. DLClient transfer training progress to backend (10s or has new)
  11. DLClient transfer result and model to backend on finishh

Inference Process

  1. User select a model and a image on frontend
  2. Frontend send request to InferSrv
  3. Frontend get result from InferSrv
  4. It also can provide sample code about inference

Program

DLMonitor

  • First time connect to backend server with socket
  • Waiting for user comfire
  • Backend send a key(???) to DLMonitor
  • Every 10 sec send a HTTP request to update “state” on DL (training/idle)
  • Every 10 sec send a HTTP request to get “training request” from backend (pending/idle)
  • Every 10 sec send a HTTP request to get “state” from DL (training/idle)

DLServer

  • Provide training progress (progress or idle)
  • Provide upload dataset
  • Provide upload fine-tuning model
  • Provide start training
  • Provide get last training state (success/failed)

DLClient

  • Call DLServer API and transfer to backend
  • It will make DLServer and backend to work dependency