Как использовать пользовательские операции с сервером tenorflow - PullRequest
0 голосов
/ 17 ноября 2018

Каков идеальный способ, чтобы сервер модели tenorflow распознал мою пользовательскую операцию?

У меня есть пользовательская операция, написанная после этого руководства: https://www.tensorflow.org/guide/extend/op

Я могу использоватьOPP, вызвав tf.load_op_library, но когда я пытаюсь и запускаю tensorflow_model_server

tensorflow_model_server --port=9000 \
                        --model_name=mymodel \
                        --model_base_path=/serving/mymodel

, я получаю следующую ошибку о невозможности найти мой OPP.

tenorsflow_serving /util / retrier.cc: 37] Загрузка, обслуживаемая: {имя: версия mymodel: 1} завершилась неудачно: не найдено: тип операции не зарегистрирован «MyOpp» в двоичном файле, работающем на c37a4ef2d4b4.

Ответы [ 3 ]

0 голосов
/ 14 декабря 2018

Вот что я хотел сделать с моей операцией: - генерировать обертки Python - добавить оп тоже пакет пипс - моя операция связана с тензорным потоком, чтобы тензорный поток мог выполнить операцию

Я поместил свою операционную систему в tenorflow / contrib / foo. Вот как выглядит исходное дерево

.
├── BUILD
├── LICENSE
├── __init__.py
├── foo_op.cc
├── foo_op_gpu.cu.cc
└── foo_op.h

Мой __init__.py файл имел импорт для сгенерированных оболочек

from tensorflow.contrib.sampling.ops.gen_foo import *

Я добавил импорт в tensorflow/contrib/__init__.py

from tensorflow.contrib import foo

Вот мой tensorflow/contrib/foo/BUILD файл:

licenses(["notice"])  # Apache 2.0
exports_files(["LICENSE"])

package(default_visibility = ["//visibility:public"])

load("//tensorflow:tensorflow.bzl", "tf_custom_op_py_library")
load("//tensorflow:tensorflow.bzl", "tf_gen_op_libs")
load("//tensorflow:tensorflow.bzl", "tf_gen_op_wrapper_py")
load("//tensorflow:tensorflow.bzl", "tf_kernel_library")

tf_kernel_library(
    name = "foo_op_kernels",
    prefix = "foo",
    alwayslink = 1,
)
tf_gen_op_libs(
    op_lib_names = ["foo"],
)
tf_gen_op_wrapper_py(
    name = "foo",
    visibility = ["//visibility:public"],
    deps = [
        ":foo_op_kernels",
    ],
)
tf_custom_op_py_library(
    name = "foo_py",
    srcs = [
        "__init__.py",
    ],
    kernels = [
        ":foo_op_kernels",
    ],
    srcs_version = "PY2AND3",
    deps = [
        ":foo",
        "//tensorflow/contrib/util:util_py",
        "//tensorflow/python:common_shapes",
        "//tensorflow/python:framework_for_generated_wrappers",
        "//tensorflow/python:platform",
        "//tensorflow/python:util",
    ],
)

Вот файлы базы тензорного потока, к которым я должен был прикоснуться, чтобы заставить его работать.

  • tensorflow/contrib/BUILD
    • Добавить foo_op_kernels к contrib_kernels deps
    • Добавить foo_op_lib к contrib_ops_op_lib deps
    • Добавить foo к contrib_py deps
  • tensorflow/tools/pip_package/BUILD
    • Добавлена ​​цель Python для COMMON_PIP_DEPS
  • tensorflow/core/BUILD
    • Добавлены мои ядра в all_kernels_statically_linked. Я мог бы переборщить с этим, но это сработало.

Вот файлы тензорного потока, обслуживающие базель:

  • WORKSPACE
    • Измените org_tensorflow на local_repository, указывающий на мой тензорный поток, а не на Google tensorflow_http_archive

Затем я изменил: tensorflow_serving/tools/docker/Dockerfile.devel-gpu, чтобы клонировать мои версии tenorflow и Служба tenorflow.

0 голосов
/ 29 января 2019

Вы также можете использовать tenorflow в качестве подмодуля или local_repository для использования пользовательских макросов в репо для ваших операций.

0 голосов
/ 19 ноября 2018

Вы добавили свою операционную библиотеку в файл BUILD, где хотите ее вызвать?

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