Начало работы

VS Code Remote SSH и Jupyter на GPU-сервере

Редактируйте, запускайте и отлаживайте код на GPU сервера прямо с ноутбука, оставляйте блокноты Jupyter доступными только через SSH и эффективно переносите датасеты.

На этой странице
  1. Подключение VS Code через Remote-SSH
  2. Запуск JupyterLab через SSH-туннель
  3. Сохранение сессий с помощью tmux
  4. Перенос данных с помощью rsync и scp
  5. Устранение неполадок

VS Code Remote SSH позволяет работать со своим GPU-сервером так, будто он локальный: редактор работает на вашем ноутбуке, а терминал, интерпретатор Python и GPU — на сервере. На этой странице описана настройка Remote SSH, а затем показано, как запустить Jupyter на удалённом GPU через SSH-туннель, сохранять сессии с помощью tmux и переносить данные с rsync и scp. Предполагается, что у вас есть запись в конфигурации SSH с именем gpu1.

Подключение VS Code через Remote-SSH

  1. Установите в VS Code расширение Remote - SSH от Microsoft.
  2. Откройте палитру команд (F1), выполните Remote-SSH: Connect to Host... и выберите gpu1. Хосты из вашего ~/.ssh/config отображаются в списке.
  3. При первом подключении VS Code устанавливает свой серверный компонент в ~/.vscode-server на GPU-сервере. Это занимает около минуты.
  4. Откройте папку на сервере через File > Open Folder, например /data/projects.
  5. Установите расширения Python и Jupyter на удалённой стороне: в панели Extensions у них есть кнопка Install in SSH: gpu1.

Для проверки откройте терминал в VS Code и выполните nvidia-smi. Вы должны увидеть GPU сервера, а в левом нижнем углу — SSH: gpu1. Выберите виртуальное окружение своего проекта командой Python: Select Interpreter. VS Code также умеет открывать блокноты .ipynb прямо через это подключение, без туннеля.

Процессы, запущенные в терминале VS Code, зависят от подключения VS Code. Запускайте обучение внутри tmux, как показано ниже, чтобы оно не прервалось, когда ноутбук уйдёт в спящий режим.

Запуск JupyterLab через SSH-туннель

  1. На сервере создайте окружение и установите JupyterLab:
    sudo apt install -y python3-venv
    python3 -m venv ~/venvs/lab
    source ~/venvs/lab/bin/activate
    pip install jupyterlab
  2. Запустите его внутри tmux так, чтобы он слушал только loopback-интерфейс:
    tmux new -s lab
    source ~/venvs/lab/bin/activate
    jupyter lab --no-browser --ip=127.0.0.1 --port=8888
    JupyterLab выведет URL с токеном, например http://127.0.0.1:8888/lab?token=.... Отключитесь от сессии: Ctrl+B, затем D.
  3. На ноутбуке откройте туннель и не закрывайте его:
    ssh -N -L 8888:127.0.0.1:8888 gpu1
  4. Вставьте в браузер полный URL вместе с токеном.

Для проверки откройте Terminal из панели запуска JupyterLab и выполните nvidia-smi: вы должны увидеть GPU сервера. Установите свой фреймворк в то же окружение, чтобы его можно было импортировать в блокнотах; установка описана в руководстве по PyTorch и vLLM.

Никогда не запускайте Jupyter с --ip=0.0.0.0 на публичном IP-адресе и никогда не отключайте его токен или пароль. Любой, кто доберётся до сервера Jupyter, сможет выполнять команды с правами вашего пользователя. Держите его на 127.0.0.1 за туннелем. В Docker публикуйте порт как -p 127.0.0.1:8888:8888, потому что опубликованные порты обходят ufw, как объясняется в руководстве по файрволу.

Сохранение сессий с помощью tmux

Благодаря tmux командные оболочки и их процессы продолжают работать на сервере после того, как вы отключились. Если tmux не установлен, установите его командой sudo apt install -y tmux. Команды, которые понадобятся чаще всего:

ДействиеКоманда или клавиши
Новая именованная сессияtmux new -s train
Отключение от сессииCtrl+B, затем D
Список сессийtmux ls
Возврат в сессиюtmux attach -t train
Новое окно, следующее окноCtrl+B, затем C; Ctrl+B, затем N
Прокрутка назадCtrl+B, затем [ (выход — Q)
Завершение сессииtmux kill-session -t train

Сессии сохраняются при обрыве соединения, но не при перезагрузке. Дублируйте вывод обучения в файл, например python3 train.py 2>&1 | tee train.log, чтобы прочитать его позже.

Перенос данных с помощью rsync и scp

rsync копирует только изменения и продолжает прерванные передачи, что важно для датасетов и чекпоинтов. Он должен быть установлен с обеих сторон: в Ubuntu — sudo apt install -y rsync, а в Windows используйте WSL или scp.

# upload a dataset (the trailing slash copies the folder's contents)
rsync -avP ./dataset/ gpu1:/data/dataset/

# download checkpoints
rsync -avP gpu1:/data/checkpoints/run-01/ ./run-01/

# preview a mirror before running it for real
rsync -avP --delete --dry-run ./code/ gpu1:/data/projects/code/

-a сохраняет права доступа и временные метки, -v выводит список файлов, а -P показывает прогресс и сохраняет частично переданные файлы, чтобы повторный запуск продолжил передачу. --delete удаляет в месте назначения файлы, которых нет в источнике, поэтому сначала попробуйте его с --dry-run. Для одного файла достаточно scp:

scp model.safetensors gpu1:/data/models/
scp gpu1:/data/results/metrics.csv .

Чтобы перенести данные между двумя своими серверами, запустите rsync на одном и укажите другой в качестве цели. Если у вас подключена частная сеть, используйте частный адрес, чтобы передача шла не через публичный интерфейс. Пути в /data предполагают, что вы смонтировали туда NVMe-диски для данных.

Устранение неполадок

  • VS Code не подключается, хотя ssh gpu1 работает. Выполните Remote-SSH: Kill VS Code Server on Host... и подключитесь снова. Установка также не удаётся, если домашний каталог заполнен; проверьте его командой df -h ~.
  • bind: Address already in use при открытии туннеля. Порт 8888 на вашем ноутбуке занят другой программой. Выберите другой локальный порт, например -L 8890:127.0.0.1:8888, и откройте в браузере порт 8890.
  • Jupyter не принимает токен. Активируйте окружение и выполните на сервере jupyter server list: команда выведет текущий URL и токен.

Не получается?

Создайте тикет в личном кабинете: укажите сервер, что вы запускали, и приложите вывод ошибок, если он есть. Инженеры отвечают круглосуточно.

Создать тикет

Вход в FullGPU

Управляйте GPU-серверами, балансом и счетами.

Впервые в FullGPU? Создать аккаунт