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

> Работа на GPU-сервере через VS Code Remote SSH, Jupyter на удалённом GPU через SSH-туннель и перенос данных с rsync и scp. Безопасные настройки, шаг за шагом.

Источник: https://fullgpu.com/ru/docs/remote-development  
Обновлено: 2026-10-22  
Издатель: FullGPU (https://fullgpu.com/)

VS Code Remote SSH позволяет работать со своим GPU-сервером так, будто он локальный: редактор работает на вашем ноутбуке, а терминал, интерпретатор Python и GPU — на сервере. На этой странице описана настройка Remote SSH, а затем показано, как запустить Jupyter на удалённом GPU через SSH-туннель, сохранять сессии с помощью tmux и переносить данные с rsync и scp. Предполагается, что у вас есть [запись в конфигурации SSH](https://fullgpu.com/ru/docs/ssh-access) с именем `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](https://fullgpu.com/ru/docs/pytorch-vllm).

> Никогда не запускайте Jupyter с `--ip=0.0.0.0` на публичном IP-адресе и никогда не отключайте его токен или пароль. Любой, кто доберётся до сервера Jupyter, сможет выполнять команды с правами вашего пользователя. Держите его на 127.0.0.1 за туннелем. В Docker публикуйте порт как `-p 127.0.0.1:8888:8888`, потому что опубликованные порты обходят ufw, как объясняется в [руководстве по файрволу](https://fullgpu.com/ru/docs/networking-firewall).

## Сохранение сессий с помощью 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 на одном и укажите другой в качестве цели. Если у вас подключена [частная сеть](https://fullgpu.com/ru/products/private-networking), используйте частный адрес, чтобы передача шла не через публичный интерфейс. Пути в `/data` предполагают, что вы [смонтировали туда NVMe-диски для данных](https://fullgpu.com/ru/docs/storage-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 и токен.

## Связанные страницы

- [Подключение к GPU-серверу по SSH](https://fullgpu.com/ru/docs/ssh-access): Как подключиться к GPU-серверу по SSH: создайте ключ ed25519 (macOS, Linux, Windows), подключитесь, добавьте коллег и отключите вход по паролю. Готовые команды.
- [Инференс LLM на vLLM](https://fullgpu.com/ru/docs/pytorch-vllm): Инференс LLM с vLLM на вашем GPU-сервере: настройте Python через uv, установите PyTorch и vLLM, проверьте OpenAI-совместимый API и запустите его как службу.
- [Монтирование NVMe-дисков в Ubuntu](https://fullgpu.com/ru/docs/storage-nvme): Как смонтировать NVMe-диски в Ubuntu: поиск через lsblk, форматирование и запись в fstab по UUID или NVMe RAID 0 на mdadm. А также проверка состояния и бэкапы.
- [Трафик GPU-сервера и плата за исходящий трафик](https://fullgpu.com/ru/help/bandwidth-and-egress): Трафик GPU-серверов FullGPU: 20 или 50 ТБ исходящего трафика в месяц, входящий не учитывается, платы за исходящий трафик нет. Узнайте, что засчитывается.
