Рубрики
Без рубрики

Тренируйте нейронные сети быстрее с помощью TPU Google с вашего ноутбука.

Быстрый способ запустить свой собственный тензорный процессор с вашего ноутбука.

Автор оригинала: Mauhcs.

Вы знаете, как это делается, у вас есть такая милая архитектура глубоких нейронных сетей, но для обучения требуется целая вечность. В этот момент вы начинаете просматривать Amazon в поисках самого дешевого графического процессора, который вы можете найти для обучения своих моделей, хотя вы даже не знаете, как подключить его к своей машине, но все лучше, чем те часы, которые ваша модель тратит на обучение одного набора гиперпараметров. Ну, прежде чем вы начнете тратить сотни долларов на аппаратное обеспечение, вам следует рассмотреть тензорные процессоры (Cpu) от Google. TPU-это аппаратный компонент, предназначенный для ускорения обучения и прогнозирования моделей машинного обучения, чтобы исследователи и инженеры могли сосредоточиться на своих решениях для своих любимых людей, а не сходить с ума в течение всей жизни.

Если вы хотите поиграть с Push, прежде чем стать серьезным, взгляните на этот учебник от Google (https://www.tensorflow.org/guide/tpu). Он научит вас, как работать в TPUS из Collapse (ноутбуки Jupyter в облаке Google). Это аккуратная функция, и ее довольно легко запустить, так что это хорошее начало. Но что, если вы хотите разработать свою модель локально, даже выполнить небольшую выборку на своем компьютере и только затем отправить данные в облачные ТПУ для обучения? Оказывается, для этого тебе нужно немного попрыгать. Но я могу показать вам прямую линию через дикую землю документации Google Cloud, чтобы достичь именно этого.

Возьмите свою любимую машину и пристегнитесь. Вот краткое изложение того, что происходит:

  • Узнайте, как создать собственный облачный ТПУ в Google.
  • Создайте свой собственный облачный сервер и хранилище Google для хранения обучающих данных.
  • Получите ключи учетной записи службы, чтобы программно подключить сценарий обучения к Google.
  • Туннелирование по SSH. Подключите локальную машину к облачному ТПУ в одну линию.
  • Погрузитесь в простой пример репо git для обучения вашей первой модели в TPUS

Откройте окно терминала и создайте рабочий каталог для этого руководства. Кроме того, оставьте терминал открытым, так как мы будем настраивать среду по мере прохождения урока.

# Make a folder for this tutorial
mkdir -p ~/tpu-tutorial

Чтобы получить свой собственный, вы заходите в консоль Google Cloud Platform (GCP): https://console.cloud.google.com/compute/tpus и нажмите “Создать узел TPU” в верхней части страницы (или в середине страницы, если это ваш первый узел TPU).

Затем выберите имя для своего узла, это не важно, поэтому любое имя подходит, или просто оставьте как узел-1, и все будет в порядке.

Ниже приведены важные шаги:

  1. Выберите us-central-1-c в качестве зоны для вашего узла TPU. На момент написания статьи только несколько центров обработки данных имели, таким образом, это Айова (США-central1-{a,b,c}), Нидерланды (Европа-запад 4a) и Тайвань (азия-восток 1-c). TPU Айовы являются самыми дешевыми (1,35 доллара США), поэтому для этого урока давайте придерживаться их, выберите us-central1-c.
  2. Нажмите кнопку “Вытеснение”. Это позволяет Google отключить ваш процессор, если это необходимо их системе. Это звучит плохо, и это в производственной среде, но этот вариант делает узел TPU намного дешевле, и дополнительный риск на самом деле не имеет значения для этого урока. Я был просто в порядке с проверкой этой опции.

Наконец, выберите тип ТПУ. Тип v2–8 отлично подходит для нас здесь. Нажмите кнопку “Создать.”

См. Рисунок ниже, как выглядит настройка:

Настройка узла ТПУ. Получите свои в США-central1, так как они дешевле.

Настройка узла ТПУ. Получите свои в США-central1, так как они дешевле.

ВАЖНО: ВЫКЛЮЧАЙТЕ СВОЙ ТПУ, когда вы им не пользуетесь, чтобы не тратить деньги без необходимости. Google очень легко запускает и запускает новый ТПУ, поэтому не стесняйтесь уничтожить его, если вы сделаете перерыв в этом уроке. Ваш карман благодарит вас

После нажатия кнопки создать вы будете перенаправлены на панель мониторинга с вашими узлами TPU. После инициализации узла слева от имени узла появится зеленая галочка, а под столбцом “Внутренний IP” появится IP-адрес (если столбец “Внутренний IP” не отображается, нажмите “столбцы” и выберите “Внутренний IP”). Скопируйте IP-адрес и выполните следующую команду в терминале:

# Change TPU.INTERNAL.IP with TPU node's IP
export TPU="TPU.INTENAL.IP"
После нажатия кнопки создать вы будете перенаправлены на панель мониторинга с вашими узлами TPU. После инициализации узла слева от имени узла появится зеленая галочка, а под столбцом

Обратите внимание, что IP-адрес TPU является только внутренним (как следует из названия), это означает, что вы не можете подключиться к нему напрямую с вашего компьютера. Для этого нам нужен сервер перехода между вашим компьютером и ТПУ, но это очень просто.

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

  1. Создайте экземпляр в том же регионе, что и на предыдущем шаге (us-central1-c, если вы следуете умолчанию в этом руководстве).
  2. В конфигурации машины вы можете выбрать самый дешевый сервер (f1-micro). Это идеально подходит для этого урока.

См. Изображение для справки:

Выберите свой регион, как в предыдущем разделе. Здесь достаточно самой низкой конфигурации сервера. В моем случае я смог получить экземпляр бесплатно от GCP.

Выберите свой регион, как в предыдущем разделе. Здесь достаточно самой низкой конфигурации сервера. В моем случае я смог получить экземпляр бесплатно от GCP.
  1. Добавьте свой открытый ключ ssh на сервер, чтобы подключиться к нему с локальной машины. Для этого в нижней части страницы нажмите там, где написано “Управление, безопасность, диски, сеть, единоличное владение”, чтобы развернуть форму. Выберите “Безопасность” и введите свой открытый ключ SSH в текстовое поле “Введите открытый ключ SSH”.

Чтобы просмотреть открытый ключ ssh, выполните следующую команду:

# Display ssh public-key
cat ~/.ssh/id_rsa.pub

Результат должен выглядеть примерно так:

# ssh public-key example
ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEAklOUpkDHrfHY17SbrmTIpNLTGK9Tjom/BWDSU
GPl+nafzlHDTYW7hdI4yZ5ew18JH4JW9jbhUFrviQzM7xlELEVf4h9lFX5QVkbPppSwg0cda3
Pbv7kOdJ/MTyBlWXFCR+HAo3FXRitBqxiX1nKhXpHAZsMciLq8V6RjsNAQwdsdMFvSlVK/7XA
t3FaoJoAsncM1Q9x5+3V0Ww68/eIFmb1zuUFljQJKprrX88XypNDvjYNby6vw/Pb0rwert/En
mZ+AW4OZPnTPI89ZPmVMLuayrD2cE86Z/il8b+gw3r3+1nKatmIkjn2so1d01QraTlMqVSsbx
NrRFi9wrf+M7Q== USERNAME@email.com

Запомните свое имя пользователя, так как будет важно подключить локальную машину к экземпляру.

Если у вас нет открытого ключа ssh, предыдущая команда должна была выдать ошибку, в этом случае выполните следующую команду, чтобы создать свой собственный ключ ssh:

# Generate a ssh public-key
ssh-keygen -t rsa -b 4096 -C "USERNAME@email.com"

Затем скопируйте и вставьте свой открытый ключ ssh в форму и нажмите “Создать.” См.Изображение ниже для справки.

Вставьте свой открытый ключ ssh в поле “Введите открытый ключ SSH”, затем нажмите “Создать”

Вставьте свой открытый ключ ssh в поле

После нажатия кнопки “Создать” вы будете перенаправлены на панель мониторинга с вашими экземплярами. Когда ваш новый экземпляр будет запущен, вы увидите зеленую галочку слева от имени. Пришло время получить его IP. См. Изображение для справки:

Получите “Внешний IP-адрес вашего экземпляра”

Получите

Как и в случае с турами, вам понадобится IP-адрес экземпляра, но на этот раз “Внешний IP”. Кроме того, запомните свой открытый ключ SSH и выполните следующую команду в ранее открытом терминале:

# Save the jump server's IP and your username in it:
export JUMP="INSTANCE.EXTERNAL.IP"; export USER=USERNAME

С инициализацией TPU и созданием экземпляра облачного сервера мы ПОЧТИ готовы начать обучение наших моделей. Недостающая часть-это данные, и они ДОЛЖНЫ храниться в облачном хранилище Google. Итак, давайте создадим наше собственное ведро в следующем разделе.

Перейдите в Google Storage (gs) и нажмите “Создать ведро”.” Выполните следующие действия, чтобы убедиться, что ваш ТПУ может видеть ваше ведро.

  1. Назовите его “dnn-bucket”.
  2. Выберите Регион в качестве типа местоположения корзины.
  3. Выберите его местоположение как us-central1 (Айова) — или убедитесь, что это тот же регион, что и ваш ТПУ
  4. Выберите размер хранилища, равный 1 ГБ.
  5. Оставьте все остальные параметры и поля как есть.
  6. Нажмите кнопку Создать

Следующий шаг-создать ключи учетной записи службы, чтобы ваш скрипт мог подключиться к ведру. Для этого нажмите на ссылку ниже и следуйте инструкциям: Создание ключа учетной записи службы Google: https://cloud.google.com/iam/docs/creating-managing-service-account-keys#creating_service_account_keys

После создания ключей сохраните файл как “~/tpu-tutorial/tensorflow-tutorial-crud.json.”

Теперь, когда создан экземпляр TPU и сервера Jump, создано хранилище Google и ваша локальная машина имеет доступ к нему, единственная недостающая часть-это подключение всего. Мы сделаем это с помощью туннелирования SSH в следующем разделе.

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

Чтобы создать туннель, выполните следующие команды в новом терминале:

# Export TPU's  Internal IP if you did not do that yet
export TPU="TPU.INTERNAL.IP"

# Export Jump Server's IP and username if you did not do that yet
export JUMP="JUMP.EXTERNAL.IP"; export USER=JUMP_USERNAME
# Make the SSH Tunnel between your local port 2000 and the TPU:
ssh $USER@$JUMP -L 2000:$TPU:8470

Эта команда зарегистрирует ваш терминал на сервере перехода, и туннель будет подключен до тех пор, пока вы подключены к серверу. Чтобы отключить, отключив туннель, нажмите ctrl-d с подключенным терминалом.

Теперь мы готовы к последнему шагу-обучению нашей глубокой нейронной сети в облачном ТПУ Google. Насколько это будет быстрее, чем работать на вашем локальном компьютере?

В качестве первой попытки обучения с использованием облачного ТПУ я сделал пример репо git. Чтобы установить его, на вашем компьютере должен быть установлен python 3. Затем клонируйте репо git следующим образом:

# Create working directory if not create already and navigate to it:
mkdir -p ~/tpu-tutorial
cd ~/tpu-tutorial 
git clone https://github.com/mauhcs/tpu-from-home.git
cd tpu-from-home

Затем создайте среду, обновите pip и установите требования python с помощью:

python -m venv tpu-env
source tpu-env/bin/activate
pip install --upgrade pip
pip install -r requirements.txt

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

# Train locally:
time bash local_run.sh

Вот как тренироваться в вашем ВЫ (помните, что мы получили файл tensorflow-tutorial-crud.json с предыдущего шага):

# Train in the TPU
# The file tensorflow-tutorial-cred.json is from a previous step
time bach tpu_run.sh ~/tpu-tutorial/tensorflow-tutorial-cred.json

Если вы хотите погрузиться в детали того, как работает модель, взгляните на main.py. Дайте мне знать, если вам нужна статья о глубоком погружении в распределенном обучении, ориентированном на ТПУ.

Это мои результаты, запущенные с моего MacBook pro в качестве локальной машины и запущенные в ТПУ в Айове (из Токио). Модель представляет собой многослойную сверточную сеть для визуального распознавания MNIST с 50 эпохами обучения. Смотрите модель здесь.

# Local run
{'accuracy_top_1': 0.9893662929534912, 
'eval_loss': 0.032137673969070114, 
'loss': 0.033212198394125904, 
'training_accuracy_top_1': 0.989628255367279}
real 34m12.642s
user 101m32.471s
sys 11m41.765s
# TPU training
{'accuracy_top_1': 0.9892578125, 
'eval_loss': 0.031606151825851865, 
'loss': 0.032124145309729825, 
'training_accuracy_top_1': 0.989863932132721}
real 16m54.201s
user 0m20.993s
sys 0m4.911s

Обучение простой сверточной нейронной сети на наборе данных MNIST в облачном ТПУ было в два раза быстрее, чем обучение локально (MacBook Pro 3,5 ГГц Intel Core i7). Это может быть хорошим способом помочь вашим моделям выполнять поиск гиперпараметров или просто обучать более сложные модели. Я ожидал бы лучшей производительности от Pub, поэтому я ожидаю, что больше настроек в модели и конвейере данных должно улучшить производительность TPU.

Облачные ТПУ также недешевы, поэтому, если вы не уверены, что сможете воспользоваться его скоростью обучения, вам, возможно, будет лучше тренироваться на своих локальных компьютерах. TPU требуют большой интеграции с Google cloud (ведра хранения, экземпляры облачных серверов и т. Д.), но с задержкой, которая была бы добавлена, если бы какой-либо компонент находился на вашем локальном компьютере, было бы трудно оправдать использование TPU, так как сетевые запросы замедлили бы обучение. Чтобы убедиться в этом, удалите опцию –no_callback из файла tpc_run.sh и посмотрите всю задержку, которую он добавляет.

В конечном счете, из-за задержки в сети запуск cloud Push с локального компьютера следует рассматривать как тестовый запуск перед развертыванием обучающих сценариев на облачном сервере.

Собираетесь ли вы начать использовать TPUS? Вам нужен учебник о том, как писать свои собственные модели для обучения? Дайте мне знать в комментариях ниже, что вы думаете.

Кроме того, ВЫКЛЮЧИТЕ СВОЙ TPU , когда вы его не используете. Добро пожаловать