Чтобы получить доступ к серверу, вам необходимо сначала согласовать это с вашим гайдом.
После того, как вы получите согласие от гайда, вы отправляете одному из ответственных (Юлия Разливина, Ася Орлова):
- подтверждение, что ваш гайд в курсе и согласовал пользование сервером,
- почту google;
- SSH-ключ (см. инструкцию в пункте 2).
Вам дают доступ к тесту, вы его проходите. После выполнения теста необходимо написать ответственному. Если всё в порядке, вам откроют доступ на сервер и пришлют username и пароль ✅
Обычно логином (= username) является первая буква вашего имени + фамилия, например aorlova. Если вдруг не работает, уточните у того, кто выдавал вам доступ.
Откройте терминал и выполните команду:
ssh-keygen -t rsaНа консоль будет выведен следующий диалог:
Enter file in which to save the key (/home/user/.ssh/id_rsa):
➡ Нажмите Enter.
Далее система предложит ввести кодовую фразу для дополнительной защиты:
Enter passphrase (empty for no passphrase):
Этот шаг можно пропустить — просто нажимайте Enter.
После этого ключ будет создан. Перейдите в папку:
- Linux:
/home/<username>/.ssh/ - Windows:
C:\Users\<username>\.ssh\
Там появится пара криптографических ключей id_rsa и id_rsa.pub.
id_rsa - это закрытый (private) ключ, он хранится только у вас, никогда никому не передаётся.
id_rsa.pub - это открытый (public) ключ. Отправьте его ответственному, чтобы получить доступ.
На сервер можно заходить с помощью разных приложений. Вот несколько вариантов:
💡 Удобно для разработки и редактирования кода прямо на сервере.
💡 Как подключиться?
- Установите расширение
Remote - SSH - После установки расширения в нижнем левом углу появится зеленая иконка
- Нажмите на эту иконку, чтобы открыть палитру команд. Выберите пункт "Connect to Host..."
- Введите команду для подключения в формате:
ssh [email protected] -i путь/к/ключу, напримерssh [email protected] -i /home/aorlova/.ssh/id_rsa - В списке доступных хостов выберите тот, который вы добавили.
- VS Code откроет новое окно, и вы, возможно, увидите запрос на проверку "отпечатка пальца" (fingerprint) сервера. Нажмите "Continue" (Продолжить), чтобы продолжить.
- Вы подключились. Можете открыть папку проекта для редактирования кода и пользоваться терминалом для запуска команд.
💡 Идеально для тех, кто уверенно работает в командной строке, т.к. здесь у вас нет удобного графического интерфейса для работы с файловой системой и написания кода.
💡 Как подключиться?
- Введите команду
ssh [email protected], гдеyour_login— ваш логин от кластера. - При первом подключении через SSH терминал обычно спрашивает о доверии к хосту. Появляется примерно такое сообщение: Are you sure you want to continue connecting (yes/no/[fingerprint])?
- Отвечайте yes. После этого вы окажетесь на сервере.
💡 Удобно для работы с файловой системой, но скрипты запускать нельзя.
💡 Как подключиться?
- Введите:
- в поле
Имя хоста- aicltr.itmo.ru - в поле
Имя пользователя- ваш логин
- в поле
- Нажмите "Еще" и перейдите в раздел Аутентификация.
- В поле "Файл закрытого ключа" установите путь к приватному ключу. Подтвердите конвертацию формата в Putty, если возникает данный вопрос. Нажмите "Ок".
- Нажмите "Войти"
- Слева у вас будет файловая система вашего ПК, а справа - файловая система сервера. Вы сразу оказываетесь в домашней директории. Можете перемещаться между директориями, копировать файлы с ПК на сервер, создавать папки и файлы - в общем, все как в обычном Проводнике Windows.
💡 Есть и терминал, и файловый менеджер.
💡 Как подключиться?
- Session → SSH → Remote host - ввести aicltr.itmo.ru
- Username - ваш логин
- Перейдите на вкладку Дополнительные параметры SSH (или "Advanced SSH settings").
- Найдите поле для указания пути к вашему ключу и укажите путь к нему.
- Нажмите OK, чтобы сохранить настройки и попытаться подключиться. MobaXterm попытается установить соединение с использованием указанного ключа.
Это лишь несколько наиболее популярных вариантов, выбирайте наиболее удобный(е) для вас. Если возникают вопросы в процессе подключения, пользуйтесь интернетом или ChatGPT. Если не нашли ответ на свой вопрос (что маловероятно), попросите помощи у коллег.
На кластере есть две вычислительные ноды:
-
Сервер aichem (192.168.63.12)
6 × GPU A6000, 256 ядер, AMD EPYC 7763 (64-Core), 512 GB RAM -
Сервер aihub (192.168.63.10)
6 × GPU A6000, 256 ядер, AMD EPYC 7763 (64-Core), 512 GB RAM
aichem
- Домашние директории:
/nfs/home/<user>/(30GB) - Рабочие директории:
/mnt/tank/scratch/<user>/(250GB)
Обычно:
- Домашняя директория → для установки
condaи окружений - Рабочая директория → для хранения папок проектов, скриптов, данных и т.п.
Если вы планируете работать с большим кол-вом окружений, вы можете сразу установить conda в рабочую директорию, т.к. в домашней директории гораздо меньше места.
Для установки Anaconda нужно перейти в свою домашнюю директорию и выполнить там по очереди команды:
wget https://repo.anaconda.com/archive/Anaconda3-2024.02-1-Linux-x86_64.sh
bash Anaconda3-2024.02-1-Linux-x86_64.sh
source ~/anaconda3/bin/activate
echo ". ~/anaconda3/etc/profile.d/conda.sh" >> ~/.bashrc
source ~/.bashrcconda create -n myenv python=3.10
conda activate myenvbase лучше ничего не устанавливать! Для каждого проекта создавайте своё окружение.
Задача запускается через bash-скрипт:
- Напишите свой .py скрипт (например,
my_script.py) - Создайте файл запуска (например,
file.sh)
#!/bin/sh
python my_script.py#!/bin/sh обязательна!
На кластере работает система управления очередью задач SLURM. Запуск задач осуществляется через команду sbatch:
sbatch --cpus-per-task=10 -p aichem --gres=gpu:1 --mem=20G --time=05:00:00 --error=jobname.err file.shПараметры:
--cpus-per-task=10— число CPU-ядер-p aichem— очередь (partition)--gres=gpu:1— число GPU (Базово можно использовать не больше 1! При необходимости увеличить лимит, обращайтесь к ответственному.)--mem=20G— память--time=05:00:00— лимит времени--error=jobname.err— файл ошибок
--time! Если не знаете, сколько времени будет работать задача, указывайте такой лимит, через который вы её точно убъете. Можно использовать в виде --time=3-0 --- TL = 3 дня.
Если программа захочет больше ресурсов (больше памяти, или будет дольше работать), она будет автоматически остановлена.
Пример команды без использования GPU:
sbatch --cpus-per-task=10 -p aichem --mem=20G --time=05:00:00 --error=jobname.err file.sh-
Проверить очередь:
squeue
Вы увидите вот такую сводку. Здесь можно посмотреть ID вашей задачи (этот же ID используйте, чтобы отменить задачу, см. ниже), на какой ноде она была запущена, время выполнения задачи (сколько уже прошло с момента запуска). Если задача вылетела с ошибкой, она вылетает из этой сводки, в таком случае нужно идти проверять файл .err. Если вы превысили кол-во разрешенных ресурсов (например, запустили 3 задачи, в каждой из которых используется по 1 GPU, то есть всего 3 GPU, что запрещено), в NODELIST (REASON) будет написано (QOSMaxGRESPerUser). Можете подождать, пока одна из задач исполнится, тогда другая задача начнет выполняться, либо отменить ее и запустить позже.
JOBID PARTITION NAME USER ST TIME NODES NODELIST(REASON) 4506 aichem GluSerGl vgvozdev R 5:26:59 1 aichem 4473 aichem boltz_pa ikarpush R 1-15:17:13 1 aichem 4503 aichem boltz_pa pshestun R 5:36:56 1 aichem 4513 aichem cl_scree enam R 1:58:08 1 aichem 4494 aihub bash rgurtsie R 1-01:03:55 1 aihub
-
Отменить задачу с ID 123:
scancel 123
-
Проверить ошибки прямо из терминала, не открывая файл:
cat jobname.err
- Перейдите в папку, где лежит файл .ipynb.
- Узнайте IP ноды:
Выберите первый IP.
hostname -I
- Запустите GPU-ноду на сервере:
srun --cpus-per-task=10 -p aichem --mem=20G --time=12:00:00 --pty bash
- На локальном ноутбуке пробросьте порт:
ssh -N -L localhost:8000:<ip_ноды>:8000 [email protected]
- На сервере:
jupyter notebook --ip=<ip_ноды> --NotebookApp.token='' --NotebookApp.password='' --port 8000
- В браузере откройте: http://localhost:8000
Файлы с личного ПК на сервер и обратно можно переносить либо с помощью файлового менеджера (например, WinSCP), либо с помощью команды scp:
scp /путь/к/локальному_файлу user@server:/путь/на/сервере/scp user@server:/путь/на/сервере/имя_файла /путь/к/локальной_папке/du -sh * # размер всех папок
du -sh . # общий размер директории
du -sh ~/anaconda3/envs/* # размер окружений conda- Очистка conda от ненужных файлов:
conda clean --all
- Удаление окружения:
conda env remove -n myenv
- Архивирование папки:
tar -czvf project.tar.gz project/
С помощью данной команды:
srun --cpus-per-task=1 -p aichem --gres=gpu:0 --mem=1G nvidia-smi -lможно посмотреть текущее состояние GPU от NVIDIA: загрузку, температуру, используемую память, активные процессы и др. Разберём типичный вывод по блокам.
+-----------------------------------------------------------------------------+
| NVIDIA-SMI 535.113.01 Driver Version: 535.113.01 CUDA Version: 12.2 |
+-----------------------------------------------------------------------------+- NVIDIA-SMI — версия самой утилиты.
- Driver Version — версия драйвера NVIDIA, установленного в системе.
- CUDA Version — максимальная версия CUDA Toolkit, поддерживаемая этим драйвером.
| GPU Name Persistence-M| Bus-Id Disp.A | Volatile Uncorr. ECC |
| Fan Temp Perf Pwr:Usage/Cap| Memory-Usage | GPU-Util Compute M. |
| | | MIG M. |
+-------------------------------+----------------------+----------------------+
| 0 NVIDIA RTX A6000 On | 00000000:65:00.0 Off | Off |
| 30% 45C P0 75W / 300W | 512MiB / 49152MiB | 15% Default |
| | | N/A |
+-------------------------------+----------------------+----------------------+- GPU / Name — номер и модель видеокарты.
- Temp — температура (°C).
- Pwr: Usage/Cap — текущее энергопотребление и максимум.
- Memory-Usage — сколько памяти занято и сколько всего есть.
- GPU-Util — загрузка ядра (%).
| GPU PID Type Process name GPU Memory Usage |
| 0 1234 C python train.py 5000MiB |- PID — ID процесса в ОС.
- Type — C (вычисления) или G (графика/дисплей).
- Process name — какая программа использует GPU.
- GPU Memory Usage — сколько памяти она заняла.
Перед выполнением с помощью этой команды можно посмотреть свободные ресурсы и выбрать карту, на которую вы хотите направить свои вычисления. Для этого в file.sh после #!/bin/sh надо прописать строку export CUDA_VISIBLE_DEVICES=2,3 (номер или номера выбранных вами карт).
Не обязательно это делать всегда, только если ваша задача не запускается на карте, которая выбирается по дефолту.
| Команда | Описание |
|---|---|
pwd |
показать текущую директорию |
ls |
список файлов |
ls -lh |
список с размерами |
cd folder |
перейти в папку |
cd .. |
на уровень выше |
mkdir new_folder |
создать папку |
rm file.txt |
удалить файл |
rm -r folder |
удалить папку с содержимым |
cp file1 file2 |
скопировать |
mv file1 file2 |
переместить |
vi file.txt |
редактировать |
cat file.txt |
вывести содержимое |
head -n 10 file.txt |
первые 10 строк |
tail -n 10 file.txt |
последние 10 строк |
- Захожу в папку
/mnt/tank/scratch/user/Project - Создаю
file.py - Создаю
file.sh - Активирую окружение
- Запускаю через
sbatch(≤2 GPU, указываю время работы) - Если проект завершён → удаляю окружение и архивирую 📦