Мой друг подарил мне этот ноутбук несколько лет назад, потому что с тех пор он обновился. У него есть графический процессор, и я хочу начать играть с TensorFlow или просто с графическими процессорами в целом. Мне никогда не удавалось установить на нем TensorFlow, CUDA и т. Д. Это GeGorce GTX 460m и Intel i7. Я чувствую, что он потенциально может стать звездой моего кластера Finux, который включает в себя антиквариат, такой как ISKCON ppc7450, который также работает под управлением Ubuntu 16.04.
Пытаясь использовать этот графический процессор, я пробовал VoidLinux, Linux с нуля. , Ubuntu, Kali и т. Д. В таком порядке. В настоящее время я пытаюсь выполнить новую установку сервера Ubuntu 16.04 без графического интерфейса. Он умещается на моем флеш-накопителе емкостью 1 ГБ.
Я выяснил следующее. Я сделал это как root, но мне, вероятно, следовало перейти в однопользовательский режим:
apt update && apt full-upgrade
ОБНОВЛЕНИЕ: здесь можно выполнить шаги (9-10), чтобы сократить это до одной перезагрузки.
Это не применимо в моем случае, но для графических установок, черного списка nouveau и:
modprobe -r <какой-то вариант модерна>
Загрузите и установите видеодрайвер 390,138 . Другие версии драйверов здесь , но вам нужно посмотреть мелким шрифтом, чтобы найти дополнительные параметры, такие как устаревшие и бета-версии.
Для более новых версий Ubuntu существует несоответствие версии компилятора re: DKMS, NVidia модуль, GCC 5/7, который можно обойти с помощью альтернативных обновлений. Другие обходные пути у меня не работали.
Заставить новый драйвер загружаться при загрузке.
update-initramfs -u
проверка работоспособности
nvidia-smi
Загрузите и установите набор инструментов CUDA 9.1 8.0 и его три исправления . Не позволяйте ему перезаписывать ваш драйвер. Для других версий драйверов существует матрица совместимости для определения требуемой версии SDK.
Страница загрузки драйвера помогает нам выбрать версию нашей операционной системы, в данном случае либо 16.04 , либо 17.04, предпочтительно с четными номерами версий. Эти сценарии установки необходимо запускать по одному, потому что они, похоже, не дают разумного статуса выхода при сбое.
Перезагрузитесь и войдите в систему как не root. Программы некорректно связывались, и это для меня исправило. Я полагаю, это как-то связано с / etc / environment и / etc / profile, а также с тем, когда и какие процессы их создают.
ОБНОВЛЕНИЕ: может быть, просто выйти из системы. Используйте /etc/profile.d и /etc/ld.so.conf.d вместо / etc / environment
При компиляции программы, которую я хочу запустить, я указываю путь к библиотеке с помощью cuInit ().
CUDA_LIB = / usr / local / cuda / lib64 / stubs / libcuda.so
Я также указываю свою архитектуру, поскольку ее отсутствие дает:
Образ ядра недоступен для выполнения на устройстве.
Это 460 м, поэтому у него есть вычислительные возможности 2.1.
CCAP = 21
CCAP = 20
CCSM = 21
ОБНОВЛЕНИЕ: похоже, моей системе требуется "-gencode arch = compute_20, code = [sm_21, compute_20] "
Мы могли бы также указать наш ЦП. GCC говорит, что это песчаный мост.
ARCH = sandybridge
Далее, передачу аргументов с пробелами, вероятно, лучше всего делать с помощью массива, с оговоркой, что такие переменные нельзя экспортировать.
export CFLAGS = "- march = $ ARCH -mtune = $ ARCH"
CMAKE_CONF = ("-DCUDA_LIB = $ CUDA_LIB"
"-DCUDA_NVCC_FLAGS = -gencode arch = compute_ $ CCAP, code = [sm_ $ CCSM, compute_ $ CCAP]")
mkdir build && cd build &&
cmake .. -G Ninja "$ {CMAKE_CONF [@]}" && cd .. &&
cmake --build build && cd build
#sudo cmake --build build --target install
# ниндзя: ошибка: неизвестная цель 'install'
ОБНОВЛЕНИЕ: CUDA_LIB - это переменная для конкретного проекта. Вместо этого сделайте:
echo / usr / local / cuda / lib64 / stubs |
sudo tee -a /etc/ld.so.conf.d/nvidia.conf &&
sudo ldconfig
ОБНОВЛЕНИЕ: вызывает проблемы с nvidia-smi. весело.
Пропускаемся к TF ....
В документации по TF говорится, что контейнер докеров должен быть проще, поэтому я сначала рассмотрю этот вопрос более подробно.
Установить докер.
sudo apt install \
АПТ-транспорт-https \
ca-сертификаты \
завиток \
gnupg-агент \
общие свойства программного обеспечения &&
curl -fsSL https://download.docker.com/linux/ubuntu/gpg |
sudo apt-key add - &&
sudo add-apt-репозиторий \
"deb [arch = amd64] https://download.docker.com/linux/ubuntu \
$ (lsb_release -cs) \
стабильный "&&
sudo apt update &&
sudo apt установить docker-ce docker-ce-cli containerd.io &&
sudo adduser $ (whoami) docker &&
sudo reboot # устраняет проблему с разрешением при подключении к сокету
Тестовый докер.
Докер запускает привет-мир
Установите nvidia-docker.
distribution = $ (. / Etc / os-release; echo $ ID $ VERSION_ID) &&
curl -s -L https://nvidia.github.io/nvidia-docker/gpgkey |
sudo apt-key add - &&
curl -s -L https://nvidia.github.io/nvidia-docker/$distribution/nvidia-docker.list |
sudo tee /etc/apt/sources.list.d/nvidia-docker.list &&
sudo apt update &&
sudo apt install -y nvidia-docker2 &&
sudo systemctl перезапустить докер
Протестируйте nvidia-docker.
docker run --rm --gpus all nvidia / cuda: 9.1-base nvidia-smi
docker run --rm --gpus all nvidia / cuda: 8.0-среда выполнения nvidia-smi
ОБНОВЛЕНИЕ: насколько я могу судить, здесь все успешно. Шаг (13) не работает.
Сборка докеров TF .... Я не уверен, какой образ использовать. Я просматриваю их файлы Docker, в частности 0.11.0-devel-gpu и 1.12.0-devel-gpu, и вижу переменную COMPUTE_CAPABILITY. Как и крипто-майнеры на этапе (8), этот кажется препятствием, - препятствием, поскольку для них требуется совместимость вычислений> 2.1.
docker pull tensorflow / tensorflow: 1.11.0-devel-gpu &&
docker run --gpus all -it -w / tensorflow -v $ PWD: / mnt \
-e HOST_PERMS = "$ (id -u): $ (id -g)" \
тензорный поток / тензорный поток: 1.11.0-devel-gpu bash
В итоге я переключил некоторые версии в их Dockerfile , и установка apt завершилась неудачно:
E: Не удалось найти пакет libcublas-9-1
E: Не удалось найти пакет libcufft-9-1
E: Не удалось найти пакет libcurand-9-1
E: невозможно найти пакет libcusolver-9-1
E: невозможно найти пакет libcusparse-9-1
Поиск этих пакетов просто перенаправляет меня на страницу загрузки для HPC SDK (libcu ++ было бы здорово), но, увы, я не думаю, что есть версия, совместимая с этим старым графическим процессором.
ОБНОВЛЕНИЕ: 9.1 - неправильная версия. Теперь изучаем 8.0. Это означает, что tenorflow: 0.11.0-devel-gpu был хорошим лидером. Это также означает, что шаги (14+) не сделают ничего продуктивного на моем оборудовании.
Теперь попробуем построить на голом железе ....
Я установил CUPTI.
echo /usr/local/cuda-9.1/extras/CUPTI/lib64 |
echo /usr/local/cuda-8.0/extras/CUPTI/lib64 |
sudo tee -a /etc/ld.so.conf.d/nvidia.conf &&
sudo ldconfig
Я установил cuDNN 7.1.3 для 9.1 cuDNN v7.1.4 для 8.0 .
sudo dpkg -i libcudnn7_7.1.4.18-1 + cuda8.0_amd64.deb \
libcudnn7-dev_7.1.4.18-1 + cuda8.0_amd64.deb
найдите и установите libnvinfer7 = 7.1.3-1 + cuda9.1 . Похоже, он есть в Ubuntu 14.04.
Обновите хост-пакеты python.
sudo apt install python3-dev python3-pip python3-venv
Получите самую старую версию Python, которая не является EOL.
cd Python-3.6.12 &&
./configure --with-univseral-archs = intel-64 --with-hash-algorithm = siphash24 --with-threads --with-surepip = upgrade &&
make -n`nproc` &&
сделать DESTDIR = ~ / python3.6 install
TODO, это пакет с исходным кодом, поэтому мне нужно протестировать эту команду
install GO
wget https://golang.org/dl/go1.15.6.linux-amd64.tar.gz &&
tar xf go1.15.6.linux-amd64.tar.gz &&
sudo chown -R root: root go &&
sudo mv go / opt / go &&
sudo tee /etc/profile.d/gopath.sh << "EOF"
export GOPATH = "$ HOME / перейти"
экспорт GOROOT = / opt / go
PATH = "$ ПУТЬ: $ GOROOT / bin: $ GOPATH / bin"
экспорт PATH = $ PATH: $ (go env GOPATH) / bin
EOF
выйти
установить базелиск
получить github.com/bazelbuild/bazelisk &&
sudo ln -sv $ (команда -v bazelisk) / usr / local / bin / bazel
Скомпилировать TF. В прошлом,У меня возникли странные ошибки, предполагающие, что пакет TF не существует в PyPI, поэтому я пытался это сделать раньше, но полученные пакеты pip не запускались. В моей системе команды документации выдают предупреждения, поэтому я немного их изменил.
ОБНОВЛЕНИЕ: поскольку мое оборудование не поддерживает даже устаревший TF, я переключил сборку на CPU-only.
~ / python3. 6 / usr / local / bin / python3.6 -m venv \
--system-site-packages tf-env &&
. tf-env / bin / активировать
pip install -U pip &&
pip install -U numpy wheel &&
pip install -U keras_preprocessing --no-deps &&
git clone -b r2.2 --depth = 1 --recursive \
git: //github.com/tensorflow/tensorflow.git &&
cd tensorflow &&
python configure.py &&
базель построить \
--local_ram_resources = 2048 \
--cxxopt = "- D_GLIBCXX_USE_CXX11_ABI = 0" \
// тензорный поток / инструменты / pip_package: build_pip_package &&
./bazel-bin/tensorflow/tools/pip_package/build_pip_package \
/ tmp / tensorflow_pkg &&
pip install /tmp/tensorflow_pkg/tensorflow-version-tags.whl
N.b., Кажется, что изменения среды ни на что не влияют после '&&', поэтому не делайте этого:
. tf-env / bin / активировать && что угодно
TODO Test TF:
python -c "импортировать тензорный поток как tf; print (tf.reduce_sum (tf.random.normal ([1000, 1000])))»
Обновление системы
apt update && apt full-upgrade
Выгрузить драйвер
modprobe -r <какой-то вариант nouveau>
Загрузите и установите видеодрайвер. Он автоматически создает файл /etc/modprobe.d/nvidia-installer-disable-nouveau.conf. Проведите проверку на вменяемость.
nvidia-smi
Загрузить при загрузке
update-initramfs -u
Загрузите и установите инструментарий CUDA и исправления. Не перезаписывайте драйвер.
Добавьте библиотеки инструментов CUDA в ваш путь
cat > /etc/ld.so.conf.d/nvidia.conf << "EOF"
/USR/местные/cuda-8.0/lib64
/USR/местные/куда-8.0/дополнительно/CUPTI/lib64
EOF
ldconfig
Добавьте бины CUDA на свой путь
cat > /etc/profile.d/nvidia.sh << "EOF"
экспорт PATH="$PATH:/usr/local/cuda-8.0/bin"
EOF
. /etc/profile.d/nvidia.sh
При компиляции обычно существуют специфичные для проекта способы указания путей к библиотекам cuda.
НАСЛЕДИЕ="
-Wno-deprecated-gpu-targets
-gencode arch=compute_20,code=[sm_21,compute_20]"
cmake
mkdir build && cd build &&
cmake .. -G Ниндзя \
-DCUDA_LIB=/usr/local/cuda/lib64/stubs/libcuda.so \
-DCUDA_NVCC_FLAGS="$LEGACY" &&
компакт диск ..&&
cmake --сборка сборки &&
cmake --сборка сборка --целевая установка
автоинструменты
./configure \
--with-cuda=/usr/local/cuda \
--with-nvml=libnvidia-ml.so \
CUDA_NVCC_FLAGS="$LEGACY"
После изменения некоторых исходных кодов и получения ошибок в некоторых алгоритмах мне удалось скомпилировать пару.
Оказывается, хешрейт очень низкий.
Хорошая новость заключается в том, что докер работает так, как ожидалось. TensorFlow не происходит.