| @@ -1,9 +1,11 @@ | |||
| package repo | |||
| import ( | |||
| "bufio" | |||
| "encoding/json" | |||
| "errors" | |||
| "fmt" | |||
| "io" | |||
| "io/ioutil" | |||
| "os" | |||
| "strings" | |||
| @@ -11,6 +13,7 @@ import ( | |||
| "code.gitea.io/gitea/models" | |||
| "code.gitea.io/gitea/modules/cloudbrain" | |||
| "code.gitea.io/gitea/modules/context" | |||
| "code.gitea.io/gitea/modules/git" | |||
| "code.gitea.io/gitea/modules/log" | |||
| "code.gitea.io/gitea/modules/modelarts" | |||
| "code.gitea.io/gitea/modules/setting" | |||
| @@ -36,6 +39,8 @@ const ( | |||
| PytorchBootFile = "convert_pytorch.py" | |||
| MindsporeBootFile = "convert_mindspore.py" | |||
| ConvertRepoPath = "https://git.openi.org.cn/zouap/npu_test" | |||
| REPO_ID = 33267 | |||
| ) | |||
| @@ -105,7 +110,6 @@ func SaveModelConvert(ctx *context.Context) { | |||
| } | |||
| func createNpuTrainJob(modelConvert *models.AiModelConvert, ctx *context.Context, modelRelativePath string) { | |||
| repo, _ := models.GetRepositoryByID(REPO_ID) | |||
| VersionOutputPath := "V0001" | |||
| codeLocalPath := setting.JobPath + modelConvert.ID + modelarts.CodePath | |||
| codeObsPath := "/" + setting.Bucket + modelarts.JobPath + modelConvert.ID + modelarts.CodePath | |||
| @@ -117,20 +121,20 @@ func createNpuTrainJob(modelConvert *models.AiModelConvert, ctx *context.Context | |||
| if err == nil { | |||
| os.RemoveAll(codeLocalPath) | |||
| } | |||
| if err := downloadCode(repo, codeLocalPath, DefaultBranchName); err != nil { | |||
| log.Error("downloadCode failed, server timed out: %s (%v)", repo.FullName(), err) | |||
| if err := downloadConvertCode(ConvertRepoPath, codeLocalPath, DefaultBranchName); err != nil { | |||
| log.Error("downloadCode failed, server timed out: %s (%v)", ConvertRepoPath, err) | |||
| return | |||
| } | |||
| if err := obsMkdir(setting.CodePathPrefix + modelConvert.ID + modelarts.OutputPath + VersionOutputPath + "/"); err != nil { | |||
| log.Error("Failed to obsMkdir_output: %s (%v)", repo.FullName(), err) | |||
| log.Error("Failed to obsMkdir_output: %s (%v)", modelConvert.ID+modelarts.OutputPath, err) | |||
| return | |||
| } | |||
| if err := obsMkdir(setting.CodePathPrefix + modelConvert.ID + modelarts.LogPath + VersionOutputPath + "/"); err != nil { | |||
| log.Error("Failed to obsMkdir_log: %s (%v)", repo.FullName(), err) | |||
| log.Error("Failed to obsMkdir_log: %s (%v)", modelConvert.ID+modelarts.LogPath, err) | |||
| return | |||
| } | |||
| if err := uploadCodeToObs(codeLocalPath, modelConvert.ID, ""); err != nil { | |||
| log.Error("Failed to uploadCodeToObs: %s (%v)", repo.FullName(), err) | |||
| log.Error("Failed to uploadCodeToObs: %s (%v)", modelConvert.ID, err) | |||
| return | |||
| } | |||
| intputshape := strings.Split(modelConvert.InputShape, ",") | |||
| @@ -195,8 +199,56 @@ func createNpuTrainJob(modelConvert *models.AiModelConvert, ctx *context.Context | |||
| models.UpdateModelConvertCBTI(modelConvert.ID, fmt.Sprint(result.JobID)) | |||
| } | |||
| func downloadConvertCode(repopath string, codePath, branchName string) error { | |||
| //add "file:///" prefix to make the depth valid | |||
| if err := git.Clone(repopath, codePath, git.CloneRepoOptions{Branch: branchName, Depth: 1}); err != nil { | |||
| log.Error("Failed to clone repository: %s (%v)", repopath, err) | |||
| return err | |||
| } | |||
| log.Info("srcPath=" + repopath + " codePath=" + codePath) | |||
| configFile, err := os.OpenFile(codePath+"/.git/config", os.O_RDWR, 0666) | |||
| if err != nil { | |||
| log.Error("open file(%s) failed:%v", codePath+"/,git/config", err) | |||
| return err | |||
| } | |||
| defer configFile.Close() | |||
| pos := int64(0) | |||
| reader := bufio.NewReader(configFile) | |||
| for { | |||
| line, err := reader.ReadString('\n') | |||
| if err != nil { | |||
| if err == io.EOF { | |||
| log.Error("not find the remote-url") | |||
| return nil | |||
| } else { | |||
| log.Error("read error: %v", err) | |||
| return err | |||
| } | |||
| } | |||
| if strings.Contains(line, "url") && strings.Contains(line, ".git") { | |||
| originUrl := "\turl = " + repopath + "\n" | |||
| if len(line) > len(originUrl) { | |||
| originUrl += strings.Repeat(" ", len(line)-len(originUrl)) | |||
| } | |||
| bytes := []byte(originUrl) | |||
| _, err := configFile.WriteAt(bytes, pos) | |||
| if err != nil { | |||
| log.Error("WriteAt failed:%v", err) | |||
| return err | |||
| } | |||
| break | |||
| } | |||
| pos += int64(len(line)) | |||
| } | |||
| return nil | |||
| } | |||
| func createGpuTrainJob(modelConvert *models.AiModelConvert, ctx *context.Context, modelRelativePath string) error { | |||
| repo, _ := models.GetRepositoryByID(REPO_ID) | |||
| command := "" | |||
| if modelConvert.SrcEngine == PYTORCH_ENGINE { | |||
| command = getPytorchModelConvertCommand(modelConvert.ID, modelConvert.ModelPath, modelConvert) | |||
| @@ -204,7 +256,7 @@ func createGpuTrainJob(modelConvert *models.AiModelConvert, ctx *context.Context | |||
| log.Info("command=" + command) | |||
| codePath := setting.JobPath + modelConvert.ID + CodeMountPath | |||
| downloadCode(repo, codePath, DefaultBranchName) | |||
| downloadConvertCode(ConvertRepoPath, codePath, DefaultBranchName) | |||
| uploadCodeToMinio(codePath+"/", modelConvert.ID, CodeMountPath+"/") | |||