Тот же код Python работает в Jupyter Notebook в 20 раз медленнее, чем в командной строке

У меня есть код Python, который использует трансформеры Hugging Face для запуска задачи НЛП в PDF-документе. Когда я запускаю этот код в Jupyter Notebook, его выполнение занимает более 1,5 часов. Затем я настраиваю тот же код для запуска через локально размещенное веб-приложение Streamlit. К моему удивлению, оно пробежало менее 5 минут!

Я считаю, что сравниваю яблоки с яблоками, потому что:

  • В каждом случае я анализирую один и тот же PDF-документ.
  • Поскольку приложение Streamlit размещено локально, все вычисления выполняются на процессоре моего ноутбука. Я не использую виртуальные ресурсы Hugging Face. Модели ВЧ загружаются на мой компьютер.
  • Jupyter Notebook также работает локально на моем компьютере.
  • Файл .py создается из блокнота Jupyter с использованием «streamlit-juypter», который просто берет код Python из блокнота и добавляет несколько операторов Streamlit.

Таким образом, по сути, тот же код работает с теми же данными и на том же оборудовании.

Единственные различия, о которых я могу думать, которые могут объяснить это:

  • Streamlit запускает файл Python .py из командной строки вместо блокнота .ipynb.
  • Streamlit работает внутри виртуальной среды вместо моей основной установки Python.

Кто-нибудь когда-нибудь испытывал что-то подобное? Может ли запуск того же кода Python из командной строки привести к увеличению скорости в 20 раз?

Редактировать: Как предложил @Wayne, я сравнил вывод pip list между моей основной установкой Python и venv и обнаружил некоторые различия. Поэтому я обновил все основные пакеты, используемые задачей НЛП, до последних версий, и теперь время выполнения осталось прежним. Хотя я до сих пор не знаю, какой пакет виноват, и, вероятно, сейчас это не имеет значения.

Сравнение версий пакетов MS Excel

На самом деле вы даете очень мало подробностей, чтобы кто-либо мог здесь продолжить. Среда HuggingFace и ваша локальная идентична? Каковы различия между всеми задействованными пакетами? Во-вторых, вы запускаете один в блокноте Jupyter, а другой в приложении с потоковой подсветкой, используя файл .py. А в блокноте ты чем пользуешься? Запускаем тот же .py файл с %run в блокноте. Использование какой-либо магии IPython или то, что запускается в файле .ipynb, является чистым Python? Сколько ресурсов вы используете на своем компьютере по сравнению с HuggingFace? У вас мощный компьютер или бесплатный виртуальный компьютер на HuggingFace?

Wayne 27.03.2024 13:46

Добавлено больше деталей. Помогло бы, если бы я разместил код .ipynb и код .py рядом для сравнения?

Ambar Nag 28.03.2024 12:36

Я до сих пор не понимаю, где работает Jupyter Notebook? Это тоже работает локально на вашей машине? И чем среда отличается от используемой Streamlit. Вы должны уметь запускать conda list или pip list в каждом из них и видеть различия.

Wayne 28.03.2024 13:17

Jupyter Notebook тоже работает локально на моем компьютере. Но Streamlit использует виртуальную среду, в которой есть только те пакеты, которые необходимы для выполняемой задачи. Jupyter использует мою основную установку Python, в которой со временем будет установлено множество других пакетов.

Ambar Nag 29.03.2024 07:58

Да, и, как я уже упоминал, обычно вы запускаете команды, которые я добавляю, и сравниваете версии соответствующих задействованных пакетов. Вполне возможно, что один из критически важных пакетов намного старше и не так оптимизирован, как другой. Или одна из версий, как известно, имеет существенный недостаток. Пожалуйста, обратитесь к моему первому предложению моего первого комментария. Пожалуйста, прочитайте Как мне задать хороший вопрос?. Обратите внимание, что там написано: «Помните, что вы можете редактировать свой вопрос в любое время!».

Wayne 29.03.2024 21:13

Не уверен, заметили ли вы, но каждый раз, когда я отвечаю на комментарий, я также добавляю в свой вопрос дополнительную информацию. В любом случае, мой вопрос: «Кто-нибудь когда-нибудь сталкивался с чем-то подобным?». Меня меньше интересует диагностика причины различий во время выполнения, чем выяснение того, сталкивались ли с этим другие. Я уже знаю, что версии пакетов и т. д. одинаковы для Jupyter и cmd.

Ambar Nag 30.03.2024 08:17

«Я уже знаю, что версии пакетов и т. д. в Jupyter и cmd одинаковы». Эти подробности не были предоставлены, и поскольку речь идет о виртуальной среде, отдельной от установки Python основной системы, это маловероятно. Я думаю, что StackOverflow больше подходит для диагностики причины, чем открытые вопросы о том, сталкивались ли с этим другие люди. Если вы следуете руководству, которое я дал, особое внимание будет уделяться практичности вопросов.

Wayne 31.03.2024 17:06

Ты прав. Пожалуйста, смотрите последнее редактирование. Разница во времени выполнения была связана с версией пакета между моим основным Python и venv, на котором работает Streamlit. Хотя я до сих пор не знаю, какой именно пакет, так как только что обновил все основные пакеты НЛП. Что бы вы хотели, чтобы я сделал дальше? * Я удаляю вопрос, поскольку разница во времени выполнения не связана с Jupyter и cmd * Вы предоставляете ответ, и я принимаю его

Ambar Nag 01.04.2024 11:10

В будущем просто вставьте вывод pip list и тому подобное в виде текста. Или хотя бы тоже наклеить. Изображения не доступны для поиска. Вы заметите, что в руководстве, на которое я давал ссылку ранее (название: «Как задать хороший вопрос?»), в разделе «Помогите другим воспроизвести проблему» говорится: «НЕ публикуйте изображения кода, данных, сообщений об ошибках». , и т. д.".

Wayne 01.04.2024 14:22
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
1
9
159
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вероятно, это связано с различием двух сред.

Вы можете запустить %pip list в блокноте и эквивалент pip list в другой среде и сравнить.
Один из них может иметь некорректный код или не работать оптимально с другими версиями задействованных пакетов.

Другие вопросы по теме