Browse Source

debug

fix-2419
lewis 3 years ago
parent
commit
96e0d00d80
7 changed files with 110 additions and 120 deletions
  1. +5
    -5
      modules/cloudbrain/cloudbrain.go
  2. +2
    -3
      routers/api/v1/api.go
  3. +55
    -58
      routers/api/v1/repo/modelarts.go
  4. +16
    -22
      routers/repo/modelarts.go
  5. +7
    -7
      routers/routes/routes.go
  6. +7
    -7
      templates/repo/modelarts/trainjob/index.tmpl
  7. +18
    -18
      templates/repo/modelarts/trainjob/show.tmpl

+ 5
- 5
modules/cloudbrain/cloudbrain.go View File

@@ -142,8 +142,8 @@ func isAdminOrImageCreater(ctx *context.Context, image *models.Image, err error)

func AdminOrOwnerOrJobCreaterRight(ctx *context.Context) {

var ID = ctx.Params(":id")
job, err := models.GetCloudbrainByID(ID)
var id = ctx.Params(":id")
job, err := models.GetCloudbrainByID(id)
if err != nil {
log.Error("GetCloudbrainByID failed:%v", err.Error())
ctx.NotFound(ctx.Req.URL.RequestURI(), nil)
@@ -158,8 +158,8 @@ func AdminOrOwnerOrJobCreaterRight(ctx *context.Context) {

func AdminOrJobCreaterRight(ctx *context.Context) {

var ID = ctx.Params(":id")
job, err := models.GetCloudbrainByID(ID)
var id = ctx.Params(":id")
job, err := models.GetCloudbrainByID(id)
if err != nil {
log.Error("GetCloudbrainByID failed:%v", err.Error())
ctx.NotFound(ctx.Req.URL.RequestURI(), nil)
@@ -547,7 +547,7 @@ func RestartTask(ctx *context.Context, task *models.Cloudbrain, newID *string) e
GPUNumber: resourceSpec.GpuNum,
MemoryMB: resourceSpec.MemMiB,
ShmMB: resourceSpec.ShareMemMiB,
Command: GetCloudbrainDebugCommand(),//Command,
Command: GetCloudbrainDebugCommand(), //Command,
NeedIBDevice: false,
IsMainRole: false,
UseNNI: false,


+ 2
- 3
routers/api/v1/api.go View File

@@ -938,11 +938,10 @@ func RegisterRoutes(m *macaron.Macaron) {
}, reqRepoReader(models.UnitTypeModelManage))
m.Group("/modelarts", func() {
m.Group("/notebook", func() {
//m.Get("/:jobid", repo.GetModelArtsNotebook)
m.Get("/:id", repo.GetModelArtsNotebook2)
})
m.Group("/train-job", func() {
m.Group("/:jobid", func() {
m.Group("/:id", func() {
m.Get("", repo.GetModelArtsTrainJobVersion)
m.Get("/log", repo.TrainJobGetLog)
m.Post("/del_version", repo.DelTrainJobVersion)
@@ -952,7 +951,7 @@ func RegisterRoutes(m *macaron.Macaron) {
})
})
m.Group("/inference-job", func() {
m.Group("/:jobid", func() {
m.Group("/:id", func() {
m.Get("", repo.GetModelArtsInferenceJob)
m.Get("/log", repo.TrainJobGetLog)
m.Post("/del_version", repo.DelTrainJobVersion)


+ 55
- 58
routers/api/v1/repo/modelarts.go View File

@@ -30,8 +30,8 @@ func GetModelArtsNotebook2(ctx *context.APIContext) {
err error
)

ID := ctx.Params(":id")
job, err := models.GetCloudbrainByID(ID)
id := ctx.Params(":id")
job, err := models.GetCloudbrainByID(id)
if err != nil {
ctx.NotFound(err)
return
@@ -43,7 +43,7 @@ func GetModelArtsNotebook2(ctx *context.APIContext) {
}

ctx.JSON(http.StatusOK, map[string]interface{}{
"ID": ID,
"ID": id,
"JobName": job.JobName,
"JobStatus": job.Status,
})
@@ -56,9 +56,8 @@ func GetModelArtsTrainJobVersion(ctx *context.APIContext) {
aiCenterName string
)

jobID := ctx.Params(":jobid")
versionName := ctx.Query("version_name")
job, err := models.GetCloudbrainByJobIDAndVersionName(jobID, versionName)
id := ctx.Params(":id")
job, err := models.GetCloudbrainByID(id)
if err != nil {
ctx.NotFound(err)
return
@@ -102,7 +101,7 @@ func GetModelArtsTrainJobVersion(ctx *context.APIContext) {
return
}
} else if job.Type == models.TypeC2Net {
result, err := grampus.GetJob(jobID)
result, err := grampus.GetJob(job.JobID)
if err != nil {
log.Error("GetJob(%s) failed:%v", job.JobName, err)
ctx.NotFound(err)
@@ -141,7 +140,8 @@ func GetModelArtsTrainJobVersion(ctx *context.APIContext) {
}

ctx.JSON(http.StatusOK, map[string]interface{}{
"JobID": jobID,
"JobID": job.JobID,
"ID": id,
"JobStatus": job.Status,
"JobDuration": job.TrainJobDuration,
"AiCenter": aiCenterName,
@@ -223,7 +223,7 @@ func TrainJobGetLog(ctx *context.APIContext) {
err error
)

var jobID = ctx.Params(":jobid")
var id = ctx.Params(":id")
var versionName = ctx.Query("version_name")
var baseLine = ctx.Query("base_line")
var order = ctx.Query("order")
@@ -241,14 +241,14 @@ func TrainJobGetLog(ctx *context.APIContext) {
return
}

task, err := models.GetCloudbrainByJobIDAndVersionName(jobID, versionName)
task, err := models.GetCloudbrainByID(id)
if err != nil {
log.Error("GetCloudbrainByJobID(%s) failed:%v", jobID, err.Error())
log.Error("GetCloudbrainByJobID(%s) failed:%v", id, err.Error())
return
}
resultLogFile, result, err := trainJobGetLogContent(jobID, task.VersionID, baseLine, order, lines_int)
resultLogFile, result, err := trainJobGetLogContent(task.JobID, task.VersionID, baseLine, order, lines_int)
if err != nil {
log.Error("trainJobGetLog(%s) failed:%v", jobID, err.Error())
log.Error("trainJobGetLog(%s) failed:%v", task.JobID, err.Error())
// ctx.RenderWithErr(err.Error(), tplModelArtsTrainJobShow, nil)
return
}
@@ -265,7 +265,7 @@ func TrainJobGetLog(ctx *context.APIContext) {
ctx.Data["log_file_name"] = resultLogFile.LogFileList[0]

ctx.JSON(http.StatusOK, map[string]interface{}{
"JobID": jobID,
"ID": id,
"LogFileName": resultLogFile.LogFileList[0],
"StartLine": result.StartLine,
"EndLine": result.EndLine,
@@ -297,17 +297,16 @@ func DelTrainJobVersion(ctx *context.APIContext) {
err error
)

var jobID = ctx.Params(":jobid")
var versionName = ctx.Query("version_name")
task, err := models.GetCloudbrainByJobIDAndVersionName(jobID, versionName)
var id = ctx.Params(":id")
task, err := models.GetCloudbrainByID(id)
if err != nil {
log.Error("GetCloudbrainByJobID(%s) failed:%v", task.JobName, err.Error())
log.Error("GetCloudbrainByID(%s) failed:%v", id, err.Error())
ctx.NotFound(err)
return
}

//删除modelarts上的记录
_, err = modelarts.DelTrainJobVersion(jobID, strconv.FormatInt(task.VersionID, 10))
_, err = modelarts.DelTrainJobVersion(task.JobID, strconv.FormatInt(task.VersionID, 10))
if err != nil {
log.Error("DelTrainJobVersion(%s) failed:%v", task.JobName, err.Error())
ctx.NotFound(err)
@@ -330,7 +329,7 @@ func DelTrainJobVersion(ctx *context.APIContext) {
RepoID: repo.ID,
Type: models.TypeCloudBrainTwo,
JobTypes: jobTypes,
JobID: jobID,
JobID: task.JobID,
})
if err != nil {
ctx.ServerError("get VersionListCount failed", err)
@@ -356,8 +355,8 @@ func DelTrainJobVersion(ctx *context.APIContext) {
}

ctx.JSON(http.StatusOK, map[string]interface{}{
"JobID": jobID,
"VersionName": versionName,
"ID": id,
"VersionName": task.VersionName,
"StatusOK": 0,
"VersionListCount": VersionListCount,
})
@@ -367,23 +366,23 @@ func StopTrainJobVersion(ctx *context.APIContext) {
var (
err error
)
var jobID = ctx.Params(":jobid")
var versionName = ctx.Query("version_name")
task, err := models.GetCloudbrainByJobIDAndVersionName(jobID, versionName)
var id = ctx.Params(":id")
task, err := models.GetCloudbrainByID(id)
if err != nil {
log.Error("GetCloudbrainByJobID(%s) failed:%v", task.JobName, err.Error())
log.Error("GetCloudbrainByID(%s) failed:%v", id, err.Error())
ctx.NotFound(err)
return
}

_, err = modelarts.StopTrainJob(jobID, strconv.FormatInt(task.VersionID, 10))
_, err = modelarts.StopTrainJob(task.JobID, strconv.FormatInt(task.VersionID, 10))
if err != nil {
log.Error("StopTrainJob(%s) failed:%v", task.JobName, err.Error())
return
}

ctx.JSON(http.StatusOK, map[string]interface{}{
"JobID": jobID,
"VersionName": versionName,
"ID": id,
"VersionName": task.VersionName,
"StatusOK": 0,
})
}
@@ -393,19 +392,19 @@ func ModelList(ctx *context.APIContext) {
err error
)

var jobID = ctx.Params(":jobid")
var versionName = ctx.Query("version_name")
parentDir := ctx.Query("parentDir")
dirArray := strings.Split(parentDir, "/")
task, err := models.GetCloudbrainByJobIDAndVersionName(jobID, versionName)
var id = ctx.Params(":id")
task, err := models.GetCloudbrainByID(id)
if err != nil {
log.Error("GetCloudbrainByJobID(%s) failed:%v", task.JobName, err.Error())
log.Error("GetCloudbrainByID(%s) failed:%v", id, err.Error())
ctx.NotFound(err)
return
}

var fileInfos []storage.FileInfo
if task.ComputeResource == models.NPUResource {
fileInfos, err = storage.GetObsListObject(task.JobName, "output/", parentDir, versionName)
fileInfos, err = storage.GetObsListObject(task.JobName, "output/", parentDir, task.VersionName)
if err != nil {
log.Info("get TrainJobListModel failed:", err)
ctx.ServerError("GetObsListObject:", err)
@@ -428,8 +427,8 @@ func ModelList(ctx *context.APIContext) {
}

ctx.JSON(http.StatusOK, map[string]interface{}{
"JobID": jobID,
"VersionName": versionName,
"ID": id,
"VersionName": task.VersionName,
"StatusOK": 0,
"Path": dirArray,
"Dirs": fileInfos,
@@ -443,8 +442,8 @@ func GetModelArtsInferenceJob(ctx *context.APIContext) {
err error
)

jobID := ctx.Params(":jobid")
job, err := models.GetCloudbrainByJobID(jobID)
id := ctx.Params(":id")
job, err := models.GetCloudbrainByID(id)
if err != nil {
ctx.NotFound(err)
return
@@ -456,7 +455,7 @@ func GetModelArtsInferenceJob(ctx *context.APIContext) {
}

ctx.JSON(http.StatusOK, map[string]interface{}{
"JobID": jobID,
"ID": id,
"JobStatus": job.Status,
"JobDuration": job.TrainJobDuration,
})
@@ -468,16 +467,15 @@ func ResultList(ctx *context.APIContext) {
err error
)

var jobID = ctx.Params(":jobid")
var versionName = ctx.Query("version_name")
var id = ctx.Params(":id")
parentDir := ctx.Query("parentDir")
dirArray := strings.Split(parentDir, "/")
task, err := models.GetCloudbrainByJobIDAndVersionName(jobID, versionName)
task, err := models.GetCloudbrainByID(id)
if err != nil {
log.Error("GetCloudbrainByJobID(%s) failed:%v", task.JobName, err.Error())
log.Error("GetCloudbrainByID(%s) failed:%v", id, err.Error())
return
}
models, err := storage.GetObsListObject(task.JobName, "result/", parentDir, versionName)
models, err := storage.GetObsListObject(task.JobName, "result/", parentDir, task.VersionName)
if err != nil {
log.Info("get TrainJobListModel failed:", err)
ctx.ServerError("GetObsListObject:", err)
@@ -485,8 +483,8 @@ func ResultList(ctx *context.APIContext) {
}

ctx.JSON(http.StatusOK, map[string]interface{}{
"JobID": jobID,
"VersionName": versionName,
"ID": id,
"VersionName": task.VersionName,
"StatusOK": 0,
"Path": dirArray,
"Dirs": models,
@@ -500,38 +498,37 @@ func TrainJobGetMetricStatistic(ctx *context.APIContext) {
err error
)

var jobID = ctx.Params(":jobid")
var versionName = ctx.Query("version_name")
var id = ctx.Params(":id")

result, err := trainJobGetMetricStatistic(jobID, versionName)
result, err := trainJobGetMetricStatistic(id)
if err != nil {
log.Error("trainJobGetMetricStatistic(%s) failed:%v", jobID, err.Error())
log.Error("trainJobGetMetricStatistic(%s) failed:%v", id, err.Error())
return
}

ctx.JSON(http.StatusOK, map[string]interface{}{
"JobID": jobID,
"ID": id,
"Interval": result.Interval,
"MetricsInfo": result.MetricsInfo,
})
}

func trainJobGetMetricStatistic(jobID string, versionName string) (*models.GetTrainJobMetricStatisticResult, error) {
task, err := models.GetCloudbrainByJobIDAndVersionName(jobID, versionName)
func trainJobGetMetricStatistic(id string) (*models.GetTrainJobMetricStatisticResult, error) {
task, err := models.GetCloudbrainByID(id)
if err != nil {
log.Error("GetCloudbrainByJobIDAndVersionName(%s) failed:%v", jobID, err.Error())
log.Error("GetCloudbrainByID(%s) failed:%v", id, err.Error())
return nil, err
}

resultLogFile, err := modelarts.GetTrainJobLogFileNames(jobID, strconv.FormatInt(task.VersionID, 10))
resultLogFile, err := modelarts.GetTrainJobLogFileNames(task.JobID, strconv.FormatInt(task.VersionID, 10))
if err != nil {
log.Error("GetTrainJobLogFileNames(%s) failed:%v", jobID, err.Error())
log.Error("GetTrainJobLogFileNames(%s) failed:%v", task.JobID, err.Error())
return nil, err
}

result, err := modelarts.GetTrainJobMetricStatistic(jobID, strconv.FormatInt(task.VersionID, 10), resultLogFile.LogFileList[0])
result, err := modelarts.GetTrainJobMetricStatistic(task.JobID, strconv.FormatInt(task.VersionID, 10), resultLogFile.LogFileList[0])
if err != nil {
log.Error("GetTrainJobMetricStatistic(%s) failed:%v", jobID, err.Error())
log.Error("GetTrainJobMetricStatistic(%s) failed:%v", task.JobID, err.Error())
return nil, err
}



+ 16
- 22
routers/repo/modelarts.go View File

@@ -1266,7 +1266,7 @@ func getUserCommand(engineId int, req *modelarts.GenerateTrainJobReq) (string, s

func TrainJobCreateVersion(ctx *context.Context, form auth.CreateModelArtsTrainJobForm) {
ctx.Data["PageIsTrainJob"] = true
var jobID = ctx.Params(":jobid")
var jobID = ctx.Cloudbrain.JobID

count, err := models.GetCloudbrainTrainJobCountByUserID(ctx.User.ID)
if err != nil {
@@ -1638,7 +1638,13 @@ func paramCheckCreateInferenceJob(form auth.CreateModelArtsInferenceJobForm) err

func TrainJobShow(ctx *context.Context) {
ctx.Data["PageIsCloudBrain"] = true
var jobID = ctx.Params(":jobid")
var id = ctx.Params(":id")

job, err := models.GetCloudbrainByID(id)
if err != nil {
log.Error("GetCloudbrainByID failed:%v", err.Error())
ctx.NotFound(ctx.Req.URL.RequestURI(), nil)
}

repo := ctx.Repo.Repository
page := ctx.QueryInt("page")
@@ -1656,11 +1662,11 @@ func TrainJobShow(ctx *context.Context) {
RepoID: repo.ID,
Type: models.TypeCloudBrainTwo,
JobTypes: jobTypes,
JobID: jobID,
JobID: job.JobID,
})

if err != nil {
log.Error("GetVersionListTasks(%s) failed:%v", jobID, err.Error())
log.Error("GetVersionListTasks(%s) failed:%v", job.DisplayJobName, err.Error())
ctx.RenderWithErr(err.Error(), tplModelArtsTrainJobShow, nil)
return
}
@@ -1702,7 +1708,7 @@ func TrainJobShow(ctx *context.Context) {
pager := context.NewPagination(VersionListCount, setting.UI.IssuePagingNum, page, 5)
pager.SetDefaultParams(ctx)
ctx.Data["Page"] = pager
ctx.Data["jobID"] = jobID
ctx.Data["jobID"] = job.JobID
ctx.Data["displayJobName"] = VersionListTasks[0].DisplayJobName
ctx.Data["version_list_task"] = VersionListTasks
ctx.Data["version_list_count"] = VersionListCount
@@ -1765,7 +1771,7 @@ func trainJobGetLog(jobID string) (*models.GetTrainJobLogFileNamesResult, *model
}

func TrainJobDel(ctx *context.Context) {
var jobID = ctx.Params(":jobid")
var jobID = ctx.Cloudbrain.JobID
var listType = ctx.Query("listType")
repo := ctx.Repo.Repository

@@ -1816,11 +1822,10 @@ func TrainJobDel(ctx *context.Context) {
}

func TrainJobStop(ctx *context.Context) {
var jobID = ctx.Params(":jobid")
var listType = ctx.Query("listType")
task := ctx.Cloudbrain

_, err := modelarts.StopTrainJob(jobID, strconv.FormatInt(task.VersionID, 10))
_, err := modelarts.StopTrainJob(task.JobID, strconv.FormatInt(task.VersionID, 10))
if err != nil {
log.Error("StopTrainJob(%s) failed:%v", task.JobName, err.Error())
ctx.RenderWithErr(err.Error(), tplModelArtsTrainJobIndex, nil)
@@ -2369,15 +2374,10 @@ func ModelDownload(ctx *context.Context) {
err error
)

jobID := ctx.Params(":jobid")
versionName := ctx.Query("version_name")
parentDir := ctx.Query("parent_dir")
fileName := ctx.Query("file_name")
task, err := models.GetCloudbrainByJobIDAndVersionName(jobID, versionName)
if err != nil {
log.Error("GetCloudbrainByJobIDAndVersionName(%s) failed:%v", task.JobName, err.Error())
return
}
task := ctx.Cloudbrain

var url string
if task.ComputeResource == models.NPUResource {
@@ -2527,19 +2527,13 @@ func TrainJobDownloadLogFile(ctx *context.Context) {
err error
)

var jobID = ctx.Params(":jobid")
versionName := ctx.Query("version_name")
task, err := models.GetCloudbrainByJobIDAndVersionName(jobID, versionName)
if err != nil {
log.Error("GetCloudbrainByJobIDAndVersionName(%s) failed:%v", task.JobName, err.Error(), ctx.Data["msgID"])
ctx.ServerError("GetCloudbrainByJobIDAndVersionName", err)
return
}
task := ctx.Cloudbrain

prefix := strings.TrimPrefix(path.Join(setting.TrainJobModelPath, task.JobName, modelarts.LogPath, versionName), "/") + "/job"
key, err := storage.GetObsLogFileName(prefix)
if err != nil {
log.Error("GetObsLogFileName(%s) failed:%v", jobID, err.Error(), ctx.Data["msgID"])
log.Error("GetObsLogFileName(%s) failed:%v", task.DisplayJobName, err.Error(), ctx.Data["msgID"])
ctx.ServerError("GetObsLogFileName", err)
return
}


+ 7
- 7
routers/routes/routes.go View File

@@ -1192,14 +1192,14 @@ func RegisterRoutes(m *macaron.Macaron) {

m.Group("/train-job", func() {
m.Get("", reqRepoCloudBrainReader, repo.TrainJobIndex)
m.Group("/:jobid", func() {
m.Group("/:id", func() {
m.Get("", reqRepoCloudBrainReader, repo.TrainJobShow)
m.Post("/stop", cloudbrain.AdminOrOwnerOrJobCreaterRightForTrain, repo.TrainJobStop)
m.Post("/del", cloudbrain.AdminOrOwnerOrJobCreaterRightForTrain, repo.TrainJobDel)
m.Get("/model_download", cloudbrain.AdminOrJobCreaterRightForTrain, repo.ModelDownload)
m.Get("/download_log_file", cloudbrain.AdminOrJobCreaterRightForTrain, repo.TrainJobDownloadLogFile)
m.Get("/create_version", reqWechatBind, cloudbrain.AdminOrJobCreaterRightForTrain, repo.TrainJobNewVersion)
m.Post("/create_version", reqWechatBind, cloudbrain.AdminOrJobCreaterRightForTrain, bindIgnErr(auth.CreateModelArtsTrainJobForm{}), repo.TrainJobCreateVersion)
m.Post("/stop", cloudbrain.AdminOrOwnerOrJobCreaterRight, repo.TrainJobStop)
m.Post("/del", cloudbrain.AdminOrOwnerOrJobCreaterRight, repo.TrainJobDel)
m.Get("/model_download", cloudbrain.AdminOrJobCreaterRight, repo.ModelDownload)
m.Get("/download_log_file", cloudbrain.AdminOrJobCreaterRight, repo.TrainJobDownloadLogFile)
m.Get("/create_version", reqWechatBind, cloudbrain.AdminOrJobCreaterRight, repo.TrainJobNewVersion)
m.Post("/create_version", reqWechatBind, cloudbrain.AdminOrJobCreaterRight, bindIgnErr(auth.CreateModelArtsTrainJobForm{}), repo.TrainJobCreateVersion)
})
m.Get("/create", reqWechatBind, reqRepoCloudBrainWriter, repo.TrainJobNew)
m.Post("/create", reqWechatBind, reqRepoCloudBrainWriter, bindIgnErr(auth.CreateModelArtsTrainJobForm{}), repo.TrainJobCreate)


+ 7
- 7
templates/repo/modelarts/trainjob/index.tmpl View File

@@ -112,7 +112,7 @@

<!-- 任务名 -->
<div class="three wide column padding0">
<a class="title" href='{{if eq .Cloudbrain.Type 1 }}{{$.Link}}/{{.JobID}}{{else if eq .Cloudbrain.Type 0}}{{$.RepoLink}}/cloudbrain/train-job/{{.JobID}}{{else if eq .Cloudbrain.Type 2}}{{$.RepoLink}}/grampus/train-job/{{.JobID}}{{end}}' title="{{.DisplayJobName}}" style="font-size: 14px;">
<a class="title" href='{{if eq .Cloudbrain.Type 1 }}{{$.Link}}/{{.Cloudbrain.ID}}{{else if eq .Cloudbrain.Type 0}}{{$.RepoLink}}/cloudbrain/train-job/{{.JobID}}{{else if eq .Cloudbrain.Type 2}}{{$.RepoLink}}/grampus/train-job/{{.JobID}}{{end}}' title="{{.DisplayJobName}}" style="font-size: 14px;">

<span class="fitted" style="width: 90%;vertical-align: middle;">{{.DisplayJobName}}</span>
</a>
@@ -123,8 +123,8 @@
</div>
<!-- 任务状态 -->
<div class="two wide column padding0" style="padding-left: 2.2rem !important;">
<span class="job-status" id="{{.JobID}}" data-repopath="{{$.RepoRelPath}}/modelarts/train-job" data-jobid="{{.JobID}}" data-version="{{.VersionName}}">
<span><i id="{{.JobID}}-icon" style="vertical-align: middle;" class="{{.Status}}"></i><span id="{{.JobID}}-text" style="margin-left: 0.4em;font-size: 12px;">{{.Status}}</span></span>
<span class="job-status" id="{{if eq .Cloudbrain.Type 1 }}{{.Cloudbrain.ID}}{{else }}{{.JobID}}{{end}}" data-repopath="{{$.RepoRelPath}}/modelarts/train-job" data-jobid="{{if eq .Cloudbrain.Type 1 }}{{.Cloudbrain.ID}}{{else }}{{.JobID}}{{end}}" data-version="{{.VersionName}}">
<span><i id="{{if eq .Cloudbrain.Type 1 }}{{.Cloudbrain.ID}}{{else }}{{.JobID}}{{end}}-icon" style="vertical-align: middle;" class="{{.Status}}"></i><span id="{{if eq .Cloudbrain.Type 1 }}{{.Cloudbrain.ID}}{{else }}{{.JobID}}{{end}}-text" style="margin-left: 0.4em;font-size: 12px;">{{.Status}}</span></span>
</span>
</div>
<!-- 任务创建时间 -->
@@ -133,7 +133,7 @@
</div>
<!-- 任务运行时间 -->
<div class="two wide column text center padding0">
<span style="font-size: 12px;" id="duration-{{.JobID}}">{{.TrainJobDuration}}</span>
<span style="font-size: 12px;" id="duration-{{if eq .Cloudbrain.Type 1 }}{{.Cloudbrain.ID}}{{else }}{{.JobID}}{{end}}">{{.TrainJobDuration}}</span>
</div>
<!-- 计算资源 -->
<div class="two wide column text center padding0">
@@ -153,7 +153,7 @@
<div class="ui compact buttons">
{{$.CsrfTokenHtml}}
{{if .CanDel}}
<a style="padding: 0.5rem 1rem;" id="ai-stop-{{.JobID}}" class="ui basic ai_stop_version {{if eq .Status "KILLED" "FAILED" "START_FAILED" "KILLING" "COMPLETED" "SUCCEEDED" "STOPPED"}}disabled {{else}} blue {{end}}button" data-repopath='{{$.RepoRelPath}}{{if eq .Cloudbrain.Type 1}}/modelarts/train-job{{else if eq .Cloudbrain.Type 0}}/cloudbrain/train-job{{else if eq .Cloudbrain.Type 2}}/grampus/train-job{{end}}' data-jobid="{{.JobID}}" data-version="{{.VersionName}}">
<a style="padding: 0.5rem 1rem;" id="ai-stop-{{if eq .Cloudbrain.Type 1 }}{{.Cloudbrain.ID}}{{else }}{{.JobID}}{{end}}" class="ui basic ai_stop_version {{if eq .Status "KILLED" "FAILED" "START_FAILED" "KILLING" "COMPLETED" "SUCCEEDED" "STOPPED"}}disabled {{else}} blue {{end}}button" data-repopath='{{$.RepoRelPath}}{{if eq .Cloudbrain.Type 1}}/modelarts/train-job{{else if eq .Cloudbrain.Type 0}}/cloudbrain/train-job{{else if eq .Cloudbrain.Type 2}}/grampus/train-job{{end}}' data-jobid="{{if eq .Cloudbrain.Type 1 }}{{.Cloudbrain.ID}}{{else }}{{.JobID}}{{end}}" data-version="{{.VersionName}}">
{{$.i18n.Tr "repo.stop"}}
</a>
{{else}}
@@ -164,11 +164,11 @@

</div>
<!-- 删除任务 -->
<form class="ui compact buttons" id="delForm-{{.JobID}}" action='{{if eq .Cloudbrain.Type 1}}{{$.Link}}/{{.JobID}}{{else if eq .Cloudbrain.Type 0}}{{$.RepoLink}}/cloudbrain/train-job/{{.JobID}}{{else if eq .Cloudbrain.Type 2}}{{$.RepoLink}}/grampus/train-job/{{.JobID}}{{end}}/del' method="post">
<form class="ui compact buttons" id="delForm-{{if eq .Cloudbrain.Type 1 }}{{.Cloudbrain.ID}}{{else }}{{.JobID}}{{end}}" action='{{if eq .Cloudbrain.Type 1}}{{$.Link}}/{{.Cloudbrain.ID}}{{else if eq .Cloudbrain.Type 0}}{{$.RepoLink}}/cloudbrain/train-job/{{.JobID}}{{else if eq .Cloudbrain.Type 2}}{{$.RepoLink}}/grampus/train-job/{{.JobID}}{{end}}/del' method="post">
<input type="hidden" name="listType" value="{{$.ListType}}">
{{$.CsrfTokenHtml}}
{{if .CanDel}}
<a style="padding: 0.5rem 1rem;margin-left:0.2rem" id="ai-delete-{{.JobID}}" class="ui basic ai_delete blue button" style="border-radius: .28571429rem;">
<a style="padding: 0.5rem 1rem;margin-left:0.2rem" id="ai-delete-{{if eq .Cloudbrain.Type 1 }}{{.Cloudbrain.ID}}{{else }}{{.JobID}}{{end}}" class="ui basic ai_delete blue button" style="border-radius: .28571429rem;">
{{$.i18n.Tr "repo.delete"}}
</a>
{{else}}


+ 18
- 18
templates/repo/modelarts/trainjob/show.tmpl View File

@@ -243,7 +243,7 @@

{{range $k ,$v := .version_list_task}}
<div class="ui accordion border-according" id="accordion{{.VersionName}}"
data-repopath="{{$.RepoRelPath}}/modelarts/train-job" data-jobid="{{.JobID}}"
data-repopath="{{$.RepoRelPath}}/modelarts/train-job" data-id="{{.Cloudbrain.ID}}"
data-version="{{.VersionName}}">
<div class="{{if eq $k 0}}active{{end}} title padding0">
<div class="according-panel-heading">
@@ -263,16 +263,16 @@

{{if .CanModify}}
<a class="ti-action-menu-item"
href="{{$.RepoLink}}/modelarts/train-job/{{.JobID}}/create_version?version_name={{.VersionName}}">{{$.i18n.Tr "repo.modelarts.modify"}}</a>
href="{{$.RepoLink}}/modelarts/train-job/{{.Cloudbrain.ID}}/create_version?version_name={{.VersionName}}">{{$.i18n.Tr "repo.modelarts.modify"}}</a>
{{else}}
<a class="ti-action-menu-item disabled"
href="{{$.RepoLink}}/modelarts/train-job/{{.JobID}}/create_version?version_name={{.VersionName}}">{{$.i18n.Tr "repo.modelarts.modify"}}</a>
href="{{$.RepoLink}}/modelarts/train-job/{{.Cloudbrain.ID}}/create_version?version_name={{.VersionName}}">{{$.i18n.Tr "repo.modelarts.modify"}}</a>
{{end}}

{{if .CanDel}}
<a class="ti-action-menu-item stop-show-version {{if eq .Status "KILLED" "FAILED" "START_FAILED" "KILLING" "COMPLETED"}}disabled {{end}}"
id="{{.VersionName}}-stop"
data-jobid="{{.JobID}}"
data-id="{{.Cloudbrain.ID}}"
data-repopath="{{$.RepoRelPath}}/modelarts/train-job"
data-version = "{{.VersionName}}"
>{{$.i18n.Tr "repo.stop"}}</a>
@@ -328,7 +328,7 @@
<a class="item log_bottom" data-tab="second{{$k}}"
data-version="{{.VersionName}}">{{$.i18n.Tr "repo.modelarts.log"}}</a>
<a class="item metric_chart" data-tab="four{{$k}}" data-version="{{.VersionName}}">资源占用情况</a>
<a class="item load-model-file" data-tab="third{{$k}}" data-download-flag="{{$.canDownload}}" data-path="{{$.RepoLink}}/modelarts/train-job/{{.JobID}}/model_list" data-version="{{.VersionName}}" data-parents="" data-filename="" data-init="init" >{{$.i18n.Tr "repo.model_download"}}</a>
<a class="item load-model-file" data-tab="third{{$k}}" data-download-flag="{{$.canDownload}}" data-path="{{$.RepoLink}}/modelarts/train-job/{{.Cloudbrain.ID}}/model_list" data-version="{{.VersionName}}" data-parents="" data-filename="" data-init="init" >{{$.i18n.Tr "repo.model_download"}}</a>
</div>
<div class="ui tab active" data-tab="first{{$k}}">
<div style="padding-top: 10px;">
@@ -503,7 +503,7 @@
<div>
<a id="{{.VersionName}}-log-down"
class='{{if and (.CanModify) (eq .Status "KILLED" "FAILED" "START_FAILED" "STOPPED" "COMPLETED") }}ti-download-file{{else}}disabled{{end}}'
href="{{$.RepoLink}}/modelarts/train-job/{{.JobID}}/download_log_file?version_name={{.VersionName}}">
href="{{$.RepoLink}}/modelarts/train-job/{{.Cloudbrain.ID}}/download_log_file?version_name={{.VersionName}}">
<i class="ri-download-cloud-2-line"></i>
<span style="margin-left: 0.3rem;">{{$.i18n.Tr "repo.modelarts.download_log"}}</span>
</a>
@@ -600,7 +600,7 @@
<div class="two inline fields ">
<div class="required ten wide field">
<label style="margin-left: -23px;">选择训练任务</label>
<input type="hidden" class="width83" id="JobId" name="JobId" readonly required>
<input type="hidden" class="width83" id="ID" name="ID" readonly required>
<input class="width83" id="JobName" readonly required>

</div>
@@ -795,14 +795,14 @@

let userName
let repoPath
let jobID
let id
let downlaodFlag = {{ $.canDownload }}
$(document).ready(function () {
let url = window.location.href;
let urlArr = url.split('/')
userName = urlArr.slice(-5)[0]
repoPath = urlArr.slice(-4)[0]
jobID = urlArr.slice(-1)[0]
id = urlArr.slice(-1)[0]
})
function stopBubbling(e) {
e = window.event || e;
@@ -819,9 +819,9 @@
centered: false,
onShow: function () {
$('input[name="Version"]').addClass('model_disabled')
// $('input[name="JobId"]').text(obj.JobName)
// $('input[name="ID"]').text(obj.JobName)
$('#JobName').val(obj.DisplayJobName).addClass('model_disabled')
$('input[name="JobId"]').val(obj.JobID)
$('input[name="ID"]').val(obj.ID)
$('input[name="VersionName"]').val(obj.VersionName).addClass('model_disabled')
if(obj.EngineID ==122 || obj.EngineID ==35 || obj.EngineID ==-1){
$('input[name="Engine_name"]').val("MindSpore").addClass('model_disabled');
@@ -886,7 +886,7 @@
flag = false
},
onApprove: function () {
$.post(`/api/v1/repos/${userName}/${repoPath}/modelarts/train-job/${jobID}/del_version`, { version_name: version_name }, (data) => {
$.post(`/api/v1/repos/${userName}/${repoPath}/modelarts/train-job/${id}/del_version`, { version_name: version_name }, (data) => {
if (data.VersionListCount === 0) {
location.href = `/${userName}/${repoPath}/modelarts/train-job`
} else {
@@ -909,7 +909,7 @@
}

function loadLog(version_name) {
$.get(`/api/v1/repos/${userName}/${repoPath}/modelarts/train-job/${jobID}/log?version_name=${version_name}&lines=50&order=asc`, (data) => {
$.get(`/api/v1/repos/${userName}/${repoPath}/modelarts/train-job/${id}/log?version_name=${version_name}&lines=50&order=asc`, (data) => {
$('input[name=end_line]').val(data.EndLine)
$('input[name=start_line]').val(data.StartLine)
$(`#log_file${version_name}`).text(data.Content)
@@ -943,7 +943,7 @@
let scrollLeft = container.scrollLeft
if (((parseInt(scrollTop) + clientHeight == scrollHeight || parseInt(scrollTop) + clientHeight + 1 == scrollHeight || parseInt(scrollTop) + clientHeight - 1 == scrollHeight)) && parseInt(scrollTop) !== 0 && scrollLeft == 0) {
let end_line = $(`#log${version_name} input[name=end_line]`).val()
$.get(`/api/v1/repos/${userName}/${repoPath}/modelarts/train-job/${jobID}/log?version_name=${version_name}&base_line=${end_line}&lines=50&order=desc`, (data) => {
$.get(`/api/v1/repos/${userName}/${repoPath}/modelarts/train-job/${id}/log?version_name=${version_name}&base_line=${end_line}&lines=50&order=desc`, (data) => {
if (data.Lines == 0) {
$(`.message${version_name} #header`).text('您已翻阅至日志底部')
$(`.message${version_name}`).css('display', 'block')
@@ -966,7 +966,7 @@
}
if ([0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10].includes(scrollTop) && scrollLeft == 0) {
let start_line = $(`#log${version_name} input[name=start_line]`).val()
$.get(`/api/v1/repos/${userName}/${repoPath}/modelarts/train-job/${jobID}/log?version_name=${version_name}&base_line=${start_line}&lines=50&order=asc`, (data) => {
$.get(`/api/v1/repos/${userName}/${repoPath}/modelarts/train-job/${id}/log?version_name=${version_name}&base_line=${start_line}&lines=50&order=asc`, (data) => {
if (data.Lines == 0) {
$(`.message${version_name} #header`).text('您已翻阅至日志顶部')
$(`.message${version_name}`).css('display', 'block')
@@ -1010,7 +1010,7 @@
let logContentDom = document.querySelector(`#log${version_name}`)

$(`#log_file${version_name}`).siblings('pre').remove()
$.get(`/api/v1/repos/${userName}/${repoPath}/modelarts/train-job/${jobID}/log?version_name=${version_name}&base_line=&lines=50&order=asc`, (data) => {
$.get(`/api/v1/repos/${userName}/${repoPath}/modelarts/train-job/${id}/log?version_name=${version_name}&base_line=&lines=50&order=asc`, (data) => {

$(`#log${version_name} input[name=end_line]`).val(data.EndLine) //如果变动就改变所对应的值
$(`#log${version_name} input[name=start_line]`).val(data.StartLine)
@@ -1028,12 +1028,12 @@
let version_name = $(this).data('version')
let logContentDom = document.querySelector(`#log${version_name}`)
$(`#log_file${version_name}`).siblings('pre').remove()
$.get(`/api/v1/repos/${userName}/${repoPath}/modelarts/train-job/${jobID}/log?version_name=${version_name}&base_line=&lines=50&order=desc`, (data) => {
$.get(`/api/v1/repos/${userName}/${repoPath}/modelarts/train-job/${id}/log?version_name=${version_name}&base_line=&lines=50&order=desc`, (data) => {

$(`#log${version_name} input[name=end_line]`).val(data.EndLine) //如果变动就改变所对应的值
$(`#log${version_name} input[name=start_line]`).val(data.StartLine)
$(`#log${version_name}`).append('<pre>' + data.Content)
$.get(`/api/v1/repos/${userName}/${repoPath}/modelarts/train-job/${jobID}/log?version_name=${version_name}&base_line=${data.EndLine}&lines=50&order=desc`, (data) => {
$.get(`/api/v1/repos/${userName}/${repoPath}/modelarts/train-job/${id}/log?version_name=${version_name}&base_line=${data.EndLine}&lines=50&order=desc`, (data) => {
if (data.Lines == 0) {
$(`.message${version_name} #header`).text('您已翻阅至日志底部')
$(`.message${version_name}`).css('display', 'block')


Loading…
Cancel
Save