Browse Source

Merge pull request 'V20220616.patch合入develop' (#2338) from V20220616.patch into develop

Reviewed-on: https://git.openi.org.cn/OpenI/aiforge/pulls/2338
fix-2189
lewis 3 years ago
parent
commit
ba9e71cfcb
13 changed files with 388 additions and 353 deletions
  1. +44
    -0
      models/cloudbrain.go
  2. +2
    -2
      models/cloudbrain_static.go
  3. +13
    -1
      models/user.go
  4. +3
    -39
      public/home/home.js
  5. +0
    -1
      public/self/js/notebook/es5-shim.min.js
  6. +0
    -1
      public/self/js/notebook/purify.min.js
  7. +14
    -7
      routers/api/v1/repo/cloudbrain_dashboard.go
  8. +14
    -45
      routers/home.go
  9. +0
    -5
      services/repository/repository.go
  10. +268
    -238
      templates/repo/modelarts/trainjob/new.tmpl
  11. +16
    -2
      templates/repo/modelarts/trainjob/show.tmpl
  12. +13
    -11
      templates/repo/modelmanage/index.tmpl
  13. +1
    -1
      web_src/js/components/Model.vue

+ 44
- 0
models/cloudbrain.go View File

@@ -1329,6 +1329,9 @@ func QueryModelTrainJobList(repoId int64) ([]*CloudbrainInfo, int, error) {
cond = cond.And( cond = cond.And(
builder.Eq{"job_type": "TRAIN"}, builder.Eq{"job_type": "TRAIN"},
) )
cond = cond.And(
builder.In("type", 0, 1),
)


cloudbrains := make([]*CloudbrainInfo, 0) cloudbrains := make([]*CloudbrainInfo, 0)
if err := sess.Select("job_id,display_job_name").Table(&Cloudbrain{}).Where(cond).OrderBy("created_unix DESC"). if err := sess.Select("job_id,display_job_name").Table(&Cloudbrain{}).Where(cond).OrderBy("created_unix DESC").
@@ -1795,3 +1798,44 @@ func CloudbrainAll(opts *CloudbrainsOptions) ([]*CloudbrainInfo, int64, error) {


return cloudbrains, count, nil return cloudbrains, count, nil
} }
func CloudbrainAllStatic(opts *CloudbrainsOptions) ([]*CloudbrainInfo, int64, error) {
sess := x.NewSession()
defer sess.Close()

var cond = builder.NewCond()

if (opts.Type) >= 0 {
cond = cond.And(
builder.Eq{"cloudbrain.type": opts.Type},
)
}
if opts.BeginTimeUnix > 0 && opts.EndTimeUnix > 0 {
cond = cond.And(
builder.And(builder.Gte{"cloudbrain.created_unix": opts.BeginTimeUnix}, builder.Lte{"cloudbrain.created_unix": opts.EndTimeUnix}),
)
}
var count int64
var err error
count, err = sess.Unscoped().Where(cond).Count(new(Cloudbrain))

if err != nil {
return nil, 0, fmt.Errorf("Count: %v", err)
}

if opts.Page >= 0 && opts.PageSize > 0 {
var start int
if opts.Page == 0 {
start = 0
} else {
start = (opts.Page - 1) * opts.PageSize
}
sess.Limit(opts.PageSize, start)
}
sess.OrderBy("cloudbrain.created_unix DESC")
cloudbrains := make([]*CloudbrainInfo, 0, setting.UI.IssuePagingNum)
if err := sess.Cols("status", "type", "job_type", "train_job_duration", "duration", "compute_resource", "created_unix", "start_time", "end_time").Table(&Cloudbrain{}).Unscoped().Where(cond).
Find(&cloudbrains); err != nil {
return nil, 0, fmt.Errorf("Find: %v", err)
}
return cloudbrains, count, nil
}

+ 2
- 2
models/cloudbrain_static.go View File

@@ -213,7 +213,7 @@ func GetWaittingTop() ([]*CloudbrainInfo, error) {
cond = cond.And( cond = cond.And(
builder.Eq{"cloudbrain.status": string(JobWaiting)}, builder.Eq{"cloudbrain.status": string(JobWaiting)},
) )
sess.OrderBy("(cloudbrain.start_time-cloudbrain.created_unix) DESC limit 10")
sess.OrderBy("cloudbrain.created_unix ASC limit 10")
cloudbrains := make([]*CloudbrainInfo, 0, 10) cloudbrains := make([]*CloudbrainInfo, 0, 10)
if err := sess.Table(&Cloudbrain{}).Where(cond). if err := sess.Table(&Cloudbrain{}).Where(cond).
Find(&cloudbrains); err != nil { Find(&cloudbrains); err != nil {
@@ -228,7 +228,7 @@ func GetRunningTop() ([]*CloudbrainInfo, error) {
cond = cond.And( cond = cond.And(
builder.Eq{"cloudbrain.status": string(JobRunning)}, builder.Eq{"cloudbrain.status": string(JobRunning)},
) )
sess.OrderBy("(cloudbrain.end_time-cloudbrain.start_time) DESC limit 10")
sess.OrderBy("cloudbrain.duration DESC limit 10")
cloudbrains := make([]*CloudbrainInfo, 0, 10) cloudbrains := make([]*CloudbrainInfo, 0, 10)
if err := sess.Table(&Cloudbrain{}).Where(cond). if err := sess.Table(&Cloudbrain{}).Where(cond).
Find(&cloudbrains); err != nil { Find(&cloudbrains); err != nil {


+ 13
- 1
models/user.go View File

@@ -6,7 +6,6 @@
package models package models


import ( import (
"code.gitea.io/gitea/modules/blockchain"
"container/list" "container/list"
"context" "context"
"crypto/md5" "crypto/md5"
@@ -25,6 +24,8 @@ import (
"time" "time"
"unicode/utf8" "unicode/utf8"


"code.gitea.io/gitea/modules/blockchain"

"code.gitea.io/gitea/modules/avatar" "code.gitea.io/gitea/modules/avatar"
"code.gitea.io/gitea/modules/base" "code.gitea.io/gitea/modules/base"
"code.gitea.io/gitea/modules/generate" "code.gitea.io/gitea/modules/generate"
@@ -1498,6 +1499,17 @@ func GetUsersByIDs(ids []int64) (UserList, error) {
return ous, err return ous, err
} }


func GetUsersByNames(names []string) (UserList, error) {
ous := make([]*User, 0, len(names))
if len(names) == 0 {
return ous, nil
}
err := x.In("name", names).
Asc("name").
Find(&ous)
return ous, err
}

// GetUserIDsByNames returns a slice of ids corresponds to names. // GetUserIDsByNames returns a slice of ids corresponds to names.
func GetUserIDsByNames(names []string, ignoreNonExistent bool) ([]int64, error) { func GetUserIDsByNames(names []string, ignoreNonExistent bool) ([]int64, error) {
ids := make([]int64, 0, len(names)) ids := make([]int64, 0, len(names))


+ 3
- 39
public/home/home.js View File

@@ -217,9 +217,9 @@ function refresh3DInfo(record){
//console.log("cloudbrain two line length=" + lines.length); //console.log("cloudbrain two line length=" + lines.length);
var span = $('.rotation3D__line').find("span")[1]; var span = $('.rotation3D__line').find("span")[1];
//console.log(span); //console.log(span);
span.innerText =record.RefName;
//$('.rotation3D__line').find("span").eq(1).text(record.RefName)
//lines[1].find("span").text(record.RefName);
if(span != null){
span.innerText =record.RefName;
}
} }


} }
@@ -452,48 +452,12 @@ function queryRecommendData(){
displayOrg(json.org); displayOrg(json.org);
displayRepo(json.repo); displayRepo(json.repo);
displayActivity(json.image); displayActivity(json.image);
displayCloudBrain(json.cloudbrain)
}, },
error:function(response) { error:function(response) {
} }
}); });

// $.ajax({
// type:"GET",
// url:"/recommend/repo",
// headers: {
// authorization:token,
// },
// dataType:"json",
// async:false,
// success:function(json){
// displayRepo(json);
// },
// error:function(response) {
// }
// });

// $.ajax({
// type:"GET",
// url:"/recommend/imageinfo",
// headers: {
// authorization:token,
// },
// dataType:"json",
// async:false,
// success:function(json){
// displayActivity(json);
// },
// error:function(response) {
// }
// });
} }


function displayCloudBrain(json){
$('#completed_task').text(json.completed_task);
$('#running_task').text(json.running_task);
$('#wait_task').text(json.wait_task);
}


function displayActivity(json){ function displayActivity(json){
var activityDiv = document.getElementById("recommendactivity"); var activityDiv = document.getElementById("recommendactivity");


+ 0
- 1
public/self/js/notebook/es5-shim.min.js
File diff suppressed because it is too large
View File


+ 0
- 1
public/self/js/notebook/purify.min.js
File diff suppressed because it is too large
View File


+ 14
- 7
routers/api/v1/repo/cloudbrain_dashboard.go View File

@@ -67,7 +67,7 @@ func GetAllCloudbrainsOverview(ctx *context.Context) {
pagesize := 1000 pagesize := 1000
count := pagesize count := pagesize
for count == pagesize && count != 0 { for count == pagesize && count != 0 {
cloudbrains, _, err := models.CloudbrainAll(&models.CloudbrainsOptions{
cloudbrains, _, err := models.CloudbrainAllStatic(&models.CloudbrainsOptions{
ListOptions: models.ListOptions{ ListOptions: models.ListOptions{
Page: page, Page: page,
PageSize: pagesize, PageSize: pagesize,
@@ -121,6 +121,13 @@ func GetAllCloudbrainsOverview(ctx *context.Context) {
} }
} }


cloudBrainTypeList := []int{0, 1, 2}
for _, v := range cloudBrainTypeList {
if _, ok := cloudBrainNum[v]; !ok {
cloudBrainNum[v] = 0
}
}

todayRunningCount := todayStatusResult[string(models.JobRunning)] todayRunningCount := todayStatusResult[string(models.JobRunning)]
todayCompletedCount := todayStatusResult[string(models.ModelArtsTrainJobCompleted)] + todayStatusResult[string(models.JobFailed)] + todayCompletedCount := todayStatusResult[string(models.ModelArtsTrainJobCompleted)] + todayStatusResult[string(models.JobFailed)] +
todayStatusResult[string(models.ModelArtsStartFailed)] + todayStatusResult[string(models.JobStopped)] + todayStatusResult[string(models.JobSucceeded)] + todayStatusResult[string(models.ModelArtsTrainJobKilled)] todayStatusResult[string(models.ModelArtsStartFailed)] + todayStatusResult[string(models.JobStopped)] + todayStatusResult[string(models.JobSucceeded)] + todayStatusResult[string(models.ModelArtsTrainJobKilled)]
@@ -504,7 +511,7 @@ func GetAllCloudbrainsPeriodDistribution(ctx *context.Context) {
count := pagesize count := pagesize
//Each time a maximum of 1000 pieces of data are detected to the memory, batch processing //Each time a maximum of 1000 pieces of data are detected to the memory, batch processing
for count == pagesize && count != 0 { for count == pagesize && count != 0 {
cloudbrains, _, err := models.CloudbrainAll(&models.CloudbrainsOptions{
cloudbrains, _, err := models.CloudbrainAllStatic(&models.CloudbrainsOptions{
ListOptions: models.ListOptions{ ListOptions: models.ListOptions{
Page: page, Page: page,
PageSize: pagesize, PageSize: pagesize,
@@ -613,7 +620,7 @@ func GetCloudbrainsStatusAnalysis(ctx *context.Context) {
pagesize := 1000 pagesize := 1000
count := pagesize count := pagesize
for count == pagesize && count != 0 { for count == pagesize && count != 0 {
cloudbrains, _, err := models.CloudbrainAll(&models.CloudbrainsOptions{
cloudbrains, _, err := models.CloudbrainAllStatic(&models.CloudbrainsOptions{
ListOptions: models.ListOptions{ ListOptions: models.ListOptions{
Page: page, Page: page,
PageSize: pagesize, PageSize: pagesize,
@@ -1021,7 +1028,7 @@ func getCloudbrainCount(beginTime time.Time, endTime time.Time, cloudbrains []*m
func getDayCloudbrainNum(beginTime time.Time, endTime time.Time) ([]DateCloudbrainNum, error) { func getDayCloudbrainNum(beginTime time.Time, endTime time.Time) ([]DateCloudbrainNum, error) {
var endTimeTemp time.Time var endTimeTemp time.Time
endTimeTemp = beginTime.AddDate(0, 0, 1) endTimeTemp = beginTime.AddDate(0, 0, 1)
cloudbrains, _, err := models.CloudbrainAll(&models.CloudbrainsOptions{
cloudbrains, _, err := models.CloudbrainAllStatic(&models.CloudbrainsOptions{
Type: models.TypeCloudBrainAll, Type: models.TypeCloudBrainAll,
BeginTimeUnix: beginTime.Unix(), BeginTimeUnix: beginTime.Unix(),
EndTimeUnix: endTime.Unix(), EndTimeUnix: endTime.Unix(),
@@ -1057,7 +1064,7 @@ func getMonthCloudbrainNum(beginTime time.Time, endTime time.Time) ([]DateCloudb
endTimeTemp = beginTime.AddDate(0, 1, 0) endTimeTemp = beginTime.AddDate(0, 1, 0)
endTimeTemp = time.Date(endTimeTemp.Year(), endTimeTemp.Month(), 1, 0, 0, 0, 0, now.Location()) endTimeTemp = time.Date(endTimeTemp.Year(), endTimeTemp.Month(), 1, 0, 0, 0, 0, now.Location())
monthCloudbrainNum := make([]DateCloudbrainNum, 0) monthCloudbrainNum := make([]DateCloudbrainNum, 0)
cloudbrains, _, err := models.CloudbrainAll(&models.CloudbrainsOptions{
cloudbrains, _, err := models.CloudbrainAllStatic(&models.CloudbrainsOptions{
Type: models.TypeCloudBrainAll, Type: models.TypeCloudBrainAll,
BeginTimeUnix: beginTime.Unix(), BeginTimeUnix: beginTime.Unix(),
EndTimeUnix: endTime.Unix(), EndTimeUnix: endTime.Unix(),
@@ -1093,7 +1100,7 @@ func getDayCloudbrainInfo(beginTime time.Time, endTime time.Time) ([]DateCloudbr
if endTimeTemp.Equal(endTime) { if endTimeTemp.Equal(endTime) {
endTimeTemp = endTimeTemp.AddDate(0, 0, -1) endTimeTemp = endTimeTemp.AddDate(0, 0, -1)
} }
cloudbrains, _, err := models.CloudbrainAll(&models.CloudbrainsOptions{
cloudbrains, _, err := models.CloudbrainAllStatic(&models.CloudbrainsOptions{
Type: models.TypeCloudBrainAll, Type: models.TypeCloudBrainAll,
BeginTimeUnix: beginTime.Unix(), BeginTimeUnix: beginTime.Unix(),
EndTimeUnix: endTime.Unix(), EndTimeUnix: endTime.Unix(),
@@ -1124,7 +1131,7 @@ func getMonthCloudbrainInfo(beginTime time.Time, endTime time.Time) ([]DateCloud
if endTimeTemp.Equal(endTime) { if endTimeTemp.Equal(endTime) {
endTimeTemp = endTimeTemp.AddDate(0, -1, 0) endTimeTemp = endTimeTemp.AddDate(0, -1, 0)
} }
cloudbrains, _, err := models.CloudbrainAll(&models.CloudbrainsOptions{
cloudbrains, _, err := models.CloudbrainAllStatic(&models.CloudbrainsOptions{
Type: models.TypeCloudBrainAll, Type: models.TypeCloudBrainAll,
BeginTimeUnix: beginTime.Unix(), BeginTimeUnix: beginTime.Unix(),
EndTimeUnix: endTime.Unix(), EndTimeUnix: endTime.Unix(),


+ 14
- 45
routers/home.go View File

@@ -7,7 +7,6 @@ package routers


import ( import (
"bytes" "bytes"
"fmt"
"net/http" "net/http"
"strconv" "strconv"
"strings" "strings"
@@ -673,10 +672,19 @@ func getRecommendOrg() ([]map[string]interface{}, error) {
if err != nil { if err != nil {
return nil, err return nil, err
} }
names := make([]string, 0)
for _, userName := range result {
names = append(names, userName)
}
users, _ := models.GetUsersByNames(names)
userMap := make(map[string]*models.User, 0)
for _, user := range users {
userMap[user.Name] = user
}
resultOrg := make([]map[string]interface{}, 0) resultOrg := make([]map[string]interface{}, 0)
for _, userName := range result { for _, userName := range result {
user, err := models.GetUserByName(userName)
if err == nil {
user := userMap[userName]
if user != nil {
userMap := make(map[string]interface{}) userMap := make(map[string]interface{})
userMap["Name"] = user.Name userMap["Name"] = user.Name
userMap["Description"] = user.Description userMap["Description"] = user.Description
@@ -689,7 +697,7 @@ func getRecommendOrg() ([]map[string]interface{}, error) {
userMap["NumMembers"] = user.NumMembers userMap["NumMembers"] = user.NumMembers
resultOrg = append(resultOrg, userMap) resultOrg = append(resultOrg, userMap)
} else { } else {
log.Info("query user error," + err.Error())
log.Info("the user not exist," + userName)
} }
} }
return resultOrg, nil return resultOrg, nil
@@ -758,15 +766,6 @@ func GetRankUser(index string) ([]map[string]interface{}, error) {
return resultOrg, nil return resultOrg, nil
} }


// func GetImageInfoFromPromote(ctx *context.Context) {
// imageInfo, err := GetImageInfo()
// if err != nil {
// ctx.ServerError("500", err)
// return
// }
// ctx.JSON(200, imageInfo)
// }

func GetUserRankFromPromote(ctx *context.Context) { func GetUserRankFromPromote(ctx *context.Context) {
index := ctx.Params("index") index := ctx.Params("index")
resultUserRank, err := GetRankUser(index) resultUserRank, err := GetRankUser(index)
@@ -790,45 +789,15 @@ func RecommendHomeInfo(ctx *context.Context) {
if err != nil { if err != nil {
log.Info("error." + err.Error()) log.Info("error." + err.Error())
} }
resultCloudBrain, err := getCloudbrainNums()
if err != nil {
log.Info("error." + err.Error())
}

mapInterface := make(map[string]interface{}) mapInterface := make(map[string]interface{})
mapInterface["org"] = resultOrg mapInterface["org"] = resultOrg
mapInterface["repo"] = resultRepo mapInterface["repo"] = resultRepo
mapInterface["image"] = resultImage mapInterface["image"] = resultImage
mapInterface["cloudbrain"] = resultCloudBrain
//mapInterface["cloudbrain"] = resultCloudBrain
ctx.JSON(http.StatusOK, mapInterface) ctx.JSON(http.StatusOK, mapInterface)
} }


func getCloudbrainNums() (map[string]string, error) {
result := make(map[string]string)
cloudStatusMap := models.GetAllStatusCloudBrain()
result["completed_task"] = fmt.Sprint(cloudStatusMap["COMPLETED"])
result["running_task"] = fmt.Sprint(cloudStatusMap["RUNNING"])
result["wait_task"] = fmt.Sprint(cloudStatusMap["WAITING"])
return result, nil
}

// func RecommendOrgFromPromote(ctx *context.Context) {
// resultOrg, err := GetRecommendOrg()
// if err != nil {
// ctx.ServerError("500", err)
// return
// }
// ctx.JSON(200, resultOrg)
// }

func RecommendRepoFromPromote(ctx *context.Context) {
result, err := repository.GetRecommendRepoFromPromote("projects")
if err != nil {
ctx.ServerError("500", err)
} else {
ctx.JSON(200, result)
}
}

func HomeTerm(ctx *context.Context) { func HomeTerm(ctx *context.Context) {
ctx.HTML(200, tplHomeTerm) ctx.HTML(200, tplHomeTerm)
} }

+ 0
- 5
services/repository/repository.go View File

@@ -131,11 +131,6 @@ func GetRecommendRepoFromPromote(filename string) ([]map[string]interface{}, err
repoMap["ID"] = fmt.Sprint(repo.ID) repoMap["ID"] = fmt.Sprint(repo.ID)
repoMap["Name"] = repo.Name repoMap["Name"] = repo.Name
repoMap["Alias"] = repo.Alias repoMap["Alias"] = repo.Alias
if repo.RepoType == models.RepoCourse {
//Load creator
repo.GetCreator()
repoMap["Creator"] = repo.Creator
}


repoMap["OwnerName"] = repo.OwnerName repoMap["OwnerName"] = repo.OwnerName
repoMap["NumStars"] = repo.NumStars repoMap["NumStars"] = repo.NumStars


+ 268
- 238
templates/repo/modelarts/trainjob/new.tmpl View File

@@ -1,67 +1,72 @@
{{template "base/head" .}} {{template "base/head" .}}
<style> <style>
.unite {
font-family: SourceHanSansSC-medium !important;
color: rgba(16, 16, 16, 100) !important;
}

.title {
font-size: 16px !important;
padding-left: 3rem !important;
}

.min_title {
font-size: 14px !important;
padding-left: 6rem !important;
margin-bottom: 2rem !important;

}

.width {
width: 100% !important;
}

.width80 {
width: 80.7% !important;
margin-left: 10px;
}


.unite{
font-family: SourceHanSansSC-medium !important;
color: rgba(16, 16, 16, 100) !important;
}

.title{
font-size: 16px !important;
padding-left: 3rem !important;
}
.min_title{
font-size: 14px !important;
padding-left: 6rem !important;
margin-bottom: 2rem !important;

}
.width{
width:100% !important;
}
.width80{
width: 80.7% !important;
margin-left: 10px;
}
.width85{
width: 85% !important;
margin-left: 4.5rem !important;
}
.width81{
margin-left: 1.5rem;
width: 81% !important;
}

.add{font-size: 18px;
padding: 0.5rem;
border: 1px solid rgba(187, 187, 187, 100);
border-radius: 0px 5px 5px 0px;
line-height: 21px;
text-align: center;
color: #C2C7CC;
}
.min{
font-size: 18px;
padding: 0.5rem;
border: 1px solid rgba(187, 187, 187, 100);
border-radius: 5px 0px 0px 5px;
line-height: 21px;
text-align: center;
color: #C2C7CC;
}
.width85 {
width: 85% !important;
margin-left: 4.5rem !important;
}


.width81 {
margin-left: 1.5rem;
width: 81% !important;
}

.add {
font-size: 18px;
padding: 0.5rem;
border: 1px solid rgba(187, 187, 187, 100);
border-radius: 0px 5px 5px 0px;
line-height: 21px;
text-align: center;
color: #C2C7CC;
}

.min {
font-size: 18px;
padding: 0.5rem;
border: 1px solid rgba(187, 187, 187, 100);
border-radius: 5px 0px 0px 5px;
line-height: 21px;
text-align: center;
color: #C2C7CC;
}
</style> </style>
<!-- <div class="ui page dimmer"> <!-- <div class="ui page dimmer">
<div class="ui text loader">{{.i18n.Tr "loading"}}</div> <div class="ui text loader">{{.i18n.Tr "loading"}}</div>
</div> --> </div> -->
<div id="mask"> <div id="mask">
<div id="loadingPage">
<div class="rect1"></div>
<div class="rect2"></div>
<div class="rect3"></div>
<div class="rect4"></div>
<div class="rect5"></div>
</div>
<div id="loadingPage">
<div class="rect1"></div>
<div class="rect2"></div>
<div class="rect3"></div>
<div class="rect4"></div>
<div class="rect5"></div>
</div>
</div> </div>
<div class="repository"> <div class="repository">
{{template "repo/header" .}} {{template "repo/header" .}}
@@ -82,29 +87,41 @@
<label style="font-weight: normal;">{{.i18n.Tr "cloudbrain.compute_resource"}}</label> <label style="font-weight: normal;">{{.i18n.Tr "cloudbrain.compute_resource"}}</label>
<div class="ui blue mini menu compact selectcloudbrain"> <div class="ui blue mini menu compact selectcloudbrain">
<a class="item" href="{{.RepoLink}}/cloudbrain/train-job/create"> <a class="item" href="{{.RepoLink}}/cloudbrain/train-job/create">
<svg class="svg" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" width="16" height="16">
<path fill="none" d="M0 0h24v24H0z"/>
<path d="M3 2.992C3 2.444 3.445 2 3.993 2h16.014a1 1 0 0 1 .993.992v18.016a.993.993 0 0 1-.993.992H3.993A1 1 0 0 1 3 21.008V2.992zM19 11V4H5v7h14zm0 2H5v7h14v-7zM9 6h6v2H9V6zm0 9h6v2H9v-2z"/>
<svg class="svg" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" width="16"
height="16">
<path fill="none" d="M0 0h24v24H0z" />
<path
d="M3 2.992C3 2.444 3.445 2 3.993 2h16.014a1 1 0 0 1 .993.992v18.016a.993.993 0 0 1-.993.992H3.993A1 1 0 0 1 3 21.008V2.992zM19 11V4H5v7h14zm0 2H5v7h14v-7zM9 6h6v2H9V6zm0 9h6v2H9v-2z" />
</svg> </svg>
CPU/GPU CPU/GPU
</a> </a>
<a class="active item" href="{{.RepoLink}}/modelarts/train-job/create"> <a class="active item" href="{{.RepoLink}}/modelarts/train-job/create">
<svg class="svg" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" width="16" height="16">
<path fill="none" d="M0 0h24v24H0z"/>
<path d="M3 2.992C3 2.444 3.445 2 3.993 2h16.014a1 1 0 0 1 .993.992v18.016a.993.993 0 0 1-.993.992H3.993A1 1 0 0 1 3 21.008V2.992zM19 11V4H5v7h14zm0 2H5v7h14v-7zM9 6h6v2H9V6zm0 9h6v2H9v-2z"/>
<svg class="svg" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" width="16"
height="16">
<path fill="none" d="M0 0h24v24H0z" />
<path
d="M3 2.992C3 2.444 3.445 2 3.993 2h16.014a1 1 0 0 1 .993.992v18.016a.993.993 0 0 1-.993.992H3.993A1 1 0 0 1 3 21.008V2.992zM19 11V4H5v7h14zm0 2H5v7h14v-7zM9 6h6v2H9V6zm0 9h6v2H9v-2z" />
</svg> </svg>
Ascend NPU</a> Ascend NPU</a>
</div> </div>
</div> </div>
<div class="required unite min_title inline field"> <div class="required unite min_title inline field">
<label style="font-weight: normal;">{{.i18n.Tr "repo.modelarts.train_job.job_name"}}</label> <label style="font-weight: normal;">{{.i18n.Tr "repo.modelarts.train_job.job_name"}}</label>
<input style="width: 60%;" name="display_job_name" id="display_job_name" placeholder={{.i18n.Tr "repo.modelarts.train_job.job_name"}} value="{{.display_job_name}}" tabindex="3" onkeyup="this.value=this.value.replace(/[, ]/g,'')" autofocus required maxlength="64">
<input style="width: 60%;" name="display_job_name" id="display_job_name"
placeholder={{.i18n.Tr "repo.modelarts.train_job.job_name"}} value="{{.display_job_name}}"
tabindex="3" onkeyup="this.value=this.value.replace(/[, ]/g,'')" autofocus required
maxlength="64">
<span class="tooltips" style="display: block;">{{.i18n.Tr "cloudbrain.job_name_rule"}}</span> <span class="tooltips" style="display: block;">{{.i18n.Tr "cloudbrain.job_name_rule"}}</span>
</div> </div>


<div class="unite min_title inline field"> <div class="unite min_title inline field">
<label style="font-weight: normal;" for="description">{{.i18n.Tr "repo.modelarts.train_job.description"}}&nbsp;&nbsp;</label>
<textarea style="width: 80%;" id="description" name="description" rows="3" maxlength="255" placeholder={{.i18n.Tr "repo.modelarts.train_job.new_place"}} onchange="this.value=this.value.substring(0, 255)" onkeydown="this.value=this.value.substring(0, 255)" onkeyup="this.value=this.value.substring(0, 255)"></textarea>
<label style="font-weight: normal;"
for="description">{{.i18n.Tr "repo.modelarts.train_job.description"}}&nbsp;&nbsp;</label>
<textarea style="width: 80%;" id="description" name="description" rows="3" maxlength="255"
placeholder={{.i18n.Tr "repo.modelarts.train_job.new_place"}}
onchange="this.value=this.value.substring(0, 255)"
onkeydown="this.value=this.value.substring(0, 255)"
onkeyup="this.value=this.value.substring(0, 255)"></textarea>
</div> </div>
<div class="ui divider"></div> <div class="ui divider"></div>


@@ -112,43 +129,45 @@




<div class="required unite min_title inline field"> <div class="required unite min_title inline field">
<label style="font-weight: normal;">{{.i18n.Tr "repo.modelarts.code_version"}}</label>
<select class="ui dropdown width80 left2" id="code_version" name="branch_name">
{{if .branch_name}}
<option name="branch_name" value="{{.branch_name}}">{{.branch_name}}</option>
{{range $k, $v :=.Branches}}
{{ if ne $v $.branch_name }}
<option name="branch_name" value="{{$v}}">{{$v}}</option>
{{end}}
{{end}}
{{else}}
<option name="branch_name" value="{{.branchName}}">{{.branchName}}</option>
{{range $k, $v :=.Branches}}
{{ if ne $v $.branchName }}
<option name="branch_name" value="{{$v}}">{{$v}}</option>
{{end}}
{{end}}
{{end}}
</select>
<label style="font-weight: normal;">{{.i18n.Tr "repo.modelarts.code_version"}}</label>
<select class="ui dropdown width80 left2" id="code_version" name="branch_name">
{{if .branch_name}}
<option name="branch_name" value="{{.branch_name}}">{{.branch_name}}</option>
{{range $k, $v :=.Branches}}
{{ if ne $v $.branch_name }}
<option name="branch_name" value="{{$v}}">{{$v}}</option>
{{end}}
{{end}}
{{else}}
<option name="branch_name" value="{{.branchName}}">{{.branchName}}</option>
{{range $k, $v :=.Branches}}
{{ if ne $v $.branchName }}
<option name="branch_name" value="{{$v}}">{{$v}}</option>
{{end}}
{{end}}
{{end}}
</select>
</div> </div>






<div class="required unite min_title inline fields" style="width: 90%;"> <div class="required unite min_title inline fields" style="width: 90%;">
<label style="font-weight: normal;">{{.i18n.Tr "repo.modelarts.train_job.AI_driver"}}&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</label>
<label
style="font-weight: normal;">{{.i18n.Tr "repo.modelarts.train_job.AI_driver"}}&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</label>
<div class="field" style="flex: 1.5;"> <div class="field" style="flex: 1.5;">
<select class="ui dropdown width" id="trainjob_engines" >
<select class="ui dropdown width" id="trainjob_engines">
{{range .engines}} {{range .engines}}
<option value="{{.Value}}">{{.Value}}</option>
<option value="{{.Value}}">{{.Value}}</option>
{{end}} {{end}}
</select> </select>
</div> </div>


<div class="field" style="flex: 2;" id="engine_name"> <div class="field" style="flex: 2;" id="engine_name">
<select class="ui dropdown width" id="trainjob_engine_versions" style='width: 100%;' name="engine_id">
{{range .engine_versions}}
<option name="engine_id" value="{{.ID}}">{{.Value}}</option>
{{end}}
<select class="ui dropdown width" id="trainjob_engine_versions" style='width: 100%;'
name="engine_id">
{{range .engine_versions}}
<option name="engine_id" value="{{.ID}}">{{.Value}}</option>
{{end}}
</select> </select>


</div> </div>
@@ -156,41 +175,49 @@
</div> </div>


<div class="inline unite min_title field required"> <div class="inline unite min_title field required">
<label style="font-weight: normal;">{{.i18n.Tr "repo.modelarts.train_job.start_file"}}</label>
{{if .bootFile}}
<input style="width: 48.5%;" name="boot_file" id="trainjob_boot_file" value="{{.bootFile}}" tabindex="3" autofocus required maxlength="255" >
{{else}}
<input style="width: 48.5%;" name="boot_file" id="trainjob_boot_file" value="" tabindex="3" autofocus required maxlength="255" >
{{end}}
<span>
<i class="question circle icon link" data-content={{.i18n.Tr "repo.modelarts.train_job.boot_file_helper"}} data-position="right center" data-variation="mini"></i>
</span>
<a href="https://git.openi.org.cn/OpenIOSSG/MINIST_Example" target="_blank">{{.i18n.Tr "cloudbrain.view_sample"}}</a>
<label style="font-weight: normal;">{{.i18n.Tr "repo.modelarts.train_job.start_file"}}</label>
{{if .bootFile}}
<input style="width: 48.5%;" name="boot_file" id="trainjob_boot_file" value="{{.bootFile}}"
tabindex="3" autofocus required maxlength="255">
{{else}}
<input style="width: 48.5%;" name="boot_file" id="trainjob_boot_file" value="" tabindex="3"
autofocus required maxlength="255">
{{end}}
<span>
<i class="question circle icon link"
data-content={{.i18n.Tr "repo.modelarts.train_job.boot_file_helper"}}
data-position="right center" data-variation="mini"></i>
</span>
<a href="https://git.openi.org.cn/OpenIOSSG/MINIST_Example"
target="_blank">{{.i18n.Tr "cloudbrain.view_sample"}}</a>
</div> </div>
{{template "custom/select_dataset_train" .}} {{template "custom/select_dataset_train" .}}
<span class="tooltips" style="margin-left: 11.5rem;margin-bottom: 2rem;">{{.i18n.Tr "cloudbrain.dataset_path_rule"}}</span>
<span class="tooltips"
style="margin-left: 11.5rem;margin-bottom: 2rem;">{{.i18n.Tr "cloudbrain.dataset_path_rule"}}</span>
<div class="inline unite min_title field"> <div class="inline unite min_title field">
<label style="font-weight: normal;">{{.i18n.Tr "repo.modelarts.train_job.run_parameter"}}</label> <label style="font-weight: normal;">{{.i18n.Tr "repo.modelarts.train_job.run_parameter"}}</label>
<span id="add_run_para" style="margin-left: 0.5rem;cursor:pointer;color: rgba(3, 102, 214, 100);font-size: 14px;line-height: 26px;font-family: SourceHanSansSC-medium;"><i class="plus square outline icon"></i>{{.i18n.Tr "repo.modelarts.train_job.add_run_parameter"}}</span>
<input id="store_run_para" type="hidden" name="run_para_list">
<span id="add_run_para"
style="margin-left: 0.5rem;cursor:pointer;color: rgba(3, 102, 214, 100);font-size: 14px;line-height: 26px;font-family: SourceHanSansSC-medium;"><i
class="plus square outline icon"></i>{{.i18n.Tr "repo.modelarts.train_job.add_run_parameter"}}</span>
<input id="store_run_para" type="hidden" name="run_para_list">
<div class="dynamic field" style="margin-top: 1rem;"> <div class="dynamic field" style="margin-top: 1rem;">
{{if ne 0 (len .params)}}
{{if ne 0 (len .params)}}
{{range $k ,$v := .params}} {{range $k ,$v := .params}}
<div class="two fields width85" id="para{{$k}}">
<div class="field">
<input type="text" name="shipping_first-name" value={{$v.Label}} required>
</div>
<div class="field">
<input type="text" name="shipping_last-name" value={{$v.Value}} required>
</div>
<span>
<i class="trash icon"></i>
</span>

<div class="two fields width85" id="para{{$k}}">
<div class="field">
<input type="text" name="shipping_first-name" value={{$v.Label}} required>
</div>
<div class="field">
<input type="text" name="shipping_last-name" value={{$v.Value}} required>
</div> </div>
<span>
<i class="trash icon"></i>
</span>

</div>
{{end}}
{{end}} {{end}}
{{end}}
</div> </div>
</div> </div>


@@ -199,13 +226,14 @@
<label style="font-weight: normal;">{{.i18n.Tr "repo.modelarts.train_job.resource_pool"}}</label> <label style="font-weight: normal;">{{.i18n.Tr "repo.modelarts.train_job.resource_pool"}}</label>
<select class="ui dropdown" id="trainjob_resource_pool" style='width:385px' name="pool_id"> <select class="ui dropdown" id="trainjob_resource_pool" style='width:385px' name="pool_id">
{{range .resource_pools}} {{range .resource_pools}}
<option value="{{.ID}}">{{.Value}}</option>
<option value="{{.ID}}">{{.Value}}</option>
{{end}} {{end}}
</select> </select>
</div> </div>


<div class="required grouped fields" style="display: none;"> <div class="required grouped fields" style="display: none;">
<label style="font-weight: normal;" for="resource_type">{{.i18n.Tr "repo.modelarts.train_job.resource_type"}}</label>
<label style="font-weight: normal;"
for="resource_type">{{.i18n.Tr "repo.modelarts.train_job.resource_type"}}</label>
<div class="field"> <div class="field">
<div class="ui grid"> <div class="ui grid">
<div class="column"> <div class="column">
@@ -224,29 +252,31 @@
<label style="font-weight: normal;">{{.i18n.Tr "repo.modelarts.train_job.standard"}}</label> <label style="font-weight: normal;">{{.i18n.Tr "repo.modelarts.train_job.standard"}}</label>
<select class="ui dropdown width81" id="trainjob-flavor" style='width:385px' name="flavor"> <select class="ui dropdown width81" id="trainjob-flavor" style='width:385px' name="flavor">
{{range .flavor_infos}} {{range .flavor_infos}}
<option name="flavor" value="{{.Code}}">{{.Value}}</option>
<option name="flavor" value="{{.Code}}">{{.Value}}</option>
{{end}} {{end}}
</select> </select>
</div> </div>
<div class="inline required unite min_title field"> <div class="inline required unite min_title field">
<label style="font-weight: normal;">{{.i18n.Tr "repo.modelarts.train_job.amount_of_compute_node"}}</label>
<label
style="font-weight: normal;">{{.i18n.Tr "repo.modelarts.train_job.amount_of_compute_node"}}</label>


<div class="ui labeled input" style="width: 5%;"> <div class="ui labeled input" style="width: 5%;">


<input style="border-radius: 0;text-align: center;"type="hidden" name="work_server_number" id="trainjob_work_server_num" tabindex="3" autofocus required maxlength="255" value="1" readonly>
<div class="field" id="trainjob_work_server_num_select" name="work_server_number_select">
<select class="ui dropdown width" style='width: 100%;' name="work_server_id">
<option name="server_id" value="1">1</option>
<option name="server_id" value="2">2</option>
</select>
</div>
<input style="border-radius: 0;text-align: center;" type="hidden" name="work_server_number"
id="trainjob_work_server_num" tabindex="3" autofocus required maxlength="255" value="1"
readonly>
<div class="field" id="trainjob_work_server_num_select" name="work_server_number_select">
<select class="ui dropdown width" style='width: 100%;' name="work_server_id">
<option name="server_id" value="1">1</option>
</select>
</div>


</div> </div>
</div> </div>


<div class="inline unite min_title field"> <div class="inline unite min_title field">
<button class="ui create_train_job green button"> <button class="ui create_train_job green button">
{{.i18n.Tr "repo.cloudbrain.new"}}
{{.i18n.Tr "repo.cloudbrain.new"}}
</button> </button>
<a class="ui button" href="/">{{.i18n.Tr "repo.cloudbrain.cancel"}}</a> <a class="ui button" href="/">{{.i18n.Tr "repo.cloudbrain.cancel"}}</a>
</div> </div>
@@ -261,7 +291,7 @@


<script> <script>
let url_href = window.location.pathname.split('create')[0] let url_href = window.location.pathname.split('create')[0]
$(".ui.button").attr('href',url_href)
$(".ui.button").attr('href', url_href)
$('select.dropdown') $('select.dropdown')
.dropdown(); .dropdown();


@@ -283,182 +313,182 @@
// } // }
// }) // })
// 参数增加、删除、修改、保存 // 参数增加、删除、修改、保存
function Add_parameter(i){
value = '<div class="two fields width85" id= "para'+ i +'">' +
'<div class="field">' +
'<input type="text" name="shipping_first-name" required placeholder={{.i18n.Tr "repo.modelarts.train_job.parameter_name"}}> ' +
'</div> ' +
'<div class="field"> ' +
'<input type="text" name="shipping_last-name" required placeholder={{.i18n.Tr "repo.modelarts.train_job.parameter_value"}}>' +
'</div>'+
'<span>' +
'<i class="trash icon">' +
'</i>' +
'</span>' +
'</div>'
function Add_parameter(i) {
value = '<div class="two fields width85" id= "para' + i + '">' +
'<div class="field">' +
'<input type="text" name="shipping_first-name" required placeholder={{.i18n.Tr "repo.modelarts.train_job.parameter_name"}}> ' +
'</div> ' +
'<div class="field"> ' +
'<input type="text" name="shipping_last-name" required placeholder={{.i18n.Tr "repo.modelarts.train_job.parameter_value"}}>' +
'</div>' +
'<span>' +
'<i class="trash icon">' +
'</i>' +
'</span>' +
'</div>'
$(".dynamic.field").append(value) $(".dynamic.field").append(value)
} }


$('#add_run_para').click(function(){
$('#add_run_para').click(function () {
var len = $(".dynamic.field .two.fields").length var len = $(".dynamic.field .two.fields").length
Add_parameter(len) Add_parameter(len)
}); });


$(".dynamic.field").on("click",".trash.icon", function() {
$(".dynamic.field").on("click", ".trash.icon", function () {
var index = $(this).parent().parent().index() var index = $(this).parent().parent().index()
$(this).parent().parent().remove() $(this).parent().parent().remove()
var len = $(".dynamic.field .two.fields").length var len = $(".dynamic.field .two.fields").length
$(".dynamic.field .two.fields").each(function(){
$(".dynamic.field .two.fields").each(function () {
var cur_index = $(this).index() var cur_index = $(this).index()
$(this).attr('id', 'para' + cur_index) $(this).attr('id', 'para' + cur_index)
}) })
}); });


$('.ui.parameter.green.button').click(function(){
$('.ui.parameter.green.button').click(function () {
var parameters = []; var parameters = [];
$('table tr').each(function() {
$(this).find('td:eq(1)').each(function(){
$('table tr').each(function () {
$(this).find('td:eq(1)').each(function () {
parameters.push($(this).text()); parameters.push($(this).text());
}) })
$(this).find('input').each(function(){
$(this).find('input').each(function () {
parameters.push($(this).text()) parameters.push($(this).text())
}) })


}); });
$('.ui.parameter.modal') $('.ui.parameter.modal')
.modal('hide'); .modal('hide');
for(var i = 2; i < parameters.length; i++){
switch(i) {
// 数据集uuid待完成
// case (2):
// console.log(1)
// break;
// $("#trainjob_datasets").val(parameters[i]);
// console.log($("#trainjob_datasets").val())
case (3):
$("input[name='boot_file']").val(parameters[i]);
break;
case (4):
var para = parameters[i].split(" ")
for(var j = 0; j < para.length; j++){
var para_name = para[j].split('=')[0]
var para_value = para[j].split('=')[1]
var len = $(".dynamic.field .two.fields").length
Add_parameter(len)
var pid = 'para' + len
$(".dynamic.field"+ " #" + pid + "").find("input[name=shipping_first-name]").val(para_name)
$(".dynamic.field"+ " #" + pid + "").find("input[name=shipping_last-name]").val(para_value)
}
break;
// 数据集pool_id待完成
// case (5):
// $("select[name='pool_id']").val(parameters[i]);
// break;
case (6):
// $("input[name='work_server_number']").val(parameters[i]);
break;
}
for (var i = 2; i < parameters.length; i++) {
switch (i) {
// 数据集uuid待完成
// case (2):
// console.log(1)
// break;
// $("#trainjob_datasets").val(parameters[i]);
// console.log($("#trainjob_datasets").val())
case (3):
$("input[name='boot_file']").val(parameters[i]);
break;
case (4):
var para = parameters[i].split(" ")
for (var j = 0; j < para.length; j++) {
var para_name = para[j].split('=')[0]
var para_value = para[j].split('=')[1]
var len = $(".dynamic.field .two.fields").length
Add_parameter(len)
var pid = 'para' + len
$(".dynamic.field" + " #" + pid + "").find("input[name=shipping_first-name]").val(para_name)
$(".dynamic.field" + " #" + pid + "").find("input[name=shipping_last-name]").val(para_value)
}
break;
// 数据集pool_id待完成
// case (5):
// $("select[name='pool_id']").val(parameters[i]);
// break;
case (6):
// $("input[name='work_server_number']").val(parameters[i]);
break;
}
} }
}) })


$('.ui.save.checkbox').click(function(){
$('.ui.save.checkbox').click(function () {
$(this).checkbox({ $(this).checkbox({
onChange: function(){
if ($('.ui.save.checkbox').checkbox('is checked')){
onChange: function () {
if ($('.ui.save.checkbox').checkbox('is checked')) {
$('#save_para').removeClass("disabled") $('#save_para').removeClass("disabled")


}else{
} else {
$('#save_para').addClass("disabled") $('#save_para').addClass("disabled")
} }
} }
}); });
}) })


$('.question.circle.icon').hover(function(){
$('.question.circle.icon').hover(function () {
$(this).popup('show') $(this).popup('show')
}); });


$(".item.active.parameter_config").click(function(){
$(".item.active.parameter_config").click(function () {
$('.ui.parameter.modal') $('.ui.parameter.modal')
.modal('setting', 'closable', false) .modal('setting', 'closable', false)
.modal('show'); .modal('show');
}) })


$('.ui.deny.button').click(function(){
$('.ui.deny.button').click(function () {
$('.ui.parameter.modal') $('.ui.parameter.modal')
.modal('hide'); .modal('hide');
}) })
$('select.dropdown') $('select.dropdown')
.dropdown(); .dropdown();


function validate(){
function validate() {
$('.ui.form') $('.ui.form')
.form({
on: 'blur',
fields: {
boot_file: {
identifier : 'boot_file',
rules: [
{
type: 'regExp[/.+\.py$/g]',
.form({
on: 'blur',
fields: {
boot_file: {
identifier: 'boot_file',
rules: [
{
type: 'regExp[/.+\.py$/g]',
}
]
},
display_job_name: {
identifier: 'display_job_name',
rules: [
{
type: 'regExp[/^[a-zA-Z0-9-_]{1,64}[a-zA-Z0-9_]$/]',
}
]
},
attachment: {
identifier: 'attachment',
rules: [
{
type: 'empty',
}
]

},
work_server_number: {
identifier: 'work_server_number',
rules: [
{
type: 'integer[1..25]',
}
]
} }
]
}, },
display_job_name:{
identifier : 'display_job_name',
rules: [
{
type: 'regExp[/^[a-zA-Z0-9-_]{1,64}[a-zA-Z0-9_]$/]',
}
]
onSuccess: function () {
// $('.ui.page.dimmer').dimmer('show')
document.getElementById("mask").style.display = "block"
}, },
attachment:{
identifier : 'attachment',
rules: [
{
type: 'empty',
}
]

},
work_server_number: {
identifier : 'work_server_number',
rules: [
{
type : 'integer[1..25]',
}
]
onFailure: function (e) {
return false;
} }
},
onSuccess: function(){
// $('.ui.page.dimmer').dimmer('show')
document.getElementById("mask").style.display = "block"
},
onFailure: function(e){
return false;
}
})
})
} }
document.onreadystatechange = function() {
document.onreadystatechange = function () {
if (document.readyState === "complete") { if (document.readyState === "complete") {
document.getElementById("mask").style.display = "none" document.getElementById("mask").style.display = "none"
} }
} }
function send_run_para(){
function send_run_para() {
var run_parameters = [] var run_parameters = []
var msg = {} var msg = {}
$(".dynamic.field .two.fields").each(function(){
$(".dynamic.field .two.fields").each(function () {
var para_name = $(this).find('input[name=shipping_first-name]').val() var para_name = $(this).find('input[name=shipping_first-name]').val()
var para_value = $(this).find('input[name=shipping_last-name]').val() var para_value = $(this).find('input[name=shipping_last-name]').val()
run_parameters.push({"label": para_name, "value": para_value})
run_parameters.push({ "label": para_name, "value": para_value })
}) })
msg["parameter"] = run_parameters msg["parameter"] = run_parameters
msg = JSON.stringify(msg) msg = JSON.stringify(msg)
$('#store_run_para').val(msg) $('#store_run_para').val(msg)
} }
function get_name(){
let name1=$("#engine_name .text").text()
let name2=$("#flaver_name .text").text()
function get_name() {
let name1 = $("#engine_name .text").text()
let name2 = $("#flaver_name .text").text()
$("input#ai_engine_name").val(name1) $("input#ai_engine_name").val(name1)
$("input#ai_flaver_name").val(name2) $("input#ai_flaver_name").val(name2)


@@ -467,9 +497,9 @@
$("input#trainjob_work_server_num").val(val_server_num_select) $("input#trainjob_work_server_num").val(val_server_num_select)


} }
$('.ui.create_train_job.green.button').click(function(e) {
$('.ui.create_train_job.green.button').click(function (e) {
get_name() get_name()
send_run_para() send_run_para()
validate() validate()
}) })
</script>
</script>

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

@@ -597,8 +597,12 @@
</div> </div>
<div class="required inline field" id="verionname"> <div class="required inline field" id="verionname">
<label>模型版本</label> <label>模型版本</label>
<input style="width: 45%;" id="version" name="Version" value="" readonly required
maxlength="255">
<input style="width: 45%;" id="version" name="Version" value="" readonly required maxlength="255">
</div>
<div class="unite min_title inline field required">
<label>模型框架</label>
<input type="hidden" id="Engine" name="Engine" required>
<input style="width: 45%;" id="Engine_name" name="Engine_name" readonly required maxlength="255">
</div> </div>
<div class="inline field"> <div class="inline field">
<label>模型标签</label> <label>模型标签</label>
@@ -671,6 +675,14 @@
$('#JobName').val(obj.DisplayJobName).addClass('model_disabled') $('#JobName').val(obj.DisplayJobName).addClass('model_disabled')
$('input[name="JobId"]').val(obj.JobID) $('input[name="JobId"]').val(obj.JobID)
$('input[name="VersionName"]').val(obj.VersionName).addClass('model_disabled') $('input[name="VersionName"]').val(obj.VersionName).addClass('model_disabled')
if(obj.EngineID ==122 || obj.EngineID ==35){
$('input[name="Engine_name"]').val("MindSpore").addClass('model_disabled');
$('input[name="Engine"]').val(2);
}
if(obj.EngineID ==121){
$('input[name="Engine_name"]').val("TensorFlow").addClass('model_disabled');
$('input[name="Engine"]').val(1);
}
$('.ui.dimmer').css({ "background-color": "rgb(136, 136, 136,0.7)" }) $('.ui.dimmer').css({ "background-color": "rgb(136, 136, 136,0.7)" })
createModelName() createModelName()
}, },
@@ -692,6 +704,8 @@
type: 'POST', type: 'POST',
data: data, data: data,
success: function (res) { success: function (res) {
$('input[name="Engine_name"]').val("");
$('input[name="Engine"]').val("");
location.href = `/${userName}/${repoPath}/modelmanage/show_model` location.href = `/${userName}/${repoPath}/modelmanage/show_model`
$('.ui.modal.second').modal('hide') $('.ui.modal.second').modal('hide')
}, },


+ 13
- 11
templates/repo/modelmanage/index.tmpl View File

@@ -266,17 +266,20 @@
$.get(`${repolink}/modelmanage/query_train_job?repoId=${repoId}`, (data) => { $.get(`${repolink}/modelmanage/query_train_job?repoId=${repoId}`, (data) => {


const n_length = data.length const n_length = data.length
let train_html = ''
for (let i = 0; i < n_length; i++) {
train_html += `<div class="item" data-value="${data[i].JobID}">${data[i].DisplayJobName}</div>`
train_html += '</div>'
if(n_length > 0){
let train_html = ''
for (let i = 0; i < n_length; i++) {
train_html += `<div class="item" data-value="${data[i].JobID}">${data[i].DisplayJobName}</div>`
train_html += '</div>'
}
$("#job-name").append(train_html)
$(".ui.dropdown.selection.search.width83").removeClass("loading")
$('#choice_model .default.text').text(data[0].DisplayJobName)
$('#choice_model input[name="JobId"]').val(data[0].JobID)
loadTrainVersion()
}else{
$(".ui.dropdown.selection.search.width83").removeClass("loading")
} }
$("#job-name").append(train_html)
$(".ui.dropdown.selection.search.width83").removeClass("loading")
$('#choice_model .default.text').text(data[0].DisplayJobName)
$('#choice_model input[name="JobId"]').val(data[0].JobID)
loadTrainVersion()

}) })
} }
function loadTrainVersion(value) { function loadTrainVersion(value) {
@@ -298,7 +301,6 @@
} }
$('#choice_version .default.text').text(versionName) $('#choice_version .default.text').text(versionName)
$('#choice_version input[name="VersionName"]').val(versionName) $('#choice_version input[name="VersionName"]').val(versionName)
console.log("1111111111");
setEngine(data[0]) setEngine(data[0])
} }




+ 1
- 1
web_src/js/components/Model.vue View File

@@ -353,7 +353,7 @@ export default {
return "Pytorch"; return "Pytorch";
}else if(model.Engine == 1 || model.Engine == 121){ }else if(model.Engine == 1 || model.Engine == 121){
return "TensorFlow"; return "TensorFlow";
}else if(model.Engine == 2 || model.Engine == 122){
}else if(model.Engine == 2 || model.Engine == 122 || model.Engine == 35){
return "MindSpore"; return "MindSpore";
}else{ }else{
return "Other" return "Other"


Loading…
Cancel
Save