Запуск языковой модели DeepSeek-R1 в кластере GPU Yandex Compute Cloud
Примечание
Кластеры GPU сейчас доступны только в зонах доступности ru-central1-a
и ru-central1-d
. Добавить ВМ в кластер GPU можно только из той же зоны доступности.
С помощью этой инструкции вы создадите кластер GPU из двух виртуальных машин и запустите в кластере языковую модель DeepSeek-R1
Чтобы запустить языковую модель в кластере GPU:
- Подготовьте облако к работе.
- Создайте кластер GPU из двух ВМ.
- Проверьте состояние кластера.
- Запустите языковую модель.
- Проверьте работу языковой модели.
Если созданные ресурсы вам больше не нужны, удалите их.
Подготовьте облако к работе
Зарегистрируйтесь в Yandex Cloud и создайте платежный аккаунт:
- Перейдите в консоль управления
, затем войдите в Yandex Cloud или зарегистрируйтесь. - На странице Yandex Cloud Billing
убедитесь, что у вас подключен платежный аккаунт, и он находится в статусеACTIVE
илиTRIAL_ACTIVE
. Если платежного аккаунта нет, создайте его и привяжите к нему облако.
Если у вас есть активный платежный аккаунт, вы можете создать или выбрать каталог, в котором будет работать ваша инфраструктура, на странице облака
Подробнее об облаках и каталогах.
Необходимые платные ресурсы
В стоимость поддержки инфраструктуры входят:
- плата за постоянно работающие ВМ и диски (см. тарифы Yandex Compute Cloud).
Создайте кластер GPU из двух ВМ
Создайте кластер GPU
- В консоли управления
выберите каталог, в котором будет создан кластер. - В списке сервисов выберите Compute Cloud.
- На панели слева выберите
Кластеры GPU. - Нажмите кнопку Создать кластер GPU.
- В поле Имя задайте имя кластера:
test-gpu-cluster
. - В поле Зона доступности выберите зону доступности
ru-central1-d
. - Нажмите Сохранить.
Добавьте две ВМ в кластер
-
Создайте первую ВМ:
Консоль управления-
На панели слева выберите
Виртуальные машины. -
Нажмите кнопку Создать виртуальную машину.
-
В блоке Образ загрузочного диска выберите публичный образ Ubuntu 20.04 LTS Secure Boot CUDA 12.2.
-
В поле Зона доступности выберите зону доступности
ru-central1-d
. -
В блоке Диски и файловые хранилища выберите тип диска
SSD
и задайте размер800 ГБ
. -
В блоке Вычислительные ресурсы перейдите на вкладку
Своя конфигурация
и укажите необходимую платформу, количество GPU и кластер:- Платформа —
AMD Epyc 9474F with Gen2
. - GPU —
8
. - Кластер GPU — выберите ранее созданный кластер
test-gpu-cluster
.
- Платформа —
-
В блоке Доступ выберите вариант SSH-ключ и укажите данные для доступа на ВМ:
- В поле Логин введите имя пользователя, например:
ubuntu
. Не используйте имяroot
или другие имена, зарезервированные ОС. Для выполнения операций, требующих прав суперпользователя, используйте командуsudo
. -
В поле SSH-ключ выберите SSH-ключ, сохраненный в вашем профиле пользователя организации.
Если в вашем профиле нет сохраненных SSH-ключей или вы хотите добавить новый ключ:
- Нажмите кнопку Добавить ключ.
- Задайте имя SSH-ключа.
- Загрузите или вставьте содержимое открытого SSH-ключа. Пару SSH-ключей для подключения к ВМ по SSH необходимо создать самостоятельно.
- Нажмите кнопку Добавить.
SSH-ключ будет добавлен в ваш профиль пользователя организации.
Если в организации отключена возможность добавления пользователями SSH-ключей в свои профили, добавленный открытый SSH-ключ будет сохранен только в профиле пользователя создаваемой виртуальной машины.
- В поле Логин введите имя пользователя, например:
-
Нажмите Создать ВМ.
-
-
Аналогично создайте вторую ВМ.
Проверьте состояние кластера
Опционально вы можете:
- Проверить физическое состояние кластера;
- Запустить параллельные задачи в кластере;
- Проверить пропускную способность InfiniBand.
Запустите языковую модель
-
Подключитесь по протоколу SSH к обеим ВМ.
-
Добавьте текущего пользователя в группу
docker
:sudo groupadd docker sudo usermod -aG docker $USER newgrp docker
-
На обе виртуальные машины скачайте образ
SGLang
:docker pull lmsysorg/sglang:latest
-
Выполните на первой ВМ команду:
docker run --gpus all --device=/dev/infiniband --ulimit memlock=-1 --ulimit stack=67108864 --shm-size 32g --network=host -v ~/.cache/huggingface:/root/.cache/huggingface --name sglang_multinode1 -e GLOO_SOCKET_IFNAME=eth0 -it --rm --ipc=host lmsysorg/sglang:latest python3 -m sglang.launch_server --model-path deepseek-ai/DeepSeek-R1 --tp 16 --nccl-init-addr <IP_адрес_1>:30000 --nnodes 2 --node-rank 0 --trust-remote-code --host 0.0.0.0 --port 30001 --disable-radix --max-prefill-tokens 126000
Где
IP_адрес_1
— внутренний IP-адрес первой ВМ. -
Выполните на второй ВМ команду:
docker run --gpus all --device=/dev/infiniband --ulimit memlock=-1 --ulimit stack=67108864 --shm-size 32g --network=host -v ~/.cache/huggingface:/root/.cache/huggingface --name sglang_multinode2 -e GLOO_SOCKET_IFNAME=eth0 -it --rm --ipc=host lmsysorg/sglang:latest python3 -m sglang.launch_server --model-path deepseek-ai/DeepSeek-R1 --tp 16 --nccl-init-addr <IP_адрес_1>:30000 --nnodes 2 --node-rank 1 --trust-remote-code --host 0.0.0.0 --port 30001 --disable-radix --max-prefill-tokens 126000
Где
IP_адрес_1
— внутренний IP-адрес первой ВМ. -
Подождите, пока сервер запустится:
The server is fired up and ready to roll!
Проверьте работу языковой модели
-
Подключитесь по протоколу SSH в новой сессии к первой ВМ.
-
Установите пакет
openai
:sudo apt update sudo apt install python3-pip pip install openai
-
Создайте скрипт
test_model.py
со следующим содержимым:import openai client = openai.Client( base_url="http://127.0.0.1:30001/v1", api_key="EMPTY") response = client.chat.completions.create( model="default", messages=[ {"role": "system", "content": "You are a helpful AI assistant"}, {"role": "user", "content": "List 3 countries and their capitals."}, ], temperature=0.3, max_tokens=1024, ) print(response.choices[0].message.content)
-
Запустите скрипт:
python3 test_model.py
Пример ответа модели:
Here are three countries and their capitals: 1. **France** - Paris 2. **Japan** - Tokyo 3. **Brazil** - Brasília Let me know if you'd like more examples! 😊
Как удалить созданные ресурсы
Чтобы перестать платить за созданные ресурсы: