#4574 fix-4304 4521

Merged
zouap merged 7 commits from fix-4304 into V20230808 9 months ago
  1. +12
    -0
      models/repo_unit.go
  2. +1
    -0
      models/unit.go
  3. +3
    -0
      models/user.go
  4. +1
    -0
      modules/auth/repo_form.go
  5. +1
    -1
      routers/admin/cloudbrains.go
  6. +12
    -0
      routers/repo/setting.go
  7. +9
    -3
      routers/user/auth.go
  8. +3
    -7
      services/ai_task_service/container_builder/code_builder.go
  9. +36
    -2
      services/ai_task_service/container_builder/dataset_builder.go

+ 12
- 0
models/repo_unit.go View File

@@ -135,6 +135,18 @@ type ModelManageConfig struct {
EnableModelManage bool
}

type HPCConfig struct {
EnableHPC bool
}

func (cfg *HPCConfig) FromDB(bs []byte) error {
return json.Unmarshal(bs, &cfg)
}

func (cfg *HPCConfig) ToDB() ([]byte, error) {
return json.Marshal(cfg)
}

// FromDB fills up a CloudBrainConfig from serialized format.
func (cfg *ModelManageConfig) FromDB(bs []byte) error {
return json.Unmarshal(bs, &cfg)


+ 1
- 0
models/unit.go View File

@@ -28,6 +28,7 @@ const (
UnitTypeCloudBrain UnitType = 11 // 11 CloudBrain
UnitTypeBlockChain UnitType = 12 // 12 BlockChain
UnitTypeModelManage UnitType = 13 // 13 ModelManage
UnitTypeHPC UnitType = 14 // 14 HPC
)

// Value returns integer value for unit type


+ 3
- 0
models/user.go View File

@@ -328,6 +328,9 @@ func (u *User) IsLocal() bool {
func (u *User) IsOAuth2() bool {
return u.LoginType == LoginOAuth2
}
func (u *User) IsCloudBrain() bool {
return u.LoginType == LoginCloudBrain
}

// HasForkedRepo checks if user has already forked a repository with given ID.
func (u *User) HasForkedRepo(repoID int64) bool {


+ 1
- 0
modules/auth/repo_form.go View File

@@ -127,6 +127,7 @@ type RepoSettingForm struct {
EnableDataset bool
EnableCloudBrain bool
EnableModelManager bool
EnableHPC bool
EnableWiki bool
EnableExternalWiki bool
ExternalWikiURL string


+ 1
- 1
routers/admin/cloudbrains.go View File

@@ -233,7 +233,7 @@ func getRepoPathName(rs *models.CloudbrainInfo) string {
}

func getDurationTime(rs *models.CloudbrainInfo) string {
if rs.JobType == "TRAIN" || rs.JobType == "INFERENCE" {
if rs.JobType == "TRAIN" || rs.JobType == "INFERENCE" || rs.JobType == string(models.JobTypeSuperCompute) {
return rs.TrainJobDuration
} else {
return "-"


+ 12
- 0
routers/repo/setting.go View File

@@ -272,6 +272,18 @@ func SettingsPost(ctx *context.Context, form auth.RepoSettingForm) {
deleteUnitTypes = append(deleteUnitTypes, models.UnitTypeCloudBrain)
}

if form.EnableHPC && !models.UnitTypeHPC.UnitGlobalDisabled() {
units = append(units, models.RepoUnit{
RepoID: repo.ID,
Type: models.UnitTypeHPC,
Config: &models.HPCConfig{
EnableHPC: form.EnableHPC,
},
})
} else if !models.UnitTypeCloudBrain.UnitGlobalDisabled() {
deleteUnitTypes = append(deleteUnitTypes, models.UnitTypeCloudBrain)
}

if form.EnableModelManager && !models.UnitTypeModelManage.UnitGlobalDisabled() {
units = append(units, models.RepoUnit{
RepoID: repo.ID,


+ 9
- 3
routers/user/auth.go View File

@@ -1691,7 +1691,7 @@ func ForgotPasswdPost(ctx *context.Context) {
return
}

if !u.IsLocal() && !u.IsOAuth2() {
if !u.IsLocal() && !u.IsOAuth2() && !u.IsCloudBrain() {
ctx.Data["Err_Email"] = true
ctx.RenderWithErr(ctx.Tr("auth.non_local_account"), tplForgotPassword, nil)
return
@@ -1841,7 +1841,10 @@ func ResetPasswdPost(ctx *context.Context) {
}
u.HashPassword(passwd)
u.MustChangePassword = false
if err := models.UpdateUserCols(u, "must_change_password", "passwd", "rands", "salt"); err != nil {
if u.LoginType == models.LoginCloudBrain {
u.LoginType = models.LoginNoType
}
if err := models.UpdateUserCols(u, "must_change_password", "passwd", "rands", "salt", "login_type"); err != nil {
ctx.ServerError("UpdateUser", err)
return
}
@@ -1911,7 +1914,10 @@ func ResetPasswdByPhonePost(ctx *context.Context, form auth.ResetPassWordByPhone
}
u.HashPassword(passwd)
u.MustChangePassword = false
if err := models.UpdateUserCols(u, "must_change_password", "passwd", "rands", "salt"); err != nil {
if u.LoginType == models.LoginCloudBrain {
u.LoginType = models.LoginNoType
}
if err := models.UpdateUserCols(u, "must_change_password", "passwd", "rands", "salt", "login_type"); err != nil {
ctx.ServerError("UpdateUser", err)
return
}


+ 3
- 7
services/ai_task_service/container_builder/code_builder.go View File

@@ -59,13 +59,9 @@ func (b *CodeBuilder) Build(ctx *context.CreationContext) ([]entity.ContainerDat
}

var codeArchiveName, objectKey string
//如果代码是压缩包形式,挂载的是文件,以默认分支命名压缩包(继承原有逻辑)
if !b.Opts.Uncompressed {
codeArchiveName = cloudbrain.DefaultBranchName + ".zip"
objectKey = path.Join(remoteDir, codeArchiveName)
} else {
objectKey = remoteDir + "/"
}
//无论代码是压缩包还是文件夹形式,挂载的都是文件夹,以默认分支命名压缩包

objectKey = remoteDir + "/"

containerPath := ""
if opts.ContainerPath != "" {


+ 36
- 2
services/ai_task_service/container_builder/dataset_builder.go View File

@@ -1,13 +1,15 @@
package container_builder

import (
"path"
"strings"

"code.gitea.io/gitea/entity"
"code.gitea.io/gitea/models"
"code.gitea.io/gitea/modules/log"
"code.gitea.io/gitea/routers/response"
"code.gitea.io/gitea/services/ai_task_service/context"
"path"
"strings"
"code.gitea.io/gitea/services/ai_task_service/storage_helper"
)

type DatasetBuilder struct {
@@ -41,6 +43,38 @@ func (b *DatasetBuilder) Build(ctx *context.CreationContext) ([]entity.Container
return nil, response.PARTIAL_DATASETS_NOT_AVAILABLE
}
var data []entity.ContainerData

//如果是智算GPU调试任务,需要把dataset文件夹也挂载,这样提交镜像时才不会把dataset下的文件提交到镜像中
if ctx.Request.Cluster == entity.C2Net && ctx.Request.JobType == models.JobTypeDebug && ctx.Request.ComputeSource.Name == models.GPU {
log.Info("mount dataset directory.")
jobName := ctx.Request.JobName
storageTypes := b.Opts.AcceptStorageType
uploader := storage_helper.SelectUploaderFromStorageType(storageTypes[0])
remoteDir := path.Join(uploader.GetJobDefaultObjectKeyPrefix(jobName), b.Opts.GetLocalPath())
err := uploader.MKDIR(remoteDir)
if err != nil {
log.Error("MKDIR err.displayJobName = %s err=%v", ctx.Request.DisplayJobName, err)
return nil, response.NewBizError(err)
}

datasetDirectoryObjectKey := remoteDir
if !strings.HasSuffix(remoteDir, "/") {
datasetDirectoryObjectKey = remoteDir + "/"
}
data = append(data, entity.ContainerData{
ContainerPath: b.Opts.ContainerPath,
Name: "dataset",
ReadOnly: false,
ObjectKey: datasetDirectoryObjectKey,
RealPath: uploader.GetRealPath(remoteDir),
Bucket: uploader.GetBucket(),
EndPoint: uploader.GetEndpoint(),
GetBackEndpoint: uploader.GetEndpoint(),
IsDir: true,
StorageType: storageTypes[0],
})
}

for _, datasetInfo := range datasetInfos {
var name, objectKey, s3DownloadUrl string
//如果不是压缩包,那么文件名是去掉后缀以后的数据集名称


Loading…
Cancel
Save