Unverified Commit f37292ae authored by chicm-ms's avatar chicm-ms Committed by GitHub
Browse files

Merge 0.2 into master (#237)

* fix antd (#159)

* quick fix config_pai.yml in examples (#171)

* fix nnictl bug

* add hdfs host validation

* fix bugs

* fix dockerfile

* fix install.sh

* update install.sh

* fix dockerfile

* Set timeout for HDFSUtility exists function

* remove unused TODO

* fix sdk

* add optional for outputDir and dataDir

* refactor dockerfile.base

* Remove unused import in hdfsclientUtility

* add config_pai.yml

* refactor nnictl create logic and add colorful print

* fix nnictl stop logic

* add annotation for config_pai.yml

* add document for start experiment

* fix config.yml

* fix document

* fix dataDir and outputDir in config_pai.yml

* fix config_pai.yml

* Update slidebar icon (#173)

* quick fix bug: assessor validation in nnictl (#200)

* fix nnictl bug

* add hdfs host validation

* fix bugs

* fix dockerfile

* fix install.sh

* update install.sh

* fix dockerfile

* Set timeout for HDFSUtility exists function

* remove unused TODO

* fix sdk

* add optional for outputDir and dataDir

* refactor dockerfile.base

* Remove unused import in hdfsclientUtility

* add config_pai.yml

* refactor nnictl create logic and add colorful print

* fix nnictl stop logic

* add annotation for config_pai.yml

* add document for start experiment

* fix config.yml

* fix document

* fix dataDir and outputDir in config_pai.yml

* fix config_pai.yml

* fix assessor launcher

* Disable the tensorboard button about pai experiment (#192)
parent b29b7e55
...@@ -24,9 +24,9 @@ trial: ...@@ -24,9 +24,9 @@ trial:
#The docker image to run nni job on pai #The docker image to run nni job on pai
image: openpai/pai.example.tensorflow image: openpai/pai.example.tensorflow
#The hdfs directory to store data on pai, format 'hdfs://host:port/directory' #The hdfs directory to store data on pai, format 'hdfs://host:port/directory'
hdfsDataDir: hdfs://10.10.10.10:9000/username/nni dataDir: hdfs://10.10.10.10:9000/username/nni
#The hdfs directory to store output data generated by nni, format 'hdfs://host:port/directory' #The hdfs directory to store output data generated by nni, format 'hdfs://host:port/directory'
hdfsOutputDir: hdfs://10.10.10.10:9000/username/nni outputDir: hdfs://10.10.10.10:9000/username/nni
paiConfig: paiConfig:
#The username to login pai #The username to login pai
userName: username userName: username
......
...@@ -22,9 +22,9 @@ trial: ...@@ -22,9 +22,9 @@ trial:
#The docker image to run nni job on pai #The docker image to run nni job on pai
image: openpai/pai.example.tensorflow image: openpai/pai.example.tensorflow
#The hdfs directory to store data on pai, format 'hdfs://host:port/directory' #The hdfs directory to store data on pai, format 'hdfs://host:port/directory'
hdfsDataDir: hdfs://10.10.10.10:9000/username/nni dataDir: hdfs://10.10.10.10:9000/username/nni
#The hdfs directory to store output data generated by nni, format 'hdfs://host:port/directory' #The hdfs directory to store output data generated by nni, format 'hdfs://host:port/directory'
hdfsOutputDir: hdfs://10.10.10.10:9000/username/nni outputDir: hdfs://10.10.10.10:9000/username/nni
paiConfig: paiConfig:
#The username to login pai #The username to login pai
userName: username userName: username
......
...@@ -23,9 +23,9 @@ trial: ...@@ -23,9 +23,9 @@ trial:
#The docker image to run nni job on pai #The docker image to run nni job on pai
image: openpai/pai.example.tensorflow image: openpai/pai.example.tensorflow
#The hdfs directory to store data on pai, format 'hdfs://host:port/directory' #The hdfs directory to store data on pai, format 'hdfs://host:port/directory'
hdfsDataDir: hdfs://10.10.10.10:9000/username/nni dataDir: hdfs://10.10.10.10:9000/username/nni
#The hdfs directory to store output data generated by nni, format 'hdfs://host:port/directory' #The hdfs directory to store output data generated by nni, format 'hdfs://host:port/directory'
hdfsOutputDir: hdfs://10.10.10.10:9000/username/nni outputDir: hdfs://10.10.10.10:9000/username/nni
paiConfig: paiConfig:
#The username to login pai #The username to login pai
userName: username userName: username
......
...@@ -24,9 +24,9 @@ trial: ...@@ -24,9 +24,9 @@ trial:
#The docker image to run nni job on pai #The docker image to run nni job on pai
image: openpai/pai.example.tensorflow image: openpai/pai.example.tensorflow
#The hdfs directory to store data on pai, format 'hdfs://host:port/directory' #The hdfs directory to store data on pai, format 'hdfs://host:port/directory'
hdfsDataDir: hdfs://10.10.10.10:9000/username/nni dataDir: hdfs://10.10.10.10:9000/username/nni
#The hdfs directory to store output data generated by nni, format 'hdfs://host:port/directory' #The hdfs directory to store output data generated by nni, format 'hdfs://host:port/directory'
hdfsOutputDir: hdfs://10.10.10.10:9000/username/nni outputDir: hdfs://10.10.10.10:9000/username/nni
paiConfig: paiConfig:
#The username to login pai #The username to login pai
userName: username userName: username
......
...@@ -24,9 +24,9 @@ trial: ...@@ -24,9 +24,9 @@ trial:
#The docker image to run nni job on pai #The docker image to run nni job on pai
image: openpai/pai.example.tensorflow image: openpai/pai.example.tensorflow
#The hdfs directory to store data on pai, format 'hdfs://host:port/directory' #The hdfs directory to store data on pai, format 'hdfs://host:port/directory'
hdfsDataDir: hdfs://10.10.10.10:9000/username/nni dataDir: hdfs://10.10.10.10:9000/username/nni
#The hdfs directory to store output data generated by nni, format 'hdfs://host:port/directory' #The hdfs directory to store output data generated by nni, format 'hdfs://host:port/directory'
hdfsOutputDir: hdfs://10.10.10.10:9000/username/nni outputDir: hdfs://10.10.10.10:9000/username/nni
paiConfig: paiConfig:
#The username to login pai #The username to login pai
userName: username userName: username
......
...@@ -23,9 +23,9 @@ trial: ...@@ -23,9 +23,9 @@ trial:
#The docker image to run nni job on pai #The docker image to run nni job on pai
image: openpai/pai.example.tensorflow image: openpai/pai.example.tensorflow
#The hdfs directory to store data on pai, format 'hdfs://host:port/directory' #The hdfs directory to store data on pai, format 'hdfs://host:port/directory'
hdfsDataDir: hdfs://10.10.10.10:9000/username/nni dataDir: hdfs://10.10.10.10:9000/username/nni
#The hdfs directory to store output data generated by nni, format 'hdfs://host:port/directory' #The hdfs directory to store output data generated by nni, format 'hdfs://host:port/directory'
hdfsOutputDir: hdfs://10.10.10.10:9000/username/nni outputDir: hdfs://10.10.10.10:9000/username/nni
paiConfig: paiConfig:
#The username to login pai #The username to login pai
userName: username userName: username
......
...@@ -24,9 +24,9 @@ trial: ...@@ -24,9 +24,9 @@ trial:
#The docker image to run nni job on pai #The docker image to run nni job on pai
image: openpai/pai.example.tensorflow image: openpai/pai.example.tensorflow
#The hdfs directory to store data on pai, format 'hdfs://host:port/directory' #The hdfs directory to store data on pai, format 'hdfs://host:port/directory'
hdfsDataDir: hdfs://10.10.10.10:9000/username/nni dataDir: hdfs://10.10.10.10:9000/username/nni
#The hdfs directory to store output data generated by nni, format 'hdfs://host:port/directory' #The hdfs directory to store output data generated by nni, format 'hdfs://host:port/directory'
hdfsOutputDir: hdfs://10.10.10.10:9000/username/nni outputDir: hdfs://10.10.10.10:9000/username/nni
paiConfig: paiConfig:
#The username to login pai #The username to login pai
userName: username userName: username
......
...@@ -24,9 +24,9 @@ trial: ...@@ -24,9 +24,9 @@ trial:
#The docker image to run nni job on pai #The docker image to run nni job on pai
image: openpai/pai.example.tensorflow image: openpai/pai.example.tensorflow
#The hdfs directory to store data on pai, format 'hdfs://host:port/directory' #The hdfs directory to store data on pai, format 'hdfs://host:port/directory'
hdfsDataDir: hdfs://10.10.10.10:9000/username/nni dataDir: hdfs://10.10.10.10:9000/username/nni
#The hdfs directory to store output data generated by nni, format 'hdfs://host:port/directory' #The hdfs directory to store output data generated by nni, format 'hdfs://host:port/directory'
hdfsOutputDir: hdfs://10.10.10.10:9000/username/nni outputDir: hdfs://10.10.10.10:9000/username/nni
paiConfig: paiConfig:
#The username to login pai #The username to login pai
userName: username userName: username
......
...@@ -55,6 +55,7 @@ interface TabState { ...@@ -55,6 +55,7 @@ interface TabState {
trialJobs: object; trialJobs: object;
intermediateOption: object; intermediateOption: object;
modalVisible: boolean; modalVisible: boolean;
disTensorButton: boolean;
} }
class TrialStatus extends React.Component<{}, TabState> { class TrialStatus extends React.Component<{}, TabState> {
...@@ -83,7 +84,8 @@ class TrialStatus extends React.Component<{}, TabState> { ...@@ -83,7 +84,8 @@ class TrialStatus extends React.Component<{}, TabState> {
option: {}, option: {},
intermediateOption: {}, intermediateOption: {},
trialJobs: {}, trialJobs: {},
modalVisible: false modalVisible: false,
disTensorButton: false
}; };
} }
...@@ -368,6 +370,26 @@ class TrialStatus extends React.Component<{}, TabState> { ...@@ -368,6 +370,26 @@ class TrialStatus extends React.Component<{}, TabState> {
} }
} }
// experiment mode is pai, display tensorboard button
disTensorBoard = () => {
axios(`${MANAGER_IP}/experiment`, {
method: 'GET'
})
.then(res => {
if (res.status === 200) {
const experimentObj = res.data;
const trainPlatform = experimentObj.params.trainingServicePlatform;
if (trainPlatform && trainPlatform === 'pai') {
if (this._isMounted) {
this.setState(() => ({
disTensorButton: true
}));
}
}
}
});
}
componentDidMount() { componentDidMount() {
this._isMounted = true; this._isMounted = true;
...@@ -375,6 +397,7 @@ class TrialStatus extends React.Component<{}, TabState> { ...@@ -375,6 +397,7 @@ class TrialStatus extends React.Component<{}, TabState> {
this.drawRunGraph(); this.drawRunGraph();
// the init of trials status in the table // the init of trials status in the table
this.drawTable(); this.drawTable();
this.disTensorBoard();
this.intervalID = window.setInterval(this.drawRunGraph, 10000); this.intervalID = window.setInterval(this.drawRunGraph, 10000);
this.intervalIDS = window.setInterval(this.drawTable, 10000); this.intervalIDS = window.setInterval(this.drawTable, 10000);
} }
...@@ -387,7 +410,7 @@ class TrialStatus extends React.Component<{}, TabState> { ...@@ -387,7 +410,7 @@ class TrialStatus extends React.Component<{}, TabState> {
} }
render() { render() {
const { intermediateOption, modalVisible, option, tableData } = this.state; const { intermediateOption, modalVisible, option, tableData, disTensorButton } = this.state;
let bgColor = ''; let bgColor = '';
const trialJob: Array<TrialJob> = []; const trialJob: Array<TrialJob> = [];
trialJobStatus.map(item => { trialJobStatus.map(item => {
...@@ -490,7 +513,7 @@ class TrialStatus extends React.Component<{}, TabState> { ...@@ -490,7 +513,7 @@ class TrialStatus extends React.Component<{}, TabState> {
</Button> </Button>
) )
); );
}, }
}, { }, {
title: 'Tensor', title: 'Tensor',
dataIndex: 'tensor', dataIndex: 'tensor',
...@@ -501,6 +524,7 @@ class TrialStatus extends React.Component<{}, TabState> { ...@@ -501,6 +524,7 @@ class TrialStatus extends React.Component<{}, TabState> {
<Button <Button
type="primary" type="primary"
className="tableButton" className="tableButton"
disabled={disTensorButton}
onClick={this.getTensorpage.bind(this, record.id)} onClick={this.getTensorpage.bind(this, record.id)}
> >
TensorBoard TensorBoard
...@@ -509,7 +533,6 @@ class TrialStatus extends React.Component<{}, TabState> { ...@@ -509,7 +533,6 @@ class TrialStatus extends React.Component<{}, TabState> {
}, },
} }
]; ];
const openRow = (record: TableObj) => { const openRow = (record: TableObj) => {
let isHasParameters = true; let isHasParameters = true;
if (record.description.parameters.error) { if (record.description.parameters.error) {
......
...@@ -50,7 +50,7 @@ Optional('assessor'): Or({ ...@@ -50,7 +50,7 @@ Optional('assessor'): Or({
'builtinAssessorName': lambda x: x in ['Medianstop'], 'builtinAssessorName': lambda x: x in ['Medianstop'],
'classArgs': { 'classArgs': {
'optimize_mode': lambda x: x in ['maximize', 'minimize']}, 'optimize_mode': lambda x: x in ['maximize', 'minimize']},
'gpuNum': And(int, lambda x: 0 <= x <= 99999) Optional('gpuNum'): And(int, lambda x: 0 <= x <= 99999)
},{ },{
'codeDir': os.path.exists, 'codeDir': os.path.exists,
'classFileName': str, 'classFileName': str,
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment