Как стать автором
Обновить

Как сократить время выполнения ресурсоемких задач в Python

Уровень сложностиСредний
Время на прочтение9 мин
Количество просмотров2.3K
Всего голосов 7: ↑4 и ↓3+1
Комментарии9

Комментарии 9

Замечания/вопросы.

  • В тот момент, когда вы подключаете tf, у вас из кода пропадает импорт RandomForestClassifier, неаккуратно как-то

  • Я вообще не понял, каким образом подключение tf и его настроек помогло сэкономить 1.5 секунды времени на обучении модели. Или это связано как-раз с предыдущим пунктом, может RFC теперь подключается из tf?

  • Для меня абсолютная загадка, как одна и та же строка кода data = pd.read_excel(file_path, engine='openpyxl'), после того, как её запихали в data_generator и добавили туда ещё и цикл iterrows вдруг стала выполняться за доли секунды вместо почти 18 секунд. Может быть это "ленивая загрузка" и на самом деле она вообще не происходит на этом моменте, а происходит только во время уже обучения модели? Тогда как можно тут вообще сравнивать что-то? Во втором случае загрузка данных ещё не произошла. Произошла только подготовка к ней - вы создали объект-генератор, который фактически выполнится позже. Тут нужно смотреть, сколько займёт полный цикл и загрузки данных и обучения модели, и только этот полный цикл можно уже сравнивать по времени с изначальной версией кода.

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

Если всё так, как я понял, то статья довольно небрежно написана, извините. Нужно дорабатывать. Особенно момент с генератором данных. )

Спасибо, я хотел задать именно эти вопросы, а вы уже все сформулировали )

Я тоже сначало не понял чем это tf быстрее будет excel файл читать, который читается везде плохо, желательно в csv или sqlite конвертировать, которые явно быстрее работают.

Когда-то давно я сравнивал разные форматы и быстрее всего тогда читался формат feather. Но может что с тех пор изменилось. Pandas очень много гадает на данных, из-за этого чтение всегда долгое.

Почитал спецификацию feather то это достаточно проблемный формат как и xlsx, ,его надо целиком записывать и целиком читать, я поэтому говорил про формат sqlite и csv для возможности более эффективного наращивания записью и чтения частями

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

Мы попросили наших разработчиков еще раз посмотреть  статью на ваш комментарий и получили следующий ответ: 

«Пропал "RandomForestClassifier" из импорта» — да, причем несколько раз. Если попробовали бы выполнить эти куски кода отдельно от основных, то произошла бы ошибка импорта. Надеемся, что проблем не возникло

«Как tf влияет на sklearn?» — никак не влияет. RandomForestClassifier работает только на CPU. В статье указан неправильный подход к объявлению модели, правильно будет объявить модель через tf. Например:

model = tf.keras.models.Sequential([

        tf.keras.layers.Dense(128, activation='relu', input_shape=(X_train.shape[1],)),

        tf.keras.layers.Dense(64, activation='relu'),

        tf.keras.layers.Dense(1, activation='sigmoid')

    ])


«Как и почему read_excel стал работать быстрее?» — да, это 100% разные подходы. Во втором случае загрузка и обработка данных могут происходить одновременно с обучением модели, параллельно загружая и обрабатывая батчи данных с этапами работы GPU. Использование генератора позволяет не держать все данные в памяти целиком, а только по необходимости. За счет этого снижается нагрузка на оперативную память, из-за чего мы также выигрываем во времени и производительности (но не 18 секунд конечно)

Ещё раз спасибо за ваши замечания. Мы не перерабатывали скрипты в статье, чтобы не исказить представление об оригинале статьи. Будем рады обсудить и другие моменты, которые могли волновать вас в статье!

Грузить данные из xlsx и уповать на скорость - это мем.

Вместо пандаса используйте polars. А остальное несущественно.

"сократить время выполнения ресурсоемких задач в Python"

Проще простого:

cargo new my_new_project

Блин, только думал написать «не использоватьь питон»)))

Зарегистрируйтесь на Хабре, чтобы оставить комментарий