ffdl官方目前**任務掛起僅僅實現將資料庫裡面的status欄位修改為halted,沒有實現真正意義上的pod銷毀、任務狀態資訊保留,resume介面更是沒有實現。由於專案需要,需要實現這部分功能。
思路:採用restapi patchmodel進行服用,當訊息是halt的時候標記掛起操作,resume標記恢復操作。
掛起實現邏輯:請求引數為訓練id,從mongo資料庫中獲取需要掛起任務的資訊,將status標記為halt狀態,呼叫lcm grpc呼叫,lcm grpc呼叫k8s api銷毀該任務相關的pod。
恢復實現邏輯:請求引數為訓練id,從mongo資料庫中獲取需要恢復的訓練任務資訊,查詢status是否為halt狀態,若是,將status標記為pending,呼叫lcm的grpc呼叫,呼叫k8s api建立訓練任務相關pod
tensorflow實驗,每1000次迭代儲存ckpt檔案,在訓練過程中呼叫halt掛起任務,隨後呼叫resume恢復任務,實驗**可以從儲存的ckpt中恢復之前儲存的訓練結果,並繼續訓練
貼上修改**:
from 89cc0990e6b012723bdbe0d981be3ba1ac00bbf4 mon sep 17 00:00:00 2001
from: james date: mon, 18 feb 2019 11:28:59 +0000
subject: [patch] add trainer halt and resume
signed-off-by: james ---
restapi/api_v1/server/models_impl.go | 3 +-
trainer/trainer/trainer_impl.go | 54 ++++++++++++++++++++++++----
2 files changed, 50 insertions(+), 7 deletions(-)
diff --git a/restapi/api_v1/server/models_impl.go b/restapi/api_v1/server/models_impl.go
index f0776a1..a04c6ed 100644
--- a/restapi/api_v1/server/models_impl.go
+++ b/restapi/api_v1/server/models_impl.go
@@ -795,7 +795,7 @@ func patchmodel(params models.patchmodelparams) middleware.responder )
//if err != nil
- ratelimited := true
+ ratelimited := true
qsize, err := qhandler.size()
loggputypequeuesize := fmt.sprintf("%s_%s", gputype, "queue_size")
logr.withfields(logrus.fields
+ //ratelimited = true
if ratelimited
+ ts := training.trainingstatus
+ if (ts.status == grpc_trainer_v2.status_halted && req.statusmessage == "resume") )
+ } else if (ts.status != grpc_trainer_v2.status_failed && ts.status != grpc_trainer_v2.status_completed && req.statusmessage == "halt") )
+ }
+ return &grpc_trainer_v2.updateresponse, nil
+ }
return updatetrainingjobpostlock(s, req)
}@@ -1132,7 +1154,7 @@ func (s *trainerservice) halttrainingjob(ctx context.context, req *grpc_trainer_
logr.debugf("kubernetes job '%s' no longer exists.", job.jobid)
// update the status in mongo
- _, err = updatetrainingjobpostlock(s, &grpc_trainer_v2.updaterequest
+ }*/
+ training, _ := s.repo.find(req.trainingid)
+ ts := training.trainingstatus
+ ts.status = grpc_trainer_v2.status_halted
+ err = s.repo.store(training)
+ if err != nil
return &grpc_trainer_v2.haltresponse, nil
}@@ -1151,7 +1181,19 @@ func (s *trainerservice) halttrainingjob(ctx context.context, req *grpc_trainer_
func (s *trainerservice) resumetrainingjob(ctx context.context, req *grpc_trainer_v2.resumerequest) (*grpc_trainer_v2.resumeresponse, error)
+ err = s.submitjobtolcm(training, logr)
+ if err != nil
+ return nil, gerrf(codes.unimplemented, "resumetrainingjob not implemented yet") }
-- 2.17.1
UCOSIII任務掛起和恢復
1.1 任務的掛起 我們想暫停某個任務,但是又不想刪除掉這個任務的時候就可以使用函式ostasksuspend 來將這個任務掛起,函式原型如下 void ostasksuspend os tcb p tcb,os err p err 1.2 任務的恢復 當我們想要恢復某個被掛起的任務的時候可以呼叫函...
任務的建立 掛起和恢復
ucosii有兩個建立任務的函式 ostaskcreate 和ostaskcreateext 其中ostaskcreateext 是ostaskcreate 的擴充套件。並提供了一些附加功能。int8u ostaskcreate void task void pd 指向任務的指標 void pdat...
freeRTOS 掛起 恢復任務
任務掛起 它把所有掛起的任務加到 xsuspendedtasklist 中,而且一旦呼叫 vtasksuspend 函式掛起乙個任務,該任務就將從所有它原先連入的鍊錶中刪除 包括就緒表,延時表和它等待的事件鍊錶 兩類列表都要清掉 也就是說,一旦乙個任務被掛起,它將取消先前它的延時和對事件的等待。相反...