15 분마다 저장된 텐서 흐름 모델을 다시로드하는 Golang 앱 서버가 있습니다. tensorflow 모델을 사용하는 모든 API 호출은 읽기 뮤텍스 잠금을 사용하고 모델을 다시로드 할 때마다 쓰기 잠금을 사용합니다. 기능상 현명하게도 잘 작동하지만 모델로드 중에는 요청 스레드가 쓰기 잠금이 해제되기를 기다리는 동안 API 응답 시간이 길어집니다. 로드 된 모델을 최신 상태로 유지하는 더 나은 방법을 제안 해 주시겠습니까?Golang 앱 서버에서 리로드 텐서 흐름 모델
tags := []string{"serve"}
// load from updated saved model
var m *tensorflow.SavedModel
var err error
m, err = tensorflow.LoadSavedModel("/path/to/model", tags, nil)
if err != nil {
log.Errorf("Exception caught while reloading saved model %v", err)
destroyTFModel(m)
}
if err == nil {
ModelLoadMutex.Lock()
defer ModelLoadMutex.Unlock()
// destroy existing model
destroyTFModel(TensorModel)
TensorModel = m
}
모델을 사용하여 코드 (API 요청의 일부) :
config.ModelLoadMutex.RLock()
defer config.ModelLoadMutex.RUnlock()
scoreTensorList, err = TensorModel.Session.Run(map[tensorflow.Output]*tensorflow.Tensor{
UserOp.Output(0): uT,
DataOp.Output(0): nT},
[]tensorflow.Output{config.SumOp.Output(0)},
nil,
)
질문을 수정하십시오 ** 코드 ** – nessuno
15 분마다 모델을 다시로드해야하는 이유는 무엇입니까? 그냥 메모리에로드하여 필요할 때 사용할 수는 없습니까? – nessuno
모델이 지속적으로 교육되고 있습니다. 그리고 최신 모델을 언제든지 사용할 수 있어야합니다. Thats 왜이 해킹. 이것은 생산 환경에서 텐서 흐름을 시도한 첫 번째 시도이므로 신참 실수를 저지르고있을 수도 있습니다. 내가이 질문을 한 이래로, 우리는 또한 현재 진행중인 과제에 가장 적합한 것으로 보이는 텐서 플로우 - 서브를 탐구했다. – zingler