mockedNNIManager.ts 5.52 KB
Newer Older
liuzhe-lz's avatar
liuzhe-lz committed
1
2
// Copyright (c) Microsoft Corporation.
// Licensed under the MIT license.
Deshui Yu's avatar
Deshui Yu committed
3
4
5
6
7
8
9
10
11
12

'use strict';

import { Deferred } from 'ts-deferred';
import { Provider } from 'typescript-ioc';

import { MetricDataRecord, MetricType, TrialJobInfo } from '../../common/datastore';
import { MethodNotImplementedError } from '../../common/errors';
import {
    ExperimentParams, ExperimentProfile, Manager, ProfileUpdateType,
13
    TrialJobStatistics, NNIManagerStatus
Deshui Yu's avatar
Deshui Yu committed
14
15
16
17
18
19
20
21
22
23
} from '../../common/manager';
import {
    TrialJobApplicationForm, TrialJobDetail, TrialJobStatus
} from '../../common/trainingService';

export const testManagerProvider: Provider = {
    get: (): Manager => { return new MockedNNIManager(); }
};

export class MockedNNIManager extends Manager {
24
25
    public getStatus(): NNIManagerStatus {
        return {
26
            status: 'RUNNING',
27
28
29
            errors: []
        }
    }
30
    public updateExperimentProfile(experimentProfile: ExperimentProfile, updateType: ProfileUpdateType): Promise<void> {
Deshui Yu's avatar
Deshui Yu committed
31
32
        return Promise.resolve();
    }
33
34
35
    public importData(data: string): Promise<void> {
        return Promise.resolve();
    }
36
37
38
39
    public async exportData(): Promise<string> {
        const ret: string = '';
        return Promise.resolve(ret);
    }
Deshui Yu's avatar
Deshui Yu committed
40
41
42
43
44
45
46
47
48
49
50
51
    public getTrialJobStatistics(): Promise<TrialJobStatistics[]> {
        const deferred: Deferred<TrialJobStatistics[]> = new Deferred<TrialJobStatistics[]>();
        deferred.resolve([{
            trialJobStatus: 'RUNNING',
            trialJobNumber: 2
        }, {
            trialJobStatus: 'FAILED',
            trialJobNumber: 1
        }]);

        return deferred.promise;
    }
52
53
    public addCustomizedTrialJob(hyperParams: string): Promise<number> {
        return Promise.resolve(99);
Deshui Yu's avatar
Deshui Yu committed
54
55
56
57
58
59
60
61
62
63
64
    }

    public resumeExperiment(): Promise<void> {
        return Promise.resolve();
    }

    public submitTrialJob(form: TrialJobApplicationForm): Promise<TrialJobDetail> {
        const deferred: Deferred<TrialJobDetail> = new Deferred<TrialJobDetail>();
        const jobDetail: TrialJobDetail = {
            id: '1234',
            status: 'RUNNING',
65
66
67
            submitTime: Date.now(),
            startTime: Date.now(),
            endTime: Date.now(),
Deshui Yu's avatar
Deshui Yu committed
68
69
70
71
            tags: ['test'],
            url: 'http://test',
            workingDirectory: '/tmp/mocked',
            form: {
72
73
                sequenceId: 0,
                hyperParameters: { value: '', index: 0 }
Deshui Yu's avatar
Deshui Yu committed
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
            }
        };
        deferred.resolve(jobDetail);

        return deferred.promise;
    }

    public cancelTrialJobByUser(trialJobId: string): Promise<void> {
        return Promise.resolve();
    }

    public getClusterMetadata(key: string): Promise<string> {
        return Promise.resolve('METAVALUE1');
    }

    public startExperiment(experimentParams: ExperimentParams): Promise<string> {
        return Promise.resolve('id-1234');
    }

    public setClusterMetadata(key: string, value: string): Promise<void> {
chicm-ms's avatar
chicm-ms committed
94
        return Promise.resolve();
Deshui Yu's avatar
Deshui Yu committed
95
96
    }

97
98
99
    public getTrialJob(trialJobId: string): Promise<TrialJobInfo> {
        const deferred: Deferred<TrialJobInfo> = new Deferred<TrialJobInfo>();
        const jobInfo: TrialJobInfo = {
Deshui Yu's avatar
Deshui Yu committed
100
101
            id: '1234',
            status: 'SUCCEEDED',
102
103
            startTime: Date.now(),
            endTime: Date.now()
Deshui Yu's avatar
Deshui Yu committed
104
        };
105
        deferred.resolve(jobInfo);
Deshui Yu's avatar
Deshui Yu committed
106
107
108
109
110
111
112
113
114

        return deferred.promise;
    }
    public stopExperiment(): Promise<void> {
        throw new MethodNotImplementedError();
    }
    public getMetricData(trialJobId: string, metricType: MetricType): Promise<MetricDataRecord[]> {
        throw new MethodNotImplementedError();
    }
115
116
117
118
119
120
    public getMetricDataByRange(minSeqId: number, maxSeqId: number): Promise<MetricDataRecord[]> {
        throw new MethodNotImplementedError();
    }
    public getLatestMetricData(): Promise<MetricDataRecord[]> {
        throw new MethodNotImplementedError();
    }
Deshui Yu's avatar
Deshui Yu committed
121
122
123
124
125
126
127
128
    public getExperimentProfile(): Promise<ExperimentProfile> {
        const profile: ExperimentProfile = {
            params: {
                authorName: 'test',
                experimentName: 'exp1',
                trialConcurrency: 2,
                maxExecDuration: 30,
                maxTrialNum: 3,
129
                trainingServicePlatform: 'local',
Deshui Yu's avatar
Deshui Yu committed
130
131
                searchSpace: '{lr: 0.01}',
                tuner: {
132
133
                    className: 'testTuner',
                    checkpointDir: ''
Deshui Yu's avatar
Deshui Yu committed
134
135
136
137
                }
            },
            id: '2345',
            execDuration: 0,
138
139
            startTime: Date.now(),
            endTime: Date.now(),
140
            nextSequenceId: 0,
Deshui Yu's avatar
Deshui Yu committed
141
142
143
144
145
146
147
148
149
            revision: 0
        };

        return Promise.resolve(profile);
    }
    public listTrialJobs(status?: TrialJobStatus): Promise<TrialJobInfo[]> {
        const job1: TrialJobInfo = {
            id: '1234',
            status: 'SUCCEEDED',
150
151
            startTime: Date.now(),
            endTime: Date.now(),
chicm-ms's avatar
chicm-ms committed
152
            finalMetricData: [{
chicm-ms's avatar
chicm-ms committed
153
154
155
156
157
158
                timestamp: 0,
                trialJobId: '3456',
                parameterId: '123',
                type: 'FINAL',
                sequence: 0,
                data: '0.2'
chicm-ms's avatar
chicm-ms committed
159
            }]
Deshui Yu's avatar
Deshui Yu committed
160
161
162
163
        };
        const job2: TrialJobInfo = {
            id: '3456',
            status: 'FAILED',
164
165
            startTime: Date.now(),
            endTime: Date.now(),
chicm-ms's avatar
chicm-ms committed
166
            finalMetricData: [{
chicm-ms's avatar
chicm-ms committed
167
168
169
170
171
172
                timestamp: 0,
                trialJobId: '3456',
                parameterId: '123',
                type: 'FINAL',
                sequence: 0,
                data: '0.2'
chicm-ms's avatar
chicm-ms committed
173
            }]
Deshui Yu's avatar
Deshui Yu committed
174
175
176
177
178
        };

        return Promise.resolve([job1, job2]);
    }
}