Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/470.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 通用句子编码器tensorflowjs使用webworker优化性能_Javascript_Web Worker_Tensorflow.js_Word Embedding - Fatal编程技术网

Javascript 通用句子编码器tensorflowjs使用webworker优化性能

Javascript 通用句子编码器tensorflowjs使用webworker优化性能,javascript,web-worker,tensorflow.js,word-embedding,Javascript,Web Worker,Tensorflow.js,Word Embedding,我使用下面的代码启动Webworker,它使用通用语句编码器创建嵌入 const initEmbeddingWorker = (filePath) => { let worker = new Worker(filePath); worker.postMessage({init: 'init'}) worker.onmessage = (e) => { worker.terminate(); } } 网络工作者代码 onmessage

我使用下面的代码启动Webworker,它使用通用语句编码器创建嵌入

const initEmbeddingWorker = (filePath) => {
    let worker = new Worker(filePath);
    worker.postMessage({init: 'init'})

    worker.onmessage = (e) => {
        worker.terminate();
    }
}
网络工作者代码

onmessage = function (e) {
    if(e.data.init && e.data.init === 'init') {
        fetchData();
    }
}

const fetchData = () => {
    //fetches data from indexeddb
    createEmbedding(data, storeEmbedding);
}

const createEmbedding = (data, callback) => {
    use.load().then(model => {
        model.embed(data).then(embeddings => {
            callback(embeddings);
        })
    });
}

const storeEmbedding = (matrix) => {
    let data = matrix.arraySync();
    //store data in indexeddb
}
使用10个同时运行的webworker创建100个嵌入需要3分钟,每个worker创建10个句子的嵌入需要3分钟。创建嵌入所花费的时间太长,因为我需要创建1000多个句子的嵌入,这大约需要25到30分钟。 每当这个代码运行时,它就会占用所有的资源,这使得机器速度非常慢,几乎无法使用


是否缺少任何性能优化?

使用10个webworkers意味着用于运行它的机器至少有11个内核。为什么会有这种假设?(webworker+主线程的数量)

为了充分利用webworker的使用,每个webworker都应该在不同的核心上运行。当工人多于核心时会发生什么?这个程序不会像预期的那么快,因为很多时候会在核心之间交换通信

现在让我们看看每个核心上发生了什么

arraySync
是阻止该线程用于其他用途的阻塞调用

可以使用
arraySync
,而不是
arraySync

const storeEmbedding = async (matrix) => {
    let data = await matrix.array();
    //store data in indexeddb
}
array
及其对应的
arraySync
data
dataSync
慢。最好存储展平数据,输出
数据

const storeEmbedding = async (matrix) => {
        let data = await matrix.data();
        //store data in indexeddb
    }

它应该已经被修复了,你正在运行什么版本的TFJS?您可以尝试升级到最新版本吗?更新了库以使用tensorflowjs 3.0。性能提高约10秒。性能还必须取决于代码运行时CPU、GPU和RAM的当前利用率