nniManager.ts 6.41 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

'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 {
12
    ExperimentConfig, ExperimentProfile, Manager, ProfileUpdateType,
13
    TrialJobStatistics, NNIManagerStatus
Deshui Yu's avatar
Deshui Yu committed
14
15
} from '../../common/manager';
import {
Yuge Zhang's avatar
Yuge Zhang committed
16
    TrialJobApplicationForm, TrialJobDetail, TrialJobStatus
Deshui Yu's avatar
Deshui Yu committed
17
18
19
20
21
22
23
} 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
    public importData(_data: string): Promise<void> {
34
35
        return Promise.resolve();
    }
36
37
38
39
    public getImportedData(): Promise<string[]> {
        const ret: string[] = ["1", "2"];
        return Promise.resolve(ret);
    }
40
41
42
43
    public async exportData(): Promise<string> {
        const ret: string = '';
        return Promise.resolve(ret);
    }
Deshui Yu's avatar
Deshui Yu committed
44
45
46
47
48
49
50
51
52
53
54
55
    public getTrialJobStatistics(): Promise<TrialJobStatistics[]> {
        const deferred: Deferred<TrialJobStatistics[]> = new Deferred<TrialJobStatistics[]>();
        deferred.resolve([{
            trialJobStatus: 'RUNNING',
            trialJobNumber: 2
        }, {
            trialJobStatus: 'FAILED',
            trialJobNumber: 1
        }]);

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

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

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

        return deferred.promise;
    }

85
    public cancelTrialJobByUser(_trialJobId: string): Promise<void> {
Deshui Yu's avatar
Deshui Yu committed
86
87
88
        return Promise.resolve();
    }

89
    public getClusterMetadata(_key: string): Promise<string> {
Deshui Yu's avatar
Deshui Yu committed
90
91
92
        return Promise.resolve('METAVALUE1');
    }

93
    public startExperiment(_experimentParams: ExperimentConfig): Promise<string> {
Deshui Yu's avatar
Deshui Yu committed
94
95
96
        return Promise.resolve('id-1234');
    }

97
    public setClusterMetadata(_key: string, _value: string): Promise<void> {
chicm-ms's avatar
chicm-ms committed
98
        return Promise.resolve();
Deshui Yu's avatar
Deshui Yu committed
99
100
    }

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

        return deferred.promise;
    }
113

Deshui Yu's avatar
Deshui Yu committed
114
115
116
    public stopExperiment(): Promise<void> {
        throw new MethodNotImplementedError();
    }
117
118
119
120
121
122
    public stopExperimentTopHalf(): Promise<void> {
        throw new MethodNotImplementedError();
    }
    public stopExperimentBottomHalf(): Promise<void> {
        throw new MethodNotImplementedError();
    }
123
    public getMetricData(_trialJobId: string, _metricType: MetricType): Promise<MetricDataRecord[]> {
Deshui Yu's avatar
Deshui Yu committed
124
125
        throw new MethodNotImplementedError();
    }
126
    public getMetricDataByRange(_minSeqId: number, _maxSeqId: number): Promise<MetricDataRecord[]> {
127
128
129
130
131
        throw new MethodNotImplementedError();
    }
    public getLatestMetricData(): Promise<MetricDataRecord[]> {
        throw new MethodNotImplementedError();
    }
132
    public getTrialFile(_trialJobId: string, _fileName: string): Promise<string> {
133
134
        throw new MethodNotImplementedError();
    }
Deshui Yu's avatar
Deshui Yu committed
135
136
137
138
139
    public getExperimentProfile(): Promise<ExperimentProfile> {
        const profile: ExperimentProfile = {
            params: {
                experimentName: 'exp1',
                trialConcurrency: 2,
140
141
142
143
144
                maxExperimentDuration: '30s',
                maxTrialNumber: 3,
                trainingService: {
                    platform: 'local'
                },
Deshui Yu's avatar
Deshui Yu committed
145
146
                searchSpace: '{lr: 0.01}',
                tuner: {
147
                    className: 'testTuner',
148
149
150
151
                },
                trialCommand: '',
                trialCodeDirectory: '',
                debug: true
Deshui Yu's avatar
Deshui Yu committed
152
153
154
            },
            id: '2345',
            execDuration: 0,
155
            logDir: '',
156
157
            startTime: Date.now(),
            endTime: Date.now(),
158
            nextSequenceId: 0,
Deshui Yu's avatar
Deshui Yu committed
159
160
161
162
163
            revision: 0
        };

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

        return Promise.resolve([job1, job2]);
    }
J-shang's avatar
J-shang committed
196
197
198
199
200
201
202
203

    public async getTrialOutputLocalPath(_trialJobId: string): Promise<string> {
        throw new MethodNotImplementedError();
    }

    public async fetchTrialOutput(_trialJobId: string, _subpath: string): Promise<void> {
        throw new MethodNotImplementedError();
    }
Deshui Yu's avatar
Deshui Yu committed
204
}