Создание зависимости Tensorflow Java Maven для загрузки во внутреннее репо

Я делаю внутреннюю сборку Tensorflow с оптимизацией ЦП (AVXx, SSE4.x и т. д.), поэтому я могу использовать ее в микросервисе Java, который пока работает успешно, но мне приходится вручную копировать файлы. Я хочу создать артефакт Maven, который будет загружен в наш внутренний репозиторий Maven. Я пытаюсь скомпилировать что-то из этих скриптов(ci_build) и документы(maven, java ), но я интересно, есть ли менее хакерский способ? До сих пор удалось построить зависимость maven, содержащую только jar Java API с:

git/tensorflow/tensorflow/java/maven$ mvn install:install-file \
-Dfile=../../../bazel-bin/tensorflow/java/libtensorflow.jar \
-DpomFile=../../../bazel-bin/tensorflow/java/pom.xml

Команда mvn в вопросе выполняется после сборки с помощью bazel: bazel build -c opt //tensorflow/java:tensorflow //tensorflow/java:libtensorflow_jni

К сожалению файлы *.so отсутствуют. Я могу скопировать их вручную в tensorflow/tensorflow/java/maven/... перед выполнением mvn install, но я предпочитаю этого не делать. :)


person Anton Krosnev    schedule 20.04.2018    source источник
comment
Рассматривали ли вы возможность использования bazel ? IIRC - это стандартный способ создания тензорного потока, и с его помощью также можно создавать код Java.   -  person Lescurel    schedule 20.04.2018
comment
Команда mvn в вопросе выполняется после сборки с помощью bazel bazel build -c opt //tensorflow/java:tensorflow//tensorflow/java:libtensorflow_jni   -  person Anton Krosnev    schedule 20.04.2018


Ответы (1)


Выдержка из моего образа Docker для сборки Tensorflow. После сборки TF создайте артефакт Maven:

Создайте jar и src jar Java API и tar-архив нативных двоичных файлов *.so

    RUN bazel build -s -c opt $TF_GCC_FLAGS \
                               //tensorflow/java:libtensorflow.jar \
                               //tensorflow/java:libtensorflow-src.jar \
                               //tensorflow/tools/lib_package:libtensorflow_jni.tar.gz

WORKDIR /tf/tensorflow-${TENSORFLOW_VERSION}/tensorflow/java/maven

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

ENV NATIVE_DIR="/tf/tensorflow-${TENSORFLOW_VERSION}/tensorflow/java/maven/libtensorflow_jni/src/main/resources/org/tensorflow/native/linux-x86_64"
RUN mkdir -p "${NATIVE_DIR}" && \
    tar -zxvf ${TF_ROOT}/bazel-bin/tensorflow/tools/lib_package/libtensorflow_jni.tar.gz -C ${NATIVE_DIR} && \
    cd libtensorflow && \
    jar -xvf ${TF_ROOT}/bazel-bin/tensorflow/java/libtensorflow-src.jar && \
    rm -rf META-INF

Обновленные временные метки, по-видимому, необходимы, чтобы Maven забрал файл.

Пропустите PGP-подпись двоичных файлов, так как у нас нет ключа PGP.

RUN touch ${NATIVE_DIR}/* && \
    mvn versions:set -DnewVersion="${TENSORFLOW_VERSION}-cpu-optimized" && \
    mvn package -Dgpg.skip=true

CMD mvn install -Dgpg.skip=true
person Anton Krosnev    schedule 14.05.2018