Импортируйте TensorFlow как зависимость Bazel для проекта C++.C++

Программы на C++. Форум разработчиков
Ответить Пред. темаСлед. тема
Anonymous
 Импортируйте TensorFlow как зависимость Bazel для проекта C++.

Сообщение Anonymous »

Я начинаю новый проект C++, для которого требуется TensorFlow. Я хотел бы настроить способ импорта TensorFlow из github без необходимости создавать его вручную для каждой среды.
Я использую Bazel для сборки своего проекта и управления зависимостями, потому что его использует TensorFlow. и кажется, что импортировать его через «Базель» не так уж и сложно. Кроме того, я использую bzlmod (новый способ импорта модулей).
Я не могу найти хорошей документации или руководства по правильному импорту модулей. Я новичок в методах сборки C++ (из мира Java/узлов). Я попробовал способ импорта TensorFlow с помощью TensorFlow Serving, как упоминалось в некоторых сообщениях. Но у меня ничего не работает.
На данный момент у меня возникает такая ошибка при попытке синхронизации Bazel с CLion:

Код: Выделить всё

error loading package '@@org_tensorflow~//tensorflow/core': Unable to find package for @@[unknown repo 'local_config_cuda' requested from @@org_tensorflow~]//cuda:build_defs.bzl: The repository '@@[unknown repo 'local_config_cuda' requested from @@org_tensorflow~]' could not be resolved: No repository visible as '@local_config_cuda' from repository '@@org_tensorflow~'. and referenced by '//src/main:my_project_main'
Я использую MacBook, и это может объяснить, почему он пропускает некоторые вещи cuda. Как я могу включать и выключать функции cuda в зависимости от операционной системы, на которой я работаю? Возможно, он понадобится мне позже в рабочей среде, но на моем Mac он отключен.
Вот моя текущая конфигурация:

Код: Выделить всё

registry/
modules/
org_tensorflow/
2.15.1/
MODULE.bazel
source.json
metadata.json
bazel_registry.json
src/
main/
BUILD.bazel
main.cc
.bazelrc
MODULE.bazel
WORKSPACE.bazel
Я отложил в сторону ту часть реестра, в которой просто указан URL-адрес для получения архива, так как кажется, что он работает правильно. Архив легко извлекается из GitHub, и, похоже, у меня есть правильный доступ к его файлам.
Мой .bazelrc выглядит так:

Код: Выделить всё

# Enable Bzlmod for every Bazel command
common --enable_bzlmod --registry=https://bcr.bazel.build --registry=file://%workspace%/registry --experimental_repo_remote_exec
Мой MODULE.bazel выглядит так

Код: Выделить всё

module(
name = "my_project",
repo_name = "my_project",
)

bazel_dep(name = "bazel_skylib", version = "1.6.1")
bazel_dep(name = "rules_java", version = "7.5.0")
bazel_dep(name = "rules_python", version = "0.31.0")
bazel_dep(name = "org_tensorflow", version = "2.15.1")
Мой WORKSPACE.bazel выглядит так:

Код: Выделить всё

load("@rules_python//python:repositories.bzl", "py_repositories", "python_register_toolchains")

py_repositories()

python_register_toolchains(
name = "python",
ignore_root_user_error = True,
python_version = "3.9",
)

load("@python//:defs.bzl", "interpreter")
load("@rules_python//python:pip.bzl", "package_annotation", "pip_parse")

NUMPY_ANNOTATIONS = {
"numpy": package_annotation(
additive_build_content = """\
filegroup(
name = "includes",
srcs = glob(["site-packages/numpy/core/include/**/*.h"]),
)
cc_library(
name = "numpy_headers",
hdrs = [":includes"],
strip_include_prefix="site-packages/numpy/core/include/",
)
""",
),
}

pip_parse(
name = "pypi",
annotations = NUMPY_ANNOTATIONS,
python_interpreter_target = interpreter,
requirements_lock = "@org_tensorflow//:requirements_lock_3_9.txt",
)

load("@pypi//:requirements.bzl", "install_deps")

install_deps()

load("@org_tensorflow//tensorflow:workspace3.bzl", "tf_workspace3")

tf_workspace3()

load("@org_tensorflow//tensorflow:workspace2.bzl", "tf_workspace2")

tf_workspace2()

load("@org_tensorflow//tensorflow:workspace1.bzl", "tf_workspace1")

tf_workspace1()

load("@org_tensorflow//tensorflow:workspace0.bzl", "tf_workspace0")

tf_workspace0()
Я попытался скопировать способ включения и настройки TensorFlow Serving, а также способ настройки WORKSPACE TensorFlow. Но я понятия не имею, что делаю.
Затем я импортирую код в свой проект с помощью src/main/BUILD.bazel вот так:

Код: Выделить всё

cc_binary(
name = "my_project_main",
srcs = [
"main.cc",
],
deps = [
"@org_tensorflow//tensorflow/core:tensorflow",
],
)
Кстати, я не знаю, какую цель указать в качестве зависимости. Обслуживание TensorFlow использует @org_tensorflow//tensorflow/core:lib. Знаете ли вы, какая цель подходит для моего варианта использования? Мне нужно будет использовать базовые классы TensorFlow в моем коде на C++, такие как tf.Tensor(), tf.float() и т. д.
Если у вас есть какие-либо советы, решения, спасибо ты!

Подробнее здесь: https://stackoverflow.com/questions/784 ... -c-project
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «C++»