|
|
# 🚀 Гайд по созданию SSH-ключей и конфигов для DeepSpeed
|
|
|
|
|
|
Этот гайд помогает настроить SSH между двумя узлами для запуска DeepSpeed в Docker-контейнерах. Все шаги повторяются на обеих машинах (`mlnode1` и `mlnode2`).
|
|
|
|
|
|
---
|
|
|
|
|
|
## 1️⃣ Создаем папки для SSH
|
|
|
|
|
|
Перейдите в директорию вашего проекта (например, `deepspeed`) и создайте структуру для хранения ключей и конфигов:
|
|
|
|
|
|
```bash
|
|
|
cd /media/Data1/common/docker/deepspeed
|
|
|
mkdir -p ssh_docker/keys
|
|
|
```
|
|
|
|
|
|
---
|
|
|
|
|
|
## 2️⃣ Генерируем SSH-ключи
|
|
|
|
|
|
Создаем ключ по алгоритму `ed25519` с названием `deepspeed` и сохраняем его в `ssh_docker/keys`.
|
|
|
|
|
|
```bash
|
|
|
ssh-keygen -t ed25519 -f ssh_docker/keys/deepspeed -N ""
|
|
|
```
|
|
|
|
|
|
---
|
|
|
|
|
|
## 3️⃣ Создаем SSH config
|
|
|
|
|
|
Создаем файл `ssh_docker/config` и записываем туда конфигурацию для ваших узлов.
|
|
|
**Пример:**
|
|
|
|
|
|
```bash
|
|
|
cat > ssh_docker/config << EOF
|
|
|
Host mlnode1_ds
|
|
|
HostName 172.16.45.5
|
|
|
User root
|
|
|
Port 2229
|
|
|
IdentityFile ~/.ssh/keys/deepspeed
|
|
|
StrictHostKeyChecking no
|
|
|
|
|
|
Host mlnode2_ds
|
|
|
HostName 172.16.45.3
|
|
|
User root
|
|
|
Port 2229
|
|
|
IdentityFile ~/.ssh/keys/deepspeed
|
|
|
StrictHostKeyChecking no
|
|
|
EOF
|
|
|
```
|
|
|
|
|
|
|
|
|
* `HostName` — IP-адрес интерфейса, по которому будет идти соединение. Узнать его можно через:
|
|
|
|
|
|
```bash
|
|
|
ip a
|
|
|
```
|
|
|
|
|
|
* `Port` — порт, который вы указывали в `Dockerfile` для SSH (например `2229`).
|
|
|
|
|
|
---
|
|
|
|
|
|
## 4️⃣ Аналогично на второй машине
|
|
|
|
|
|
Повторите шаги **1-3** на второй машине.
|
|
|
Убедитесь, что IP-адреса в `HostName` соответствуют интерфейсам для связи между нодами.
|
|
|
|
|
|
---
|
|
|
|
|
|
## 5️⃣ Обмениваемся публичными ключами
|
|
|
|
|
|
Создайте на обеих машинах файл `ssh_docker/authorized_keys` и добавьте туда публичный ключ второй машины.
|
|
|
|
|
|
* На `mlnode1` добавьте публичный ключ `mlnode2`:
|
|
|
|
|
|
* На `mlnode2` добавьте публичный ключ `mlnode1`:
|
|
|
|
|
|
```bash
|
|
|
cat ssh_docker/keys/deepspeed.pub
|
|
|
```
|
|
|
|
|
|
Для обмена можно использовать `scp` или просто скопировать содержимое `deepspeed.pub` вручную.
|
|
|
|
|
|
---
|
|
|
|
|
|
## 6️⃣ Выставляем права и владельца
|
|
|
|
|
|
Чтобы SSH корректно работал, выставим права на папку и файлы:
|
|
|
|
|
|
```bash
|
|
|
sudo chmod 700 ssh_docker
|
|
|
sudo chmod 700 ssh_docker/keys
|
|
|
sudo chmod 600 ssh_docker/keys/deepspeed
|
|
|
sudo chmod 644 ssh_docker/keys/deepspeed.pub
|
|
|
sudo chmod 644 ssh_docker/config
|
|
|
sudo chmod 600 ssh_docker/authorized_keys
|
|
|
sudo chown -R root:root ssh_docker
|
|
|
```
|
|
|
|
|
|
---
|
|
|
|
|
|
## 7️⃣ Использование в Docker
|
|
|
|
|
|
Эту папку можно монтировать в контейнер как volume для использования SSH.
|
|
|
Например:
|
|
|
|
|
|
```yaml
|
|
|
volumes:
|
|
|
- /media/Data1/common/docker/deepspeed/ssh_docker:/root/.ssh
|
|
|
```
|
|
|
|
|
|
---
|
|
|
|