-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathtest-gpu-api.js
More file actions
230 lines (204 loc) · 10.6 KB
/
test-gpu-api.js
File metadata and controls
230 lines (204 loc) · 10.6 KB
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
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
// 测试GPU数据获取功能的脚本
const axios = require('axios');
// 配置智算平台API
const HISO_API_BASE_URL = process.env.HISO_API_BASE_URL || 'http://localhost:8280/apis/v1';
const HISO_API_TOKEN = process.env.HISO_API_TOKEN || 'your_token_here';
// 智算平台API调用封装
const callHisoApi = async (endpoint, options = {}) => {
const hisoBaseUrl = process.env.HISO_BASE_URL || 'https://192.168.40.6:11000/apis/v1';
const hisoToken = process.env.HISO_TOKEN || 'eyJhbGciOiJSUzI1NiIsInR5cCIgOiAiSldUIiwia2lkIiA6ICItTXctUzhqazVMTXp3SHlYTWZQX3FiZFIwemVrMVgzaHBfQTQyeVlYNUtZIn0.eyJleHAiOjE3NTE2MDY0NTAsImlhdCI6MTc1MTAwMTY1MCwianRpIjoib25ydHJvOjEzNWRjMWEzLTMzMzMtNDk5Yy04NmI3LTRmMmY4OGFhNTFkZSIsImlzcyI6Imh0dHBzOi8vMTkyLjE2OC40MC42OjExMDAyL3JlYWxtcy9uYXZpY2xvdWQiLCJhdWQiOlsiaGFyYm9yIiwia3ViZXJuZXRlcyIsImFjY291bnQiXSwic3ViIjoiYzg1MjFjYmMtMjQ0Mi00NDQzLTk0ZGItMjA5MzhkNTkyOTg2IiwidHlwIjoiQmVhcmVyIiwiYXpwIjoibmF2aWNsb3VkLXBhYXMiLCJzaWQiOiIwOTA2NmM1Zi04NGZhLTRhMDgtYjk3OS0yYjYxYTMxZGUxYTYiLCJhY3IiOiIxIiwiYWxsb3dlZC1vcmlnaW5zIjpbIioiXSwicmVhbG1fYWNjZXNzIjp7InJvbGVzIjpbIm9mZmxpbmVfYWNjZXNzIiwiYWRtaW4iLCJkZWZhdWx0LXJvbGVzLW5hdmljbG91ZCIsInVtYV9hdXRob3JpemF0aW9uIl19LCJyZXNvdXJjZV9hY2Nlc3MiOnsibmF2aWNsb3VkLXBhYXMiOnsicm9sZXMiOlsiYWRtaW4iXX0sImFjY291bnQiOnsicm9sZXMiOlsibWFuYWdlLWFjY291bnQiLCJtYW5hZ2UtYWNjb3VudC1saW5rcyIsInZpZXctcHJvZmlsZSJdfX0sInNjb3BlIjoicHJvZmlsZSBoYXJib3IgbmF2aWNsb3VkIGt1YmVybmV0ZXMgZW1haWwgbW9kdWxlcyIsImVtYWlsX3ZlcmlmaWVkIjp0cnVlLCJyb2xlcyI6WyJvZmZsaW5lX2FjY2VzcyIsImFkbWluIiwiZGVmYXVsdC1yb2xlcy1uYXZpY2xvdWQiLCJ1bWFfYXV0aG9yaXphdGlvbiJdLCJkZXNjcmlwdGlvbiI6Iui2hee6p-euoeeQhuWRmCIsInByZWZlcnJlZF91c2VybmFtZSI6ImFkbWluIiwibW9kdWxlcyI6WyJncHUiLCJwYWFzIiwic2VjdXJpdHkiLCJnYXRld2F5IiwibW9kdWxlIl0sImVtYWlsIjoiYWRtaW5AZGMuY29tIn0.MomKL-aVp3eiJTTwJDVdUMp7rSDCdtozCIaV3JE7zrgiyYyLFUOI2Z-MfKd7GODPb4sChWsfmQFJFmBhL7NOWCGAppTWmvJwYjF9fNS16NUc2znF3fIQEiQz9MCm9OT6_U1QDeDd0YFfx-Z-ZPWwvIkjoJTbJuU_0G2GKC7__Lhhe3RaQUVaiW7R6AchX_rtJdd0HH4LF86iGLjmC49k8KaCJmVw6tsAMvYT-6BAK1YuiMgje4FOOSS6j0pzw-_QB5GI-lxBARgxDV1LBo9ly7wCcudMEJWZnwCzJMugxFb-kd7IdvbWvBdc-mbru5QdKqA93W4jRoJZ4Wxr58o2PA';
const url = `${hisoBaseUrl}${endpoint}`;
const config = {
timeout: 30000,
...options,
headers: {
'Content-Type': 'application/json',
'Authorization': `Bearer ${hisoToken}`,
...options.headers
}
};
return await axios(url, config);
};
// 获取数据中心相关数据(GPU和CPU数据)- 合并优化版本
async function getDatacenterData() {
try {
console.log('开始获取数据中心列表...');
// 1. 获取数据中心列表
const datacentersResponse = await callHisoApi('/datacenters');
if (!datacentersResponse.data || !datacentersResponse.data.data) {
console.log('获取数据中心列表失败,使用默认值');
return {
totalGpuCount: 56,
gpuMemoryUsage: 30.0,
totalCpu: 2048,
cpuUsage: 45.8
};
}
const datacenters = datacentersResponse.data.data;
console.log(`找到 ${datacenters.length} 个数据中心`);
let totalGpuCount = 0;
let totalGpuMemory = 0;
let totalGpuMemoryRequest = 0;
let totalCpu = 0;
let totalCpuRequest = 0;
let totalMemory = 0;
let totalMemoryRequest = 0;
// 2. 遍历每个数据中心,获取GPU、CPU和内存数据
for (const datacenter of datacenters) {
// 获取GPU内存数据(从列表中直接获取)
if (datacenter.gpuMemory) {
totalGpuMemory += datacenter.gpuMemory;
console.log(`数据中心 ${datacenter.name}: GPU内存 ${datacenter.gpuMemory}GB`);
}
if (datacenter.gpuMemoryRequest) {
totalGpuMemoryRequest += datacenter.gpuMemoryRequest;
console.log(`数据中心 ${datacenter.name}: GPU内存请求 ${datacenter.gpuMemoryRequest}GB`);
}
// 获取CPU数据(从列表中直接获取)
if (datacenter.cpu) {
totalCpu += datacenter.cpu;
console.log(`数据中心 ${datacenter.name}: CPU总量 ${datacenter.cpu}核`);
}
if (datacenter.cpuRequest) {
totalCpuRequest += datacenter.cpuRequest;
console.log(`数据中心 ${datacenter.name}: CPU请求 ${datacenter.cpuRequest}核`);
}
// 获取内存数据(从列表中直接获取)
if (datacenter.memory) {
totalMemory += datacenter.memory;
console.log(`数据中心 ${datacenter.name}: 内存总量 ${Math.round(datacenter.memory / (1024 * 1024 * 1024))}GB`);
}
if (datacenter.memoryRequest) {
totalMemoryRequest += datacenter.memoryRequest;
console.log(`数据中心 ${datacenter.name}: 内存请求 ${Math.round(datacenter.memoryRequest / (1024 * 1024 * 1024))}GB`);
}
// 获取GPU数量(需要调用详情API)
try {
console.log(`正在获取数据中心 ${datacenter.id} (${datacenter.name}) 的详情...`);
const detailResponse = await callHisoApi(`/datacenters/${datacenter.id}`);
if (detailResponse.data && detailResponse.data.data && detailResponse.data.data.gpu) {
const gpuCount = detailResponse.data.data.gpu;
console.log(`数据中心 ${datacenter.name}: ${gpuCount} 个GPU`);
totalGpuCount += gpuCount;
} else {
console.log(`数据中心 ${datacenter.name}: 无GPU信息`);
}
} catch (error) {
console.log(`获取数据中心 ${datacenter.id} 详情失败: ${error.message}`);
}
}
// 3. 计算GPU内存使用率
let gpuMemoryUsage = 30.0; // 默认值
if (totalGpuMemory > 0) {
const usageRate = (totalGpuMemoryRequest / totalGpuMemory) * 100;
gpuMemoryUsage = Math.round(usageRate * 10) / 10; // 保留一位小数
} else {
console.log('GPU总内存为0,使用默认使用率30%');
}
// 4. 计算CPU使用率
let cpuUsage = 45.8; // 默认值
if (totalCpu > 0) {
const usageRate = (totalCpuRequest / totalCpu) * 100;
cpuUsage = Math.round(usageRate * 10) / 10; // 保留一位小数
} else {
console.log('CPU总量为0,使用默认使用率45.8%');
}
// 5. 计算内存使用率
let memoryUsage = 62.3; // 默认值
if (totalMemory > 0) {
const usageRate = (totalMemoryRequest / totalMemory) * 100;
memoryUsage = Math.round(usageRate * 10) / 10; // 保留一位小数
} else {
console.log('内存总量为0,使用默认使用率62.3%');
}
// 6. 转换内存总量为GB(API返回的是字节)
const totalMemoryGB = totalMemory > 0 ? Math.round(totalMemory / (1024 * 1024 * 1024)) : 16384;
console.log(`总GPU数量: ${totalGpuCount}`);
console.log(`GPU内存使用率: ${gpuMemoryUsage}%`);
console.log(`总CPU核数: ${totalCpu}`);
console.log(`CPU使用率: ${cpuUsage}%`);
console.log(`总内存: ${totalMemoryGB}GB`);
console.log(`内存使用率: ${memoryUsage}%`);
return {
totalGpuCount: totalGpuCount > 0 ? totalGpuCount : 56,
gpuMemoryUsage: gpuMemoryUsage,
totalCpu: totalCpu > 0 ? totalCpu : 2048,
cpuUsage: cpuUsage,
totalMemory: totalMemoryGB,
memoryUsage: memoryUsage
};
} catch (error) {
console.log(`获取数据中心数据失败,使用默认值: ${error.message}`);
return {
totalGpuCount: 56,
gpuMemoryUsage: 30.0,
totalCpu: 2048,
cpuUsage: 45.8,
totalMemory: 16384,
memoryUsage: 62.3
};
}
}
// 测试函数
async function testDatacenterApi() {
console.log('=== 测试数据中心数据获取功能 ===');
console.log('HISO API Base URL:', HISO_API_BASE_URL);
console.log('HISO API Token:', HISO_API_TOKEN ? '已配置' : '未配置');
console.log('');
try {
const datacenterData = await getDatacenterData();
const totalGpus = datacenterData.totalGpuCount;
const gpuMemoryUsage = datacenterData.gpuMemoryUsage;
const totalCpuCores = datacenterData.totalCpu;
const cpuUsage = datacenterData.cpuUsage;
const totalMemoryGB = datacenterData.totalMemory;
const memoryUsage = datacenterData.memoryUsage;
const usedGpus = Math.floor(totalGpus * 0.3);
console.log('=== 结果 ===');
console.log(`总GPU卡数: ${totalGpus}`);
console.log(`已使用GPU卡数: ${usedGpus}`);
console.log(`GPU内存使用率: ${gpuMemoryUsage}%`);
console.log(`总CPU核数: ${totalCpuCores}`);
console.log(`CPU使用率: ${cpuUsage}%`);
console.log(`总内存: ${totalMemoryGB}GB`);
console.log(`内存使用率: ${memoryUsage}%`);
// 模拟API响应数据
const mockData = {
gpu: {
totalCompute: totalGpus * 321.5, // 每个GPU卡321.5TFLOPS算力
cardCount: {
totalCards: totalGpus,
usedCards: usedGpus
},
usage: {
overallUsage: gpuMemoryUsage // 使用实际的GPU内存使用率
}
},
cpu: {
totalCores: {
totalCores: totalCpuCores // 使用实际的CPU总核数
},
usage: {
overallUsage: cpuUsage // 使用实际的CPU使用率
}
},
memory: {
total: {
totalMemory: totalMemoryGB // 使用实际的内存总量(GB)
},
usage: {
overallUsage: memoryUsage // 使用实际的内存使用率
}
}
};
console.log('\n=== 模拟API响应数据 ===');
console.log(JSON.stringify(mockData, null, 2));
} catch (error) {
console.error('测试失败:', error.message);
}
}
// 运行测试
if (require.main === module) {
testDatacenterApi();
}
module.exports = { getDatacenterData, testDatacenterApi };