java .lang.IllegalArgumentException: Невозможно назначить устройство для работы - PullRequest
0 голосов
/ 06 апреля 2020

Я преобразую предварительно обученную модель TensorFlow в файл .pb с кодом Python, как показано ниже

    import tensorflow as tf
    from argparse import ArgumentParser

    def main():
        parser = ArgumentParser()
        parser.add_argument('--checkpoint', type=str,
                            dest='checkpoint',
                            help='dir or .ckpt file to load checkpoint from',
                            metavar='CHECKPOINT', required=True)
        parser.add_argument('--model', type=str,
                            dest='model',
                            help='.meta for your model',
                            metavar='MODEL', required=True)
        parser.add_argument('--out-path', type=str,
                            dest='out_path',
                            help='model output directory',
                            metavar='MODEL_OUT', required=True)
        opts = parser.parse_args()
        tf.reset_default_graph()
        saver = tf.train.import_meta_graph(opts.model)
        #builder = tf.saved_model.builder.SavedModelBuilder(opts.out_path)
        with tf.Session(config=tf.ConfigProto(allow_soft_placement=True, log_device_placement=True)) as sess:
            # Restore variables from disk.
            saver.restore(sess, opts.checkpoint)
            print("Model restored.")
            #builder.add_meta_graph_and_variables(sess,['tfckpt2pb'],strip_default_attrs=False)
            #builder.save()
            constant_graph = tf.graph_util.convert_variables_to_constants(sess, sess.graph_def, ['Tower_0/parsing_fc/BiasAdd','Tower_0/parsing_rf_fc/BiasAdd','Tower_0/edge_rf_fc/BiasAdd'])

            with tf.gfile.FastGFile(opts.out_path, mode='wb') as f:
                    f.write(constant_graph.SerializeToString())
                    print("pb Model saved.")

    if __name__ == '__main__':
        main()     

И импортирую модель .pb с кодом Java, как показано ниже

                  //import model
                  byte[] graphBytes = IOUtils.toByteArray(new FileInputStream(MODEL_PATH));

                  graph.importGraphDef(graphBytes);


                  //create session
                  try(Session session = new Session(graph)){

                      ConfigProto config = ConfigProto.newBuilder()
                              .setGpuOptions(GPUOptions.newBuilder().setAllowGrowth(true))
                              .build();
                       //get the output
                      Tensor<?> output = session.runner()
                              .setOptions(config.toByteArray())
                              .feed("Tower_0/strided_slice", imageTensor)
                              .fetch("Tower_0/parsing_fc/BiasAdd").run().get(0);
                      System.out.println(output);
                  }

Тогда ошибка, как показано ниже

// вот сообщения об ошибках 2020-04-06 12: 13: 50.269556: I tenorflow / core / platform / cpu_feature_guard. cc: 142] Ваш ЦП поддерживает инструкции, которые этот двоичный файл TensorFlow не был скомпилирован для использования: AVX2 AVX512F FMA 2020-04-06 12: 13: 50.281419: I tenorflow / core / platform / profile_utils / cpu_utils. cc: 94] Частота ЦП: 2600000000 Гц 2020-04-06 12: 13: 50.288167: I tenorflow / compiler / xla / service / service. cc: 168] Служба XLA 0x7f968ded1db0, инициализированная для хоста платформы (это не гарантирует, что XLA будет использоваться). Устройства: 2020-04-06 12: 13: 50.288206: I tenorflow / compiler / xla / service / service. cc: 176] Устройство StreamExecutor (0): Хост, Версия по умолчанию java .lang.IllegalArgumentException: Невозможно назначить устройство для операции Tower_0 / strided_slice: {{узел Tower_0 / strided_slice}} было явно назначено для / device: GPU: 0, но доступны следующие устройства: [/ job: localhost / replica: 0 / task: 0 / device: CPU: 0, / job: localhost / replica: 0 / task: 0 / device: XLA_CPU: 0]. Убедитесь, что в спецификации устройства указано действительное устройство. Запрошенное устройство выглядит как графический процессор, но CUDA не включен. [[Tower_0 / strided_slice]] в org.tensorflow.Session.run (собственный метод) в org.tensorflow.Session.access $ 100 (Session. java: 48) в org.tensorflow.Session $ Runner.runHelper (Session. java: 326) at org.tensorflow.Session $ Runner.run (Session. java: 276)

Моя конфигурация pom

       //here are maven configuration
        <dependency>
            <groupId>org.tensorflow</groupId>
            <artifactId>tensorflow</artifactId>
            <version>1.15.0</version>
        </dependency>
        <dependency>
          <groupId>org.tensorflow</groupId>
          <artifactId>libtensorflow_jni_gpu</artifactId>
          <version>1.15.0</version>
        </dependency> 

Я не знаю, почему произошла эта ошибка, и я не могу решить проблему.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...