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