Запуск языковой модели DeepSeek-R1 в кластере GPU Yandex Compute Cloud
Примечание
В регионе Казахстан доступны только платформы standard-v3 (Intel Ice Lake) и standard-v3-t4i (Intel Ice Lake with T4i). Другие типы платформ, кластеры GPU и выделенные хосты недоступны.
С помощью этой инструкции вы создадите кластер GPU из двух виртуальных машин и запустите на нем языковую модель DeepSeek-R1
Чтобы запустить языковую модель в кластере:
- Подготовьте облако к работе.
- Создайте кластер GPU из двух ВМ.
- Проверьте состояние кластера.
- Запустите языковую модель.
- Проверьте работу модели.
Если созданные ресурсы вам больше не нужны, удалите их.
Подготовьте облако к работе
Зарегистрируйтесь в Yandex Cloud и создайте платежный аккаунт:
- Перейдите в консоль управления
, затем войдите в Yandex Cloud или зарегистрируйтесь. - На странице Yandex Cloud Billing
убедитесь, что у вас подключен платежный аккаунт, и он находится в статусеACTIVEилиTRIAL_ACTIVE. Если платежного аккаунта нет, создайте его и привяжите к нему облако.
Если у вас есть активный платежный аккаунт, вы можете создать или выбрать каталог, в котором будет работать ваша инфраструктура, на странице облака
Подробнее об облаках и каталогах.
Убедитесь, что в облаке достаточно квот на суммарное количество кластеров GPU, GPU на платформе Gen2, объем RAM, vCPU и объем SSD-дисков для создания ВМ. Для проверки используйте Yandex Cloud Quota Manager.
Необходимые платные ресурсы
В стоимость поддержки инфраструктуры входит плата за вычислительные ресурсы ВМ и диски, а также кластер GPU (см. тарифы Yandex Compute Cloud).
Создайте кластер GPU из двух ВМ
Создайте кластер GPU
- В консоли управления
выберите каталогдля создания кластера. - Перейдите в сервис Compute Cloud.
- На панели слева выберите
Кластеры GPU. - Нажмите кнопку Создать кластер GPU.
- В поле Имя укажите
test-gpu-cluster. - В поле Зона доступности выберите
kz1-d. - Нажмите Сохранить.
Добавьте ВМ в кластер
-
Создайте первую виртуальную машину:
Консоль управления-
На панели слева выберите
Виртуальные машины и нажмите Создать виртуальную машину. -
В блоке Образ загрузочного диска выберите публичный образ Ubuntu 20.04 LTS Secure Boot CUDA 12.2.
-
В поле Зона доступности выберите
kz1-d. -
В блоке Диски и файловые хранилища выберите тип диска
SSDи задайте размер800 ГБ. -
В блоке Вычислительные ресурсы перейдите на вкладку
Своя конфигурацияи укажите:- Платформа —
Gen2. - GPU —
8. - Кластер GPU — выберите ранее созданный кластер
test-gpu-cluster.
- Платформа —
-
В блоке Доступ выберите SSH-ключ и укажите данные для доступа:
- Логин:
ubuntu. -
В поле SSH-ключ выберите SSH-ключ, сохраненный в вашем профиле пользователя организации.
Если в вашем профиле нет сохраненных SSH-ключей или вы хотите добавить новый ключ:
-
Нажмите кнопку Добавить ключ.
-
Задайте имя SSH-ключа.
-
Выберите вариант:
-
Ввести вручную— вставьте содержимое открытого SSH-ключа. Пару SSH-ключей необходимо создать самостоятельно. -
Загрузить из файла— загрузите открытую часть SSH-ключа. Пару SSH-ключей необходимо создать самостоятельно. -
Сгенерировать ключ— автоматическое создание пары SSH-ключей.При добавлении сгенерированного SSH-ключа будет создан и загружен архив с парой ключей. В ОС на базе Linux или macOS распакуйте архив в папку
/home/<имя_пользователя>/.ssh. В ОС Windows распакуйте архив в папкуC:\Users\<имя_пользователя>/.ssh. Дополнительно вводить открытый ключ в консоли управления не требуется.
-
-
Нажмите кнопку Добавить.
SSH-ключ будет добавлен в ваш профиль пользователя организации. Если в организации отключена возможность добавления пользователями SSH-ключей в свои профили, добавленный открытый SSH-ключ будет сохранен только в профиле пользователя внутри создаваемого ресурса.
-
- Логин:
-
Нажмите Создать ВМ.
-
-
Аналогичным образом создайте вторую ВМ с точно такими же параметрами.
Проверьте состояние кластера (опционально)
Вы можете дополнительно:
- Проверить физическое состояние кластера.
- Запустить параллельные задачи в кластере.
- Проверить пропускную способность InfiniBand.
Запустите языковую модель
-
Подключитесь по SSH к обеим виртуальным машинам.
-
Добавьте пользователя
ubuntuв группуdocker, выполнив на обеих ВМ:sudo groupadd docker sudo usermod -aG docker $USER newgrp docker -
Скачайте образ SGLang на обе машины:
docker pull lmsysorg/sglang:latest -
На первой ВМ выполните команду запуска сервера (замените
<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_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 -
На второй ВМ выполните аналогичную команду, изменив только параметр
--node-rankна1: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 -
Дождитесь появления сообщения об успешном старте:
The server is fired up and ready to roll!.
Проверьте работу языковой модели
-
Откройте новую SSH-сессию к первой ВМ.
-
Установите библиотеку OpenAI:
sudo apt update sudo apt install python3-pip -y 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! 😊
Как удалить созданные ресурсы
Чтобы перестать платить за созданные ресурсы, в сервисе Compute Cloud:
- Удалите созданные виртуальные машины.
- Удалите созданный кластер GPU.