-
Notifications
You must be signed in to change notification settings - Fork 1.9k
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
tfjs does not work with hermes engine #6526
Comments
Did you get chance to check similar issue here #5972 ? |
I haven't and I should have. It seems to be the same problem as one comment noted, tfjs doesn't work together with hermes. I will leave it to you to decide if this should be fixed on tfjs side or hermes. What I can contribute is the reproduction code above prove that hermes doesn't support export class by default, and the incompatibility might lie in interaction between build tools like babel or typescript and hermes. |
@mattsoulanille could you please help with this issue , if we can support hermes from tfjs ? |
Same here, cannot get TFJS to work with React Native and Hermes JS engine enabled. The |
Having had to disable hermes, too, is there any update on the matter or maybe another board where progress could be tracked @mattsoulanille? Cheers! :) |
Has there been any progress on this? Now that React Native uses Hermes by default, it would be great to figure out how tfjs can support it. |
Sorry for the lack of updates. We would like to support Hermes, if possible, but it's not at the top of our priority list right now. Looking at the error message, this seems to be a case of having multiple versions of the I took a quick look at the reproduction (thanks for posting one!), and it seems like it's not using tfjs (It has its own tensor class). I don't think Hermes supports exporting classes yet, but the example might work if it's compiled down to use prototypes instead of classes (es5 I think). I also tried getting hermes to import
After these changes, the following test code works (on my linux machine): // index.js
import { Tensor } from './node_modules/@tensorflow/tfjs/dist/tf.js';
const tensor = new Tensor([1,2,3]);
print(tensor.size); yarn add @tensorflow/tfjs
./hermes -commonjs index.js node_modules/@tensorflow/tfjs/dist/tf.js However, I'm not able to load any tfjs backends, so all I can do is print the size. Edit: Actually, I'm able to load the CPU backend, but it seems as though the weak map that holds tensor data is losing the data too early when I try to run Please leave this issue open so I can take another look when I have some time. |
@mattsoulanille thanks for taking a look. I want to share a walkaround that I found to be working for my use case:
function convertToTensor(x, argName, functionName, parseAsDtype = 'numeric') {
- if (x instanceof Tensor) {
+ if (x instanceof Tensor || x.constructor.name === 'Tensor') {
assertDtype(parseAsDtype, x.dtype, argName, functionName);
return x;
}
npx patch-package @tensorflow/tfjs
I am using yarn v1 so I ran yarn add patch-package postinstall-postinstall The additional setup in {
"scripts": {
"postinstall": "patch-package"
},
"dependencies": {
"patch-package": "^6.4.7",
"postinstall-postinstall": "^2.1.0"
}
} I did also spent a few hours digging into this issue but did not make much progress. Some findings:
|
@paradite 's patch package worked for us, there were a few more places that needed the same fix (adding |
Hi @rthadur @gaikwadrahul8 @mattsoulanille After playing with https://github.com/paradite/tfjs-hermes-bug It is now easy to reproduce this issue by just running I am willing to work on a PR to fix this issue since it is affecting more people: #5972 #7056 I could follow the suggest in #5972 (comment) to:
Let me know what you think. Thanks! |
Hey @paradite , I'm wondering if this issue ever got resolved? I seem to be facing this issue still where I have to switch to jsc. However, the issue with jsc is that it doesn't seem to be compatible with expo 49. |
Oh okay thanks! |
System information
Describe the current behavior
When using tfjs for React Native, tfjs does not work when using hermes JavaScript engine. It works with the default
jsc
engine.It fails at
instanceof Tensor
assertion, even though theconstructor
is correctly identified asTensor
:Describe the expected behavior
tfjs should run without errors when using
hermes
engine.Standalone code to reproduce the issue
Minimum reproduction repo: https://github.com/paradite/tfjs-hermes-bug
yarn
(it is not necessary to setup tfjs git submodule)npm run tfjs:node
npm run tfjs:buildrun
Other info / logs
I have tried a hacky fix and it seems to work:
Instead of using
, use
The text was updated successfully, but these errors were encountered: