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

Multi final metrics (#377)

* Rest retrieve multiple final results for multiphase job

* updates
parent e577bafd
......@@ -66,7 +66,7 @@ interface TrialJobInfo {
endTime?: number;
hyperParameters?: string[];
logPath?: string;
finalMetricData?: MetricDataRecord;
finalMetricData?: MetricDataRecord[];
stderrPath?: string;
}
......
......@@ -163,7 +163,7 @@ class NNIDataStore implements DataStore {
}
const map: Map<string, TrialJobInfo> = this.getTrialJobsByReplayEvents(trialJobEvents);
const finalMetricsMap: Map<string, MetricDataRecord> = await this.getFinalMetricData(trialJobId);
const finalMetricsMap: Map<string, MetricDataRecord[]> = await this.getFinalMetricData(trialJobId);
for (const key of map.keys()) {
const jobInfo: TrialJobInfo | undefined = map.get(key);
......@@ -181,17 +181,23 @@ class NNIDataStore implements DataStore {
return result;
}
private async getFinalMetricData(trialJobId?: string): Promise<Map<string, MetricDataRecord>> {
const map: Map<string, MetricDataRecord> = new Map();
private async getFinalMetricData(trialJobId?: string): Promise<Map<string, MetricDataRecord[]>> {
const map: Map<string, MetricDataRecord[]> = new Map();
const metrics: MetricDataRecord[] = await this.getMetricData(trialJobId, 'FINAL');
const multiPhase: boolean = await this.isMultiPhase();
for (const metric of metrics) {
if (map.has(metric.trialJobId) && !multiPhase) {
this.log.error(`Found multiple FINAL results for trial job ${trialJobId}`);
const existMetrics: MetricDataRecord[] | undefined = map.get(metric.trialJobId);
if (existMetrics !== undefined) {
if (!multiPhase) {
this.log.error(`Found multiple FINAL results for trial job ${trialJobId}, metrics: ${JSON.stringify(metrics)}`);
} else {
existMetrics.push(metric);
}
} else {
map.set(metric.trialJobId, [metric]);
}
map.set(metric.trialJobId, metric);
}
return map;
......
......@@ -159,28 +159,28 @@ export class MockedNNIManager extends Manager {
status: 'SUCCEEDED',
startTime: Date.now(),
endTime: Date.now(),
finalMetricData: {
finalMetricData: [{
timestamp: 0,
trialJobId: '3456',
parameterId: '123',
type: 'FINAL',
sequence: 0,
data: '0.2'
}
}]
};
const job2: TrialJobInfo = {
id: '3456',
status: 'FAILED',
startTime: Date.now(),
endTime: Date.now(),
finalMetricData: {
finalMetricData: [{
timestamp: 0,
trialJobId: '3456',
parameterId: '123',
type: 'FINAL',
sequence: 0,
data: '0.2'
}
}]
};
return Promise.resolve([job1, job2]);
......
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