Разное

Что такое профилирование: Профилирование | это… Что такое Профилирование?

20.09.2023

Профилирование программ / Хабр

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

Для начала рассмотрим профилирование фрагментов кода.

В случае работы в Jupyter notebook можно использовать так называемые “магические команды”. Для того, чтобы узнать время выполнения одной строки, нужно в её начале разместить магическую команду %time. В приведенном ниже примере в последней ячейке тетрадки создается матрица размером 10000×10000, заполненная случайными вещественными числами

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

Чтобы оценить время выполнения кода в каждой из строк какой-либо ячейки, необходимо использовать магическую команду %time в каждой строке. В приведенном ниже примере создаются и перемножаются две матрицы размером 5000×5000, заполненные случайными вещественными числами.

Если же нужно оценить время выполнения ячейки в целом, необходимо использовать команду %%time. Генерация двух матриц и их перемножение потребовали в сумме 4,7 секунды.

Описанные приемы позволяют получить лишь начальное представление о быстродействии кода. Как известно, единичного эксперимента недостаточно для того, чтобы составить адекватное представление о поведении исследуемой системы. Проведем серию экспериментов и возьмем среднее значение в качестве оценки времени выполнения кода. Для этого будем использовать команду %%timeit с ключом -r,  задающим количество вычислительных экспериментов.

В следующем примере мы так же генерируем и перемножаем две матрицы в серии из пяти экспериментов.

Как видно, среднее значение времени в серии экспериментов (5,37 секунды) отличается от времени единичного эксперимента, проведенного ранее (4,7 секунды).

Рассмотрим еще один пример профилирования кода.

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

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

Исследуем два способа вычисления приближенного значения синуса, отличающихся способом вычисления второго слагаемого: в одном случае через трехкратное перемножение аргумента, в другом — через операцию возведения в степень. Для измерения времени снова воспользуемся командой timeit.

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

Перейдем к профилированию кода программы в целом.

Представим, что есть программа min_distance_naive. py, вычисляющая наименьшее расстояние между точками на плоскости и началом координат. Координаты точек представлены матрицей размерности 1000000×2, записанной в файле points.npy. Ключевой фрагмент кода — функция  min_dist_naive.

import numpy as np
def min_dist_naive(points, base):
    r_min = float('inf')
    for p in points:
        r = ((p[0] - base[0]) ** 2 + (p[1] - base[1]) ** 2) ** (1 / 2)
        r_min = min(r, r_min)
    return r_min
points = np.load('points.npy')
origin = (0, 0)
min_dist = min_dist_naive(points, origin)
print(min_dist)

Для запуска этой программы необходимо в командной строке выполнить следующую команду:

python min_distance_naive.py

Для запуска профилирования дополним эту команду ключом -m cProfile указывающим, что для профилирования нужно использовать модуль cPython, и ключом -s time, указывающим, что результаты профилирования нужно упорядочить по времени.

python -m cPython -s time min_distance_naive. py > naive.txt

 Весь вывод, в том числе результаты профилирования, будут записаны в текстовый файл naive.txt. Анализ этого файла показывает, что время выполнения программы составило 4,369 с., суммарное время выполнения функции поиска минимального расстояния составило 4,132 с.

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

import numpy as np
def min_dist_optim(points, base):
    r_min = float('inf')
    for p in points:
        r = (p[0] - base[0]) ** 2 + (p[1] - base[1]) ** 2
        r_min = min(r, r_min)
    r_min = r_min ** (1 / 2)
    return r_min
points = np.load('points.npy')
origin = (0, 0)
min_dist = min_dist_optim(points, origin)
print(min_dist)

Запустим профилирование доработанной программы.

python -m cPython -s time min_distance_optimized.py > optimized.txt

Обратимся к результатам профилирования.

В этом случае время выполнения функции составило 3,772 с.

По результатам многократного профилирования обоих вариантов и статистической обработки полученных экспериментальных данных, включающей в том числе сравнение выборок с помощью   t-критерия Уэлча, получен статистически значимый результат, свидетельствующий о том, что модифицированная функция приблизительно на 8% быстрее исходной. Таким образом, профилирование помогает выявить узкие места в коде с точки зрения производительности, сравнить разные варианты реализации алгоритмов, и в конечном счете ускорить выполнение программ. Код приведенных примеров, а также экспериментальные данные можно найти в репозитории.

Как профилирование помогает руководителю развивать бизнес — Карьера на vc.ru

Профилирование персонала – необходимый руководителю инструмент для успешного движения компании в бушующем океане бизнеса.

Профилирование – как маяк для капитана: в любую погоду, ночью и днем его мигающий свет направляет корабль, указывает путь, а порой и спасает от гибели. Что такое профилирование, как оно помогает решать задачи топ-менеджеров, руководителей и HR на тернистом пути компании к процветанию? Давайте разбираться.

1275 просмотров

Из чего же, из чего же, из чего же…

Профиль сотрудника строится на основе достаточно широкого набора данных, которые можно собрать на основании действий сотрудника за рабочим компьютером, фиксируемых в реальном времени. Это, например, статистика по используемым на рабочем ПК приложениям и посещаемым веб-ресурсам. Или такие параметры, как фактическое время начала и окончания рабочего дня, переработки сотрудника, активность в выходные дни. Эти данные по одному сотруднику с очень приблизительной точностью можно постараться собрать и вручную. Но если речь о большой компании и хочется получить не приблизительные, а точные данные, здесь не обойтись без аналитической системы.

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

Затем на профили должности руководитель накладывает оценку эффективности: он оценивает, насколько его подчиненные результативны, насколько качественно и в срок выполняют свои задачи. Очевидно, среди персонала его подразделения будут сотрудники, чьи профили сильно отличаются от стандартного профиля той или иной должности. Причем отличия эти будут как со знаком «плюс» — очень эффективный сотрудник, так и со знаком «минус» — отстающий в эффективности работник. Анализ активности преуспевающих специалистов покажет, что именно (какие инструменты, знания, навыки) помогает им быть столь эффективными, и, наоборот, анализ активности отстающих поможет выявить слабые места и подтянуть их.

Если у вас в распоряжении есть аналитическая система, можно научить ее получать объективные данные об эффективности сотрудников из разнообразных систем оценки персонала, например, из результатов широко распространенной системы оценки «360 градусов».

Это позволит повысить объективность и в большей степени автоматизировать процесс.

Основой профилирования является сбор статистических данных – скользящего среднего (усредненной суммы) с некоторым историческим окном: например, 1 раз в неделю или в три недели в зависимости от собираемых показателей. Так, среднесуточное рабочее время сотрудника целесообразно рассчитывать за период 7 дней, а набор характерных для должности приложений – за 3 недели, так как они не так часто меняются. Затем вычисляется расхождение между средним профилем должности и профилями всех сотрудников, занимающих аналогичную должность. При этом средний профиль рассчитывается как медиана – середина отсортированных по возрастанию данных, делящая их на две равные части.

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

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

Профилирование для HR и линейных руководителей

Итак, у нас есть профили должностей, а также профили ряда сотрудников, которые так или иначе ему не соответствуют, – лидеров и отстающих. Что нам это дает? Начнем с тех задач, которые стоят перед линейными руководителями и HR-департаментом и которые могут быть решены за счет профилирования.

Эта задача решается в двух направлениях. С одной стороны, профилирование позволяет выявить неэффективных, отстающих сотрудников и довести их уровень до усредненного профиля должности.

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

  • Профессиональное развитие сотрудников

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

Вполне понятно стремление HR-департамента развивать сотрудников. Но если компания большая, то очень сложно понять, кому реально нужно то или иное обучение. А благодаря профилю сотрудника можно увидеть, какие навыки являются для него ключевыми, какие рабочие инструменты он использует. И тогда мы сможем предложить этому сотруднику не все подряд, а релевантные учебные курсы.

Эту аналитику можно дополнить информацией о том, что человек ищет в интернете, и у нас будет понимание, чего ему не хватает. Допустим, мы видим, что сотрудник регулярно пользуется Microsoft Excel, а в поисковых запросах у него фразы вроде «как применить такую-то формулу», «как сделать то-то в экселе» и т. д. Значит, работник явно ощущает нехватку знаний – нужно организовать для него обучение по Microsoft Excel.

  • Формирование кадрового резерва

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

Эти две задачи идут бок о бок, потому что очень часто бывают ситуации, когда первое в итоге приводит ко второму. Аналитическая система может отслеживать подобные тенденции в профиле сотрудника. Например, раньше его рабочий день примерно совпадал с официальным рабочим временем в компании, и вдруг начались регулярные переработки, работа по ночам. Если руководитель знает, что это не временная история, что речь не идет о каком-то большом проекте, который нужно скоро сдавать, то это первый тревожный сигнал. Если не разобраться в проблеме, переработки будут продолжаться и риск выгорания сотрудника станет весьма высоким.

Бывает обратная ситуация. Допустим, профиль нормального поведения сотрудника – это регулярные переработки: человек живет работой. И вот профиль начинает меняться: значительно уменьшилось количество коммуникаций, рабочий день стал четко привязанным к стандартному графику. И это уже совсем тревожный сигнал: вероятно, у сотрудника уже случилось профессиональное выгорание.

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

Современные технологии анализа позволяют предотвращать как выгорание сотрудников, так и последующее увольнение. С их помощью руководитель увидит изменения в профилях подчиненных и сопоставит их с реальными задачами, которые выполняют работники. В любом виде деятельности, будь то маркетинг, управление проектами, бухгалтерия, продажи и многое другое, случаются проектные авралы, происходит сезонный рост нагрузки. Увидев подобные всплески в профиле своих сотрудников, руководитель понимает, что это временное и объяснимое явление. Но в случае систематической переработки, которая не вызвана объективными причинами, – это серьезный повод для руководителя задуматься, снять часть нагрузки с подчиненного, дать ему отпуск и принять другие меры, чтобы предотвратить выгорание.

Профилирование для топ-менеджмента

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

Вторая родственная задача – поиск резервов эффективности. С помощью профилирования топ-менеджер сможет понять, за счет каких внутренних резервов удастся повысить эффективность компании в целом. Например, есть ли возможность запустить новый проект без открытия новых вакансий? Эта задача решается с помощью профилирования сотрудников, когда мы выявляем среди них отстающих по объемам активности. За счет этих работников можно провести балансировку нагрузки. Они либо недозагружены и поэтому решают меньше рабочих задач, либо нуждаются в дополнительном обучении, чтобы быть более продуктивными. Это и есть тот самый резерв эффективности. Кроме того, с помощью профилирования мы можем выявлять дублирующие должности, когда сотрудники делают одно и то же. Это также возможности для оптимизации, нового распределения рабочих функций.

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

Перспективы профилирования

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

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

А еще не секрет, что успешный, эффективный работник сегодня – это не тот, кто как робот просто выполняет свою функцию. Часто эффективность решения производственных задач, качество решений, скорость их принятия зависят от так называемых гибких навыков (soft skills) сотрудника. Эти навыки также имеет смысл учитывать при построении профиля должности. Ведь способности человека многогранны, и если в процессе анализа упустить какую-то грань, то итоговая картина будет неполной. Только посмотрев на сотрудников под разными углами, можно получить полную картину происходящего в компании, увидеть свет на горизонте и достигнуть цели, минуя рифы и не разбившись о скалы.

Определение

в кембриджском словаре английского языка

Как произносится профилирование ?