Мне кажется, что это больше вопрос Tensorflow / Bazel, чем вопрос Ubuntu, поэтому я задаю здесь.
Я просмотрел десятки страниц установки Tensorflow в Интернете, и проблемы попадают в одну из следующих категорий
Проблема 1: Большинство руководств говорят вам установить с помощью pip (примеры 1 , 2 и 3 ), но Мне нужен файл libtensorflow_ cc .so, и я не думаю, что pip устанавливает это
Проблема 2: Всегда предлагается создавать Tensorflow с использованием Bazel, но для тех, кто не знаком с bazel, это непонятно как его запустить. Например, вот 3 предлагаемые команды для установки tenorflow с использованием bazel (взяты из примеров 1 , 2 и 3 )
bazel build --config opt //tensorflow/tools/lib_package:libtensorflow
bazel build //tensorflow/tools/pip_package:build_pip_package
bazel build -c opt --config=cuda //tensorflow/tools/pip_package:build_pip_package
Проблема 3: На самом деле никогда не определено, какие версии Tensorflow работают с какими версиями Ubuntu.
Проблема 4: На самом деле никогда не определено, какие версии Bazel можно использовать какие версии Tensorflow устанавливать. В предыдущем вопросе я наткнулся на кирпичную стену, где Bazel искал несуществующую библиотеку (см. Как установить libcusolver.so.11 )
MWE: В интересах предоставления минимального рабочего примера я создал этот скрипт грубой силы bash, чтобы посмотреть, смогу ли я найти жизнеспособную комбинацию Tensorflow и Bazel
#!/bin/bash
UBUNTU_VERSION=$(lsb_release -rs) # 16.04, 18.04, 20.04, etc.
UBUNTU_ARCHITECTURE=$(uname -i) # x86 or x86_64
TARGET_TENSORFLOW_BRANCHES=(2.3.0 2.2.0 2.1.1 2.0.2)
TARGET_BAZEL_VERSIONS=(3.4.1 3.4.0 3.3.1 3.3.0 3.2.0 3.1.0 3.0.0 2.2.0 2.1.1 2.1.0 2.0.1 2.0.0 1.2.1 1.2.0 1.1.0 1.0.1 1.0.0)
TARGET_TENSOR_FLOW_FEATURE=libtensorflow_cc.so
CUDA_FULL_VERSION=$(cat /usr/local/cuda/version.txt | cut -d ' ' -f 3)
CUDA_MAJOR_VERSION=$(cat /usr/local/cuda/version.txt | cut -d ' ' -f 3|cut -d '.' -f 1)
GPU_TYPE=$(nvidia-smi --query-gpu=gpu_name --format=csv|tail -n 1)
ROOT_DIR=$(pwd)
LOG_DIR=$ROOT_DIR/logs
rm -fr $LOG_DIR
mkdir $LOG_DIR
for TARGET_TENSORFLOW_BRANCH in ${TARGET_TENSORFLOW_BRANCHES[@]}
do
for TARGET_BAZEL_VERSION in ${TARGET_BAZEL_VERSIONS[@]}
do
cd $ROOT_DIR
rm -fr tensorflow.tf-$TARGET_TENSORFLOW_BRANCH.bazel-$TARGET_BAZEL_VERSION
mkdir tensorflow.tf-$TARGET_TENSORFLOW_BRANCH.bazel-$TARGET_BAZEL_VERSION
cd tensorflow.tf-$TARGET_TENSORFLOW_BRANCH.bazel-$TARGET_BAZEL_VERSION
LOG_FILE=$LOG_DIR/tf-$TARGET_TENSORFLOW_BRANCH.bazel-$TARGET_BAZEL_VERSION.txt
BAZEL_CMD=bazel-${TARGET_BAZEL_VERSION}
echo "Ubuntu Version : $UBUNTU_VERSION" &>> $LOG_FILE
echo "Ubuntu Architecture : $UBUNTU_ARCHITECTURE" &>> $LOG_FILE
echo "Target TensorFlow Branch : $TARGET_TENSORFLOW_BRANCH" &>> $LOG_FILE
echo "Target Bazel Version : $TARGET_BAZEL_VERSION" &>> $LOG_FILE
echo "Cuda Full Version : $CUDA_FULL_VERSION" &>> $LOG_FILE
echo "Cuda Major Version : $CUDA_MAJOR_VERSION" &>> $LOG_FILE
echo "GPU Type : $GPU_TYPE" &>> $LOG_FILE
sudo apt-get install $BAZEL_CMD &>> $LOG_FILE
if [[ $? == 0 ]]
then
echo "$BAZEL_CMD installation: SUCCESS" &>> $LOG_FILE
BAZEL_COMMAND_INSTALLED=true
else
echo "$BAZEL_COMMAND installation: FAIL" &>> $LOG_FILE
BAZEL_COMMAND_INSTALLED=false
fi
git clone https://github.com/tensorflow/tensorflow.git &>> $LOG_FILE
cd tensorflow
git checkout tags/v${TARGET_TENSORFLOW_BRANCH} &>> $LOG_FILE
if [[ $? == 0 ]]
then
TENSORFLOW_BRANCH_CHECKED_OUT=true
echo "tags/$TARGET_TENSORFLOW_BRANCH checkout: SUCCESS" &>> $LOG_FILE
else
echo "tags/$TARGET_TENSORFLOW_BRANCH checkout: FAIL" &>> $LOG_FILE
TENSORFLOW_BRANCH_CHECKED_OUT=false
fi
./configure
if [[ $? == 0 ]]
then
echo "configure: SUCCESS" &>> $LOG_FILE
TENSORFLOW_CONFIGURED=true
else
echo "configure: FAIL" &>> $LOG_FILE
TENSORFLOW_CONFIGURED=false
fi
$BAZEL_CMD build\
-c opt\
--config=v2\
--config=cuda\
--config=monolithic\
--copt=-mavx\
--copt=-mavx2\
--copt=-mfma\
--copt=-msse4.1\
--copt=-msse4.2\
--genrule_strategy=standalone\
--spawn_strategy=standalone\
//tensorflow:${TARGET_TENSOR_FLOW_FEATURE} &>> $LOG_FILE
if [[ $? == 0 ]]
then
echo "Bazel installation: SUCCESS" &>> $LOG_FILE
TENSORFLOW_INSTALLED=true
else
echo "Bazel installation: FAIL" &>> $LOG_FILE
TENSORFLOW_INSTALLED=false
fi
if [[ $BAZEL_COMMAND_INSTALLED == "true" && $TENSORFLOW_BRANCH_CHECKED_OUT == "true" && $TENSORFLOW_CONFIGURED == "true" && $TENSORFLOW_INSTALLED == "true" ]]
then
echo "Tensorflow installed Successfully" &>> $LOG_FILE
exit 0
fi
done
done
Execution: Я вызываю сценарий так:
./install_tensor_flow.sh
Базовая системная информация: Параметры компиляции следующие
Ubuntu Version : 20.04
Ubuntu Architecture : x86_64
Target TensorFlow Branch : X.X.X
Target Bazel Version : X.X.X
Cuda Full Version : 11.0.207
Cuda Major Version : 11
GPU Type : GeForce GTX 1650
Полные выходы: Тест все еще выполняется, так как он очень медленный, а этап ./configure не может быть автоматизирован и требует ввода данных пользователем. Я могу загрузить журналы, когда закончу, но это может быть излишним
Вопрос: Может ли кто-нибудь обновить сценарий bash с правильными TARGET_TENSORFLOW_BRANCH
и TARGET_BAZEL_VERSION
, чтобы этот сценарий работал?