From 718a853de573f0cec73774f303c594730592c6f7 Mon Sep 17 00:00:00 2001 From: ychao_1983 Date: Tue, 21 Jun 2022 11:25:14 +0800 Subject: [PATCH 01/70] =?UTF-8?q?=E6=8F=90=E4=BA=A4=E4=BB=A3=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- models/attachment.go | 29 +++++++++++ models/dataset.go | 109 +++++++++++++++++++++++++++++++++++---- models/dataset_star.go | 7 +++ routers/admin/dataset.go | 7 +-- routers/home.go | 23 +++++---- routers/repo/dataset.go | 84 ++++++++++++++++++++++++++++++ routers/routes/routes.go | 5 ++ routers/user/profile.go | 1 + 8 files changed, 243 insertions(+), 22 deletions(-) diff --git a/models/attachment.go b/models/attachment.go index 6fb98a07d..31aefb3d1 100755 --- a/models/attachment.go +++ b/models/attachment.go @@ -560,6 +560,35 @@ func GetAttachmentSizeByDatasetID(datasetID int64) (int64, error) { return total, nil } +func AttachmentsByDatasetOption(datasets []int64, opts *SearchDatasetOptions) ([]*Attachment, error) { + sess := x.NewSession() + defer sess.Close() + var cond = builder.NewCond() + cond = cond.And(builder.In("attachment.dataset_id", datasets)) + if opts.JustNeedZipFile { + cond = cond.And(builder.Gt{"attachment.decompress_state": 0}) + } + if opts.PublicOnly { + cond = cond.And(builder.Gt{"attachment.decompress_state": 0}) + } + if opts.CloudBrainType >= 0 { + cond = cond.And(builder.Eq{"attachment.type": opts.CloudBrainType}) + } + if opts.UploadAttachmentByMe { + cond = cond.And( + builder.Eq{"attachment.uploader_id": opts.OwnerID}, + ) + } + + attachments := make([]*Attachment, 0) + if err := sess.Table(&Attachment{}).Where(cond). + Find(&attachments); err != nil { + return nil, fmt.Errorf("Find: %v", err) + } + return attachments, nil + +} + func GetAllAttachmentSize() (int64, error) { return x.SumInt(&Attachment{}, "size") } diff --git a/models/dataset.go b/models/dataset.go index b7186ac0b..4122b63b2 100755 --- a/models/dataset.go +++ b/models/dataset.go @@ -81,12 +81,14 @@ func (datasets DatasetList) loadAttributes(e Engine) error { if err := e. Where("id > 0"). In("id", keysInt64(userIdSet)). + Cols("id", "lower_name", "name", "full_name", "email"). Find(&users); err != nil { return fmt.Errorf("find users: %v", err) } if err := e. Where("id > 0"). In("id", keysInt64(set)). + Cols("id", "owner_id", "owner_name", "lower_name", "name", "description", "alias", "lower_alias"). Find(&repos); err != nil { return fmt.Errorf("find repos: %v", err) } @@ -98,19 +100,77 @@ func (datasets DatasetList) loadAttributes(e Engine) error { return nil } +func (datasets DatasetList) loadAttachmentAttributes(opts *SearchDatasetOptions) error { + if len(datasets) == 0 { + return nil + } + datasetIDs := make([]int64, len(datasets)) + for i := range datasets { + datasetIDs[i] = datasets[i].ID + } + attachments, err := AttachmentsByDatasetOption(datasetIDs, opts) + if err != nil { + return fmt.Errorf("GetAttachmentsByDatasetIds failed error: %v", err) + } + + permissionMap := make(map[int64]*Permission, len(datasets)) + + for _, attachment := range attachments { + + for i := range datasets { + if attachment.DatasetID == datasets[i].ID { + if opts.StarByMe { + var permission *Permission + if permission = permissionMap[datasets[i].ID]; permission == nil { + permissionInstance, err := GetUserRepoPermission(datasets[i].Repo, opts.User) + if err != nil { + return fmt.Errorf("GetPermission failed error: %v", err) + } + permission = &permissionInstance + } + + if permission.HasAccess() { + datasets[i].Attachments = append(datasets[i].Attachments, attachment) + } else if !attachment.IsPrivate { + datasets[i].Attachments = append(datasets[i].Attachments, attachment) + } + } else { + datasets[i].Attachments = append(datasets[i].Attachments, attachment) + } + + } + + } + + } + + for i := range datasets { + datasets[i].Repo.Owner = nil + } + return nil + +} + type SearchDatasetOptions struct { Keyword string OwnerID int64 + User *User RepoID int64 IncludePublic bool RecommendOnly bool Category string Task string License string - DatasetIDs []int64 + DatasetIDs []int64 // 目前只在StarByMe为true时起作用 ListOptions SearchOrderBy - IsOwner bool + IsOwner bool + StarByMe bool + CloudBrainType int //0 cloudbrain 1 modelarts -1 all + PublicOnly bool + JustNeedZipFile bool + NeedAttachment bool + UploadAttachmentByMe bool } func CreateDataset(dataset *Dataset) (err error) { @@ -159,29 +219,36 @@ func SearchDatasetCondition(opts *SearchDatasetOptions) builder.Cond { if opts.RepoID > 0 { cond = cond.And(builder.Eq{"dataset.repo_id": opts.RepoID}) } - if opts.IncludePublic { + + if opts.PublicOnly { + cond = cond.And(builder.Eq{"dataset.status": DatasetStatusPublic}) + cond = cond.And(builder.Eq{"attachment.is_private": false}) + } else if opts.IncludePublic { cond = cond.And(builder.Eq{"dataset.status": DatasetStatusPublic}) cond = cond.And(builder.Eq{"attachment.is_private": false}) if opts.OwnerID > 0 { - subCon := builder.NewCond() subCon = subCon.And(builder.Eq{"repository.owner_id": opts.OwnerID}) subCon = generateFilterCond(opts, subCon) cond = cond.Or(subCon) } - } else if opts.OwnerID > 0 { + } else if opts.OwnerID > 0 && !opts.StarByMe && !opts.UploadAttachmentByMe { cond = cond.And(builder.Eq{"repository.owner_id": opts.OwnerID}) if !opts.IsOwner { cond = cond.And(builder.Eq{"dataset.status": DatasetStatusPublic}) cond = cond.And(builder.Eq{"attachment.is_private": false}) } } - if len(opts.DatasetIDs) > 0 { - subCon := builder.NewCond() - subCon = subCon.And(builder.In("dataset.id", opts.DatasetIDs)) - cond = cond.Or(subCon) + + if opts.StarByMe { + cond = cond.And(builder.In("dataset.id", opts.DatasetIDs)) + } else { + subCon := builder.NewCond() + subCon = subCon.And(builder.In("dataset.id", opts.DatasetIDs)) + cond = cond.Or(subCon) + } } return cond @@ -207,6 +274,17 @@ func generateFilterCond(opts *SearchDatasetOptions, cond builder.Cond) builder.C cond = cond.And(builder.Eq{"dataset.recommend": opts.RecommendOnly}) } + if opts.JustNeedZipFile { + cond = cond.And(builder.Gt{"attachment.decompress_state": 0}) + } + + if opts.CloudBrainType >= 0 { + cond = cond.And(builder.Eq{"attachment.type": opts.CloudBrainType}) + } + if opts.UploadAttachmentByMe { + cond = cond.And(builder.Eq{"attachment.uploader_id": opts.OwnerID}) + } + return cond } @@ -245,6 +323,12 @@ func SearchDatasetByCondition(opts *SearchDatasetOptions, cond builder.Cond) (Da return nil, 0, fmt.Errorf("LoadAttributes: %v", err) } + if opts.NeedAttachment { + if err = datasets.loadAttachmentAttributes(opts); err != nil { + return nil, 0, fmt.Errorf("LoadAttributes: %v", err) + } + } + return datasets, count, nil } @@ -460,5 +544,12 @@ func GetCollaboratorDatasetIdsByUserID(userID int64) []int64 { _ = x.Table("dataset").Join("INNER", "collaboration", "dataset.repo_id = collaboration.repo_id and collaboration.mode>0 and collaboration.user_id=?", userID). Cols("dataset.id").Find(&datasets) return datasets +} +func GetTeamDatasetIdsByUserID(userID int64) []int64 { + var datasets []int64 + _ = x.Table("dataset").Join("INNER", "team_repo", "dataset.repo_id = team_repo.repo_id"). + Join("INNER", "team_user", "team_repo.team_id=team_user.team_id and team_user.uid=?", userID). + Cols("dataset.id").Find(&datasets) + return datasets } diff --git a/models/dataset_star.go b/models/dataset_star.go index 4b22c2855..2cbd9dc8d 100644 --- a/models/dataset_star.go +++ b/models/dataset_star.go @@ -68,3 +68,10 @@ func isDatasetStaring(e Engine, userID, datasetID int64) bool { has, _ := e.Get(&DatasetStar{0, userID, datasetID, 0}) return has } + +func GetDatasetIdsStarByUser(userID int64) []int64 { + var datasets []int64 + _ = x.Table("dataset_star").Where("uid=?", userID). + Cols("dataset_star.dataset_id").Find(&datasets) + return datasets +} diff --git a/routers/admin/dataset.go b/routers/admin/dataset.go index d1a8f2780..9651233b3 100644 --- a/routers/admin/dataset.go +++ b/routers/admin/dataset.go @@ -77,9 +77,10 @@ func Datasets(ctx *context.Context) { Page: page, PageSize: setting.UI.ExplorePagingNum, }, - Keyword: keyword, - RecommendOnly: ctx.QueryBool("recommend"), - SearchOrderBy: orderBy, + Keyword: keyword, + RecommendOnly: ctx.QueryBool("recommend"), + CloudBrainType: -1, + SearchOrderBy: orderBy, }) if err != nil { ctx.ServerError("SearchDataset", err) diff --git a/routers/home.go b/routers/home.go index ae184a72a..dcd30a139 100755 --- a/routers/home.go +++ b/routers/home.go @@ -346,19 +346,22 @@ func ExploreDatasets(ctx *context.Context) { var datasetsIds []int64 if ownerID > 0 { - datasetsIds = models.GetCollaboratorDatasetIdsByUserID(ownerID) + collaboratorDatasetsIds := models.GetCollaboratorDatasetIdsByUserID(ownerID) + teamDatasetsIds := models.GetTeamDatasetIdsByUserID(ownerID) + datasetsIds = append(collaboratorDatasetsIds, teamDatasetsIds...) } opts := &models.SearchDatasetOptions{ - Keyword: keyword, - IncludePublic: true, - SearchOrderBy: orderBy, - Category: category, - Task: task, - License: license, - OwnerID: ownerID, - DatasetIDs: datasetsIds, - RecommendOnly: ctx.QueryBool("recommend"), + Keyword: keyword, + IncludePublic: true, + SearchOrderBy: orderBy, + Category: category, + Task: task, + License: license, + OwnerID: ownerID, + DatasetIDs: datasetsIds, + RecommendOnly: ctx.QueryBool("recommend"), + CloudBrainType: -1, ListOptions: models.ListOptions{ Page: page, PageSize: 30, diff --git a/routers/repo/dataset.go b/routers/repo/dataset.go index 133262bf3..08db5a613 100755 --- a/routers/repo/dataset.go +++ b/routers/repo/dataset.go @@ -410,6 +410,90 @@ func MyDatasets(ctx *context.Context) { }) } +func datasetMultiple(ctx *context.Context, opts *models.SearchDatasetOptions) { + page := ctx.QueryInt("page") + cloudbrainType := ctx.QueryInt("type") + keyword := strings.Trim(ctx.Query("q"), " ") + orderBy := models.SearchOrderByRecentUpdated + var ownerID int64 + if ctx.User != nil { + ownerID = ctx.User.ID + } + + opts.Keyword = keyword + opts.SearchOrderBy = orderBy + opts.OwnerID = ownerID + opts.RecommendOnly = ctx.QueryBool("recommend") + opts.CloudBrainType = cloudbrainType + opts.ListOptions = models.ListOptions{ + Page: page, + PageSize: setting.UI.DatasetPagingNum, + } + opts.NeedAttachment = true + opts.JustNeedZipFile = true + opts.User = ctx.User + + datasets, count, err := models.SearchDataset(opts) + + if err != nil { + ctx.ServerError("datasets", err) + return + } + + data, err := json.Marshal(datasets) + if err != nil { + log.Error("json.Marshal failed:", err.Error()) + ctx.JSON(200, map[string]string{ + "result_code": "-1", + "error_msg": err.Error(), + "data": "", + }) + return + } + ctx.JSON(200, map[string]string{ + "result_code": "0", + "data": string(data), + "count": strconv.FormatInt(count, 10), + }) + +} + +func CurrentRepoDatasetMultiple(ctx *context.Context) { + + opts := &models.SearchDatasetOptions{ + RepoID: ctx.Repo.Repository.ID, + } + datasetMultiple(ctx, opts) + +} + +func MyDatasetsMultiple(ctx *context.Context) { + + opts := &models.SearchDatasetOptions{ + UploadAttachmentByMe: true, + } + datasetMultiple(ctx, opts) + +} + +func PublicDatasetMultiple(ctx *context.Context) { + + opts := &models.SearchDatasetOptions{ + PublicOnly: true, + } + datasetMultiple(ctx, opts) + +} + +func MyFavoriteDatasetMultiple(ctx *context.Context) { + + opts := &models.SearchDatasetOptions{ + StarByMe: true, + DatasetIDs: models.GetDatasetIdsStarByUser(ctx.User.ID), + } + datasetMultiple(ctx, opts) +} + func PublicDataset(ctx *context.Context) { page := ctx.QueryInt("page") cloudbrainType := ctx.QueryInt("type") diff --git a/routers/routes/routes.go b/routers/routes/routes.go index 7732ff217..d65f4a88e 100755 --- a/routers/routes/routes.go +++ b/routers/routes/routes.go @@ -1026,6 +1026,11 @@ func RegisterRoutes(m *macaron.Macaron) { m.Get("/public_datasets", repo.PublicDataset) m.Get("/my_favorite", repo.MyFavoriteDataset) + m.Get("/current_repo_m", repo.CurrentRepoDatasetMultiple) + m.Get("/my_datasets_m", repo.MyDatasetsMultiple) + m.Get("/public_datasets_m", repo.PublicDatasetMultiple) + m.Get("/my_favorite_m", repo.MyFavoriteDatasetMultiple) + m.Group("/status", func() { m.Get("/:uuid", repo.GetDatasetStatus) }) diff --git a/routers/user/profile.go b/routers/user/profile.go index f82c03a75..30808f235 100755 --- a/routers/user/profile.go +++ b/routers/user/profile.go @@ -263,6 +263,7 @@ func Profile(ctx *context.Context) { Page: page, PageSize: setting.UI.ExplorePagingNum, }, + CloudBrainType: -1, } if len(datasetSearchOptions.SearchOrderBy) == 0 { From 91455626a1a0ce18c5bd7823b6a9ecb3a7bf4455 Mon Sep 17 00:00:00 2001 From: liuzx Date: Tue, 21 Jun 2022 17:57:10 +0800 Subject: [PATCH 02/70] test --- routers/repo/modelarts.go | 1 + 1 file changed, 1 insertion(+) diff --git a/routers/repo/modelarts.go b/routers/repo/modelarts.go index 12a5a0623..f2fa4e370 100755 --- a/routers/repo/modelarts.go +++ b/routers/repo/modelarts.go @@ -985,6 +985,7 @@ func TrainJobCreate(ctx *context.Context, form auth.CreateModelArtsTrainJobForm) FlavorName := form.FlavorName VersionCount := modelarts.VersionCount EngineName := form.EngineName + dataPath = "/test-opendata/attachment/1/2/12974bf4-3865-4995-a14f-e9e2af343f2f12974bf4-3865-4995-a14f-e9e2af343f2f/;s3://test-opendata/attachment/1/2/12974bf4-3865-4995-a14f-e9e2af343f2f12974bf4-3865-4995-a14f-e9e2af343f2f/" count, err := models.GetCloudbrainTrainJobCountByUserID(ctx.User.ID) if err != nil { From 624f1ec7de9276fd7e3b3ce5dc620ba0f4f101d8 Mon Sep 17 00:00:00 2001 From: ychao_1983 Date: Wed, 22 Jun 2022 09:39:40 +0800 Subject: [PATCH 03/70] =?UTF-8?q?=E6=8F=90=E4=BA=A4=E4=BB=A3=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- models/cloudbrain.go | 11 +++++++ modules/grampus/grampus.go | 36 ++++++++++++++++++++- options/locale/locale_en-US.ini | 1 + options/locale/locale_zh-CN.ini | 2 ++ routers/repo/grampus.go | 55 +++++++++++++++++++++++++++++++++ 5 files changed, 104 insertions(+), 1 deletion(-) diff --git a/models/cloudbrain.go b/models/cloudbrain.go index 30dd08aa4..c59554208 100755 --- a/models/cloudbrain.go +++ b/models/cloudbrain.go @@ -564,6 +564,17 @@ type FlavorInfo struct { Desc string `json:"desc"` } +type SpecialPools struct { + Pools []*SpecialPool `json:"pools"` +} +type SpecialPool struct { + Org string `json:"org"` + Type string `json:"type"` + IsExclusive bool `json:"isExclusive"` + Pool []*GpuInfo `json:"pool"` + JobType []string `json:"jobType"` +} + type ImageInfosModelArts struct { ImageInfo []*ImageInfoModelArts `json:"image_info"` } diff --git a/modules/grampus/grampus.go b/modules/grampus/grampus.go index 11749a741..47734c1aa 100755 --- a/modules/grampus/grampus.go +++ b/modules/grampus/grampus.go @@ -1,12 +1,16 @@ package grampus import ( + "encoding/json" + "strings" + + "code.gitea.io/gitea/modules/setting" + "code.gitea.io/gitea/models" "code.gitea.io/gitea/modules/context" "code.gitea.io/gitea/modules/log" "code.gitea.io/gitea/modules/notification" "code.gitea.io/gitea/modules/timeutil" - "strings" ) const ( @@ -28,6 +32,8 @@ var ( poolInfos *models.PoolInfos FlavorInfos *models.FlavorInfos ImageInfos *models.ImageInfosModelArts + + SpecialPools *models.SpecialPools ) type GenerateTrainJobReq struct { @@ -63,6 +69,27 @@ type GenerateTrainJobReq struct { func GenerateTrainJob(ctx *context.Context, req *GenerateTrainJobReq) (err error) { createTime := timeutil.TimeStampNow() + + var CenterID []string + var CenterName []string + + if SpecialPools != nil { + for _, pool := range SpecialPools.Pools { + if !pool.IsExclusive && strings.Contains(req.ComputeResource, pool.Type) { + org, _ := models.GetOrgByName(pool.Org) + if org != nil { + isOrgMember, _ := models.IsOrganizationMember(org.ID, ctx.User.ID) + if isOrgMember { + for _, info := range pool.Pool { + CenterID = append(CenterID, info.Queue) + CenterName = append(CenterName, info.Value) + } + } + } + } + } + } + jobResult, err := createJob(models.CreateGrampusJobRequest{ Name: req.JobName, Tasks: []models.GrampusTasks{ @@ -72,6 +99,8 @@ func GenerateTrainJob(ctx *context.Context, req *GenerateTrainJobReq) (err error ResourceSpecId: req.ResourceSpecId, ImageId: req.ImageId, ImageUrl: req.ImageUrl, + CenterID: CenterID, + CenterName: CenterName, ReplicaNum: 0, }, }, @@ -136,3 +165,8 @@ func TransTrainJobStatus(status string) string { return strings.ToUpper(status) } +func InitSpecialPool() { + if SpecialPools == nil && setting.Grampus.SpecialPools != "" { + json.Unmarshal([]byte(setting.Grampus.SpecialPools), &SpecialPools) + } +} diff --git a/options/locale/locale_en-US.ini b/options/locale/locale_en-US.ini index bcab8d829..13f1e3a36 100755 --- a/options/locale/locale_en-US.ini +++ b/options/locale/locale_en-US.ini @@ -1178,6 +1178,7 @@ model.manage.model_accuracy = Model Accuracy grampus.train_job.ai_center = AI Center grampus.dataset_path_rule = The code is storaged in /tmp/code;the dataset is storaged in /tmp/dataset;and please put your model into /tmp/output, then you can download it online。 +grampus.no_operate_right = You have no right to do this operation. template.items = Template Items template.git_content = Git Content (Default Branch) diff --git a/options/locale/locale_zh-CN.ini b/options/locale/locale_zh-CN.ini index 46d47238d..86ed4a937 100755 --- a/options/locale/locale_zh-CN.ini +++ b/options/locale/locale_zh-CN.ini @@ -1193,6 +1193,8 @@ model.manage.model_accuracy = 模型精度 grampus.train_job.ai_center=智算中心 grampus.dataset_path_rule = 训练脚本存储在/tmp/code中,数据集存储在/tmp/dataset中,训练输出请存储在/tmp/output中以供后续下载。 +grampus.no_operate_right = 您没有权限创建这类任务。 + template.items=模板选项 template.git_content=Git数据(默认分支) template.git_hooks=Git 钩子 diff --git a/routers/repo/grampus.go b/routers/repo/grampus.go index 35e2c5feb..b92644acc 100755 --- a/routers/repo/grampus.go +++ b/routers/repo/grampus.go @@ -71,6 +71,25 @@ func grampusTrainJobNewDataPrepare(ctx *context.Context, processType string) err ctx.Data["images"] = images.Infos } + grampus.InitSpecialPool() + + ctx.Data["GPUEnabled"] = true + ctx.Data["NPUEnabled"] = true + + if grampus.SpecialPools != nil { + for _, pool := range grampus.SpecialPools.Pools { + if pool.IsExclusive { + org, _ := models.GetOrgByName(pool.Org) + if org != nil { + isOrgMember, _ := models.IsOrganizationMember(org.ID, ctx.User.ID) + if !isOrgMember { + ctx.Data[pool.Type+"Enabled"] = false + } + } + } + } + } + //get valid resource specs specs, err := grampus.GetResourceSpecs(processType) if err != nil { @@ -122,10 +141,17 @@ func GrampusTrainJobGpuCreate(ctx *context.Context, form auth.CreateGrampusTrain image := strings.TrimSpace(form.Image) if !jobNamePattern.MatchString(displayJobName) { + grampusTrainJobNewDataPrepare(ctx, grampus.ProcessorTypeGPU) ctx.RenderWithErr(ctx.Tr("repo.cloudbrain_jobname_err"), tplGrampusTrainJobGPUNew, &form) return } + errStr := checkSpecialPool(ctx, "GPU") + if errStr != "" { + grampusTrainJobNewDataPrepare(ctx, grampus.ProcessorTypeGPU) + ctx.RenderWithErr(errStr, tplGrampusTrainJobGPUNew, &form) + } + //check count limit count, err := models.GetGrampusCountByUserID(ctx.User.ID, string(models.JobTypeTrain), models.GPUResource) if err != nil { @@ -257,6 +283,28 @@ func GrampusTrainJobGpuCreate(ctx *context.Context, form auth.CreateGrampusTrain ctx.Redirect(setting.AppSubURL + ctx.Repo.RepoLink + "/modelarts/train-job") } +func checkSpecialPool(ctx *context.Context, resourceType string) string { + grampus.InitSpecialPool() + if grampus.SpecialPools != nil { + for _, pool := range grampus.SpecialPools.Pools { + + if pool.IsExclusive && pool.Type == resourceType { + + org, _ := models.GetOrgByName(pool.Org) + if org != nil { + isOrgMember, _ := models.IsOrganizationMember(org.ID, ctx.User.ID) + if !isOrgMember { + return ctx.Tr("repo.grampus.no_operate_right") + } + } + } + + } + + } + return "" +} + func GrampusTrainJobNpuCreate(ctx *context.Context, form auth.CreateGrampusTrainJobForm) { displayJobName := form.DisplayJobName jobName := util.ConvertDisplayJobNameToJobName(displayJobName) @@ -275,10 +323,17 @@ func GrampusTrainJobNpuCreate(ctx *context.Context, form auth.CreateGrampusTrain engineName := form.EngineName if !jobNamePattern.MatchString(displayJobName) { + grampusTrainJobNewDataPrepare(ctx, grampus.ProcessorTypeNPU) ctx.RenderWithErr(ctx.Tr("repo.cloudbrain_jobname_err"), tplGrampusTrainJobNPUNew, &form) return } + errStr := checkSpecialPool(ctx, "NPU") + if errStr != "" { + grampusTrainJobNewDataPrepare(ctx, grampus.ProcessorTypeNPU) + ctx.RenderWithErr(errStr, tplGrampusTrainJobGPUNew, &form) + } + //check count limit count, err := models.GetGrampusCountByUserID(ctx.User.ID, string(models.JobTypeTrain), models.NPUResource) if err != nil { From 6341d6a2126b60d3b8ca9f3dfb27ffbc84bcaf4b Mon Sep 17 00:00:00 2001 From: ychao_1983 Date: Wed, 22 Jun 2022 10:45:12 +0800 Subject: [PATCH 04/70] =?UTF-8?q?=E6=8F=90=E4=BA=A4=E4=BB=A3=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- modules/setting/setting.go | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/modules/setting/setting.go b/modules/setting/setting.go index abee77579..24b313be6 100755 --- a/modules/setting/setting.go +++ b/modules/setting/setting.go @@ -530,10 +530,11 @@ var ( //grampus config Grampus = struct { - Env string - Host string - UserName string - Password string + Env string + Host string + UserName string + Password string + SpecialPools string }{} //elk config @@ -1400,6 +1401,8 @@ func GetGrampusConfig() { Grampus.Host = sec.Key("SERVER_HOST").MustString("") Grampus.UserName = sec.Key("USERNAME").MustString("") Grampus.Password = sec.Key("PASSWORD").MustString("") + Grampus.SpecialPools = sec.Key("SPECIAL_POOL").MustString("") + } func SetRadarMapConfig() { From cd9729f12912d5c3a259140223767db031ea8814 Mon Sep 17 00:00:00 2001 From: ychao_1983 Date: Wed, 22 Jun 2022 12:29:09 +0800 Subject: [PATCH 05/70] =?UTF-8?q?=E6=8F=90=E4=BA=A4=E4=BB=A3=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- templates/repo/grampus/trainjob/gpu/new.tmpl | 12 ++++++------ templates/repo/grampus/trainjob/npu/new.tmpl | 13 +++++++------ 2 files changed, 13 insertions(+), 12 deletions(-) diff --git a/templates/repo/grampus/trainjob/gpu/new.tmpl b/templates/repo/grampus/trainjob/gpu/new.tmpl index f48d5fdd1..29e7efa03 100755 --- a/templates/repo/grampus/trainjob/gpu/new.tmpl +++ b/templates/repo/grampus/trainjob/gpu/new.tmpl @@ -89,23 +89,23 @@ {{.i18n.Tr "cloudbrain.resource_cluster_openi"}} - - - {{.i18n.Tr "cloudbrain.resource_cluster_c2net"}} - + + + {{.i18n.Tr "cloudbrain.resource_cluster_c2net"}} +