gpuData.ts 2.56 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
13
14
export enum ScheduleResultType {
    // Schedule succeeded
    SUCCEED,

    // Temporarily, no enough available GPU right now
    TMP_NO_AVAILABLE_GPU,

    // Cannot match requirement even if all GPU are a
    REQUIRE_EXCEED_TOTAL
}

Deshui Yu's avatar
Deshui Yu committed
15
16
17
18
19
20
21
22
23
24
25
26
27
/**
 * GPU Infromation class
 * Representing the dynamic and static information retrieved from Nvidia-smi
 */
export class GPUInfo {
    // The number of active process running on this GPU
    public activeProcessNum: number;
    // Memory utilization of this GPU
    public gpuMemUtil: number;
    // GPU utilization of this GPU
    public gpuUtil: number;
    // the index number of this GPU (starting from 0)
    public readonly index: number;
28
29
30
31
    public gpuMemTotal: number;
    public gpuMemFree: number;
    public gpuMemUsed: number;
    public gpuType: string;
Deshui Yu's avatar
Deshui Yu committed
32

33
34
    constructor(activeProcessNum: number, gpuMemUtil: number, gpuUtil: number, index: number,
        gpuMemTotal: number, gpuMemFree: number, gpuMemUsed: number, gpuType: string) {
Deshui Yu's avatar
Deshui Yu committed
35
36
37
38
        this.activeProcessNum = activeProcessNum;
        this.gpuMemUtil = gpuMemUtil;
        this.gpuUtil = gpuUtil;
        this.index = index;
39
40
41
42
        this.gpuMemTotal = gpuMemTotal;
        this.gpuMemFree = gpuMemFree;
        this.gpuMemUsed = gpuMemUsed;
        this.gpuType = gpuType;
Deshui Yu's avatar
Deshui Yu committed
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
    }
}

/**
 * GPU Sumamry for each machine
 */
export class GPUSummary {
    // GPU count on the machine
    public readonly gpuCount: number;
    // The timestamp when GPU summary data queried
    public readonly timestamp: string;
    // The array of GPU information for each GPU card
    public readonly gpuInfos: GPUInfo[];

    constructor(gpuCount: number, timestamp: string, gpuInfos: GPUInfo[]) {
        this.gpuCount = gpuCount;
        this.timestamp = timestamp;
        this.gpuInfos = gpuInfos;
    }
}
63

64
65

export function parseGpuIndices(gpuIndices?: string): Set<number> | undefined {
66
67
68
69
70
71
72
73
74
    if (gpuIndices === undefined) {
        return undefined;
    }
    const indices: number[] = gpuIndices.split(',')
        .map((x: string) => parseInt(x, 10));
    if (indices.length > 0) {
        return new Set(indices);
    } else {
        throw new Error('gpuIndices can not be empty if specified.');
75
76
77
    }
}

78
export const GPU_INFO_COLLECTOR_FORMAT_WINDOWS: string =
79
    `
80
$env:METRIC_OUTPUT_DIR="{0}"
81
82
$app = Start-Process "python" -ArgumentList "-m nni.tools.gpu_tool.gpu_metrics_collector" -passthru -NoNewWindow \
-redirectStandardOutput {0}\\stdout -redirectStandardError {0}\\stderr
83
Write $app.ID | Out-File {1} -NoNewline -encoding utf8
84
`;