ТПУ терминологическая путаница - PullRequest
0 голосов
/ 14 сентября 2018

Итак, я знаю, как определяются эпохи, этапы обучения, размеры партий и подобные вещи, но мне действительно трудно обернуть голову вокруг терминологии TPU, такой как циклы поезда, итерации для цикла и так далее.Я читаю this , но я все еще в замешательстве.

Кроме того, как я могу, например, измерить время для итераций на цикл.

Любое объяснение мне очень помогло бы там.Спасибо!

Ответы [ 3 ]

0 голосов
/ 14 сентября 2018

Под «поездной петлей» я предполагаю, что это то же значение, что и «тренировочная петля» . Обучающий цикл - это цикл, который проходит через каждую эпоху для подачи модели.

Количество итераций в цикле связано с тем, как Cloud TPU обрабатывает цикл обучения. Чтобы амортизировать стоимость запуска TPU, этап обучения модели заключен в tf. while_loop, так что один запуск сеанса фактически выполняет много итераций для одного цикла обучения.

Из-за этого Cloud TPU выполняет заданное количество итераций цикла обучения, прежде чем вернуться на хост. Следовательно, iterations_per_loop - это количество итераций, которые будут выполняться за один вызов session.run.

0 голосов
/ 18 сентября 2018

Как описано в других ответах, iterations_per_loop - это параметр настройки, который контролирует объем работы, выполняемой TPU, перед повторной проверкой.Меньшее число позволяет вам чаще проверять результаты (и оценивать их), а большее число уменьшает накладные расходы из-за синхронизации.

Это не отличается от известных методов буферизации сети или файлов;изменение его значения влияет на производительность, но не на ваш конечный результат.Напротив, гиперпараметры ML, такие как num_epochs, train_steps или train_batch_size, изменят ваш результат.

РЕДАКТИРОВАТЬ: Добавление иллюстрации в псевдокоде ниже. Условно, тренировочный цикл функционирует следующим образом:

def process_on_TPU(examples, train_batch_size, iterations_per_loop):
    # The TPU will run `iterations_per_loop` training iterations before returning to the host
    for i in range(0, iterations_per_loop):
        # on every iteration, the TPU will compute `train_batch_size` examples,
        # calculating the gradient from every example in the given batch
        compute(examples[i * train_batch_size : (i + 1) * train_batch_size])

# assume each entry in `example` is a single training example
for b in range(0, train_steps, train_batch_size * iterations_per_loop)
    process_on_TPU(examples[b:b + train_batch_size * iterations_per_loop],
                   train_batch_size,
                   iterations_per_loop)

Из этого может показаться, что train_batch_size и iterations_per_loop - это просто два разных способа выполнения одной и той же вещи.Однако, это не так;train_batch_size влияет на скорость обучения, поскольку (по крайней мере, в ResNet-50) градиент вычисляется на каждой итерации из среднего значения градиента для каждого примера в пакете.Выполнение 50 шагов на 50 000 примеров приведет к отличному результату от 1 000 шагов на 50 000 примеров, поскольку в последнем случае вычисление градиента выполняется гораздо чаще.

РЕДАКТИРОВАТЬ 2: Ниже приведен способвизуализировать происходящее с гоночной метафорой.Думайте о TPU как о гонке, которая имеет дистанцию ​​train_steps примеров, и ее шаг позволяет ей покрывать серию примеров за шаг.Гонка проходит по трассе, которая короче общей дистанции гонки;длина круга - это общее количество тренировочных примеров, а каждый круг на трассе - одна эпоха.Вы можете думать о iterations_per_loop как о точке, в которой TPU может остановиться на своего рода «водной станции», где обучение временно приостанавливается для выполнения различных задач (бенчмаркинг, контрольные точки, другие операции по дому).

TPU ML Training Loop

0 голосов
/ 14 сентября 2018

TPU буквально означает «Tensor Processing Unit», это аппаратное устройство, используемое для вычислений точно так же, как и графический процессор. TPU являются собственными графическими процессорами Google. Существуют технические различия между графическим процессором и ТПУ, в основном в отношении скорости и энергопотребления, а также некоторые проблемы точности с плавающей запятой, но вам не нужно заботиться о деталях.

iterations_per_loop - это попытка повысить эффективность, загружая TPU несколькими тренировочными партиями. При передаче больших объемов данных из основной памяти в GPU / TPU часто возникают аппаратные ограничения пропускной способности.

Похоже, что код, на который вы ссылаетесь, передает iterations_per_loop количество тренировочных пакетов в TPU, затем запускает iterations_per_loop количество тренировочных шагов, а затем делает паузу для другой передачи данных из основной памяти в память TPU.

Я довольно удивлен, увидев, что, тем не менее, я ожидаю, что асинхронная фоновая передача данных станет возможной уже сейчас.

Мой единственный отказ от ответственности заключается в том, что, хотя я хорошо знаком с Tensorflow и наблюдаю за развитием TPU в статьях и статьях, у меня нет непосредственного опыта работы с Google API или работой с TPU, поэтому я я понял из того, что я прочитал в документации, на которую вы ссылались.

...