"driver/conv_driver.cpp" did not exist on "71d6b19d18e267bb6b8e04711bc37e241aaed55e"
Commit f253576f authored by Lijiao's avatar Lijiao Committed by QuanluZhang
Browse files

Support hyper-band (#358)

parent 1e9cd5fe
src/webui/public/icon.png

29.9 KB | W: | H:

src/webui/public/icon.png

29.9 KB | W: | H:

src/webui/public/icon.png
src/webui/public/icon.png
src/webui/public/icon.png
src/webui/public/icon.png
  • 2-up
  • Swipe
  • Onion skin
...@@ -103,6 +103,7 @@ class Overview extends React.Component<{}, OverviewState> { ...@@ -103,6 +103,7 @@ class Overview extends React.Component<{}, OverviewState> {
const clusterMetaData = sessionData.params.clusterMetaData; const clusterMetaData = sessionData.params.clusterMetaData;
const endTimenum = sessionData.endTime; const endTimenum = sessionData.endTime;
const assessor = sessionData.params.assessor; const assessor = sessionData.params.assessor;
const advisor = sessionData.params.advisor;
trialPro.push({ trialPro.push({
id: sessionData.id, id: sessionData.id,
author: sessionData.params.authorName, author: sessionData.params.authorName,
...@@ -118,6 +119,7 @@ class Overview extends React.Component<{}, OverviewState> { ...@@ -118,6 +119,7 @@ class Overview extends React.Component<{}, OverviewState> {
trainingServicePlatform: trainingPlatform, trainingServicePlatform: trainingPlatform,
tuner: sessionData.params.tuner, tuner: sessionData.params.tuner,
assessor: assessor ? assessor : undefined, assessor: assessor ? assessor : undefined,
advisor: advisor ? advisor : undefined,
clusterMetaData: clusterMetaData ? clusterMetaData : undefined clusterMetaData: clusterMetaData ? clusterMetaData : undefined
}); });
// search space format loguniform max and min // search space format loguniform max and min
......
...@@ -20,6 +20,7 @@ class TrialInfo extends React.Component<TrialInfoProps, {}> { ...@@ -20,6 +20,7 @@ class TrialInfo extends React.Component<TrialInfoProps, {}> {
trialConcurrency: tiralProInfo.runConcurren, trialConcurrency: tiralProInfo.runConcurren,
tuner: tiralProInfo.tuner, tuner: tiralProInfo.tuner,
assessor: tiralProInfo.assessor ? tiralProInfo.assessor : undefined, assessor: tiralProInfo.assessor ? tiralProInfo.assessor : undefined,
advisor: tiralProInfo.advisor ? tiralProInfo.advisor : undefined,
clusterMetaData: tiralProInfo.clusterMetaData ? tiralProInfo.clusterMetaData : undefined clusterMetaData: tiralProInfo.clusterMetaData ? tiralProInfo.clusterMetaData : undefined
}); });
return ( return (
......
...@@ -22,6 +22,11 @@ interface ParaState { ...@@ -22,6 +22,11 @@ interface ParaState {
visualValue: VisualMapValue; visualValue: VisualMapValue;
} }
interface SearchSpace {
_value: Array<number | string>;
_type: string;
}
message.config({ message.config({
top: 250, top: 250,
duration: 2, duration: 2,
...@@ -54,6 +59,82 @@ class Para extends React.Component<{}, ParaState> { ...@@ -54,6 +59,82 @@ class Para extends React.Component<{}, ParaState> {
}; };
} }
getParallelAxis =
( dimName: Array<string>, searchRange: SearchSpace,
parallelAxis: Array<Dimobj>, accPara: Array<number>,
eachTrialParams: Array<string>, paraYdata: number[][]
) => {
if (this._isMounted) {
this.setState(() => ({
dimName: dimName,
visualValue: {
minAccuracy: accPara.length !== 0 ? Math.min(...accPara) : 0,
maxAccuracy: accPara.length !== 0 ? Math.max(...accPara) : 1
}
}));
}
// search space range and specific value [only number]
for (let i = 0; i < dimName.length; i++) {
const searchKey = searchRange[dimName[i]];
switch (searchKey._type) {
case 'uniform':
case 'quniform':
parallelAxis.push({
dim: i,
name: dimName[i],
max: searchKey._value[1],
min: searchKey._value[0]
});
break;
case 'randint':
parallelAxis.push({
dim: i,
name: dimName[i],
max: searchKey._value[0],
min: 0
});
break;
case 'choice':
const data: Array<string> = [];
for (let j = 0; j < searchKey._value.length; j++) {
data.push(searchKey._value[j].toString());
}
parallelAxis.push({
dim: i,
name: dimName[i],
type: 'category',
data: data
});
break;
default:
parallelAxis.push({
dim: i,
name: dimName[i]
});
}
}
// get data for every lines. if dim is choice type, number -> toString()
Object.keys(eachTrialParams).map(item => {
let temp: Array<number> = [];
for (let i = 0; i < dimName.length; i++) {
if ('type' in parallelAxis[i]) {
temp.push(
eachTrialParams[item][dimName[i]].toString()
);
} else {
temp.push(
eachTrialParams[item][dimName[i]]
);
}
}
paraYdata.push(temp);
});
}
hyperParaPic = () => { hyperParaPic = () => {
axios axios
.all([ .all([
...@@ -66,17 +147,14 @@ class Para extends React.Component<{}, ParaState> { ...@@ -66,17 +147,14 @@ class Para extends React.Component<{}, ParaState> {
const accParaData = res.data; const accParaData = res.data;
const accPara: Array<number> = []; const accPara: Array<number> = [];
// specific value array // specific value array
const speValue: Array<string> = []; const eachTrialParams: Array<string> = [];
// yAxis specific name
const speDimName: Array<string> = [];
const parallelAxis: Array<Dimobj> = []; const parallelAxis: Array<Dimobj> = [];
const paraYdata: number[][] = []; const paraYdata: number[][] = [];
// experiment interface search space obj
const searchRange = JSON.parse(res1.data.params.searchSpace);
const reallySearchKeys = Object.keys(searchRange);
// trial-jobs interface list
Object.keys(accParaData).map(item => { Object.keys(accParaData).map(item => {
if (accParaData[item].hyperParameters !== undefined) {
const tem = JSON.parse(accParaData[item].hyperParameters).parameters;
// get dim and every line specific number
speDimName.push(tem);
}
if (accParaData[item].status === 'SUCCEEDED') { if (accParaData[item].status === 'SUCCEEDED') {
if (accParaData[item].finalMetricData && accParaData[item].hyperParameters) { if (accParaData[item].finalMetricData && accParaData[item].hyperParameters) {
// get acc array // get acc array
...@@ -93,101 +171,32 @@ class Para extends React.Component<{}, ParaState> { ...@@ -93,101 +171,32 @@ class Para extends React.Component<{}, ParaState> {
accPara.push(accReal); accPara.push(accReal);
// get dim and every line specific number // get dim and every line specific number
const temp = JSON.parse(accParaData[item].hyperParameters).parameters; const temp = JSON.parse(accParaData[item].hyperParameters).parameters;
speValue.push(temp); eachTrialParams.push(temp);
} }
} }
}); });
// get [batch_size...] name, default each trial is same const dimName = reallySearchKeys;
// if (speValue.length !== 0) { this.getParallelAxis(dimName, searchRange, parallelAxis, accPara, eachTrialParams, paraYdata);
const dimName = Object.keys(speDimName[0]);
if (this._isMounted) {
this.setState(() => ({
dimName: dimName,
visualValue: {
minAccuracy: accPara.length !== 0 ? Math.min(...accPara) : 0,
maxAccuracy: accPara.length !== 0 ? Math.max(...accPara) : 1
}
}));
}
// search space range and specific value [only number]
const searchRange = JSON.parse(res1.data.params.searchSpace);
for (let i = 0; i < dimName.length; i++) {
const searchKey = searchRange[dimName[i]];
switch (searchKey._type) {
case 'uniform':
case 'quniform':
parallelAxis.push({
dim: i,
name: dimName[i],
max: searchKey._value[1],
min: searchKey._value[0]
});
break;
case 'randint':
parallelAxis.push({
dim: i,
name: dimName[i],
max: searchKey._value[0],
min: 0
});
break;
case 'choice':
const data: Array<string> = [];
for (let j = 0; j < searchKey._value.length; j++) {
data.push(searchKey._value[j].toString());
}
parallelAxis.push({
dim: i,
name: dimName[i],
type: 'category',
data: data
});
break;
default:
parallelAxis.push({
dim: i,
name: dimName[i]
});
}
}
// get data for every lines. if dim is choice type
// number -> toString()
Object.keys(speValue).map(item => {
let temp: Array<number> = [];
for (let i = 0; i < dimName.length; i++) {
if ('type' in parallelAxis[i]) {
temp.push(
speValue[item][dimName[i]].toString()
);
} else {
temp.push(
speValue[item][dimName[i]]
);
}
}
paraYdata.push(temp);
});
// add acc // add acc
Object.keys(paraYdata).map(item => { Object.keys(paraYdata).map(item => {
paraYdata[item].push(accPara[item]); paraYdata[item].push(accPara[item]);
}); });
// according acc to sort ydata // according acc to sort ydata
if (paraYdata.length !== 0) { if (paraYdata.length !== 0) {
const len = paraYdata[0].length - 1; const len = paraYdata[0].length - 1;
paraYdata.sort((a, b) => b[len] - a[len]); paraYdata.sort((a, b) => b[len] - a[len]);
} }
this.setState(() => ({ if (this._isMounted) {
paraBack: { this.setState(() => ({
parallelAxis: parallelAxis, paraBack: {
data: paraYdata parallelAxis: parallelAxis,
} data: paraYdata
})); }
const { percent, swapAxisArr } = this.state; }));
const { paraBack } = this.state; }
const { percent, swapAxisArr, paraBack } = this.state;
// need to cut down the data // need to cut down the data
if (percent !== 0) { if (percent !== 0) {
const linesNum = paraBack.data.length; const linesNum = paraBack.data.length;
...@@ -198,13 +207,7 @@ class Para extends React.Component<{}, ParaState> { ...@@ -198,13 +207,7 @@ class Para extends React.Component<{}, ParaState> {
if (swapAxisArr.length >= 2) { if (swapAxisArr.length >= 2) {
this.swapGraph(paraBack, swapAxisArr); this.swapGraph(paraBack, swapAxisArr);
} }
// draw search space graph this.getOption(paraBack);
if (this._isMounted) {
this.setState({
option: this.getOption(paraBack)
});
}
// }
} }
} }
})); }));
...@@ -297,7 +300,12 @@ class Para extends React.Component<{}, ParaState> { ...@@ -297,7 +300,12 @@ class Para extends React.Component<{}, ParaState> {
}); });
} }
} }
return optionown; // draw search space graph
if (this._isMounted) {
this.setState(() => ({
option: optionown
}));
}
} }
// get swap parallel axis // get swap parallel axis
......
...@@ -32,6 +32,7 @@ interface Experiment { ...@@ -32,6 +32,7 @@ interface Experiment {
trainingServicePlatform: string; trainingServicePlatform: string;
tuner: object; tuner: object;
assessor?: object; assessor?: object;
advisor?: object;
clusterMetaData?: object; clusterMetaData?: object;
} }
......
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