https://github.com/vladmandic/tfjs
Custom build of Tensorflow/JS for Browsers as pure ESNext
https://github.com/vladmandic/tfjs
Last synced: about 1 month ago
JSON representation
Custom build of Tensorflow/JS for Browsers as pure ESNext
- Host: GitHub
- URL: https://github.com/vladmandic/tfjs
- Owner: vladmandic
- License: mit
- Created: 2021-09-14T17:33:44.000Z (over 3 years ago)
- Default Branch: main
- Last Pushed: 2023-09-18T16:20:11.000Z (over 1 year ago)
- Last Synced: 2025-03-17T07:07:16.933Z (about 1 month ago)
- Language: JavaScript
- Homepage: https://vladmandic.github.io/tfjs
- Size: 75.9 MB
- Stars: 5
- Watchers: 3
- Forks: 3
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# Custom build of Tensorflow/JS for Browsers as pure ESNext
This solution builds **TensorFlow/JS** for Browsers, including individual modules as well as a unified bundle
Included Backends: `CPU`, `WebGL`, `WebGPU`, `WASM`
Node packages (`tfjs-node` and `tfjs-node-gpu`) are not covered
## Notes
- Does not perform any modifications to `tfjs` sources
Instead it relies on custom import resolver during build process
- Does not use build hacks such as symlinks or virtual packages or manually set sideeffects
- Masively smaller:
- original `tf.es2017.js` is **3.9MB** *without* `wasm` and `webgpu` backends which are another **2MB** on top
- new `tfjs.esm.js` is **2.5MB** with `wasm` and `webgpu` included
and that is non-minfied and with tree shaking disabled
- Entire build is about 10x faster
Full build takes **<2min** on a notebook *(of which >90% is compiling WASM code)*
Rebuild takes **<10sec**
- Changing WASM build compiler parameters improves performance slightly
- Changing backend imports to link to source files instead of symlinked packages solves a lot of dependency issues
- Changing imports from files generated in dist to actual sources makes everything tree shakable
## Install
1. Internal dependencies: `npm install`
2. External dependencies:
**Git**: assumed to be already installed if you're here :)
**Bazel**: requires `bazel 4.x`
**Python**: requires `python 3.x` aliased as `python`, not compatible with `python 2.x`
**EmScripten SDK**: auto-downloaded during first build## Run
> `npm run build` executes steps:
1. **download**: `scripts/download.sh`
on first run it clones `@tensorflow/tfjs` from git into `./src`
on subsequent runs it rolls forward cloned copy of `@tensorflow/tfjs`
2. **prepare**: `scripts/prepare.sh`
creates versioned `.tfjs-*.ts` from build templates
and `.js` imports from `.json` files
3. **build wasm**: `scripts/wasm.sh`
build wasm binaries and wasm `.js` exports using `bazel`
4. **build js packages**: `node scripts/bundle.js`
build targets in `/dist` using `esbuild` with custom resolver plugins and TypeScript compiler settings
5. **build typedefs**: `scripts/types.sh`
build typedefs bundle in `/lib` using `tsc` & `api-extractor`To remove currently downloaded version of **TFJS** and reset all cached info
> `npm run clean`