當處理的目標是多模型組成,我們可以訓練各種模型至不同的Server 以增加執行與管理的效能:
如果這些訓練好的模型,未來要串接起來,做生成式資料產出,可能會做複雜 hierarchical 的串接:
實行串接時,要如何保持程式的重複使用與簡潔程式? python 和 javascript很像,優缺點的地方其實都很接近,而在做 javascript 時如果要保持程式的簡潔與好維護,pattern、套件式的建構是很重要的。而好的 javascript 架構師幾乎都會建議,做成 API 是不錯的方向。python 有更好的地方是,它有提供直接宣告類別物件可以使用。如:
GetModel('identity').LoadWeight(config).Predict()
最終以API的方式來操作是最好溝通與維護管理的方式,甚至批次執行動作。
所以我們可以先做規劃出一種模型的容器來接收、讀取權重、增刪改、串接之類的框架。甚至可以重新批次更新模型,對未來是相當有高便利性與彈性發展的影響。
容器 Container 的作用不外乎可以是註冊、cache、批次或其他規則限制執行 ,這邊提供一個概略的介面供繼承實作參考,未來可以擴充應用:
class ModelContainer()
def __init__(self):
self.ModelList = {} #registed model cache
self.ModelPrdictData = {} #model predict data collection
self.ConcateResult = None #concate model cache
sef.GetModelInstance = None
return self
def ValidateModel(self):
""" model validate ,like model.compiler、model.build…etc """
#raise NotImplementedError("not implement");
return self
def InsertModel(self, ModelId):
""" model add to container """
#raise NotImplementedError("not implement");
return self
def DeleteModel(self, ModelId):
""" model delete from container """
#raise NotImplementedError("not implement");
return self
def GetModel(self, ModelId):
""" fetch model """
#raise NotImplementedError("not implement");
return self
def SetModel(self, ModelId, modelObject):
""" chagne model content and reset status """
#raise NotImplementedError("not implement");
return self
def ConcateModelPredict(self, ModelIdList = []):
""" concate selected model predict result """
#raise NotImplementedError("not implement");
return self
def SingleModelBuild(self, ModelId):
"""Single Model Build """
#raise NotImplementedError("not implement");
return self
def MultiModelBuild(self, ModelIdList = []):
"""batch selected Model Build """
#raise NotImplementedError("not implement");
return self
def AllModelBuild(self):
"""batch all Model Build"""
#raise NotImplementedError("not implement");
return self
def SingleModelCompiler(self, ModelId, config = None):
"""Single selected Model Compiler"""
#raise NotImplementedError("not implement");
return self
def MultiModelCompiler(self, Config={} ):
"""batch selected Model Compiler """
#raise NotImplementedError("not implement");
return self
def AllModelCompiler(self , Config={}):
"""batch all Model Compiler """
#raise NotImplementedError("not implement");
return self
def SingleModelFit(self, ModelId, config = None):
"""single selected Model fit train """
#raise NotImplementedError("not implement");
return self
def MultiModelFit(self, Config={} ):
"""batch selected Model fit train """
#raise NotImplementedError("not implement");
return self
def AllModelFit(self , Config={}):
"""all Model fit train """
#raise NotImplementedError("not implement");
return self
def SingleModelPredict(self, ModelId, config = None):
"""single selected Model Predict """
#raise NotImplementedError("not implement");
return self
def MultiModelPredict(self, Config={} ):
"""batch selected Model Predict """
#raise NotImplementedError("not implement");
return self
def AllModelPredict(self , Config={}):
"""batch all Model Predict """
#raise NotImplementedError("not implement");
return self