/// <summary> /// 前処理あり実験の学習を開始する /// </summary> private async Task <IActionResult> RunExperimentTrainingWithPreprocess(CreateInputModel model, TemplateVersion templateVersion, DataSetVersion dataSetVersion, ExperimentPreprocess experimentPreprocess) { var registryTokenKey = await RegistRegistryToTenantAsync(templateVersion.TrainingContainerRegistry, templateVersion.TrainingContainerToken); if (registryTokenKey == null) { return(JsonBadRequest("Cannot register registry token")); } var gitToken = templateVersion.TrainingRepositoryToken ?? UserGitToken(templateVersion.TrainingRepositoryGitId); // 実験IDを発行するため、Experimentをここで作成 var experiment = new Experiment { Name = model.Name, DataSetId = model.DataSetId, DataSetVersionId = model.DataSetVersionId, TemplateId = model.TemplateId, TemplateVersionId = model.TemplateVersionId, }; experimentRepository.Add(experiment); unitOfWork.Commit(); // kamonohashi学習に必要な情報を設定 var trainingCreateInputModel = new ApiModels.TrainingApiModels.CreateInputModel { Name = model.Name, ContainerImage = new ContainerImageInputModel { RegistryId = templateVersion.TrainingContainerRegistryId, Image = templateVersion.TrainingContainerImage, Tag = templateVersion.TrainingContainerTag, }, // 前処理あり実験の学習はデータセットを使用しないが、 // kamonohashi学習ではデータセットを省略できないので、ダミーを指定している。 DataSetId = dataSetVersion.DataSetId, ParentIds = new List <long> { experimentPreprocess.TrainingHistoryId, }, GitModel = new GitCommitInputModel { GitId = templateVersion.TrainingRepositoryGitId, Repository = templateVersion.TrainingRepositoryName, Owner = templateVersion.TrainingRepositoryOwner, Branch = templateVersion.TrainingRepositoryBranch, CommitId = templateVersion.TrainingRepositoryCommitId, }, EntryPoint = templateVersion.TrainingEntryPoint, Options = null, Cpu = templateVersion.TrainingCpu, Memory = templateVersion.TrainingMemory, Gpu = templateVersion.TrainingGpu, Partition = null, Ports = null, Memo = $"Training of aquarium. experimentId:{ experiment.Id}", Tags = null, Zip = false, LocalDataSet = false, }; // kamonohashi学習を開始 (var trainingHistory, var result) = await TrainingController.DoCreate(trainingCreateInputModel, dataSetRepository, nodeRepository, tenantRepository, trainingHistoryRepository, clusterManagementLogic, dataSetLogic, gitLogic, tagLogic, unitOfWork, CurrentUserInfo, ModelState, RequestUrl, "experiment_training_after_preproc", registryTokenKey, gitToken); // 実験の学習とkamonohashi学習を結び付ける if (trainingHistory != null) { experiment.ExperimentPreprocessId = experimentPreprocess.Id; experiment.TrainingHistoryId = trainingHistory.Id; experimentRepository.Update(experiment); unitOfWork.Commit(); ((JsonResult)result).Value = new SimpleOutputModel(experiment); } else { experimentRepository.Delete(experiment); unitOfWork.Commit(); } return(result); }
/// <summary> /// 前処理あり実験の前処理を開始する /// </summary> private async Task <IActionResult> RunExperimentPreprocess(CreateInputModel model, TemplateVersion templateVersion, DataSetVersion dataSetVersion) { var registryTokenKey = await RegistRegistryToTenantAsync(templateVersion.PreprocessContainerRegistry, templateVersion.PreprocessContainerToken); if (registryTokenKey == null) { return(JsonBadRequest("Cannot register registry token")); } var gitToken = templateVersion.PreprocessRepositoryToken ?? UserGitToken(templateVersion.PreprocessRepositoryGitId); // 実験IDを発行するため、Experimentをここで作成 var experiment = new Experiment { Name = model.Name, DataSetId = model.DataSetId, DataSetVersionId = model.DataSetVersionId, TemplateId = model.TemplateId, TemplateVersionId = model.TemplateVersionId, }; experimentRepository.Add(experiment); unitOfWork.Commit(); // kamonohashi学習に必要な情報を設定 var trainingCreateInputModel = new ApiModels.TrainingApiModels.CreateInputModel { Name = model.Name, ContainerImage = new ContainerImageInputModel { RegistryId = templateVersion.PreprocessContainerRegistryId, Image = templateVersion.PreprocessContainerImage, Tag = templateVersion.PreprocessContainerTag, }, DataSetId = dataSetVersion.DataSetId, ParentIds = null, GitModel = new GitCommitInputModel { GitId = templateVersion.PreprocessRepositoryGitId, Repository = templateVersion.PreprocessRepositoryName, Owner = templateVersion.PreprocessRepositoryOwner, Branch = templateVersion.PreprocessRepositoryBranch, CommitId = templateVersion.PreprocessRepositoryCommitId, }, EntryPoint = templateVersion.PreprocessEntryPoint, Options = new Dictionary <string, string> { { "EXPERIMENT_ID", experiment.Id.ToString() }, }, Cpu = templateVersion.PreprocessCpu, Memory = templateVersion.PreprocessMemory, Gpu = templateVersion.PreprocessGpu, Partition = null, Ports = null, Memo = $"Preprocess of aquarium. TemplateId:{experiment.TemplateId} ,TemplateVersion:{experiment.TemplateVersion.Version}, DataSetId:{experiment.DataSetId},DataSetVersion:{experiment.DataSetVersion.Version} ", Tags = null, Zip = false, LocalDataSet = false, }; // kamonohashi学習を開始 (var trainingHistory, var result) = await TrainingController.DoCreate(trainingCreateInputModel, dataSetRepository, nodeRepository, tenantRepository, trainingHistoryRepository, clusterManagementLogic, dataSetLogic, gitLogic, tagLogic, unitOfWork, CurrentUserInfo, ModelState, RequestUrl, "experiment_preproc", registryTokenKey, gitToken); // 実験の前処理とkamonohashi学習を結び付ける if (trainingHistory != null) { var experimentPreprocess = new ExperimentPreprocess { DataSetId = dataSetVersion.AquariumDataSetId, DataSetVersionId = dataSetVersion.Id, TemplateId = templateVersion.TemplateId, TemplateVersionId = templateVersion.Id, TrainingHistoryId = trainingHistory.Id, }; experimentPreprocessRepository.Add(experimentPreprocess); experiment.ExperimentPreprocess = experimentPreprocess; experimentRepository.Update(experiment); unitOfWork.Commit(); ((JsonResult)result).Value = new SimpleOutputModel(experiment); } else { experimentRepository.Delete(experiment); unitOfWork.Commit(); } return(result); }