Конвертация Jupyter-ноутбуков для запуска в пакетном режиме на суперкомпьютере (запуск через очередь задач)
Jupyter-ноутбуки можно сконвертировать в py-файл для запуска на суперкомпьютере в пакетном режиме. Благодаря такому режиму Вы сможете запускать сразу множество вычислительных задач с различными параметрами, не дожидаясь освобождения ресурсов. Поиск ресурсов для ваших задач будет круглосуточно выполнять планировщик slurm. Задачи начнут работу сразу после появления ресурсов, не дожидаясь вашего подключения к ноутбуку. После окончания работы пакетная задача будет завершена автоматически и ресурсы суперкомпьютера будут переданы следующим задачам без простоя.
Предварительно следует открыть ноутбук в веб-интерфейсе Jupyter и убедиться, что код подготовлен к автоматическому выполнению без участия пользователя.
Конвертация ноутбука в py-файл возможна следующими способами:
- В интерфейсе JupyterHub перейти в меню File -> Save and Export Notebook As. -> Executable script. После чего загрузить полученный файл на суперкомпьютер.

- В классическом интерфейсе Jupyter Notebook выбрать пункт File -> Download as -> Python (.py). После чего загрузить полученный файл на суперкомпьютер.

- В консоли суперкомпьютера загрузить модуль Python: module load Python и выполнить команду конвертации ноутбука: jupyter nbconvert —to python notebook_name.ipynb (сконвертированный py-файл будет сохранён в каталоге с ноутбуком под названием notebook_name.py).

Для выполнения данного py-файла на суперкомпьютере в пакетном режиме необходимо подготовить sbatch-файл. Пример sbatch-файла converted_notebook.sbatch для запуска сконвертированного ноутбука:
#!/bin/bash #SBATCH --job-name=converted_notebook # Название задачи #SBATCH --time=01-00 # Максимальное время выполнения
#SBATCH --nodes=1 # Все CPU и GPU будут выделены на одном вычислительном узле #SBATCH --cpus-per-task=4 # Количество CPU на одну задачу #SBATCH --gpus=2 # Требуемое кол-во GPU
#SBATCH --constraint="type_a|type_b|type_c" # Типы вычислительных узлов
#SBATCH --mail-type=END,FAIL # Укажите ваш email для отправки уведомлений
#SBATCH --mail-user=ваша_почта # События, требующие уведомления
module purge # Отключаем все ранее загруженные модули module load Python/PyTorch_GPU_v1.11 # Загрузка модуля Python PyTorch_GPU_v1.11 ipython converted_notebook.py # Выполнение расчёта
Укажите требуемые параметры для запуска задачи, название модуля/окружения, адрес электронной почты и имя файла. Для запуска задачи на суперкомпьютере необходимо выполнить команду sbatch converted_notebook.sbatch
Код из py-файла будет выполнен с использованием ipython точно также, как он выполняется в Jupyter-ноутбуке.
Подробно процесс подготовки sbatch-файлов и запуска задач описан в отдельной инструкции.
Ограчения пакетного режима
- В пакетном режиме запуска задач не будут сформированы графики с использованием модулей типа matplotlib.pyplot. Графики можно сохранять в файл, используя метод pyplot.savefig(‘plot_name.png’)
Нашли опечатку ?
Выделите её, нажмите Ctrl+Enter и отправьте нам уведомление. Спасибо за участие!
Сервис предназначен только для отправки сообщений об орфографических и пунктуационных ошибках.
Национальный исследовательский университет «Высшая школа экономики» → Отдел суперкомпьютерного моделирования → Конвертация Jupyter-ноутбуков для запуска в пакетном режиме на суперкомпьютере (запуск через очередь задач)
- О ВЫШКЕ
- Цифры и факты
- Руководство и структура
- Преподаватели и сотрудники
- Корпуса и общежития
- Закупки
- Обращения граждан в НИУ ВШЭ
- Фонд целевого капитала
- Противодействие коррупции
- Сведения о доходах, расходах, об имуществе и обязательствах имущественного характера
- Сведения об образовательной организации
- Людям с ограниченными возможностями здоровья
- Единая платежная страница
- Работа в Вышке
- ОБРАЗОВАНИЕ
- Лицей
- Довузовская подготовка
- Олимпиады
- Прием в бакалавриат
- Вышка+
- Прием в магистратуру
- Аспирантура
- Дополнительное образование
- Центр развития карьеры
- Бизнес-инкубатор ВШЭ
- НАУКА
- Научные подразделения
- Исследовательские проекты
- Мониторинги
- Диссертационные советы
- Защиты диссертаций
- Академическое развитие
- Конкурсы и гранты
- Научно-образовательный портал IQ.hse.ru
- XXIV Ясинская (Апрельская) международная научная конференция по проблемам развития экономики и общества
- РЕСУРСЫ
- Библиотека
- Издательский дом ВШЭ
- Книжный магазин «БукВышка»
- Типография
- Медиацентр
- Журналы ВШЭ
- Публикации
- Единый архив экономических и социологических данных
- Полезные ссылки
- Министерство науки и высшего образования РФ
- Министерство просвещения РФ
- Федеральный портал «Российское образование»
- Массовые открытые онлайн-курсы
Шрифты HSE Sans и HSE Slab разработаны в Школе дизайна НИУ ВШЭ
Использование IPython в интерактивном окне
Интерактивное окно Visual Studio в режиме IPython предоставляет удобную интерактивную среду разработки с широкими возможностями, в том числе функцией интерактивных параллельных вычислений. В этой статье описано использование IPython в интерактивном окне Visual Studio, где также доступны все стандартные функции интерактивного окна.
Для работы с этим пошаговым руководством требуется установить IPython numpy и matplotlib. Если вы используете Anaconda, эти библиотеки уже установлены. В оставшейся части этого пошагового руководства предполагается, что вы используете Anaconda.
IronPython не поддерживает IPython, хотя его можно выбрать в форме параметров интерактивной работы. Дополнительные сведения см. в запросе функции.

- Откройте Visual Studio, переключитесь в окно Окружения Python (Вид>Другие окна>Окружения Python) и выберите среду Anaconda.
- Изучите вкладку Пакеты (Conda) (которая может отображаться как pip или Пакеты) для этой среды, чтобы убедиться, что ipython и matplotlib указаны. Если нет, установите их с помощью этой же вкладки. (См. раздел Вкладка «Пакеты» окна «Окружения Python».)
- Откройте вкладку Обзор и выберите Использовать интерактивный режим IPython. (В Visual Studio 2015 выберите Настройка интерактивных параметров, чтобы открыть диалоговое окно Параметры, укажите значение IPython для параметра Интерактивный режим и нажмите кнопку ОК.)
- Выберите Открыть интерактивное окно, чтобы открыть интерактивное окно в режиме IPython. Если вы только что установили интерактивный режим, может потребоваться сброс установок окна. Кроме того, если отображается только приглашение >>>, потребуется нажать клавишу ВВОД, чтобы получить приглашение как в [2].
- Введите следующий код:
import matplotlib.pyplot as plt import numpy as np x = np.linspace(0, 5, 10) y = x ** 2 plt.plot(x, y, 'r', x, x ** 3, 'g', x, x ** 4, 'b')

from mpl_toolkits.mplot3d import Axes3D import matplotlib.pyplot as plt import numpy as np fig = plt.figure() ax = fig.add_subplot(111, projection='3d') for c, z in zip(['r', 'g', 'b', 'y'], [30, 20, 10, 0]): xs = np.arange(20) ys = np.random.rand(20) # You can provide either a single color or an array. To demonstrate this, # the first bar of each set is colored cyan. cs = [c] * len(xs) cs[0] = 'c' ax.bar(xs, ys, zs=z, zdir='y', color=cs, alpha=0.8) ax.set_xlabel('X') ax.set_ylabel('Y') ax.set_zlabel('Z') plt.show()

IPython имеет множество других полезных функций, таких как экранирование в системную оболочку, подстановку переменных, запись выходных данных и т. д. Дополнительные сведения см. в документации по IPython.
Связанный контент
- Виртуальная машина для обработки и анализа данных Azure предварительно настроена для выполнения записных книжек Jupyter, а также широкого спектра других средств обработки и анализа данных.
Секрет оптимизации процесса написания кода на Python в Jupyter Notebook, который все знают, но мало кто использует
Время – самый ценный ресурс, а также невосполнимый. Чаще всего осознание этого приходит в момент, когда истекает крайний срок выполнения поставленной задачи. Тогда мы начинаем анализировать, на что было оно потрачено, насколько рационально и была ли возможность сделать быстрее. Если данную ситуацию рассматривать с позиции IT-специалиста, то, на мой взгляд, поставленную задачу можно поделить на три этапа:
- «План» – разработать алгоритм решения и определить необходимые ресурсы;
- «Кодинг» – написать скрипт или SQL-запрос в зависимости от поставленной задачи;
- «Результат» – получить и проанализировать результат, в случае ошибки или медленной работы, провести отладку или оптимизацию.
Для каждого этапа существуют методы и инструменты, с помощью которых можно сократить временные трудозатраты, но более подробно хочу остановиться на этапе кодинга. Ведь на скорость, кроме высокого уровня владения языком программирования и наличие опыта, влияет уровень знания инструмента, в котором пишется код. Поэтому, IT-специалисты, которые не изучают доступный функционал своих рабочих приложений, упускают возможность повысить свою производительность.
Далее хочу поделиться своим опытом оптимизации процесса написания кода на Python в Jupyter Notebook.
Начнем с самого простого, что не требует дополнительной настройки, а именно с горячих клавиш (комбинаций кнопок на клавиатуре, при нажатии которых выполняются команды без использования мыши).
Часто используемые команды:
«Alt» + «Enter» – Выполнение текущей ячейки и перевод фокуса на новую ячейку, созданную ниже
«Shift» + «Enter» – Выполнение текущей ячейки и перевод фокуса на следующую
«Ctrl» + «Enter» – Выполнение текущей ячейки и сохранение фокуса на текущей ячейке
«Esc» => Переход из режима редактирования (edit mode) в командный (command mode):
«Esc» => «A» – Добавление пустой ячейки сверху или «B» – Добавление пустой ячейки снизу
«Esc» => «C» – Копирование ячейки и «V» её вставка
«Esc» => «X» – Вырезание ячейки и «V» её вставка
«Esc» => «DD» – Удаления ячейки
«Esc» => «Z» – Отмена удаления ячейки
Для применения к нескольким ячейкам:
«Esc» => «Shift» + «K» или «Up» – Выделение ячеек выше текущей
«Esc» => «Shift» + «J» или «Down» – Выделение ячеек ниже текущей
Для максимального исключения использования мыши:
«Esc» => «Shift» + «M» – Объединение нескольких ячеек
«Ctrl» + «Shift» + «–» – Разделение на несколько ячеек (поставьте курсор перед линией, с которой должна начаться вторая ячейка)
«Esc» => «00» – Перезапуск блокнота
«Esc» => «F» – Поиск и замена информации в ячейках
«Esc» => «Space» – Прокрутка блокнота вниз
«Esc» => «Shift + Space» – Прокрутка блокнота вверх
«Esc» => «1, 2, 3, 4, 5, 6» – Определение заголовка в markdown
«Esc» => «Y, M, R» – Конвертация типов ячеек (Code, Markdown, Raw)
«Esc» => «O» – Включение/Выключение вывода результата в ячейке
«Esc» => «L» – Включение/Выключение номеров строк в ячейке
На случай, если забыли и необходимо подсмотреть:
«Esc» => «H» – Вызывает окно помощь со списком горячих клавиш
«Esc» => «Ctrl + Shift +P» – Вызывает командную панель со списком горячих клавиш
Это не все команды, но, на мой взгляд, необходимый минимум для начала оптимизации процесса написания скрипта. И если вы ранее, при работе в программе, особенно с часто повторяющимися действиями, не использовали горячие клавиши, начинайте, так как отпадет необходимость выцеливать команды на панели инструментов и увеличится скорость создания скрипта за счет сокращения количества взаимодействий с мышью.
Перейдем к более тонкой настройки Jupyter Notebook с помощью расширений «Nbextensions», они улучшат функционал и существенно модифицируют пользовательский интерфейс.
Для этого необходимо установить пакет «jupyter_contrib_nbextensions» с помощью двух команд:
Pip install jupyter_contrib_nbextensions Jupyter contrib nbextension install —user
После в Jupyter Notebook на стартовой странице появится вкладка «Nbextensions» с перечнем расширений.
При выборе одного из них, ниже подгружается описание и поле для настройки доступных параметров.
На текущий момент для себя выделил три расширения:
- Hinterland – для первого введенного символа выпадает меню автозаполнения кода, для функции выводится описание, что исключает необходимость нажатия клавиши «Tab»
2. Autopep8 – преобразует код Python в соответствии со стилевым руководством PEP8. Перед активацией расширения, дополнительно из командной строки запустить
Pip install autopep8 —user
Для преобразования написанного кода на панели инструментов появиться иконка в виде молота.
3. Code Folding – в код добавляются метки в виде треугольников для скрытия, удобно при объемных функциях
Общего списка какие расширения необходимо ставить нет, так как задачи, решаемые в Jupyter Notebook, разнообразны и лучше всего на собственном опыте его определять.
В дополнении предлагаю подумать о будущих задачах и создать свою базу знаний с помощью магических команд (magics).
Для создания и наполнения информацией используем команду «%%writefile» указываем в параметрах «—a» для добавления в файл, иначе будет перезаписываться и указываем имя файла «C:\Users\ … \Documents\MyBase.py», включив в него полный путь места хранения, после вставляем код, который хотим записать.
%%writefile -a C:\Users\ . \Documents\MyBase.py >>>»»»#Определяем список файлов для обработки import os #Путь к папке на ПК path_file = r’\Users\. \Documents\ ‘[:-1] #Собираем имена файлов для обработки list_file = [] for file in os.listdir(path_file): if file.endswith((‘.csv’)): list_file «»»
Если сохранять в том формате, который указан в примере, а именно после magics-команды пропустить строку и после «>>>»»»» прописать краткое пояснение, а со следующей строки вставить сохраняемый скрипт до ««»»», то при открытии файла в текстовом редакторе Notepad++ и выборе синтаксиса Python, вся сохраненная информация будет разбита на блоки.
MyBase.py открытый в Notepad++
Для вывода данных из созданной базы знаний используем команду «%pycat» и указываем имя файла «C:\Users\ … \Documents\MyBase.py», включив в него полный путь места хранения.
Каким образом можно не выполнять заново код? [закрыт]
Закрыт. Этот вопрос необходимо уточнить или дополнить подробностями. Ответы на него в данный момент не принимаются.
Хотите улучшить этот вопрос? Добавьте больше подробностей и уточните проблему, отредактировав это сообщение.
Закрыт 3 года назад .
Есть код, который мы пишем в среде разработки. По ходу его формирования, на каждом этапе мы его «проверяем». На выполнение сложных программ у нас уходит много времени, потому что выполнение файла происходит с самого начала. Если мы рассматриваем обработку данных, следует на определенном этапе сохранять изменения в новый файл и уже после этого начинать работать с ним?
Отслеживать
13.7k 12 12 золотых знаков 43 43 серебряных знака 75 75 бронзовых знаков
задан 7 авг 2020 в 15:31
D.Vinogradov D.Vinogradov
1,411 8 8 серебряных знаков 19 19 бронзовых знаков
Не понял, что значит на каждом этапе мы его «проверяем». Кто мы? Что значит «проверяем»?
7 авг 2020 в 15:33
Ни че го не понял. (
7 авг 2020 в 15:43
Я так понимаю, что речь идет о системе контроля версий типа Git . Но это чисто домыслы, из вопроса не понятно, что автор в результате хочет
7 авг 2020 в 15:53
@dlm0n , кто мы? Мы это значит я, либо тот у кого возник такой же вопрос. Проверяем — значит, когда ты пишешь код, то ты его запускаешь на некоторых этапах. Или ваш код в сотни строк без ошибок и проверок пишется на раз два?)
7 авг 2020 в 17:08
2 ответа 2
Сортировка: Сброс на вариант по умолчанию
модульностью. пишешь часть логики в одном модуле. который формирует результат. потом пишешь второй, который используя результат первого выполняет еще работу. pickle, поможет тебе сохранять состояние объектов.
что еще? готовые заранее наборы данных разложить по файлам, каждую работу разбить на методы. написать тесты (unittest) под каждый метод, кадждому методу передать часть данных необходимую для тестирования. как мне кажется самый хороший вариант.
Отслеживать
ответ дан 7 авг 2020 в 16:00
2,687 6 6 серебряных знаков 13 13 бронзовых знаков
Можно воспользоваться ipython либо в «чистом» виде, либо в виде Jupyter Notebook , что ещё удобнее. В Jupyter Notebook можно выполнять отдельные «ячейки» с кодом, причём в произвольном порядке. Состояние переменных при этом сохраняется в памяти. Можно пробовать запускать разные куски кода, не запуская при этом весь код «с нуля». Дописать на ходу код и запустить его с текущим состоянием памяти и переменных. Для исследовательских целей и чтобы разобраться как что-то работает, попробовать всякое, это очень удобно. Посмотреть и попробовать, как это выглядит, можно, например, в Google Colab.
Отслеживать
ответ дан 7 авг 2020 в 16:33
69.7k 5 5 золотых знаков 20 20 серебряных знаков 51 51 бронзовый знак
Про Юпитер думал, но в нем не очень удобно работать. Спасибо за идею!
7 авг 2020 в 17:02
кажется PyCharm это умеет
7 авг 2020 в 17:37
@alex в нем и работаю
7 авг 2020 в 18:00
ну так ставишь брик поинт и после остановки переходишь на вкладку консоль в окне отладчика, где можно активировать (или включить автоматическую активацию в параметрах запуска) пайтон промпт и писать код прям на лету. после чего можно продолжить выполнение. так же запуск до курсора есть и возможность отправить в пайтон консоль любой выделеный участок кода. не знаю инструмента лучше)