Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

setThreadsCount not work. #8513

Open
MountainAndMorning opened this issue Feb 12, 2025 · 1 comment
Open

setThreadsCount not work. #8513

MountainAndMorning opened this issue Feb 12, 2025 · 1 comment
Assignees

Comments

@MountainAndMorning
Copy link

Please make sure that this is a bug. As per our
GitHub Policy,
we only address code/doc bugs, performance issues, feature requests and
build/installation issues on GitHub. tag:bug_template

System information

  • Have I written custom code (as opposed to using a stock example script provided in TensorFlow.js): No.
  • OS Platform and Distribution (e.g., Linux Ubuntu 16.04): macOS 15 macbook pro m1 max
  • Mobile device (e.g. iPhone 8, Pixel 2, Samsung Galaxy) if the issue happens on mobile device: No
  • TensorFlow.js installed from (npm or script link): https://www.npmjs.com/package/@tensorflow/tfjs-backend-wasm
  • TensorFlow.js version (use command below): "^4.22.0"
  • Browser version: "electron": "^30.0.1",
  • Tensorflow.js Converter Version:

Describe the current behavior
This is an electron application. In the fronend main.js file we run:

import * as tf from '@tensorflow/tfjs';
import '@tensorflow/tfjs-backend-wasm';
import {setWasmPaths, getThreadsCount, setThreadsCount} from '@tensorflow/tfjs-backend-wasm';
setWasmPaths('/node_modules/@tensorflow/tfjs-backend-wasm/dist/');
tf.env().set('WASM_HAS_SIMD_SUPPORT', true)
setThreadsCount(4);
tf.setBackend('wasm').then(() => {
  console.log(getThreadsCount(), 'threads count');
});

console output:

1 'threads count'

Describe the expected behavior

console output:

4 'threads count'

vite.config.js

import { defineConfig } from 'vite'
import path from 'node:path'
import electron from 'vite-plugin-electron/simple'
import vue from '@vitejs/plugin-vue'
// Vuetify
import vuetify from 'vite-plugin-vuetify'
import { viteStaticCopy } from 'vite-plugin-static-copy'


// https://vitejs.dev/config/
export default defineConfig({
  server: {
    headers: {
      "Cross-Origin-Opener-Policy": "same-origin",
      "Cross-Origin-Embedder-Policy": "require-corp"
    }
  },
  preview: {
    headers: {
      "Cross-Origin-Opener-Policy": "same-origin",
      "Cross-Origin-Embedder-Policy": "require-corp"
    }
  },
  plugins: [
    vue(),
    vuetify({ autoImport: true }),
    electron({
      main: {
        // Shortcut of `build.lib.entry`.
        entry: 'electron/main.ts',
        // External packages that should not be bundled
        external: ['electron', 'bonjour', 'electron-store', 'get-port', 'realm'],
        // Build options
        buildOptions: {
          minify: false,
        },
      },
      preload: {
        // Shortcut of `build.rollupOptions.input`.
        // Preload scripts may contain Web assets, so use the `build.rollupOptions.input` instead `build.lib.entry`.
        input: path.join(__dirname, 'electron/preload.ts'),
      },
      // Ployfill the Electron and Node.js API for Renderer process.
      // If you want use Node.js in Renderer process, the `nodeIntegration` needs to be enabled in the Main process.
      // See https://github.com/electron-vite/vite-plugin-electron-renderer
      renderer: {
        resolve: {
          'realm': { type: 'cjs' }
        }
      },
    }),
    viteStaticCopy({
      targets: [
        { src: 'node_modules/@itk-wasm/image-io/dist/pipelines/*.{js,wasm,wasm.zst}', dest: 'pipelines' },
        { src: 'node_modules/@itk-wasm/dicom/dist/pipelines/*.{js,wasm,wasm.zst}', dest: 'pipelines' },
        { src: 'node_modules/@tensorflow/tfjs-backend-wasm/dist/*.wasm', dest: 'tfjs-backend-wasm' }
      ],
    })
  ],
  worker: {
    format: 'es'
  },
  optimizeDeps: {
    exclude: ['@itk-wasm/dicom', '@itk-wasm/image-io']
  },
})

package.json

{
  "name": "electronvite",
  "private": true,
  "version": "0.0.0",
  "type": "module",
  "scripts": {
    "dev": "vite",
    "build": "vite build && electron-builder",
    "preview": "vite preview"
  },
  "dependencies": {
    "@itk-wasm/dicom": "^7.3.0",
    "@itk-wasm/image-io": "^1.4.0",
    "@kitware/vtk.js": "^32.9.0",
    "@tensorflow/tfjs": "^4.22.0",
    "@tensorflow/tfjs-backend-wasm": "^4.22.0",
    "@tensorflow/tfjs-backend-webgpu": "^4.22.0",
    "axios": "^1.7.9",
    "bonjour": "^3.5.0",
    "d3": "^7.9.0",
    "electron-store": "^8.1.0",
    "get-port": "^7.1.0",
    "lodash-es": "^4.17.21",
    "muuri": "^0.9.5",
    "realm": "^12.14.1",
    "uuid": "^11.0.5"
  },
  "devDependencies": {
    "@mdi/js": "^7.4.47",
    "@vitejs/plugin-vue": "^5.0.4",
    "electron": "^30.0.1",
    "electron-builder": "^24.13.3",
    "typescript": "^5.2.2",
    "vite": "^5.1.6",
    "vite-plugin-electron": "^0.28.6",
    "vite-plugin-electron-renderer": "^0.14.5",
    "vite-plugin-static-copy": "^2.2.0",
    "vite-plugin-vuetify": "^2.0.4",
    "vue": "^3.4.21",
    "vue-tsc": "^2.0.26",
    "vuetify": "^3.7.6"
  },
  "main": "dist-electron/main.js"
}
@MountainAndMorning MountainAndMorning added the type:bug Something isn't working label Feb 12, 2025
@gaikwadrahul8 gaikwadrahul8 self-assigned this Feb 17, 2025
@gaikwadrahul8
Copy link
Contributor

Hi, @MountainAndMorning

I'm also running into the same problem, despite setting the desired number of threads, TFJS with the WASM backend consistently use only 1 thread.

we’ll share any progress or solutions on this issue .

Here's the HTML snippet I'm using to reproduce the issue:

<!DOCTYPE html>
<html>
<head>
  <title>TFJS WASM Example</title>
  <script src="https://cdn.jsdelivr.net/npm/@tensorflow/[email protected]/dist/tf.min.js"></script>
  <script src="https://cdn.jsdelivr.net/npm/@tensorflow/[email protected]/dist/tf-backend-wasm.js"></script>

</head>
<body>

  <h1>TFJS WASM Example</h1>

  <script>
    tf.setBackend('wasm').then(() => {
      tf.env().set('WASM_HAS_SIMD_SUPPORT', true);
      tf.wasm.setThreadsCount(4)
      console.log('threads count',tf.wasm.getThreadsCount())
    });
  </script>

</body>
</html>

Thank You!!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

3 participants