Nano Hash - криптовалюты, майнинг, программирование

Значение inter_op_parallelism_threads и intra_op_parallelism_threads

Может кто-нибудь объяснить следующие термины TensorFlow

  1. inter_op_parallelism_threads

  2. intra_op_parallelism_threads

или, пожалуйста, дайте ссылки на нужный источник объяснения.

Я провел несколько тестов, изменив параметры, но результаты не подтвердились, чтобы прийти к заключению.


Ответы:


1

Параметры inter_op_parallelism_threads и intra_op_parallelism_threads задокументированы в source of the source tf.ConfigProto буфер протокола. Эти параметры настраивают два пула потоков, используемых TensorFlow для распараллеливания выполнения, как описано в комментариях:

// The execution of an individual op (for some op types) can be
// parallelized on a pool of intra_op_parallelism_threads.
// 0 means the system picks an appropriate number.
int32 intra_op_parallelism_threads = 2;

// Nodes that perform blocking operations are enqueued on a pool of
// inter_op_parallelism_threads available in each process.
//
// 0 means the system picks an appropriate number.
//
// Note that the first Session created in the process sets the
// number of threads for all future sessions unless use_per_session_threads is
// true or session_inter_op_thread_pool is configured.
int32 inter_op_parallelism_threads = 5;

Существует несколько возможных форм параллелизма при запуске графа TensorFlow, и эти параметры обеспечивают некоторый контроль параллелизма многоядерных процессоров:

  • Если у вас есть операция, которая может быть распараллелена внутренне, например умножение матриц (tf.matmul()) или сокращение (например, tf.reduce_sum()), TensorFlow выполнит ее, запланировав задачи в пуле потоков с intra_op_parallelism_threads потоками. Таким образом, эта опция конфигурации контролирует максимальное параллельное ускорение для одной операции. Обратите внимание, что если вы выполняете несколько операций параллельно, эти операции будут совместно использовать этот пул потоков.

  • Если у вас есть много операций, которые независимы в вашем графике TensorFlow, потому что между ними нет прямого пути в потоке данных, graphTensorFlow попытается запустить их одновременно, используя пул потоков с inter_op_parallelism_threads потоками. Если эти операции имеют многопоточную реализацию, они (в большинстве случаев) будут совместно использовать один и тот же пул потоков для внутриоперационного параллелизма.

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

20.12.2016
  • Можно ли это использовать для распараллеливания моего кода на нескольких процессорах? Как я могу использовать эти функции для достижения отказоустойчивости в случае отказа одной из машин в кластере? 20.12.2016
  • Эти параметры управляют максимальной степенью параллелизма, которую вы можете получить при запуске графа TensorFlow. Однако они полагаются на операции, которые вы выполняете с параллельными реализациями (как и многие стандартные ядра) для внутриоперационного параллелизма; и доступность независимых операций для запуска в графе для межоперационного параллелизма. Однако, если (например) ваш график представляет собой линейную цепочку операций, и эти операции имеют только последовательную реализацию, эти параметры не добавят параллелизма. Опции не имеют отношения к отказоустойчивости (или распределенному выполнению). 20.12.2016
  • Кажется, эти два варианта работают только для процессоров, но не для графических процессоров? Если бы у меня был оператор tf.add_n для нескольких параллельных операций на основе умножения матриц и выполнялся бы в графических процессорах, как выполняется распараллеливание по умолчанию и могу ли я его контролировать? 30.04.2017
  • Насколько установка обоих значений на 1 влияет на скорость? Означает ли установка обоих в один, что тензорный поток будет использовать только один поток? (Я просто попробовал и вижу, как все мои ядра используются, как только я начинаю тренироваться, и я действительно не вижу разницы в скорости) 07.08.2018
  • @mrry Итак, если я правильно понимаю ответ, intra контролирует количество ядер (в пределах 1 узла), а inter контролирует количество узлов, верно? Или, грубо говоря, intra работает как OpenMP, а inter работает как OpenMPI? Пожалуйста, поправьте меня, если я ошибаюсь. 19.10.2018
  • и если эти две настройки применяются как к процессору, так и к графическому процессору? Спасибо. 19.10.2018
  • Что означает «блокировка»? Обычно ввода-вывода нет, только вычисление тензорного типа, поэтому я не ожидаю, что «блокировка» будет означать блокировку ввода-вывода. 06.04.2019
  • @mrry Когда мы оставляем значение по умолчанию 0, система выбирает соответствующее число для одного сеанса в целом или меняет число для каждой операции, которая может быть распараллелена? 31.10.2019
  • @mrry, не могли бы вы сказать мне, что эти два параметра связаны с OMP_NUM_THREADS? большое спасибо. 14.02.2020

  • 2

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

    import tensorflow as tf
    
    #Assume that the number of cores per socket in the machine is denoted as NUM_PARALLEL_EXEC_UNITS
    #  when NUM_PARALLEL_EXEC_UNITS=0 the system chooses appropriate settings 
    
    config = tf.ConfigProto(intra_op_parallelism_threads=NUM_PARALLEL_EXEC_UNITS, 
                            inter_op_parallelism_threads=2, 
                            allow_soft_placement=True,
                            device_count = {'CPU': NUM_PARALLEL_EXEC_UNITS})
    
    session = tf.Session(config=config)
    

    Ответьте на комментарий ниже: [источник]

    allow_soft_placement=True
    

    Если вы хотите, чтобы TensorFlow автоматически выбирал существующее и поддерживаемое устройство для выполнения операций в случае, если указанное не существует, вы можете установить allow_soft_placement в значение True в параметре конфигурации при создании сеанса. Проще говоря, он позволяет динамически распределять память графического процессора.

    22.02.2019
  • Что такое allow_soft_placement=True? 26.05.2019
  • Ответил на вопрос в сообщении. 11.11.2019

  • 3

    Ответ, совместимый с Tensorflow 2.0: если мы хотим выполнить в режиме графика Tensorflow Version 2.0, функция, в которой мы можем настроить inter_op_parallelism_threads и intra_op_parallelism_threads это

    tf.compat.v1.ConfigProto.

    14.02.2020
    Новые материалы

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

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

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

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

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

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..