From 55493edf52d7bdf8aaff5c2f5e3683c955e6ccc4 Mon Sep 17 00:00:00 2001 From: Gems Guo Date: Mon, 5 Nov 2018 17:41:32 +0800 Subject: [PATCH] Fixed the issue that pip install --user doesn't work in docker as root user --- deployment/pypi/Makefile | 15 +++++---------- .../local/localTrainingService.ts | 14 +++++++------- tools/nni_cmd/launcher.py | 11 +++-------- 3 files changed, 15 insertions(+), 25 deletions(-) diff --git a/deployment/pypi/Makefile b/deployment/pypi/Makefile index a4b77b39aa..2e3cc8ba8b 100644 --- a/deployment/pypi/Makefile +++ b/deployment/pypi/Makefile @@ -9,16 +9,11 @@ build: tar xf $(CWD)node-linux-x64.tar.xz -C node-linux-x64 --strip-components 1 cd $(CWD)../../src/nni_manager && yarn && yarn build cd $(CWD)../../src/webui && yarn && yarn build - rm -rf $(CWD)nni_pkg - cp -r $(CWD)../../src/nni_manager/dist $(CWD)nni_pkg - cp -r $(CWD)../../src/webui/build $(CWD)nni_pkg/static - cp $(CWD)../../src/nni_manager/package.json $(CWD)nni_pkg - cd $(CWD)nni_pkg && yarn --prod - rm -rf $(CWD)nnicmd - rm -rf $(CWD)nni_annotation - cp -r $(CWD)../../tools/nnicmd $(CWD)nnicmd - cp -r $(CWD)../../tools/nni_annotation $(CWD)nni_annotation - cp -r $(CWD)../../tools/trial_tool $(CWD)trial_tool + rm -rf $(CWD)nni + cp -r $(CWD)../../src/nni_manager/dist $(CWD)nni + cp -r $(CWD)../../src/webui/build $(CWD)nni/static + cp $(CWD)../../src/nni_manager/package.json $(CWD)nni + cd $(CWD)nni && yarn --prod cd $(CWD) && python3 setup.py bdist_wheel cd $(CWD)../../src/sdk/pynni && python3 setup.py bdist_wheel cp -r $(CWD)../../src/sdk/pynni/dist/*.whl $(CWD)dist diff --git a/src/nni_manager/training_service/local/localTrainingService.ts b/src/nni_manager/training_service/local/localTrainingService.ts index 6dbde68f87..9927f0c4f5 100644 --- a/src/nni_manager/training_service/local/localTrainingService.ts +++ b/src/nni_manager/training_service/local/localTrainingService.ts @@ -78,7 +78,7 @@ class LocalTrialJobDetail implements TrialJobDetail { public pid?: number; constructor(id: string, status: TrialJobStatus, submitTime: number, - workingDirectory: string, form: JobApplicationForm, sequenceId: number) { + workingDirectory: string, form: JobApplicationForm, sequenceId: number) { this.id = id; this.status = status; this.submitTime = submitTime; @@ -283,13 +283,13 @@ class LocalTrainingService implements TrainingService { public getClusterMetadata(key: string): Promise { switch (key) { case TrialConfigMetadataKey.TRIAL_CONFIG: - let getResult : Promise; - if(!this.localTrailConfig) { + let getResult: Promise; + if (!this.localTrailConfig) { getResult = Promise.reject(new NNIError(NNIErrorNames.NOT_FOUND, `${key} is never set yet`)); } else { - getResult = Promise.resolve(!this.localTrailConfig? '' : JSON.stringify(this.localTrailConfig)); + getResult = Promise.resolve(!this.localTrailConfig ? '' : JSON.stringify(this.localTrailConfig)); } - return getResult; + return getResult; default: return Promise.reject(new NNIError(NNIErrorNames.NOT_FOUND, 'Key not found')); } @@ -297,7 +297,7 @@ class LocalTrainingService implements TrainingService { public cleanUp(): Promise { this.stopping = true; - for(const stream of this.streams) { + for (const stream of this.streams) { stream.destroy(); } return Promise.resolve(); @@ -359,7 +359,7 @@ class LocalTrainingService implements TrainingService { await cpp.exec(`mkdir -p ${trialJobDetail.workingDirectory}`); await cpp.exec(`mkdir -p ${path.join(trialJobDetail.workingDirectory, '.nni')}`); await cpp.exec(`touch ${path.join(trialJobDetail.workingDirectory, '.nni', 'metrics')}`); - await fs.promises.writeFile(path.join(trialJobDetail.workingDirectory, 'run.sh'), runScriptLines.join('\n'), { encoding: 'utf8' }); + await fs.promises.writeFile(path.join(trialJobDetail.workingDirectory, 'run.sh'), runScriptLines.join('\n'), { encoding: 'utf8', mode: 0o777 }); await this.writeParameterFile(trialJobDetail.workingDirectory, (trialJobDetail.form).hyperParameters); await this.writeSequenceIdFile(trialJobId); const process: cp.ChildProcess = cp.exec(`bash ${path.join(trialJobDetail.workingDirectory, 'run.sh')}`); diff --git a/tools/nni_cmd/launcher.py b/tools/nni_cmd/launcher.py index b0819e52d3..065ce22512 100644 --- a/tools/nni_cmd/launcher.py +++ b/tools/nni_cmd/launcher.py @@ -35,7 +35,6 @@ import time import random import string -import site from pathlib import Path @@ -67,12 +66,8 @@ def start_rest_server(port, platform, mode, config_file_name, experiment_id=None exit(1) print_normal('Starting restful server...') - if os.geteuid() == 0: - site_dir = site.getsitepackages()[0] - else: - site_dir = site.getusersitepackages() - python_dir = str(Path(site_dir).parents[2]) - cmds = ['node', os.path.join(python_dir, 'nni', 'main.js'), '--port', str(port), '--mode', platform, '--start_mode', mode] + base_dir = str(Path(os.path.dirname(__file__)).parents[3]) + cmds = ['node', os.path.join(base_dir, 'nni', 'main.js'), '--port', str(port), '--mode', platform, '--start_mode', mode] if mode == 'resume': cmds += ['--experiment_id', experiment_id] stdout_full_path, stderr_full_path = get_log_path(config_file_name) @@ -83,7 +78,7 @@ def start_rest_server(port, platform, mode, config_file_name, experiment_id=None log_header = LOG_HEADER % str(time_now) stdout_file.write(log_header) stderr_file.write(log_header) - process = Popen(cmds, cwd=os.path.join(python_dir, 'nni'), stdout=stdout_file, stderr=stderr_file) + process = Popen(cmds, cwd=os.path.join(base_dir, 'nni'), stdout=stdout_file, stderr=stderr_file) return process, str(time_now) def set_trial_config(experiment_config, port, config_file_name):