2017-01-14 7 views
1

Из-за сложности компиляции VW на машине RHEL я отказываюсь использовать скомпилированные версии VW, предоставленные Ариэлем Файгоном (спасибо!) here. Я нахожу VW из Python, поэтому я планирую использовать модуль subprocess Python (я не смог получить пакет python для компиляции). Мне интересно, будут ли какие-либо недостатки для этого подхода. Я видел бы какие-либо задержки производительности?Использование предварительно скомпилированной версии Vowpal Wabbit - Downsides?

Большое вам спасибо за помощь!

ответ

1

Подача живого vowpal wabbit процесса через Python's subprocess в порядке (быстро). пока вы не запускаете новый процесс на пример и избегаете чрезмерных контекстных переключателей. По моему опыту, в этой настройке вы можете ожидать пропускную способность ~ 500 тыс. Функций в секунду на типичном двухъядерном оборудовании. Это не так быстро, как (10x быстрее) ~ 5M features/sec vw обычно обрабатывается, когда не взаимодействует с каким-либо другим программным обеспечением (чтение из файла/кеша), но достаточно подходит для большинства практических целей. Обратите внимание, что узкое место в этом параметре, скорее всего, будет обрабатываться дополнительным процессом, а не vowpal-wabbit.

Рекомендуется подавать вау-паб волов в партии (по одному примеру за раз, а не по одному) как на входе (питание vw), так и на выходе (чтение vw-ответов). Если вы используете subprocess.Popen для подключения к процессу, обязательно передайте большой bufsize, иначе по умолчанию итератор Popen будет буферизирован по строке (по одному примеру за раз), что может привести к примеру контекстного переключения между производителем примеров и потребителей (vowpal wabbit).

Предполагая командную строку Vw в vw_cmd, это было бы что-то вроде:

vw_proc = subprocess.Popen(vw_cmd, 
        stdout=subprocess.PIPE, stderr=subprocess.STDOUT, 
        bufsize=1048576) 

Вообще, медлительность может исходить от:

  • Слишком много переключений контекста (генерации и обработки один пример в a)
  • Слишком много обработки вне vw (например, генерация примеров в первую очередь, преобразование объектов)
  • Накладные расходы при запуске (например, чтение модели) на пример.

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

 Смежные вопросы

  • Нет связанных вопросов^_^