mockedNNIManager.ts 6.62 KB
Newer Older
Deshui Yu's avatar
Deshui Yu committed
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
/**
 * Copyright (c) Microsoft Corporation
 * All rights reserved.
 *
 * MIT License
 *
 * Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated
 * documentation files (the "Software"), to deal in the Software without restriction, including without limitation
 * the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and
 * to permit persons to whom the Software is furnished to do so, subject to the following conditions:
 * The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
 *
 * THE SOFTWARE IS PROVIDED *AS IS*, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING
 * BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
 * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
 * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 */

'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,
29
    TrialJobStatistics, NNIManagerStatus
Deshui Yu's avatar
Deshui Yu committed
30
31
32
33
34
35
36
37
38
39
} from '../../common/manager';
import {
    TrialJobApplicationForm, TrialJobDetail, TrialJobStatus
} from '../../common/trainingService';

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

export class MockedNNIManager extends Manager {
40
41
    public getStatus(): NNIManagerStatus {
        return {
42
            status: 'RUNNING',
43
44
45
            errors: []
        }
    }
46
    public updateExperimentProfile(experimentProfile: ExperimentProfile, updateType: ProfileUpdateType): Promise<void> {
Deshui Yu's avatar
Deshui Yu committed
47
48
        return Promise.resolve();
    }
49
50
51
    public importData(data: string): Promise<void> {
        return Promise.resolve();
    }
52
53
54
55
    public async exportData(): Promise<string> {
        const ret: string = '';
        return Promise.resolve(ret);
    }
Deshui Yu's avatar
Deshui Yu committed
56
57
58
59
60
61
62
63
64
65
66
67
    public getTrialJobStatistics(): Promise<TrialJobStatistics[]> {
        const deferred: Deferred<TrialJobStatistics[]> = new Deferred<TrialJobStatistics[]>();
        deferred.resolve([{
            trialJobStatus: 'RUNNING',
            trialJobNumber: 2
        }, {
            trialJobStatus: 'FAILED',
            trialJobNumber: 1
        }]);

        return deferred.promise;
    }
68
69
    public addCustomizedTrialJob(hyperParams: string): Promise<number> {
        return Promise.resolve(99);
Deshui Yu's avatar
Deshui Yu committed
70
71
72
73
74
75
76
77
78
79
80
    }

    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',
81
82
83
            submitTime: Date.now(),
            startTime: Date.now(),
            endTime: Date.now(),
Deshui Yu's avatar
Deshui Yu committed
84
85
86
87
88
            tags: ['test'],
            // tslint:disable-next-line:no-http-string
            url: 'http://test',
            workingDirectory: '/tmp/mocked',
            form: {
89
90
                sequenceId: 0,
                hyperParameters: { value: '', index: 0 }
Deshui Yu's avatar
Deshui Yu committed
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
            }
        };
        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
111
        return Promise.resolve();
Deshui Yu's avatar
Deshui Yu committed
112
113
    }

114
115
116
    public getTrialJob(trialJobId: string): Promise<TrialJobInfo> {
        const deferred: Deferred<TrialJobInfo> = new Deferred<TrialJobInfo>();
        const jobInfo: TrialJobInfo = {
Deshui Yu's avatar
Deshui Yu committed
117
118
            id: '1234',
            status: 'SUCCEEDED',
119
120
            startTime: Date.now(),
            endTime: Date.now()
Deshui Yu's avatar
Deshui Yu committed
121
        };
122
        deferred.resolve(jobInfo);
Deshui Yu's avatar
Deshui Yu committed
123
124
125
126
127
128
129
130
131

        return deferred.promise;
    }
    public stopExperiment(): Promise<void> {
        throw new MethodNotImplementedError();
    }
    public getMetricData(trialJobId: string, metricType: MetricType): Promise<MetricDataRecord[]> {
        throw new MethodNotImplementedError();
    }
132
133
134
135
136
137
    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
138
139
140
141
142
143
144
145
    public getExperimentProfile(): Promise<ExperimentProfile> {
        const profile: ExperimentProfile = {
            params: {
                authorName: 'test',
                experimentName: 'exp1',
                trialConcurrency: 2,
                maxExecDuration: 30,
                maxTrialNum: 3,
146
                trainingServicePlatform: 'local',
Deshui Yu's avatar
Deshui Yu committed
147
148
                searchSpace: '{lr: 0.01}',
                tuner: {
149
150
                    className: 'testTuner',
                    checkpointDir: ''
Deshui Yu's avatar
Deshui Yu committed
151
152
153
154
                }
            },
            id: '2345',
            execDuration: 0,
155
156
            startTime: Date.now(),
            endTime: Date.now(),
157
            nextSequenceId: 0,
Deshui Yu's avatar
Deshui Yu committed
158
159
160
161
162
163
164
165
166
            revision: 0
        };

        return Promise.resolve(profile);
    }
    public listTrialJobs(status?: TrialJobStatus): Promise<TrialJobInfo[]> {
        const job1: TrialJobInfo = {
            id: '1234',
            status: 'SUCCEEDED',
167
168
            startTime: Date.now(),
            endTime: Date.now(),
chicm-ms's avatar
chicm-ms committed
169
            finalMetricData: [{
chicm-ms's avatar
chicm-ms committed
170
171
172
173
174
175
                timestamp: 0,
                trialJobId: '3456',
                parameterId: '123',
                type: 'FINAL',
                sequence: 0,
                data: '0.2'
chicm-ms's avatar
chicm-ms committed
176
            }]
Deshui Yu's avatar
Deshui Yu committed
177
178
179
180
        };
        const job2: TrialJobInfo = {
            id: '3456',
            status: 'FAILED',
181
182
            startTime: Date.now(),
            endTime: Date.now(),
chicm-ms's avatar
chicm-ms committed
183
            finalMetricData: [{
chicm-ms's avatar
chicm-ms committed
184
185
186
187
188
189
                timestamp: 0,
                trialJobId: '3456',
                parameterId: '123',
                type: 'FINAL',
                sequence: 0,
                data: '0.2'
chicm-ms's avatar
chicm-ms committed
190
            }]
Deshui Yu's avatar
Deshui Yu committed
191
192
193
194
195
        };

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