Не удалось зарегистрировать бэкэнд webgl для тензорного потока - PullRequest
0 голосов
/ 03 марта 2019

Как предлагается в tenorflowjs GitHub, я выкладываю вопрос здесь.Я получаю ошибку ниже, в простейшем примере возможно с tenorflow.

Ошибка:
enter image description here

Код: Простой фрагмент кода 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>

Браузер: Chrome версии 72.0.3626.119
ОС: Win 10, GPU: GT 740M, версия 397.44.
Chrome GPU Show говорит: (потому что я отключил ускорение hw, чтобы избежать затемнения хромавремя от времени)

WebGL: Software only, hardware acceleration unavailable, 
WebGL2: Software only, hardware acceleration unavailable

Я пытался явно установить backend как процессор, но это не помогло.Я видел другие посты в github, рассказывающие об этой ошибке, но напрасно.

1 Ответ

0 голосов
/ 04 марта 2019

Таким образом, поскольку вы опубликовали свой результат about: gpu, показывающий, что вы получаете программный рендеринг только для WebGL, в котором предполагается, что тензор flow.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>

Так работает, что я вижу эти результаты

{
  "alpha": false,
  "antialias": false,
  "premultipliedAlpha": false,
  "preserveDrawingBuffer": false,
  "depth": false,
  "stencil": false,
  "failIfMajorPerformanceCaveat": true    <====-------
}

Так вот почему он печатает это предупреждение.

Это говорит, что это просто предупреждение .tenorflow.js все еще работает.Обратите внимание (а), что он говорит 2 предупреждения, а не 2 ошибки.(б) они отображаются желтым, а не красным цветом.

warnings not errors

с использованием console.warn против console.error вы можете увидеть разницу

warning vs error

tenorflow.js работает очень хорошо AFAICT.Вот пример.Я взломал getContext, поэтому он всегда терпит неудачу, так что tenorflow.js не может получить контекст WebGL.Он выводит 2 предупреждения, но также работает нормально.Прокрутите список до конца сообщения, и вы увидите, что он показал результаты примера кода tenorflow.

const d = tf.tensor2d([[1.0, 2.0], [3.0, 4.0]]);
const d_squared = d.square();
d_squared.print();
<script>
HTMLCanvasElement.prototype.getContext = function() {
 return null;
};
</script>
<script src="https://cdn.jsdelivr.net/npm/@tensorflow/tfjs@0.15.3/dist/tf.min.js"></script>
...