edgeflowjs 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +473 -0
- package/dist/backends/index.d.ts +13 -0
- package/dist/backends/index.d.ts.map +1 -0
- package/dist/backends/index.js +32 -0
- package/dist/backends/index.js.map +1 -0
- package/dist/backends/onnx.d.ts +46 -0
- package/dist/backends/onnx.d.ts.map +1 -0
- package/dist/backends/onnx.js +249 -0
- package/dist/backends/onnx.js.map +1 -0
- package/dist/backends/wasm.d.ts +78 -0
- package/dist/backends/wasm.d.ts.map +1 -0
- package/dist/backends/wasm.js +358 -0
- package/dist/backends/wasm.js.map +1 -0
- package/dist/backends/webgpu.d.ts +143 -0
- package/dist/backends/webgpu.d.ts.map +1 -0
- package/dist/backends/webgpu.js +326 -0
- package/dist/backends/webgpu.js.map +1 -0
- package/dist/backends/webnn.d.ts +115 -0
- package/dist/backends/webnn.d.ts.map +1 -0
- package/dist/backends/webnn.js +202 -0
- package/dist/backends/webnn.js.map +1 -0
- package/dist/core/index.d.ts +9 -0
- package/dist/core/index.d.ts.map +1 -0
- package/dist/core/index.js +14 -0
- package/dist/core/index.js.map +1 -0
- package/dist/core/memory.d.ts +234 -0
- package/dist/core/memory.d.ts.map +1 -0
- package/dist/core/memory.js +554 -0
- package/dist/core/memory.js.map +1 -0
- package/dist/core/runtime.d.ts +129 -0
- package/dist/core/runtime.d.ts.map +1 -0
- package/dist/core/runtime.js +352 -0
- package/dist/core/runtime.js.map +1 -0
- package/dist/core/scheduler.d.ts +118 -0
- package/dist/core/scheduler.d.ts.map +1 -0
- package/dist/core/scheduler.js +600 -0
- package/dist/core/scheduler.js.map +1 -0
- package/dist/core/tensor.d.ts +149 -0
- package/dist/core/tensor.d.ts.map +1 -0
- package/dist/core/tensor.js +719 -0
- package/dist/core/tensor.js.map +1 -0
- package/dist/core/types.d.ts +367 -0
- package/dist/core/types.d.ts.map +1 -0
- package/dist/core/types.js +54 -0
- package/dist/core/types.js.map +1 -0
- package/dist/edgeflow.browser.js +5601 -0
- package/dist/edgeflow.browser.js.map +7 -0
- package/dist/edgeflow.browser.min.js +19 -0
- package/dist/edgeflow.browser.min.js.map +7 -0
- package/dist/index.d.ts +71 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +158 -0
- package/dist/index.js.map +1 -0
- package/dist/pipelines/base.d.ts +122 -0
- package/dist/pipelines/base.d.ts.map +1 -0
- package/dist/pipelines/base.js +155 -0
- package/dist/pipelines/base.js.map +1 -0
- package/dist/pipelines/feature-extraction.d.ts +68 -0
- package/dist/pipelines/feature-extraction.d.ts.map +1 -0
- package/dist/pipelines/feature-extraction.js +197 -0
- package/dist/pipelines/feature-extraction.js.map +1 -0
- package/dist/pipelines/image-classification.d.ts +61 -0
- package/dist/pipelines/image-classification.d.ts.map +1 -0
- package/dist/pipelines/image-classification.js +140 -0
- package/dist/pipelines/image-classification.js.map +1 -0
- package/dist/pipelines/index.d.ts +58 -0
- package/dist/pipelines/index.d.ts.map +1 -0
- package/dist/pipelines/index.js +72 -0
- package/dist/pipelines/index.js.map +1 -0
- package/dist/pipelines/text-classification.d.ts +71 -0
- package/dist/pipelines/text-classification.d.ts.map +1 -0
- package/dist/pipelines/text-classification.js +175 -0
- package/dist/pipelines/text-classification.js.map +1 -0
- package/dist/tools/index.d.ts +143 -0
- package/dist/tools/index.d.ts.map +1 -0
- package/dist/tools/index.js +294 -0
- package/dist/tools/index.js.map +1 -0
- package/dist/utils/cache.d.ts +162 -0
- package/dist/utils/cache.d.ts.map +1 -0
- package/dist/utils/cache.js +443 -0
- package/dist/utils/cache.js.map +1 -0
- package/dist/utils/index.d.ts +8 -0
- package/dist/utils/index.d.ts.map +1 -0
- package/dist/utils/index.js +12 -0
- package/dist/utils/index.js.map +1 -0
- package/dist/utils/model-loader.d.ts +107 -0
- package/dist/utils/model-loader.d.ts.map +1 -0
- package/dist/utils/model-loader.js +694 -0
- package/dist/utils/model-loader.js.map +1 -0
- package/dist/utils/preprocessor.d.ts +147 -0
- package/dist/utils/preprocessor.d.ts.map +1 -0
- package/dist/utils/preprocessor.js +423 -0
- package/dist/utils/preprocessor.js.map +1 -0
- package/dist/utils/tokenizer.d.ts +140 -0
- package/dist/utils/tokenizer.d.ts.map +1 -0
- package/dist/utils/tokenizer.js +397 -0
- package/dist/utils/tokenizer.js.map +1 -0
- package/package.json +87 -0
|
@@ -0,0 +1,358 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* edgeFlow.js - WebAssembly Backend
|
|
3
|
+
*
|
|
4
|
+
* Pure WASM runtime for universal browser support.
|
|
5
|
+
* Features:
|
|
6
|
+
* - Universal compatibility
|
|
7
|
+
* - SIMD acceleration when available
|
|
8
|
+
* - Memory-efficient execution
|
|
9
|
+
*/
|
|
10
|
+
import { EdgeFlowError, ErrorCodes, } from '../core/types.js';
|
|
11
|
+
import { LoadedModelImpl } from '../core/runtime.js';
|
|
12
|
+
import { EdgeFlowTensor, softmax as tensorSoftmax, relu as tensorRelu, sigmoid as tensorSigmoid } from '../core/tensor.js';
|
|
13
|
+
import { getMemoryManager } from '../core/memory.js';
|
|
14
|
+
// ============================================================================
|
|
15
|
+
// WASM Runtime Implementation
|
|
16
|
+
// ============================================================================
|
|
17
|
+
/**
|
|
18
|
+
* WASMRuntime - Pure WebAssembly inference runtime
|
|
19
|
+
*/
|
|
20
|
+
export class WASMRuntime {
|
|
21
|
+
name = 'wasm';
|
|
22
|
+
module = null;
|
|
23
|
+
simdSupported = false;
|
|
24
|
+
models = new Map();
|
|
25
|
+
initialized = false;
|
|
26
|
+
get capabilities() {
|
|
27
|
+
return {
|
|
28
|
+
concurrency: false, // WASM is single-threaded by default
|
|
29
|
+
quantization: true,
|
|
30
|
+
float16: false,
|
|
31
|
+
dynamicShapes: true,
|
|
32
|
+
maxBatchSize: 16,
|
|
33
|
+
availableMemory: 128 * 1024 * 1024, // 128MB default
|
|
34
|
+
};
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* Check if WASM is available
|
|
38
|
+
*/
|
|
39
|
+
async isAvailable() {
|
|
40
|
+
if (typeof WebAssembly === 'undefined')
|
|
41
|
+
return false;
|
|
42
|
+
try {
|
|
43
|
+
// Check if we can instantiate a minimal WASM module
|
|
44
|
+
const bytes = new Uint8Array([
|
|
45
|
+
0x00, 0x61, 0x73, 0x6d, // Magic number
|
|
46
|
+
0x01, 0x00, 0x00, 0x00, // Version
|
|
47
|
+
]);
|
|
48
|
+
await WebAssembly.instantiate(bytes);
|
|
49
|
+
return true;
|
|
50
|
+
}
|
|
51
|
+
catch {
|
|
52
|
+
return false;
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* Initialize the WASM runtime
|
|
57
|
+
*/
|
|
58
|
+
async initialize() {
|
|
59
|
+
if (this.initialized)
|
|
60
|
+
return;
|
|
61
|
+
// Check SIMD support
|
|
62
|
+
this.simdSupported = await this.checkSIMDSupport();
|
|
63
|
+
// Create memory pool
|
|
64
|
+
const memory = new WebAssembly.Memory({
|
|
65
|
+
initial: 256, // 16MB initial
|
|
66
|
+
maximum: 2048, // 128MB maximum
|
|
67
|
+
});
|
|
68
|
+
// Compile and instantiate the WASM module
|
|
69
|
+
// In production, this would load an actual WASM binary
|
|
70
|
+
// For now, we use a pure JS fallback
|
|
71
|
+
this.module = {
|
|
72
|
+
memory,
|
|
73
|
+
exports: this.createJSFallback(memory),
|
|
74
|
+
};
|
|
75
|
+
this.initialized = true;
|
|
76
|
+
}
|
|
77
|
+
/**
|
|
78
|
+
* Check SIMD support
|
|
79
|
+
*/
|
|
80
|
+
async checkSIMDSupport() {
|
|
81
|
+
try {
|
|
82
|
+
// SIMD detection via feature detection
|
|
83
|
+
const simdTest = new Uint8Array([
|
|
84
|
+
0x00, 0x61, 0x73, 0x6d, 0x01, 0x00, 0x00, 0x00,
|
|
85
|
+
0x01, 0x05, 0x01, 0x60, 0x00, 0x01, 0x7b, 0x03,
|
|
86
|
+
0x02, 0x01, 0x00, 0x0a, 0x0a, 0x01, 0x08, 0x00,
|
|
87
|
+
0xfd, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x0b
|
|
88
|
+
]);
|
|
89
|
+
await WebAssembly.instantiate(simdTest);
|
|
90
|
+
return true;
|
|
91
|
+
}
|
|
92
|
+
catch {
|
|
93
|
+
return false;
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
/**
|
|
97
|
+
* Create JavaScript fallback for WASM operations
|
|
98
|
+
*/
|
|
99
|
+
createJSFallback(memory) {
|
|
100
|
+
let nextPtr = 0;
|
|
101
|
+
const allocations = new Map();
|
|
102
|
+
return {
|
|
103
|
+
malloc: (size) => {
|
|
104
|
+
const ptr = nextPtr;
|
|
105
|
+
nextPtr += size;
|
|
106
|
+
allocations.set(ptr, size);
|
|
107
|
+
return ptr;
|
|
108
|
+
},
|
|
109
|
+
free: (ptr) => {
|
|
110
|
+
allocations.delete(ptr);
|
|
111
|
+
},
|
|
112
|
+
matmul_f32: (aPtr, aRows, aCols, bPtr, _bRows, bCols, outPtr) => {
|
|
113
|
+
const view = new Float32Array(memory.buffer);
|
|
114
|
+
const aOffset = aPtr / 4;
|
|
115
|
+
const bOffset = bPtr / 4;
|
|
116
|
+
const outOffset = outPtr / 4;
|
|
117
|
+
for (let i = 0; i < aRows; i++) {
|
|
118
|
+
for (let j = 0; j < bCols; j++) {
|
|
119
|
+
let sum = 0;
|
|
120
|
+
for (let k = 0; k < aCols; k++) {
|
|
121
|
+
sum += (view[aOffset + i * aCols + k] ?? 0) * (view[bOffset + k * bCols + j] ?? 0);
|
|
122
|
+
}
|
|
123
|
+
view[outOffset + i * bCols + j] = sum;
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
},
|
|
127
|
+
add_f32: (aPtr, bPtr, outPtr, size) => {
|
|
128
|
+
const view = new Float32Array(memory.buffer);
|
|
129
|
+
const aOffset = aPtr / 4;
|
|
130
|
+
const bOffset = bPtr / 4;
|
|
131
|
+
const outOffset = outPtr / 4;
|
|
132
|
+
for (let i = 0; i < size; i++) {
|
|
133
|
+
view[outOffset + i] = (view[aOffset + i] ?? 0) + (view[bOffset + i] ?? 0);
|
|
134
|
+
}
|
|
135
|
+
},
|
|
136
|
+
mul_f32: (aPtr, bPtr, outPtr, size) => {
|
|
137
|
+
const view = new Float32Array(memory.buffer);
|
|
138
|
+
const aOffset = aPtr / 4;
|
|
139
|
+
const bOffset = bPtr / 4;
|
|
140
|
+
const outOffset = outPtr / 4;
|
|
141
|
+
for (let i = 0; i < size; i++) {
|
|
142
|
+
view[outOffset + i] = (view[aOffset + i] ?? 0) * (view[bOffset + i] ?? 0);
|
|
143
|
+
}
|
|
144
|
+
},
|
|
145
|
+
relu_f32: (inputPtr, outputPtr, size) => {
|
|
146
|
+
const view = new Float32Array(memory.buffer);
|
|
147
|
+
const inOffset = inputPtr / 4;
|
|
148
|
+
const outOffset = outputPtr / 4;
|
|
149
|
+
for (let i = 0; i < size; i++) {
|
|
150
|
+
view[outOffset + i] = Math.max(0, view[inOffset + i] ?? 0);
|
|
151
|
+
}
|
|
152
|
+
},
|
|
153
|
+
sigmoid_f32: (inputPtr, outputPtr, size) => {
|
|
154
|
+
const view = new Float32Array(memory.buffer);
|
|
155
|
+
const inOffset = inputPtr / 4;
|
|
156
|
+
const outOffset = outputPtr / 4;
|
|
157
|
+
for (let i = 0; i < size; i++) {
|
|
158
|
+
view[outOffset + i] = 1 / (1 + Math.exp(-(view[inOffset + i] ?? 0)));
|
|
159
|
+
}
|
|
160
|
+
},
|
|
161
|
+
softmax_f32: (inputPtr, outputPtr, size) => {
|
|
162
|
+
const view = new Float32Array(memory.buffer);
|
|
163
|
+
const inOffset = inputPtr / 4;
|
|
164
|
+
const outOffset = outputPtr / 4;
|
|
165
|
+
// Find max for numerical stability
|
|
166
|
+
let max = -Infinity;
|
|
167
|
+
for (let i = 0; i < size; i++) {
|
|
168
|
+
if ((view[inOffset + i] ?? 0) > max)
|
|
169
|
+
max = view[inOffset + i] ?? 0;
|
|
170
|
+
}
|
|
171
|
+
// Compute exp and sum
|
|
172
|
+
let sum = 0;
|
|
173
|
+
for (let i = 0; i < size; i++) {
|
|
174
|
+
view[outOffset + i] = Math.exp((view[inOffset + i] ?? 0) - max);
|
|
175
|
+
sum += view[outOffset + i] ?? 0;
|
|
176
|
+
}
|
|
177
|
+
// Normalize
|
|
178
|
+
for (let i = 0; i < size; i++) {
|
|
179
|
+
view[outOffset + i] = (view[outOffset + i] ?? 0) / sum;
|
|
180
|
+
}
|
|
181
|
+
},
|
|
182
|
+
};
|
|
183
|
+
}
|
|
184
|
+
/**
|
|
185
|
+
* Load a model
|
|
186
|
+
*/
|
|
187
|
+
async loadModel(modelData, options = {}) {
|
|
188
|
+
this.ensureInitialized();
|
|
189
|
+
// Parse model configuration
|
|
190
|
+
const config = this.parseModelConfig(modelData);
|
|
191
|
+
// Extract and store weights
|
|
192
|
+
const wasmData = {
|
|
193
|
+
weights: new Map(),
|
|
194
|
+
config,
|
|
195
|
+
executionOrder: config.layers.map(l => l.name),
|
|
196
|
+
};
|
|
197
|
+
// Load weights into memory
|
|
198
|
+
await this.loadWeights(modelData, wasmData);
|
|
199
|
+
const modelId = `wasm_${Date.now().toString(36)}`;
|
|
200
|
+
this.models.set(modelId, wasmData);
|
|
201
|
+
// Create metadata
|
|
202
|
+
const metadata = {
|
|
203
|
+
name: config.name || options.metadata?.name || 'unknown',
|
|
204
|
+
version: config.version || '1.0.0',
|
|
205
|
+
inputs: config.inputs.map(i => ({
|
|
206
|
+
name: i.name,
|
|
207
|
+
dtype: i.dtype,
|
|
208
|
+
shape: i.shape,
|
|
209
|
+
})),
|
|
210
|
+
outputs: config.outputs.map(o => ({
|
|
211
|
+
name: o.name,
|
|
212
|
+
dtype: o.dtype,
|
|
213
|
+
shape: o.shape,
|
|
214
|
+
})),
|
|
215
|
+
sizeBytes: modelData.byteLength,
|
|
216
|
+
quantization: options.quantization ?? 'float32',
|
|
217
|
+
format: 'edgeflow',
|
|
218
|
+
};
|
|
219
|
+
// Create model instance
|
|
220
|
+
const model = new LoadedModelImpl(metadata, 'wasm', () => this.unloadModel(modelId));
|
|
221
|
+
// Track in memory manager
|
|
222
|
+
getMemoryManager().trackModel(model, () => model.dispose());
|
|
223
|
+
return model;
|
|
224
|
+
}
|
|
225
|
+
/**
|
|
226
|
+
* Run inference
|
|
227
|
+
*/
|
|
228
|
+
async run(model, inputs) {
|
|
229
|
+
this.ensureInitialized();
|
|
230
|
+
// Execute model layers
|
|
231
|
+
return this.executeModel(inputs, model.metadata);
|
|
232
|
+
}
|
|
233
|
+
/**
|
|
234
|
+
* Execute model
|
|
235
|
+
*/
|
|
236
|
+
async executeModel(inputs, metadata) {
|
|
237
|
+
const outputs = [];
|
|
238
|
+
for (const outputSpec of metadata.outputs) {
|
|
239
|
+
const outputSize = outputSpec.shape.reduce((a, b) => a * b, 1);
|
|
240
|
+
// Process based on output requirements
|
|
241
|
+
// This is a simplified implementation
|
|
242
|
+
let outputTensor;
|
|
243
|
+
if (inputs.length > 0 && inputs[0]) {
|
|
244
|
+
const inputTensor = inputs[0];
|
|
245
|
+
// Apply transformations based on layer types
|
|
246
|
+
// For demo, apply softmax to classification outputs
|
|
247
|
+
if (outputSpec.name.includes('logits') || outputSpec.name.includes('class')) {
|
|
248
|
+
outputTensor = tensorSoftmax(inputTensor);
|
|
249
|
+
}
|
|
250
|
+
else if (outputSpec.name.includes('relu')) {
|
|
251
|
+
outputTensor = tensorRelu(inputTensor);
|
|
252
|
+
}
|
|
253
|
+
else if (outputSpec.name.includes('sigmoid')) {
|
|
254
|
+
outputTensor = tensorSigmoid(inputTensor);
|
|
255
|
+
}
|
|
256
|
+
else {
|
|
257
|
+
// Identity or feature extraction
|
|
258
|
+
const outputData = new Float32Array(outputSize);
|
|
259
|
+
const inputData = inputTensor.toFloat32Array();
|
|
260
|
+
for (let i = 0; i < Math.min(outputSize, inputData.length); i++) {
|
|
261
|
+
outputData[i] = inputData[i] ?? 0;
|
|
262
|
+
}
|
|
263
|
+
outputTensor = new EdgeFlowTensor(outputData, outputSpec.shape, 'float32');
|
|
264
|
+
}
|
|
265
|
+
}
|
|
266
|
+
else {
|
|
267
|
+
outputTensor = new EdgeFlowTensor(new Float32Array(outputSize), outputSpec.shape, 'float32');
|
|
268
|
+
}
|
|
269
|
+
outputs.push(outputTensor);
|
|
270
|
+
}
|
|
271
|
+
return outputs;
|
|
272
|
+
}
|
|
273
|
+
/**
|
|
274
|
+
* Parse model configuration
|
|
275
|
+
*/
|
|
276
|
+
parseModelConfig(data) {
|
|
277
|
+
try {
|
|
278
|
+
const decoder = new TextDecoder();
|
|
279
|
+
const text = decoder.decode(new Uint8Array(data, 0, Math.min(2048, data.byteLength)));
|
|
280
|
+
if (text.trim().startsWith('{')) {
|
|
281
|
+
let jsonEnd = text.indexOf('\n---\n');
|
|
282
|
+
if (jsonEnd === -1) {
|
|
283
|
+
// Try to parse as pure JSON
|
|
284
|
+
try {
|
|
285
|
+
return JSON.parse(text);
|
|
286
|
+
}
|
|
287
|
+
catch {
|
|
288
|
+
jsonEnd = data.byteLength;
|
|
289
|
+
}
|
|
290
|
+
}
|
|
291
|
+
const jsonStr = decoder.decode(new Uint8Array(data, 0, jsonEnd));
|
|
292
|
+
return JSON.parse(jsonStr);
|
|
293
|
+
}
|
|
294
|
+
}
|
|
295
|
+
catch {
|
|
296
|
+
// Not JSON format
|
|
297
|
+
}
|
|
298
|
+
return {
|
|
299
|
+
name: 'unknown',
|
|
300
|
+
version: '1.0.0',
|
|
301
|
+
layers: [],
|
|
302
|
+
inputs: [{ name: 'input', shape: [-1, 768], dtype: 'float32' }],
|
|
303
|
+
outputs: [{ name: 'output', shape: [-1, 768], dtype: 'float32' }],
|
|
304
|
+
};
|
|
305
|
+
}
|
|
306
|
+
/**
|
|
307
|
+
* Load weights into WASM memory
|
|
308
|
+
*/
|
|
309
|
+
async loadWeights(_modelData, _wasmData) {
|
|
310
|
+
// In a full implementation, extract and load weights
|
|
311
|
+
// This is a placeholder
|
|
312
|
+
}
|
|
313
|
+
/**
|
|
314
|
+
* Unload a model
|
|
315
|
+
*/
|
|
316
|
+
unloadModel(modelId) {
|
|
317
|
+
const modelData = this.models.get(modelId);
|
|
318
|
+
if (modelData && this.module) {
|
|
319
|
+
// Free weight buffers
|
|
320
|
+
for (const weight of modelData.weights.values()) {
|
|
321
|
+
this.module.exports.free(weight.ptr);
|
|
322
|
+
}
|
|
323
|
+
}
|
|
324
|
+
this.models.delete(modelId);
|
|
325
|
+
}
|
|
326
|
+
/**
|
|
327
|
+
* Ensure runtime is initialized
|
|
328
|
+
*/
|
|
329
|
+
ensureInitialized() {
|
|
330
|
+
if (!this.initialized || !this.module) {
|
|
331
|
+
throw new EdgeFlowError('WASM runtime is not initialized', ErrorCodes.RUNTIME_NOT_INITIALIZED);
|
|
332
|
+
}
|
|
333
|
+
}
|
|
334
|
+
/**
|
|
335
|
+
* Check if SIMD is supported
|
|
336
|
+
*/
|
|
337
|
+
hasSIMDSupport() {
|
|
338
|
+
return this.simdSupported;
|
|
339
|
+
}
|
|
340
|
+
/**
|
|
341
|
+
* Dispose the runtime
|
|
342
|
+
*/
|
|
343
|
+
dispose() {
|
|
344
|
+
// Free all model weights
|
|
345
|
+
for (const modelId of this.models.keys()) {
|
|
346
|
+
this.unloadModel(modelId);
|
|
347
|
+
}
|
|
348
|
+
this.module = null;
|
|
349
|
+
this.initialized = false;
|
|
350
|
+
}
|
|
351
|
+
}
|
|
352
|
+
/**
|
|
353
|
+
* Create WASM runtime factory
|
|
354
|
+
*/
|
|
355
|
+
export function createWASMRuntime() {
|
|
356
|
+
return new WASMRuntime();
|
|
357
|
+
}
|
|
358
|
+
//# sourceMappingURL=wasm.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"wasm.js","sourceRoot":"","sources":["../../src/backends/wasm.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,143 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* edgeFlow.js - WebGPU Backend
|
|
3
|
+
*
|
|
4
|
+
* High-performance WebGPU runtime for GPU-accelerated inference.
|
|
5
|
+
* Features:
|
|
6
|
+
* - Native concurrency support
|
|
7
|
+
* - Efficient memory management
|
|
8
|
+
* - Compute shader execution
|
|
9
|
+
*/
|
|
10
|
+
import { Runtime, RuntimeType, RuntimeCapabilities, LoadedModel, ModelLoadOptions, Tensor } from '../core/types.js';
|
|
11
|
+
declare global {
|
|
12
|
+
interface Navigator {
|
|
13
|
+
gpu?: GPU;
|
|
14
|
+
}
|
|
15
|
+
interface GPU {
|
|
16
|
+
requestAdapter(options?: GPURequestAdapterOptions): Promise<GPUAdapter | null>;
|
|
17
|
+
}
|
|
18
|
+
interface GPURequestAdapterOptions {
|
|
19
|
+
powerPreference?: 'low-power' | 'high-performance';
|
|
20
|
+
}
|
|
21
|
+
interface GPUAdapter {
|
|
22
|
+
requestDevice(descriptor?: GPUDeviceDescriptor): Promise<GPUDevice>;
|
|
23
|
+
}
|
|
24
|
+
interface GPUDeviceDescriptor {
|
|
25
|
+
requiredFeatures?: string[];
|
|
26
|
+
requiredLimits?: Record<string, number>;
|
|
27
|
+
}
|
|
28
|
+
interface GPUDevice {
|
|
29
|
+
limits: GPULimits;
|
|
30
|
+
lost: Promise<GPUDeviceLostInfo>;
|
|
31
|
+
createBuffer(descriptor: GPUBufferDescriptor): GPUBuffer;
|
|
32
|
+
createShaderModule(descriptor: GPUShaderModuleDescriptor): GPUShaderModule;
|
|
33
|
+
createBindGroupLayout(descriptor: GPUBindGroupLayoutDescriptor): GPUBindGroupLayout;
|
|
34
|
+
createPipelineLayout(descriptor: GPUPipelineLayoutDescriptor): GPUPipelineLayout;
|
|
35
|
+
createComputePipeline(descriptor: GPUComputePipelineDescriptor): GPUComputePipeline;
|
|
36
|
+
destroy(): void;
|
|
37
|
+
}
|
|
38
|
+
interface GPULimits {
|
|
39
|
+
maxBufferSize: number;
|
|
40
|
+
}
|
|
41
|
+
interface GPUDeviceLostInfo {
|
|
42
|
+
message: string;
|
|
43
|
+
reason: string;
|
|
44
|
+
}
|
|
45
|
+
interface GPUBuffer {
|
|
46
|
+
destroy(): void;
|
|
47
|
+
}
|
|
48
|
+
interface GPUShaderModule {
|
|
49
|
+
}
|
|
50
|
+
interface GPUBindGroupLayout {
|
|
51
|
+
}
|
|
52
|
+
interface GPUPipelineLayout {
|
|
53
|
+
}
|
|
54
|
+
interface GPUComputePipeline {
|
|
55
|
+
}
|
|
56
|
+
interface GPUBufferDescriptor {
|
|
57
|
+
size: number;
|
|
58
|
+
usage: number;
|
|
59
|
+
}
|
|
60
|
+
interface GPUShaderModuleDescriptor {
|
|
61
|
+
code: string;
|
|
62
|
+
}
|
|
63
|
+
interface GPUBindGroupLayoutDescriptor {
|
|
64
|
+
entries: GPUBindGroupLayoutEntry[];
|
|
65
|
+
}
|
|
66
|
+
interface GPUBindGroupLayoutEntry {
|
|
67
|
+
binding: number;
|
|
68
|
+
visibility: number;
|
|
69
|
+
buffer?: {
|
|
70
|
+
type: string;
|
|
71
|
+
};
|
|
72
|
+
}
|
|
73
|
+
interface GPUPipelineLayoutDescriptor {
|
|
74
|
+
bindGroupLayouts: GPUBindGroupLayout[];
|
|
75
|
+
}
|
|
76
|
+
interface GPUComputePipelineDescriptor {
|
|
77
|
+
layout: GPUPipelineLayout;
|
|
78
|
+
compute: {
|
|
79
|
+
module: GPUShaderModule;
|
|
80
|
+
entryPoint: string;
|
|
81
|
+
};
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
/**
|
|
85
|
+
* WebGPURuntime - GPU-accelerated inference runtime
|
|
86
|
+
*/
|
|
87
|
+
export declare class WebGPURuntime implements Runtime {
|
|
88
|
+
readonly name: RuntimeType;
|
|
89
|
+
private adapter;
|
|
90
|
+
private device;
|
|
91
|
+
private models;
|
|
92
|
+
private initialized;
|
|
93
|
+
get capabilities(): RuntimeCapabilities;
|
|
94
|
+
/**
|
|
95
|
+
* Check if WebGPU is available
|
|
96
|
+
*/
|
|
97
|
+
isAvailable(): Promise<boolean>;
|
|
98
|
+
/**
|
|
99
|
+
* Initialize the WebGPU runtime
|
|
100
|
+
*/
|
|
101
|
+
initialize(): Promise<void>;
|
|
102
|
+
/**
|
|
103
|
+
* Load a model
|
|
104
|
+
*/
|
|
105
|
+
loadModel(modelData: ArrayBuffer, options?: ModelLoadOptions): Promise<LoadedModel>;
|
|
106
|
+
/**
|
|
107
|
+
* Run inference
|
|
108
|
+
*/
|
|
109
|
+
run(model: LoadedModel, inputs: Tensor[]): Promise<Tensor[]>;
|
|
110
|
+
/**
|
|
111
|
+
* Execute model (simplified implementation)
|
|
112
|
+
*/
|
|
113
|
+
private executeModel;
|
|
114
|
+
/**
|
|
115
|
+
* Parse model data
|
|
116
|
+
*/
|
|
117
|
+
private parseModelData;
|
|
118
|
+
/**
|
|
119
|
+
* Upload weights to GPU
|
|
120
|
+
*/
|
|
121
|
+
private uploadWeights;
|
|
122
|
+
/**
|
|
123
|
+
* Create compute pipelines
|
|
124
|
+
*/
|
|
125
|
+
private createPipelines;
|
|
126
|
+
/**
|
|
127
|
+
* Unload a model
|
|
128
|
+
*/
|
|
129
|
+
private unloadModel;
|
|
130
|
+
/**
|
|
131
|
+
* Ensure runtime is initialized
|
|
132
|
+
*/
|
|
133
|
+
private ensureInitialized;
|
|
134
|
+
/**
|
|
135
|
+
* Dispose the runtime
|
|
136
|
+
*/
|
|
137
|
+
dispose(): void;
|
|
138
|
+
}
|
|
139
|
+
/**
|
|
140
|
+
* Create WebGPU runtime factory
|
|
141
|
+
*/
|
|
142
|
+
export declare function createWebGPURuntime(): Runtime;
|
|
143
|
+
//# sourceMappingURL=webgpu.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"webgpu.d.ts","sourceRoot":"","sources":["../../src/backends/webgpu.ts"],"names":[],"mappings":"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"}
|