tensorflowjs 的后端 webgl 注册失败

Par*_*ran 5 google-chrome webgl tensorflow

正如 tensorflowjs github 中所建议的,我在这里发布了这个问题。在使用 tensorflow 的最简单示例中,我遇到了错误。

错误:
在此处输入图片说明

代码: 一个简单的 html 片段,只加载了 tfjs。

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <script src="https://cdn.jsdelivr.net/npm/@tensorflow/tfjs@0.15.3/dist/tf.min.js"></script>
    <title>Testing Tfjs</title>
</head>
<body>
    <h2>Testing Tfjs</h2>    
</body>
</html>
Run Code Online (Sandbox Code Playgroud)

浏览器:Chrome 版本 72.0.3626.119
操作系统:Win 10,GPU:GT 740M,版本 397.44。
Chrome gpu show 说:(因为我禁用了硬件加速以避免 chrome 有时变黑)

WebGL: Software only, hardware acceleration unavailable, 
WebGL2: Software only, hardware acceleration unavailable
Run Code Online (Sandbox Code Playgroud)

我曾尝试将后端明确设置为 cpu,但没有帮助。我在 github 上看到其他帖子谈论这个错误,但徒劳无功。

feb*_*0th 5

抱歉,我的英语不好。

和我的情况一样。就我而言...“此设备不支持 WebGL”和“tf.setBackend('webgl')”返回 false。

Tensorflow需要硬件加速。

打开 chrome://gpu,然后检查您的

  • 图形功能状态
  • 检测到的问题
  • 硬件 GPU 的图形功能状态
  • 检测到硬件 GPU 的问题

发现问题。

Gpu 合成已通过 blocklist、about:flags 或命令行禁用。浏览器将退回到软件合成,并且硬件加速将不可用。禁用功能:gpu_compositing

然后转到 chrome://flags/ 搜索“覆盖软件渲染列表”> 设置启用> 重新启动浏览器

谢谢。


gma*_*man 0

因此,既然您发布了 about:gpu 结果,显示您仅获得仅适用于 WebGL 的软件渲染,这表明 tensorflow.js 正在将上下文failIfMajorPerformanceCaveat创建标志传递给 WebGL,这几乎肯定会在软件渲染下失败

我们可以通过重写来检查getContext并打印出创建标志

<script>
HTMLCanvasElement.prototype.getContext = function(type, parameters) {
 console.log(JSON.stringify(parameters, null, 2));
 return null;
};
</script>
<script src="https://cdn.jsdelivr.net/npm/@tensorflow/tfjs@0.15.3/dist/tf.min.js"></script>
Run Code Online (Sandbox Code Playgroud)

运行后我看到了这些结果

{
  "alpha": false,
  "antialias": false,
  "premultipliedAlpha": false,
  "preserveDrawingBuffer": false,
  "depth": false,
  "stencil": false,
  "failIfMajorPerformanceCaveat": true    <====-------
}
Run Code Online (Sandbox Code Playgroud)

这就是它打印该警告的原因。

也就是说,这只是一个警告。tensorflow.js 仍然运行。注意 (a) 它显示 2 个警告,而不是 2 个错误。(b) 它们显示为黄色,而不是红色。

警告不是错误

使用console.warnvsconsole.error你可以看到差异

警告与错误

tensorflow.js 运行得很好 AFAICT。这是一个例子。我已经破解了getContext,所以它总是失败,所以tensorflow.js无法获取WebGL上下文。它打印了 2 个警告,但也运行得很好。滚动到消息底部,您将看到它运行了示例张量流代码的结果。

{
  "alpha": false,
  "antialias": false,
  "premultipliedAlpha": false,
  "preserveDrawingBuffer": false,
  "depth": false,
  "stencil": false,
  "failIfMajorPerformanceCaveat": true    <====-------
}
Run Code Online (Sandbox Code Playgroud)
const d = tf.tensor2d([[1.0, 2.0], [3.0, 4.0]]);
const d_squared = d.square();
d_squared.print();
Run Code Online (Sandbox Code Playgroud)

  • 解释警告和错误之间的区别不是问题的目的,也没有帮助。如果出现警告,则由于非加速计算,性能非常低,导致模型无法使用。 (3认同)