Commit 04e79ad1 authored by Lijiao's avatar Lijiao Committed by chicm-ms
Browse files

Support more search space and maxDuration format (#190)

* Support more search space and maxDuration format

* Update button name

* Fix comments of Chengmin

* Add intermediate result in download experiment parameters
parent 0da67d7b
...@@ -135,6 +135,15 @@ class Para extends React.Component<{}, ParaState> { ...@@ -135,6 +135,15 @@ class Para extends React.Component<{}, ParaState> {
}); });
break; break;
case 'randint':
parallelAxis.push({
dim: i,
name: dimName[i],
max: searchKey._value[0],
min: 0
});
break;
case 'choice': case 'choice':
const data: Array<string> = []; const data: Array<string> = [];
for (let j = 0; j < searchKey._value.length; j++) { for (let j = 0; j < searchKey._value.length; j++) {
...@@ -148,14 +157,12 @@ class Para extends React.Component<{}, ParaState> { ...@@ -148,14 +157,12 @@ class Para extends React.Component<{}, ParaState> {
}); });
break; break;
case 'loguniform': default:
parallelAxis.push({ parallelAxis.push({
dim: i, dim: i,
name: dimName[i] name: dimName[i]
}); });
break;
default:
} }
} }
// get data for every lines. if dim is choice type // get data for every lines. if dim is choice type
......
...@@ -88,6 +88,16 @@ class Sessionpro extends React.Component<{}, SessionState> { ...@@ -88,6 +88,16 @@ class Sessionpro extends React.Component<{}, SessionState> {
}; };
} }
convertTime = (num: number) => {
if (num % 3600 === 0) {
return num / 3600 + 'h';
} else {
const hour = Math.floor(num / 3600);
const min = Math.floor(num / 60 % 60);
return hour > 0 ? `${hour} h ${min} min` : `${min} min`;
}
}
// show session // show session
showSessionPro = () => { showSessionPro = () => {
axios(`${MANAGER_IP}/experiment`, { axios(`${MANAGER_IP}/experiment`, {
...@@ -124,7 +134,7 @@ class Sessionpro extends React.Component<{}, SessionState> { ...@@ -124,7 +134,7 @@ class Sessionpro extends React.Component<{}, SessionState> {
const searchSpace = JSON.parse(sessionData.params.searchSpace); const searchSpace = JSON.parse(sessionData.params.searchSpace);
Object.keys(searchSpace).map(item => { Object.keys(searchSpace).map(item => {
const key = searchSpace[item]._type; const key = searchSpace[item]._type;
if (key === 'loguniform') { if (key === 'loguniform' || key === 'qloguniform') {
let value = searchSpace[item]._value; let value = searchSpace[item]._value;
const a = Math.pow(10, value[0]); const a = Math.pow(10, value[0]);
const b = Math.pow(10, value[1]); const b = Math.pow(10, value[1]);
...@@ -231,17 +241,29 @@ class Sessionpro extends React.Component<{}, SessionState> { ...@@ -231,17 +241,29 @@ class Sessionpro extends React.Component<{}, SessionState> {
axios axios
.all([ .all([
axios.get(`${MANAGER_IP}/experiment`), axios.get(`${MANAGER_IP}/experiment`),
axios.get(`${MANAGER_IP}/trial-jobs`) axios.get(`${MANAGER_IP}/trial-jobs`),
axios.get(`${MANAGER_IP}/metric-data`)
]) ])
.then(axios.spread((res, res1) => { .then(axios.spread((res, res1, res2) => {
if (res.status === 200 && res1.status === 200) { if (res.status === 200 && res1.status === 200 && res2.status === 200) {
if (res.data.params.searchSpace) { if (res.data.params.searchSpace) {
res.data.params.searchSpace = JSON.parse(res.data.params.searchSpace); res.data.params.searchSpace = JSON.parse(res.data.params.searchSpace);
} }
const interResultList = res2.data;
const contentOfExperiment = JSON.stringify(res.data, null, 2); const contentOfExperiment = JSON.stringify(res.data, null, 2);
let trialMessagesArr = res1.data; let trialMessagesArr = res1.data;
Object.keys(trialMessagesArr).map(item => { Object.keys(trialMessagesArr).map(item => {
// transform hyperparameters as object to show elegantly
trialMessagesArr[item].hyperParameters = JSON.parse(trialMessagesArr[item].hyperParameters); trialMessagesArr[item].hyperParameters = JSON.parse(trialMessagesArr[item].hyperParameters);
const trialId = trialMessagesArr[item].id;
// add intermediate result message
trialMessagesArr[item].intermediate = [];
Object.keys(interResultList).map(key => {
const interId = interResultList[key].trialJobId;
if (trialId === interId) {
trialMessagesArr[item].intermediate.push(interResultList[key]);
}
});
}); });
const trialMessages = JSON.stringify(trialMessagesArr, null, 2); const trialMessages = JSON.stringify(trialMessagesArr, null, 2);
const aTag = document.createElement('a'); const aTag = document.createElement('a');
...@@ -358,11 +380,15 @@ class Sessionpro extends React.Component<{}, SessionState> { ...@@ -358,11 +380,15 @@ class Sessionpro extends React.Component<{}, SessionState> {
const { const {
trialProfile, searchSpace, tunerAssessor, tableData, status trialProfile, searchSpace, tunerAssessor, tableData, status
} = this.state; } = this.state;
const maxRuntime = this.convertTime(trialProfile.maxDuration);
let running; let running;
let runningStr = '';
if (trialProfile.endTime === 'not over') { if (trialProfile.endTime === 'not over') {
running = trialProfile.maxDuration - trialProfile.execDuration; running = trialProfile.maxDuration - trialProfile.execDuration;
runningStr = this.convertTime(running);
} else { } else {
running = 0; runningStr = '0';
} }
return ( return (
<div className="session" id="session"> <div className="session" id="session">
...@@ -389,11 +415,11 @@ class Sessionpro extends React.Component<{}, SessionState> { ...@@ -389,11 +415,11 @@ class Sessionpro extends React.Component<{}, SessionState> {
</div> </div>
<p> <p>
<span>Duration</span> <span>Duration</span>
<span className="messcont">{trialProfile.maxDuration}s</span> <span className="messcont">{maxRuntime}</span>
</p> </p>
<p> <p>
<span>Still&nbsp;running</span> <span>Still&nbsp;run</span>
<span className="messcont">{running}s</span> <span className="messcont">{runningStr}</span>
</p> </p>
</div> </div>
<div className="logo"> <div className="logo">
...@@ -492,7 +518,7 @@ class Sessionpro extends React.Component<{}, SessionState> { ...@@ -492,7 +518,7 @@ class Sessionpro extends React.Component<{}, SessionState> {
className="tableButton" className="tableButton"
onClick={this.downExperimentContent} onClick={this.downExperimentContent}
> >
Down Experiment Download experiment summary
</Button> </Button>
</div> </div>
</div> </div>
......
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