Саморазвитие, События

Сохраняем производительность при участии в соревнованиях Kaggle

Время прочтения: 4 мин.

В последнее время во всем мире значительно возросла популярность технологий искусственного интеллекта и, соответственно, количество проводимых data science – соревнований. Также растет и число участников этих соревнований. В связи с этим, для лучшего распределения имеющихся ресурсов одной из ведущих площадок по организации подобных соревнований (Kaggle) было принято решение о введении лимита на использование участниками мощностей графических процессоров (англ. graphics processing unit, GPU) – не более 30 часов в неделю. При этом, если ноутбук использует 2 графических ядра одновременно, лимит сокращается в 2 раза быстрее.

В этой статье я постарался систематизировать подходы и советы, предлагаемые в различных источниках, помогающие сохранить производительность при участии в соревнованиях на площадке Kaggle, несмотря на введенные ограничения.

Начну с официальных советов Kaggle по максимально эффективному использованию предоставляемых пользователям площадки графических процессоров:

  • Подключайте графический процессор, только если планируете его использовать. Если ваш код не задействует возможности GPU (например, библиотеки TensorFlow, PyTorch и др.), выгоды от его подключения не будет, при этом выделенный лимит будет уменьшаться.
  • Отслеживайте и управляйте использованием GPU. Kaggle имеет инструменты для мониторинга использования графического процессора, при помощи которых вы можете выявлять и отключать ненужные на текущий момент сеансы.
  • Избегайте использования пакетных сессий (commit), чтобы сохранить или проверить свой прогресс. Пакетные сессии запускают и выполняют весь код последовательно, тратя на это время и лимит GPU. Эффективнее будет просто загрузить файл .ipynb из редактора.
  • Отмените ненужные пакетные сессии. Одно и то же ядро может иметь несколько одновременных пакетных сессий, если вы повторно нажмете кнопку commit до завершения первой операции. Однако если ваш последний код был обновлен по сравнению с предыдущей версией, лучше отменить первый commit и оставить запущенным только второй.
  • Остановите интерактивные сеансы до закрытия окна редактора. Интерактивные сеансы остаются активными до тех пор, пока не достигнут 60-минутного ограничения времени простоя. Если вы не остановите сеанс до закрытия окна редактора, выделенный лимит GPU будет уменьшаться, пока сеанс не будет прерван автоматически.
  • Подумайте об использовании Kaggle-API, чтобы полностью избежать интерактивных сеансов.

На последнем пункте остановлюсь более подробно. Kaggle-API позволяет использовать и обрабатывать наборы данных Kaggle в сторонних приложениях. Например, в уже знакомом вам Google Colab. В отличие от Kaggle, Google Colab не имеет общего ограничения на длительность сеансов работы с GPU в неделю – лимит накладывается только в рамках одного сеанса (12 часов). При этом он на 3 часа превышает лимит, установленный для одного сеанса Kaggle.

Для доступа к API необходимо создать личный токен. Для этого необходимо зайти в меню Kaggle «My Account»:

перейти к разделу API и нажать кнопку «Create New API Token»:

В результате будет сформирован файл kaggle.json, который можно сохранить на свой компьютер. В дальнейшем он будет использоваться для доступа к наборам данных и соревнованиям Kaggle. Чтобы с токеном было проще работать, можно сохранить его на Google Drive. Это позволит не загружать его каждый раз с локального диска, а обращаться к токену напрямую. Чтобы получить доступ к API Kaggle в ноутбуке Google Colab необходимо выполнить следующую команду (восклицательный знак в начале строки кода позволяет выполнить команду операционной системы Linux прямо из ноутбука Colab):

!pip install kaggle

Затем перенесем в ноутбук токен, сформированный на предыдущем шаге (я заранее скопировал его в корневую папку Google Drive):

!mkdir -p ~/.kaggle
!cp '/content/drive/My Drive/kaggle.json' ~/.kaggle

Теперь можно использовать API Kaggle из Google Colab. Инструмент командной строки поддерживает следующие команды ( подробнее со списком команд и примерами их использования можно ознакомиться на GitHub по ссылке https://github.com/Kaggle/kaggle-api):

kaggle competitions {list, files, download, submit, submissions, leaderboard}

kaggle datasets {list, files, download, create, version, init}

kaggle kernels {list, init, push, pull, output, status} kaggle config {view, set, unset}

kaggle config {view, set, unset}

Например, для получения списка датасетов, имеющихся на платформе Kaggle, нужно выполнить команду: !kaggle datasets list. А для загрузки данных по какому-либо соревнованию – команду: !kaggle competitions download -c liverpool-ion-switching, где liverpool-ion-switching – название соревнования.

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

Советуем почитать