Как использовать инструментарий CUDA на GeForce GTX 460m в 2020 году

Мой друг подарил мне этот ноутбук несколько лет назад, потому что с тех пор он обновился. У него есть графический процессор, и я хочу начать играть с TensorFlow или просто с графическими процессорами в целом. Мне никогда не удавалось установить на нем TensorFlow, CUDA и т. Д. Это GeGorce GTX 460m и Intel i7. Я чувствую, что он потенциально может стать звездой моего кластера Finux, который включает в себя антиквариат, такой как ISKCON ppc7450, который также работает под управлением Ubuntu 16.04.

Пытаясь использовать этот графический процессор, я пробовал VoidLinux, Linux с нуля. , Ubuntu, Kali и т. Д. В таком порядке. В настоящее время я пытаюсь выполнить новую установку сервера Ubuntu 16.04 без графического интерфейса. Он умещается на моем флеш-накопителе емкостью 1 ГБ.

Я выяснил следующее. Я сделал это как root, но мне, вероятно, следовало перейти в однопользовательский режим:

  1. Применяйте любые исправления ошибок, но никогда не выполняйте-выпуск-обновление.
     apt update && apt full-upgrade
     

ОБНОВЛЕНИЕ: здесь можно выполнить шаги (9-10), чтобы сократить это до одной перезагрузки.

  1. Это не применимо в моем случае, но для графических установок, черного списка nouveau и:

     modprobe  -r <какой-то вариант модерна>
     
  2. Загрузите и установите видеодрайвер 390,138 . Другие версии драйверов здесь , но вам нужно посмотреть мелким шрифтом, чтобы найти дополнительные параметры, такие как устаревшие и бета-версии.

    Для более новых версий Ubuntu существует несоответствие версии компилятора re: DKMS, NVidia модуль, GCC 5/7, который можно обойти с помощью альтернативных обновлений. Другие обходные пути у меня не работали.

  3. Заставить новый драйвер загружаться при загрузке.

     update-initramfs -u
     
  4. проверка работоспособности

     nvidia-smi
     
  5. Загрузите и установите набор инструментов CUDA 9.1 8.0 и его три исправления . Не позволяйте ему перезаписывать ваш драйвер. Для других версий драйверов существует матрица совместимости для определения требуемой версии SDK.

    Страница загрузки драйвера помогает нам выбрать версию нашей операционной системы, в данном случае либо 16.04 , либо 17.04, предпочтительно с четными номерами версий. Эти сценарии установки необходимо запускать по одному, потому что они, похоже, не дают разумного статуса выхода при сбое.

  6. Перезагрузитесь и войдите в систему как не root. Программы некорректно связывались, и это для меня исправило. Я полагаю, это как-то связано с / etc / environment и / etc / profile, а также с тем, когда и какие процессы их создают.

    ОБНОВЛЕНИЕ: может быть, просто выйти из системы. Используйте /etc/profile.d и /etc/ld.so.conf.d вместо / etc / environment

  7. При компиляции программы, которую я хочу запустить, я указываю путь к библиотеке с помощью 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 говорится, что контейнер докеров должен быть проще, поэтому я сначала рассмотрю этот вопрос более подробно.

  1. Установить докер.

     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 # устраняет проблему с разрешением при подключении к сокету
     
  2. Тестовый докер.

     Докер запускает привет-мир
     
  3. Установите 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 перезапустить докер
     
  4. Протестируйте 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) не работает.

  1. Сборка докеров 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+) не сделают ничего продуктивного на моем оборудовании.

Теперь попробуем построить на голом железе ....

  1. Я установил 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
     
  2. Я установил 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
     
  3. найдите и установите libnvinfer7 = 7.1.3-1 + cuda9.1 . Похоже, он есть в Ubuntu 14.04.

  4. Обновите хост-пакеты python.

     sudo apt install python3-dev python3-pip python3-venv
     
  5. Получите самую старую версию 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, это пакет с исходным кодом, поэтому мне нужно протестировать эту команду

  6. 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
    выйти
     
  7. установить базелиск

     получить github.com/bazelbuild/bazelisk &&
    sudo ln -sv $ (команда -v bazelisk) / usr / local / bin / bazel
     
  8. Скомпилировать 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 / активировать && что угодно
     
  9. TODO Test TF:

     python -c "импортировать тензорный поток как tf; print (tf.reduce_sum (tf.random.normal ([1000, 1000])))»
     
2
задан 22 December 2020 в 23:39

1 ответ

  1. Обновление системы

    apt update && apt full-upgrade
    
  2. Выгрузить драйвер

    modprobe -r <какой-то вариант nouveau>
    
  3. Загрузите и установите видеодрайвер. Он автоматически создает файл /etc/modprobe.d/nvidia-installer-disable-nouveau.conf. Проведите проверку на вменяемость.

    nvidia-smi
    
  4. Загрузить при загрузке

    update-initramfs -u
    
  5. Загрузите и установите инструментарий CUDA и исправления. Не перезаписывайте драйвер.

  6. Добавьте библиотеки инструментов CUDA в ваш путь

    cat > /etc/ld.so.conf.d/nvidia.conf << "EOF"
    /USR/местные/cuda-8.0/lib64
    /USR/местные/куда-8.0/дополнительно/CUPTI/lib64
    EOF
    ldconfig
    
  7. Добавьте бины CUDA на свой путь

    cat > /etc/profile.d/nvidia.sh << "EOF"
    экспорт PATH="$PATH:/usr/local/cuda-8.0/bin"
    EOF
    . /etc/profile.d/nvidia.sh
    
  8. При компиляции обычно существуют специфичные для проекта способы указания путей к библиотекам 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 не происходит.

0
ответ дан 23 December 2020 в 11:40

Другие вопросы по тегам:

Похожие вопросы: