public VersionIndexOutputModel(DataSetVersion dataSetVesion) : base(dataSetVesion)
 {
     Id                = dataSetVesion.Id;
     Version           = dataSetVesion.Version;
     DataSetId         = dataSetVesion.DataSetId;
     AquariumDataSetId = dataSetVesion.AquariumDataSetId;
 }
Exemple #2
0
        public async Task <IActionResult> CreateDataSetVersion(long id, [FromBody] VersionCreateInputModel model)
        {
            if (!ModelState.IsValid)
            {
                return(JsonBadRequest("Invalid inputs."));
            }

            var dataSet = await dataSetRepository.GetByIdAsync(model.DataSetId);

            if (dataSet == null)
            {
                return(JsonNotFound($"DataSet ID {model.DataSetId} is not found."));
            }

            var aquariumDataSet = await aquariumDataSetRepository.GetByIdAsync(id);

            if (aquariumDataSet == null)
            {
                return(JsonNotFound($"AquariumDataSet ID {id} is not found."));
            }

            aquariumDataSet.LatestVersion += 1;
            aquariumDataSetRepository.Update(aquariumDataSet);

            var dataSetVersion = new DataSetVersion
            {
                AquariumDataSetId = id,
                Version           = aquariumDataSet.LatestVersion,
                DataSetId         = model.DataSetId,
            };

            aquariumDataSetVersionRepository.Add(dataSetVersion);

            dataSet.IsLocked = true;
            dataSetRepository.Update(dataSet);

            unitOfWork.Commit();
            return(JsonCreated(new VersionIndexOutputModel(dataSetVersion)));
        }
        /// <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);
        }
 public VersionDetailsOutputModel(DataSetVersion dataSetVesion)
     : base(dataSetVesion)
 {
 }