Как создать сервер глубокого обучения самостоятельно?

машинное обучение глубокое обучение сервер Ubuntu
Как создать сервер глубокого обучения самостоятельно?

Эта статья была впервые опубликована сколонна Джижи

Недавно, после изучения некоторых знаний и руководств по глубокому обучению, я (автор Уэйд Гиллиам — примечание переводчика) решил настроить сервер для обучения моделей машинного обучения вместо использования виртуальной машины AWS p2 и хранилища, которые я сейчас использую. Я понял, что позже буду использовать гораздо больший набор данных, и не хотел тратить часы на обучение моей модели из-за нехватки вычислительной мощности, поэтому создание собственного сервера глубокого обучения было хорошим вариантом, потому что в долгосрочной перспективе это может сэкономить мне много денег и времени, и это также может дать мне больше опыта в создании серверов.

Примечание. В этой статье основное внимание уделяется настройкам сервера и одновременной работе нескольких пользователей, поэтому процесс установки программного обеспечения относительно прост. Более подробную версию см.эта статья

Список частей

Прежде чем собирать детали, вам нужно выяснить, какую машину вы хотите. Лично я хочу достичь следующих стандартов:

  • Более мощная, чем виртуальная машина Amazon P2
  • Есть место для добавления графического процессора, оперативной памяти, хранилища и пользовательского охлаждения.
  • Оборудование прослужит как минимум несколько лет
  • Бюджет не более 3000$

Я использую pcpartpicker.com, чтобы перечислить все детали, которые мне нужны, потому что это позволяет мне легко сравнивать части. Позже я более подробно расскажу о том, почему я выбрал каждый компонент и как он работает с системой в целом. Для справки, нажмите здесь, чтобы просмотретьДетали моих серверных частей

Графический процессор: гибрид GTX 1080 TI

Графический процессор является наиболее важной частью создания сервера глубокого обучения, поскольку вы обучаете модель с помощью своей видеокарты, поэтому чем мощнее ваш графический процессор, тем быстрее вы сможете обрабатывать большие наборы данных. Чем выше объем памяти графического процессора, тем выше скорость обработки (например, более быстрое обучение, большие пакеты и т. д.). Я выбрал два графических процессора для своего сервера, потому что бюджет для графических процессоров достаточно хорош, и это позволяет мне обучать модель на одном графическом процессоре, в то время как другие могут обучать другие модели на другом. Эта часть зависит от ваших собственных потребностей и бюджета, чтобы выбрать правильный графический процессор.

Графический процессор Hybrid 1080 работает хорошо, поскольку он имеет систему водяного охлаждения в дополнение к системе охлаждения с вентилятором, встроенной в большинство графических процессоров. 1080 Ti будет сильно греться под полной нагрузкой, поэтому качественная система охлаждения может гарантировать жизнь видеокарте и эффект обучающих моделей. Если вы хотите узнать больше о выборе видеокарты в среде глубокого обучения, вы можете обратиться кэта статья, мне очень помогло.

CPU: AMD Threadripper 1900x

Хотя мы обучаем нейронную сеть на графической карте, центральный процессор также важен, поскольку он используется для вычислительных операций, таких как предварительная обработка данных, поэтому процессоры с более мощными ядрами могут ускорить вычисления. Я использую Treadripper, потому что это очень новый процессор на рынке, он имеет много ядер (32 ядра, TR2'!), и его цена немного ниже, чем у его аналогов из линейки Intel.

В качестве примечания: когда вы выбираете ЦП, убедитесь, что это графический слот PCI-E x16 или PCI-E x8, поскольку они хорошо работают, когда сервер находится под нагрузкой или когда вы хотите ограничить систему. Если на вашем сервере установлено 4 видеокарты, вам следует использовать более мощный процессор, который предоставит вам достаточно слотов для карт PCI-E.

Материнская плата: MSI X399 SLI Plus

Эта материнская плата была выбрана потому, что это полноразмерная материнская плата ATX, способная разместить 4 графических процессора и до 128 ГБ оперативной памяти. Поскольку я упоминал ранее, моя главная цель — иметь место для обновлений сервера в будущем.

Оперативная память: 32 ГБ Corsair Avengers LPX DDR4 (2 x 16 ГБ)

Больше памяти облегчает мне работу с большими наборами данных. В будущем мой план апгрейда состоит в том, чтобы добавить еще 2 планки памяти по 16 ГБ, поэтому я не стал выбирать 4-канальную оперативную память (4 x 8 ГБ), хотя производительность будет немного лучше.

Память: твердотельный накопитель Samsung емкостью 256 ГБ и жесткий диск емкостью 2 ТБ.

Я поставил Ubuntu, все библиотеки и наборы данных на SSD, а остальные данные на 2 ТБ HDD.

Радиатор: кулер для воды Corsair H100i v2

У Threadrippers нет штатных кулеров, поэтому я хотел подходящий кулер, который работал бы 24 часа в сутки, 7 дней в неделю, дешевый и простой в обслуживании. Выбранный мною радиатор «все в одном» очень прост в установке, практичен и бесшумен.

Блок питания: EVGA EVGA SuperNOVA 1000 Вт 80+ Gold

Важно помнить, что всегда нужно следить за тем, чтобы источник питания был больше, чем ваши технические потребности. Если вы не уверены, сколько энергии вам нужно (у меня 824 Вт), вы можете использовать калькулятор мощности PCPartpicker, чтобы получить приблизительную цифру для вас, и здесь лучше быть в безопасности, прежде чем включать питание.

Шасси: полноразмерное шасси Corsair 760T

Я выбрал этот корпус из-за его достаточного внутреннего пространства и доступной цены. Хотя это не заставит вашу модель тренироваться быстрее, благодаря чистым боковым панелям и красным светодиодам вы все равно будете выглядеть намного круче!

(Годовая экономия и бережливость - все на этой картинке)

Соберите части

Если у вас нет опыта сборки компьютеров, сборка деталей очень похожа на игру с дорогим набором Lego. В начале легко запутаться. Я кратко расскажу о своем собственном процессе сборки ниже, но я настоятельно рекомендую вам просмотреть полное видео сборки, чтобы изучить процесс сборки, напримерэто видео.

Шаг 1: Установите ЦП

Это, вероятно, самая страшная часть сборки компьютера, так как есть определенные шаги, которые могут привести к поломке процессора (к счастью, у вас может быть качественная цепочка для ключей).

В этой части все же рекомендуется поискать подробное видео в интернете и выполнять его пошагово. Процесс установки Threadripper немного отличается: вместо того, чтобы «армировать» процессор на материнской плате, он имеет выдвижное устройство, похожее на направляющую.

Шаг 2: Установите блок питания

Для этой детали нет абсолютно стандартного порядка, но лично мне нравится сначала ставить блок питания в корпус, потому что в некоторых случаях требуется поставить блок питания в слот для карты, что иногда приводит к материнской плате, что не очень хорошо.

Шаг 3: Соберите остальные части вместе

После установки материнской платы остальная часть сборки проста. Моя последовательность установки такова:

  • Установите ОЗУ. Операция очень проста, просто сдвиньте карту памяти в правильном направлении и поместите ее в соответствующий слот для карты на материнской плате (не забудьте прочитать руководство, потому что некоторые слоты для карт имеют особое назначение в зависимости от количества карт памяти).
  • Установите процессорный кулер. Единственная небольшая проблема с этой частью заключалась в том, что мне пришлось заменить кронштейны, чтобы они были совместимы с радиатором, что потребовало некоторых усилий.
  • Установите видеокарту. Просто вставьте их в соответствующие слоты на материнской плате (как и в случае с картами памяти, обратитесь к руководству, чтобы узнать, какие карты в какие слоты вставляются), чтобы закрепить радиатор в корпусе. Убедитесь, что радиатор находится над графическим процессором. На картинке выше я ошибся, пришлось переставить на переднюю панель корпуса.
  • Установить хранилище. Я удалил один из дисков, чтобы обеспечить лучший поток воздуха, поэтому я поместил SSD и HDD на один диск в правом нижнем углу.

Шаг 4: Сработало?

В этот момент вы можете начать. Сначала я его не включал, потому что положительный и отрицательный провода кнопки питания корпуса были перепутаны местами. Проделав это снова, я увидел давно потерянный блестящий бело-красный ореол. Если у вас все хорошо, вы сможете увидеть это с задней панели компьютера, а затем найти загрузочное устройство.

Настроить сервер

Установите операционную систему

Следующим шагом будет установка вашей операционной системы. Я использую Linux, потому что большинство фреймворков глубокого обучения разработаны для Linux. Я выбрал Ubuntu Desktop v16.04 LTS и загрузил все на USB-накопитель. Существует множество бесплатных инструментов, таких как UNetbootin или Rufus (только для Windows), которые можно загрузить для подготовки флэш-накопителя. Полный процесс создания загрузочного USB-накопителя на Mac см.этот учебник. Если вы используете Windows,обратитесь к этому.

Настроить SSH

Шаг 1: Переадресация портов

Процесс настройки одинаков для всех роутеров, но я использую роутер Apple, поэтому этапы настройки следующие:

1. Установите статический IP-адрес для своего сервера, чтобы он не менялся каждый раз, когда вы его отключаете. 2. Войдите в свой маршрутизатор с помощью Apple Airport Utility. 3. Сопоставьте порт для сервера. Вам нужно найти MAC-адрес вашего сервера в разделе, как его найти в Ubuntu см.этот учебник.

Шаг 2. Создайте динамический IP-адрес

Я привык к своему серверу, устанавливающему динамический IP-адрес, что позволяет мне подключаться к серверу удаленно с терминала. Вы можете использовать этот веб-сайт, чтобы проверить, работает ли он.

Я ввел следующие команды для подключения к серверу:

ssh [my_username]@[my_ip] -L 8888:[dl-rig_static_ip]:8889

У меня есть сервер, работающий на порту 8888, и ноутбук Jupyter, работающий на порту 8889 (опция -L перенаправит указанный вами локальный порт на другой порт и хост). Это позволяет мне запускать модель на сервере для обучения, одновременно запуская блокнот на локальном компьютере для тестирования. Но если вы этого не хотите, просто введите все перед частью -L. В следующем разделе я объясню, как изменить порт, на котором работает ноутбук.

Установите библиотеки глубокого обучения/машинного обучения

Теперь перейдите к разделу установки необходимых библиотек для машинного обучения/глубокого обучения. Я написал сценарий установки, который будет объяснен пошагово ниже, чтобы помочь вам понять. Полный адрес кода здесь.

Во-первых, мы хотим убедиться, что система обновлена, и установить все основные инструменты, которые нам нужны:

sudo apt-get update
sudo apt-get --assume-yes upgrade
sudo apt-get --assume-yes install tmux build-essential gcc g++ make binutils unzip
sudo apt-get --assume-yes install software-properties-common
sudo apt-get --assume-yes install git

Следующим шагом будет загрузка и установка всех драйверов графического процессора CUDA:

mkdir ~/downloads
cd ~/downloads

wget http://developer.download.nvidia.com/compute/cuda/repos/ubuntu1604/x86_64/cuda-repo-ubuntu1604_9.0.176-1_amd64.deb
sudo dpkg -i cuda-repo-ubuntu1604_9.0.176-1_amd64.deb
sudo apt-key adv --fetch-keys http://developer.download.nvidia.com/compute/cuda/repos/ubuntu1604/x86_64/7fa2af80.pub
sudo apt-get update
sudo apt-get -y install cuda
sudo apt-get --assume-yes upgrade
sudo apt-get --assume-yes autoremove
sudo apt-get install cuda-toolkit-9.0 cuda-command-line-tools-9-0

Теперь проверяем правильность установки всех компонентов CUDA:

sudo modprobe nvidia
nvcc --version
nvidia-smi

Отсюда мы добавим CUDA в нашу переменную PATH:

cat >> ~/.bashrc << 'EOF'
export PATH=/usr/local/cuda-9.0/bin${PATH:+:${PATH}}
export LD_LIBRARY_PATH=/usr/local/cuda-9.0/lib64\
${LD_LIBRARY_PATH:+:${LD_LIBRARY_PATH}}
EOF

source ~/.bashrc

После этого следующим шагом будет установка библиотеки CuDNN (необходима для создания нейросетей):

wget http://files.fast.ai/files/cudnn-9.1-linux-x64-v7.tgz
tar xf cudnn-9.1-linux-x64-v7.tgz
sudo cp cuda/include/*.* /usr/local/cuda/include/
sudo cp cuda/lib64/*.* /usr/local/cuda/lib64/

Теперь устанавливаем Anaconda для текущего пользователя:

wget "https://repo.continuum.io/archive/Anaconda3-5.0.1-Linux-x86_64.sh"
bash "Anaconda3-5.0.1-Linux-x86_64.sh" -b

cd ~

echo "export PATH=\"$HOME/anaconda3/bin:\$PATH\"" >> ~/.bashrc
export PATH="$HOME/anaconda3/bin:$PATH"
conda install -y bcolz
conda upgrade -y --all

Далее устанавливаем TensorFlow и Keras:

pip install --ignore-installed --upgrade https://storage.googleapis.com/tensorflow/linux/gpu/tensorflow_gpu-1.8.0-cp36-cp36m-linux_x86_64.whl

pip install keras
mkdir ~/.keras
echo '{
    "image_dim_ordering": "tf",
    "epsilon": 1e-07,
    "floatx": "float32",
    "backend": "tensorflow"
}' > ~/.keras/keras.json

Затем мы устанавливаем зависимости среды Python, необходимые для Fastai:

mkdir -p ~/development/_training/ml
cd ~/development/_training/ml

git clone https://github.com/fastai/fastai.git
cd fastai
conda env update

Следующие несколько частей предназначены для настройки ноутбука Jupyter:

# 取消下一行的注释能让你为使用Jupyter notebook提供一个密码
jupass=`python -c "from notebook.auth import passwd; print(passwd())"`
# 将密码硬编码到上面的 'jupyter' 注释行并取消下面一行的注释
#jupass=sha1:85ff16c0f1a9:c296112bf7b82121f5ec73ef4c1b9305b9e538af

# 为jupyter notebook创建ssl 证书
openssl req -x509 -nodes -days 365 -newkey rsa:1024 -keyout $HOME/mykey.key -out $HOME/mycert.pem -subj "/C=IE"

# 配置 notebook
echo "c.NotebookApp.certfile = u'/home/{user}/mycert.pem'" >> $HOME/.jupyter/jupyter_notebook_config.py
echo "c.NotebookApp.keyfile = u'/home/{user}/mykey.key'" >> $HOME/.jupyter/jupyter_notebook_config.py
echo "c.NotebookApp.password = u'"$jupass"'" >> $HOME/.jupyter/jupyter_notebook_config.py
echo "c.NotebookApp.ip = '*'" >> $HOME/.jupyter/jupyter_notebook_config.py
echo "c.NotebookApp.open_browser = False" >> $HOME/.jupyter/jupyter_notebook_config.py

Если вы хотите изменить порт по умолчанию для запуска ноутбуков Jupyter (порт 8888), раскомментируйте эту строку и перейдите к порту назначения. Это позволяет вам одновременно запускать свой блокнот на сервере и локально, и, пока другие используют их, вы также можете использовать свой:

#echo "c.NotebookApp.port = 9999" >> $HOME/.jupyter/jupyter_notebook_config.py

Теперь мы настраиваем tmux, инструмент, который позволяет нам создавать несколько панелей в окне терминала и поддерживать работу программ после выхода из системы. Взгляните на эту документацию (), она очень помогла мне понять функциональность tmux. Это действительно полезно, потому что вы можете запускать свой ноутбук на одной панели, отслеживать использование графического процессора на другой и открывать терминал Linux на другой:

pip install tmuxp
mkdir ~/.tmuxp

Затем мы создаем файл конфигурации tmuxp, который настраивает нашу среду разработки с помощью одной строки команд, без необходимости настраивать все панели каждый раз, когда мы хотим выполнить какую-то работу, запустить блокноты Jupyter и т. д. Для нашей среды fastai мы сначала загружаем fastai с помощью tmuxp. Настраиваем окружение:

cat > $HOME/.tmuxp/fastai.yml <<tmuxp-config 
session_name: fastai
windows:
- window_name: dev window
  layout: main-vertical
  options:
    main-pane-width: 140
  shell_command_before:
    # 运行为所有窗格中的第一行命令
    - cd ~/development/_training/ml/fastai
    - source activate fastai
  panes:
    - shell_command:
      - clear
    - shell_command:
      - clear
      - jupyter notebook
    - shell_command:
      - watch -n 0.5 nvidia-smi
Tmuxp-config

Так как они нам больше не нужны, удаляем установочные файлы:

cd ~/downloads
rm -rf cuda-repo-ubuntu1604_9.0.176-1_amd64.deb xf cudnn-9.1-linux-x64-v7.tgz Anaconda3-5.0.1-Linux-x86_64.sh        

cd ~

Таким образом, мы настроили сервер глубокого обучения! Когда я пишу это руководство, мой сервер работает 24/7 без проблем в течение долгого времени, абсолютно без шума, и с ним было проведено много обучения модели.

Прилагаю некоторые из моих ссылок:www.digitalocean.com

towardsdatascience.com

medium.com

Использованная литература:waydegg.github.io


Выпуск 0806 "Искусственный интеллект - от нуля до мастерства"

Ограниченная по времени скидка!Нажмите здесь, чтобы узнать подробности

Болтать и смеяться Онлайн-программирование Узнать об этом?

(Первые 25 студентов также могут получить купон на 200 иен)