|
|
|
@@ -19,6 +19,8 @@ const ( |
|
|
|
Model_prefix = "aimodels/" |
|
|
|
tplModelManageIndex = "repo/modelmanage/index" |
|
|
|
tplModelManageDownload = "repo/modelmanage/download" |
|
|
|
MODEL_LATEST = 1 |
|
|
|
MODEL_NOT_LATEST = 0 |
|
|
|
) |
|
|
|
|
|
|
|
func SaveModelByParameters(jobId string, name string, version string, label string, description string, userId int64) error { |
|
|
|
@@ -31,16 +33,16 @@ func SaveModelByParameters(jobId string, name string, version string, label stri |
|
|
|
uuid := uuid.NewV4() |
|
|
|
id := uuid.String() |
|
|
|
modelPath := id |
|
|
|
parent := id |
|
|
|
var lastNewModelId string |
|
|
|
var modelSize int64 |
|
|
|
cloudType := models.TypeCloudBrainTwo |
|
|
|
|
|
|
|
log.Info("find task name:" + aiTask.JobName) |
|
|
|
aimodels := models.QueryModelByName(name, userId) |
|
|
|
aimodels := models.QueryModelByName(name, aiTask.RepoID) |
|
|
|
if len(aimodels) > 0 { |
|
|
|
for _, model := range aimodels { |
|
|
|
if model.ID == model.Parent { |
|
|
|
parent = model.ID |
|
|
|
if model.New == MODEL_LATEST { |
|
|
|
lastNewModelId = model.ID |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
@@ -60,7 +62,7 @@ func SaveModelByParameters(jobId string, name string, version string, label stri |
|
|
|
Label: label, |
|
|
|
Name: name, |
|
|
|
Description: description, |
|
|
|
Parent: parent, |
|
|
|
New: MODEL_LATEST, |
|
|
|
Type: cloudType, |
|
|
|
Path: modelPath, |
|
|
|
Size: modelSize, |
|
|
|
@@ -71,6 +73,11 @@ func SaveModelByParameters(jobId string, name string, version string, label stri |
|
|
|
|
|
|
|
models.SaveModelToDb(model) |
|
|
|
|
|
|
|
if len(lastNewModelId) > 0 { |
|
|
|
//udpate status |
|
|
|
models.ModifyModelNewProperty(lastNewModelId, MODEL_NOT_LATEST) |
|
|
|
} |
|
|
|
|
|
|
|
log.Info("save model end.") |
|
|
|
|
|
|
|
return nil |
|
|
|
@@ -96,9 +103,7 @@ func SaveModel(ctx *context.Context) { |
|
|
|
} |
|
|
|
|
|
|
|
func downloadModelFromCloudBrainTwo(modelUUID string, jobName string, parentDir string) (string, int64, error) { |
|
|
|
dataActualPath := setting.Bucket + "/" + Model_prefix + |
|
|
|
models.AttachmentRelativePath(modelUUID) + |
|
|
|
"/" |
|
|
|
|
|
|
|
objectkey := strings.TrimPrefix(path.Join(setting.TrainJobModelPath, jobName, setting.OutPutPath, parentDir), "/") |
|
|
|
modelDbResult, err := storage.GetAllObsListObjectUnderDir(setting.Bucket, objectkey) |
|
|
|
if err != nil { |
|
|
|
@@ -108,25 +113,28 @@ func downloadModelFromCloudBrainTwo(modelUUID string, jobName string, parentDir |
|
|
|
if len(modelDbResult) == 0 { |
|
|
|
return "", 0, errors.New("cannot create model, as model is empty.") |
|
|
|
} |
|
|
|
var size int64 |
|
|
|
prefix := strings.TrimPrefix(path.Join(setting.TrainJobModelPath, jobName, setting.OutPutPath, parentDir), "/") + "/" |
|
|
|
|
|
|
|
prefix := objectkey + "/" |
|
|
|
destKeyNamePrefix := Model_prefix + models.AttachmentRelativePath(modelUUID) + "/" |
|
|
|
for _, modelFile := range modelDbResult { |
|
|
|
if modelFile.IsDir { |
|
|
|
log.Info("copy dir, continue. dir=" + modelFile.FileName) |
|
|
|
continue |
|
|
|
} |
|
|
|
srcKeyName := prefix + modelFile.ParenDir + modelFile.FileName |
|
|
|
log.Info("copy file, bucket=" + setting.Bucket + ", src keyname=" + srcKeyName) |
|
|
|
destKeyName := destKeyNamePrefix + modelFile.ParenDir + modelFile.FileName |
|
|
|
log.Info("Dest key name=" + destKeyName) |
|
|
|
err := storage.ObsCopyFile(setting.Bucket, srcKeyName, setting.Bucket, destKeyName) |
|
|
|
if err != nil { |
|
|
|
log.Info("copy failed.") |
|
|
|
} |
|
|
|
size += modelFile.Size |
|
|
|
} |
|
|
|
|
|
|
|
size, err := storage.ObsCopyManyFile(setting.Bucket, prefix, setting.Bucket, destKeyNamePrefix) |
|
|
|
|
|
|
|
// for _, modelFile := range modelDbResult { |
|
|
|
// if modelFile.IsDir { |
|
|
|
// log.Info("copy dir, continue. dir=" + modelFile.FileName) |
|
|
|
// continue |
|
|
|
// } |
|
|
|
// srcKeyName := prefix + modelFile.FileName |
|
|
|
// log.Info("copy file, bucket=" + setting.Bucket + ", src keyname=" + srcKeyName) |
|
|
|
// destKeyName := destKeyNamePrefix + modelFile.FileName |
|
|
|
// log.Info("Dest key name=" + destKeyName) |
|
|
|
// err := storage.ObsCopyFile(setting.Bucket, srcKeyName, setting.Bucket, destKeyName) |
|
|
|
// if err != nil { |
|
|
|
// log.Info("copy failed.") |
|
|
|
// } |
|
|
|
// size += modelFile.Size |
|
|
|
// } |
|
|
|
dataActualPath := setting.Bucket + "/" + destKeyNamePrefix |
|
|
|
return dataActualPath, size, nil |
|
|
|
} |
|
|
|
|
|
|
|
@@ -156,8 +164,15 @@ func DeleteModelByID(id string) error { |
|
|
|
return err |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
return models.DeleteModelById(id) |
|
|
|
err = models.DeleteModelById(id) |
|
|
|
if err == nil { //find a model to change new |
|
|
|
if model.New == MODEL_LATEST { |
|
|
|
aimodels := models.QueryModelByName(model.Name, model.RepoId) |
|
|
|
if len(aimodels) > 0 { |
|
|
|
models.ModifyModelNewProperty(aimodels[0].ID, MODEL_LATEST) |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
return err |
|
|
|
} |
|
|
|
@@ -175,6 +190,7 @@ func QueryModelByParameters(repoId int64, page int) ([]*models.AiModelManage, in |
|
|
|
}, |
|
|
|
RepoID: repoId, |
|
|
|
Type: -1, |
|
|
|
New: MODEL_LATEST, |
|
|
|
}) |
|
|
|
} |
|
|
|
|
|
|
|
@@ -221,6 +237,17 @@ func ShowSingleModel(ctx *context.Context) { |
|
|
|
ctx.HTML(200, tplModelManageDownload) |
|
|
|
} |
|
|
|
|
|
|
|
func ShowOneVersionOtherModel(ctx *context.Context) { |
|
|
|
repoId := ctx.Repo.Repository.ID |
|
|
|
name := ctx.Query("name") |
|
|
|
aimodels := models.QueryModelByName(name, repoId) |
|
|
|
if len(aimodels) > 0 { |
|
|
|
ctx.JSON(200, aimodels[1:]) |
|
|
|
} else { |
|
|
|
ctx.JSON(200, aimodels) |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
func ShowModelPageInfo(ctx *context.Context) { |
|
|
|
log.Info("ShowModelInfo start.") |
|
|
|
|
|
|
|
@@ -237,6 +264,7 @@ func ShowModelPageInfo(ctx *context.Context) { |
|
|
|
}, |
|
|
|
RepoID: repoId, |
|
|
|
Type: Type, |
|
|
|
New: MODEL_LATEST, |
|
|
|
}) |
|
|
|
if err != nil { |
|
|
|
ctx.ServerError("Cloudbrain", err) |
|
|
|
@@ -250,7 +278,6 @@ func ShowModelPageInfo(ctx *context.Context) { |
|
|
|
ctx.Data["Tasks"] = modelResult |
|
|
|
|
|
|
|
ctx.HTML(200, tplModelManageIndex) |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
func ModifyModel(id string, description string) error { |
|
|
|
|