Skip to content

Commit

Permalink
Первая версия инструкции настройки среды.
Browse files Browse the repository at this point in the history
  • Loading branch information
NValerij committed Sep 2, 2024
1 parent aae1592 commit 828e860
Showing 1 changed file with 138 additions and 0 deletions.
138 changes: 138 additions & 0 deletions content/01_Introduction/Setup.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,138 @@
# Настройка рабочего окружения

## Доступ на сервер

Описание доступных серверов есть в [официальной инструкции](https://docs.google.com/document/d/1oW1I6Ec2QIC1B3RQON4FwiSx6PjXCH8nOZxJGoQnQEk/edit#heading=h.i4z3eccegkh6). Для пользования серверами нужно её изучить.

Нас будет интересовать в первую очередь сервер `imladris` и карты RTX A4000 на нём. Обратите внимание, что на сервере стоят как [RTX 4000](https://blogs.nvidia.com/blog/quadro-rtx-4000/) (поколение Turing, то же, что и 2070), так и гораздо более современные [RTX A4000](https://www.nvidia.com/en-us/design-visualization/rtx-4000/) (Ada, то же, что и 4070). Для первых заданий это не имеет значения, для последующих — может быть важно.

Для доступа к серверам нужно заполнить форму, ссылка на которую есть в разделе «Новые GPU-сервера → Доступ на сервер». После одобрения заявки нужно настроить `~/.ssh/config` (Linux, Mac, WSL) или сессию в Putty (Windows) по инструкции из того же раздела.

Опционально: пробрасываем [ключи](https://help.ubuntu.com/community/SSH/OpenSSH/Keys) на сервер для входа без пароля (Linux, Mac, WSL):
* `ssh-copy-id imladris` (ключи должны быть предварительно сгенерированы командой `ssh-keygen -t rsa`)
* Проверяем, что вход работает теперь без пароля: `ssh imladris`

На сервере проверяем, что нам доступны видеокарты через команду `nvidia-smi`:
```
$ nvidia-smi
Mon Aug 26 19:42:50 2024
+-----------------------------------------------------------------------------------------+
| NVIDIA-SMI 560.28.03 Driver Version: 560.28.03 CUDA Version: 12.6 |
|-----------------------------------------+------------------------+----------------------+
| 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 Quadro RTX 4000 On | 00000000:02:00.0 Off | N/A |
| 30% 26C P8 9W / 125W | 1MiB / 8192MiB | 0% Default |
| | | N/A |
+-----------------------------------------+------------------------+----------------------+
| 1 NVIDIA RTX A4000 On | 00000000:05:00.0 Off | Off |
| 41% 37C P8 15W / 140W | 2MiB / 16376MiB | 0% Default |
| | | N/A |
+-----------------------------------------+------------------------+----------------------+
| 2 NVIDIA RTX A4000 On | 00000000:06:00.0 Off | Off |
| 41% 33C P8 13W / 140W | 2MiB / 16376MiB | 0% Default |
| | | N/A |
+-----------------------------------------+------------------------+----------------------+
| 3 Quadro RTX 4000 On | 00000000:81:00.0 Off | N/A |
| 30% 29C P8 7W / 125W | 1MiB / 8192MiB | 0% Default |
| | | N/A |
+-----------------------------------------+------------------------+----------------------+
| 4 Quadro RTX 4000 On | 00000000:82:00.0 Off | N/A |
| 30% 26C P8 10W / 125W | 1MiB / 8192MiB | 0% Default |
| | | N/A |
+-----------------------------------------+------------------------+----------------------+
| 5 Quadro RTX 4000 On | 00000000:85:00.0 Off | N/A |
| 30% 30C P8 8W / 125W | 1MiB / 8192MiB | 0% Default |
| | | N/A |
+-----------------------------------------+------------------------+----------------------+
| 6 Quadro RTX 4000 On | 00000000:86:00.0 Off | N/A |
| 30% 30C P8 9W / 125W | 1MiB / 8192MiB | 0% Default |
| | | N/A |
+-----------------------------------------+------------------------+----------------------+
+-----------------------------------------------------------------------------------------+
| Processes: |
| GPU GI CI PID Type Process name GPU Memory |
| ID ID Usage |
|=========================================================================================|
| No running processes found |
+-----------------------------------------------------------------------------------------+
```

Карты `NVIDIA RTX A4000` (GPU#1, GPU#2) — нового поколения, карты `Quadro RTX 4000` (GPU#0, GPU#3-6) — более старые.

Другая полезная информация:
* Версия CUDA (12.6) — для чтения [актуальной документации](https://developer.nvidia.com/cuda-toolkit-archive).
* Какие карты и чем заняты (см. «No running processes found», сейчас всё свободно). См. также утилиту `nvtop`.
* Для каждой карты указана степень её загрузки (`GPU-Util`) и объём занятой памяти (`Memory-Usage`).

## Редактирование файлов на удалённой машине

Disclaimer: редакторы `vim`, `emacs` и их производные тут не рассматриваются. Если вы умеете ими пользоваться, то дальнейшие инструкции можете смело пропустить.

Наш курс предполагает программирование на C++, поэтому редактирование файлов через Jupyter Notebook здесь также не рассматривается. Но и не запрещается, если вам так удобно.

### Редактор `nano`

Простой консольный аналог Блокнота с подсветкой синтаксиса из коробки. Подходит для небольших правок.

```bash
$ nano test.py
```

Нижняя строка содержит подсказки основных команд (могут быть кликабельны):
* `^G` (`Ctrl/Cmd-G`) — справка.
* `^O` (`Ctrl/Cmd-O`) — сохранить сделанные правки.
* `^X` (`Ctrl/Cmd-X`) — выход (если файл был изменён, предложит сохранить).
* `M-U`/`M-E` (`Alt/Option-U`/`Alt/Option-E`) — undo/redo.
* Навигация — стрелками.

Попробуйте ввести `print("Hello, world!")`, нажать `Ctrl/Cmd-X`, подтвердить сохранение (`y`) и запустить полученный файл: `python3 test.py`.

### Копирование файлов по `scp`/`pscp` (Putty)

Редактировать файлы можно на своём компьютере в своём любимом редакторе, копируя их для исполнения на удалённую машину. Важно соблюдать следующие требования к формату файлов:
* Кодировка `utf-8` (без `BOM`, не `utf-8-sig`).
* Перевод строк через `\n` (`LF`). Не подходят `\r\n` (`CRLF`)

Далее копируем на удалённую машину, заходим, запускаем:
```bash
scp ~/test.py imladris:~
ssh imladris
python3 test.py
```

Для WSL (Windows) путь к локальному файлу на условном рабочем столе будет выглядеть примерно так:
```bash
scp /mnt/c/Users/MyLogin/Desktop/test.py imladris:~
ssh imladris
python3 test.py
```

Putty:
```cmd
cd c:\Users\MyLogin\Desktop
pscp test.py imladris:~
```
(заходим через Putty и так же запускаем: `python3 test.py`)

Более продвинутый вариант синхронизации (через `rsync` будет рассмотрен позже, когда проект разрастётся в более чем один файл).

### Синхронизация через удалённый репозиторий

Можно использовать github (или другой доступный вам репозиторий/систему контроля версий) для переноса правок с машины на машину.

Этот способ требует достаточно большого количества действий (`git commit -a *`/`git push`/`git pop`) и предварительной настройки рабочих копий. В рамках данного курса это кажется избыточным, но для полноты картины и этот способ упомянут. Если вы знаете, что делать и вам так удобно — можно пользоваться.

### VS Code

Благодаря плагину Remote SSH этот редактор позволяет редактировать файлы на удалённой машине практически как на локальной. Он есть под все актуальные операционные системы, но требует некоторой предварительной настройки (как редактора, так и себя).

Здесь мы рассмотрим минимальный «джентльменский набор», который позволит редактировать файлы удалённо.

* https://code.visualstudio.com/ — сайт проекта.
* https://code.visualstudio.com/docs — возможно, слишком подробное getting started.

TODO: минимальные шаги настройки vs code.

0 comments on commit 828e860

Please sign in to comment.