Как отправить задания SLURM на кластер

Отправка заданий SLURM на кластер

Руководство по отправке задач SLURM на кластер, особенно для глубокого обучения и науки о данных

Фото от imgix на Unsplash

Вы уже привыкли обучать модели глубокого обучения с помощью бесплатных GPU Google Colab, но теперь вы готовы перейти на новый уровень и использовать мощь кластера, и у вас нет понятия, как это сделать? Вы находитесь в нужном месте! 🚀

Во время моей научно-исследовательской стажировки в области нейронаук в Кембриджском университете, я обучал большие модели для задач компьютерного зрения, и бесплатного GPU, предоставленного Google, было недостаточно, поэтому я решил использовать локальный кластер.

Однако было очень мало документации, и мне пришлось просить у других людей скрипты, чтобы попытаться их понять, и более или менее собрал несколько вещей, которые оказались полезными для меня. Теперь я собрал все, что необходимо для запуска базовых python-скриптов. Это руководство – то, которое мне хотелось бы иметь во время моего пребывания там.

Типичный случай использования машинного обучения

Допустим, вы хотите обучить классификатор птиц с 500 различными классами и высоким разрешением изображений. Что-то, что никогда не запустится на Google Colab.

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

Вы должны иметь возможность запустить этот скрипт из вашего терминала.

Например, предположим, у вас есть скрипт под названием train_bird_classifier.py, вы должны иметь возможность запустить его так:

python train_bird_classifier.py

Этот скрипт может выглядеть примерно так:

# train_bird_classifier.pyimport torchfrom torch.utils.data import DataLoader# Предполагая, что необходимые функции, модели и преобразования определены в различных файлах.from utils import build_model, BirdDataset, collate_fn, train_modelfrom transformations import train_transforms, test_transformsdef main():    device = torch.device("cuda:0" if torch.cuda.is_available() else "cpu")    # Настройка набора данных и загрузчика данных    train_dataset = BirdDataset('data/train/', transform=train_transforms)    train_loader =…