paiConfig.ts 6.11 KB
Newer Older
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
/**
 * 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';

22
import {TrialConfig} from '../common/trialConfig';
23

24
25
26
/**
 * Task role for PAI
 */
27
28
29
30
31
32
33
34
35
36
37
38
39
export class PAITaskRole {
    // Name for the task role
    public readonly name: string;
    // Number of tasks for the task role, no less than 1
    public readonly taskNumber: number;
    // CPU number for one task in the task role, no less than 1
    public readonly cpuNumber: number;
    // Memory for one task in the task role, no less than 100
    public readonly memoryMB: number;
    // GPU number for one task in the task role, no less than 0
    public readonly gpuNumber: number;
    // Executable command for tasks in the task role, can not be empty
    public readonly command: string;
40
41
    //Shared memory for one task in the task role
    public readonly shmMB?: number;
42
43
    //portList to specify the port used in container
    public portList?: portListMetaData[];
44

45
46
47
48
49
50
51
52
53
    /**
     * Constructor
     * @param name Name for the task role
     * @param taskNumber Number of tasks for the task role, no less than 1
     * @param cpuNumber CPU number for one task in the task role, no less than 1
     * @param memoryMB Memory for one task in the task role, no less than 100
     * @param gpuNumber GPU number for one task in the task role, no less than 0
     * @param command Executable command for tasks in the task role, can not be empty
     */
54
    constructor(name : string, taskNumber : number, cpuNumber : number, memoryMB : number, gpuNumber : number,
55
                command : string, shmMB?: number, portList?: portListMetaData[]) {
56
57
58
59
60
        this.name = name;
        this.taskNumber = taskNumber;
        this.cpuNumber = cpuNumber;
        this.memoryMB = memoryMB;
        this.gpuNumber = gpuNumber;
61
        this.command = command;
62
        this.shmMB = shmMB;
63
        this.portList = portList;
64
65
66
    }
}

67
68
69
70
/**
 * Trial job configuration submitted to PAI
 */
export class PAIJobConfig {
71
72
73
74
75
76
    // Name for the job, need to be unique
    public readonly jobName: string;
    // URL pointing to the Docker image for all tasks in the job
    public readonly image: string;
    // Code directory on HDFS
    public readonly codeDir: string;
77
78
    //authentication file used for private Docker registry 
    public readonly authFile?: string;
79
80
81
82

    // List of taskRole, one task role at least
    public taskRoles: PAITaskRole[];

83
84
85
    //The virtual cluster job runs on.
    public readonly virtualCluster: string;

86
87
88
89
90
91
92
93
    /**
     * Constructor
     * @param jobName Name for the job, need to be unique
     * @param image URL pointing to the Docker image for all tasks in the job
     * @param dataDir Data directory existing on HDFS
     * @param outputDir Output directory on HDFS
     * @param taskRoles List of taskRole, one task role at least
     */
94
    constructor(jobName: string, image : string, codeDir : string,
95
                taskRoles : PAITaskRole[], virtualCluster: string, authFile?: string) {
96
97
98
99
        this.jobName = jobName;
        this.image = image;
        this.codeDir = codeDir;
        this.taskRoles = taskRoles;
100
        this.virtualCluster = virtualCluster;
101
        this.authFile = authFile;
102
103
104
    }
}

105
106
107
/**
 * PAI cluster configuration
 */
108
109
export class PAIClusterConfig {
    public readonly userName: string;
110
    public readonly passWord?: string;
111
    public readonly host: string;
112
    public readonly token?: string;
113
114
115
116
117
118

    /**
     * Constructor
     * @param userName User name of PAI Cluster
     * @param passWord password of PAI Cluster
     * @param host Host IP of PAI Cluster
119
     * @param token PAI token of PAI Cluster
120
     */
121
    constructor(userName: string, host : string, passWord?: string, token?: string) {
122
123
124
        this.userName = userName;
        this.passWord = passWord;
        this.host = host;
125
        this.token = token;
126
127
128
    }
}

129
130
131
132
133
134
135
136
137
138
/**
 * portList data structure used in PAI taskRole
 */
export class portListMetaData {
    public readonly label : string = '';
    public readonly beginAt: number = 0;
    public readonly portNumber: number = 0;
}
  

139
140
141
142
/**
 * PAI trial configuration
 */
export class NNIPAITrialConfig extends TrialConfig {
143
144
145
146
    public readonly cpuNum: number;
    public readonly memoryMB: number;
    public readonly image: string;

147
148
    //The virtual cluster job runs on. If omitted, the job will run on default virtual cluster
    public virtualCluster?: string;
149
150
    //Shared memory for one task in the task role
    public shmMB?: number;
151
152
    //authentication file used for private Docker registry 
    public authFile?: string;
153
154
    //portList to specify the port used in container
    public portList?: portListMetaData[];
155

156
    constructor(command : string, codeDir : string, gpuNum : number, cpuNum: number, memoryMB: number,
157
                image: string, virtualCluster?: string, shmMB?: number, authFile?: string, portList?: portListMetaData[]) {
158
159
160
161
        super(command, codeDir, gpuNum);
        this.cpuNum = cpuNum;
        this.memoryMB = memoryMB;
        this.image = image;
162
        this.virtualCluster = virtualCluster;
163
        this.shmMB = shmMB;
164
        this.authFile = authFile;
165
        this.portList = portList;
166
    }
167
}