Запуск генеративных LLM с помощью RunPod | Безсерверная платформа

Запуск генеративных LLM с помощью RunPod

Введение

Serverless становится стратегией, изменяющей игру в облачных вычислениях. Разработчики могут полностью сосредоточиться на создании своих приложений, оставив облачным поставщикам заботу о базовой инфраструктуре. Большие языковые модели на основе генеративного искусственного интеллекта способствуют росту Serverless GPU, так как большинство разработчиков не могут запускать их локально из-за высокого использования GPU VRAM этими языковыми моделями. RunPod – одна из таких платформ, которая становится популярной в удаленных службах GPU. RunPod предоставляет доступ к мощным GPU для создания и тестирования приложений с использованием крупных языковых моделей путем предоставления различных вычислительных услуг, таких как экземпляры GPU, Serverless GPU и точки доступа API. Изучайте LLM с помощью RunPod для выполнения ресурсоемких крупных языковых моделей из-за доступной цены и различных возможностей GPU.

Цели обучения

  • Понимание концепции Serverless и преимущества его использования для разработчиков, работающих с LLM
  • Понимание необходимости высокого GPU VRAM для запуска крупных языковых моделей
  • Создание экземпляров GPU в облаке для запуска языковых моделей
  • Изучение способов выделения GPU VRAM на основе размера LLM

Эта статья была опубликована в рамках Data Science Blogathon.

Что такое Serverless?

Serverless – это сервис/метод в облачных платформах, который позволяет получить инфраструктуру по требованию для выполнения наших разработок и развертывания наших приложений. С помощью Serverless можно полностью сконцентрироваться на разработке приложения и оставить облачному провайдеру управление базовой инфраструктурой. Многие облачные платформы, такие как AWS, Azure, GCP и другие, предоставляют такие возможности.

В последнее время набирают популярность Serverless GPU. Serverless GPU – это аренда вычислительной мощности GPU в облаке, когда у вас недостаточно памяти. Эти услуги стали популярными с появлением крупных языковых моделей. Поскольку крупные языковые модели требуют огромного GPU VRAM, эти серверные платформы стали появляться одна за другой, предоставляя лучшие услуги GPU, чем другие, и одной из таких услуг является RunPod.

О RunPod

RunPod – это облачная платформа, предлагающая вычислительные услуги, такие как экземпляры GPU, Serverless GPU и даже точки доступа AI, что позволяет разработчикам машинного обучения и искусственного интеллекта использовать большие GPU для создания приложений с крупными языковыми моделями. Цены, предлагаемые RunPod для экземпляров GPU, гораздо ниже, чем предлагают крупные облачные провайдеры, такие как GCP, Azure и AWS. У RunPod есть широкий выбор GPU от серии RTX 30 до серии 40 и даже серии Nvidia A, которые имеют VRAM больше 40+ ГБ, что позволяет легко запускать модели с 13 миллиардами и 60 миллиардами параметров.

RunPod предлагает услуги GPU двух типов:

  • Сервис общественного облака, когда арендуемые вами GPU принадлежат отдельному лицу и стоят намного дешевле.
  • Сервис безопасного облака, где используемые нами GPU принадлежат самому RunPod и стоят немного дороже, чем общественное облако. Сервис безопасного облака более подходит, когда нам нужно объединить большое количество GPU для обучения очень крупных языковых моделей.

Кроме того, RunPod предоставляет как Spot, так и On-Demand экземпляры. Spot-экземпляры могут быть прерваны в любое время при использовании и, следовательно, очень дешевы, в то время как On-Demand экземпляры не могут быть прерваны. В этой статье мы рассмотрим RunPod и настроим экземпляр GPU для запуска веб-интерфейса генерации текста, где мы загрузим крупную языковую модель из Hugging Face и пообщаемся с ней.

Настройка учетной записи RunPod

Во-первых, мы начнем с настройки учетной записи RunPod, для этого нажмите здесь, что перенаправит вас на главный экран RunPod, где вы увидите следующее изображение. Затем нажмите на кнопку регистрации

После регистрации нам нужно пополнить счет, чтобы начать использовать экземпляры Cloud GPU. Мы можем начать с минимального пополнения в размере 10 долларов и это можно сделать с помощью дебетовой или кредитной карты. Чтобы купить кредиты, вам нужно нажать на раздел платежей слева

Здесь я купил 10 долларов, то есть мой доступный баланс составляет 10 долларов. И это только одноразовый платеж. Мои Pods автоматически выключатся, когда доступный баланс достигнет 0 долларов. У RunPod есть автоматические варианты оплаты, но мы рассмотрим настройку одноразового платежа, так как нам не нужно беспокоиться о снятии денег.

GPU-инстансы

Здесь, когда мы нажимаем на Community Cloud слева, мы видим, что в нем перечислены все доступные графические процессоры (GPU), их характеристики и стоимость. Security Cloud также предлагает то же самое, но единственное отличие заключается в том, что GPU в Security Cloud поддерживаются командой RunPod, а GPU в Community Cloud принадлежат сообществу, т.е. людям со всего мира.

Шаблоны

На приведенном выше изображении видны доступные заранее определенные шаблоны. Мы можем запустить GPU-инстанс всего за несколько минут с помощью этих шаблонов. Многие шаблоны, например, шаблон Stable Diffusion, позволяют запускать GPU-инстанс с устойчивой диффузией для генерации изображений. Шаблон RunPod VS Code позволяет писать и использовать GPU с GPU-инстанса.

Шаблон PyTorch разных версий, где GPU-инстанс уже содержит последнюю версию библиотеки PyTorch, которую мы можем использовать для создания моделей машинного обучения. Мы также можем создавать собственные шаблоны, которыми мы можем поделиться с другими пользователями, чтобы они могли создать GPU-инстанс с использованием того же шаблона.

Запуск LLM с помощью RunPod

В этом разделе будет создан GPU-инстанс и установлено приложение Oobabooga для генерации текста с использованием моделей из hugging face, как в исходной версии float16, так и в квантованной форме. Для этого мы выберем GPU-инстанс Nvidia A5000 с объемом памяти VRAM 24 ГБ, что, возможно, будет достаточно для нашего приложения. Так что я выбираю A5000 и нажимаю “Развернуть”.

Шаблон PyTorch

Затем, так как для работы с большими языковыми моделями требуется PyTorch, мы выбрали шаблон PyTorch. При создании инстанса из этого шаблона, он будет загружен с библиотеками PyTorch. Но для этого инстанса мы будем вносить некоторые изменения. Поэтому мы нажимаем на “Пользовательская настройка”.

Здесь мы назначим объем диска контейнера 75 ГБ, чтобы в случае загрузки большой языковой модели она поместилась. И в этом случае я не хочу хранить данные для дальнейшего использования. Поэтому объем диска устанавливаем в ноль. Когда это значение установлено на ноль, мы потеряем всю информацию при удалении GPU-инстанса, и в этом примере я согласен с этим. И приложению, которое мы запускаем, понадобится доступ к порту 7860. Поэтому мы открываем порт 7860. И, наконец, мы нажимаем “Переопределить”.

Переопределение

После нажатия на “Переопределить”, мы можем увидеть ориентировочную стоимость GPU-инстанса в час на изображении ниже. Так что GPU с объемом памяти VRAM 24 ГБ, 29 ГБ оперативной памяти и 8 виртуальными ядрами будет стоить около 0,45 доллара в час, что очень дешево по сравнению с предложениями многих больших облачных провайдеров. Теперь мы нажимаем на кнопку “Развернуть”.

После нажатия кнопки “Развернуть” выше будет создан инстанс в течение нескольких секунд. Теперь мы можем подключиться к этому GPU-инстансу через SSH с помощью кнопки “Подключиться”, показанной на приведенном выше изображении. После нажатия кнопки “Подключиться” появится всплывающее окно, где мы нажимаем “Запустить веб-терминал” и затем “Подключиться к веб-терминалу”, как показано на приведенном ниже изображении, чтобы получить доступ к нашему GPU-инстансу.

Теперь появится новая вкладка в веб-браузере, к которой мы можем получить доступ. Теперь в веб-терминале наберите нижеуказанные команды, чтобы загрузить text-generation-web-ui, позволяющий нам загружать любую большую языковую модель из HuggingFace и использовать ее для вывода.

git clone https://github.com/oobabooga/text-generation-webui
cd text-generation-webui
pip install -r requirements.txt

Text Generation Webui

Теперь первая команда извлечет репозиторий GitHub text-generation-webui, который содержит код Python для использования больших языковых моделей локально. Следующие две строки перейдут в каталог и установят все необходимые библиотеки для запуска программы на Python. Чтобы запустить веб-интерфейс, используйте следующий код

python server.py --share

Вышеуказанная команда запустит веб-интерфейс. Это запустит веб-интерфейс на localhost. Но так как мы запускаем приложение на удаленном экземпляре GPU, нам нужно использовать общедоступный URL для доступа к сайту. Параметр –share создаст общедоступный URL, на который мы можем нажать, чтобы получить доступ к text-generation-web-ui.

Нажмите на ссылку gradio.live, как показано на предыдущем изображении, чтобы получить доступ к интерфейсу пользователя. В этом интерфейсе перейдите в раздел Model в верхнем меню. Здесь на следующем изображении мы видим, что справа нам нужно предоставить ссылку на модель, которую мы хотим использовать.

WizardLM 30B

Для этого перейдите на Hugging Face к модели с именем WizardLM 30B, модели с 30 миллиардами параметров. Мы нажмем кнопку копирования, чтобы скопировать ссылку на эту модель, а затем вставим ее в интерфейс пользователя, а затем нажмем кнопку загрузки, чтобы загрузить модель.

Выбор пользовательского интерфейса

После загрузки большой языковой модели мы можем выбрать ее в левой части интерфейса пользователя в разделе Model. Нажмите кнопку обновления рядом с ней, если вы не можете найти загруженную модель. Затем выберите только что загруженную модель. Модель, которую мы загрузили, является моделью объемом 16 ГБ. Чтобы полностью запустить модель на GPU, выделите ей около 20 ГБ VRAM. Затем нажмите кнопку загрузки. Это загрузит модель на GPU, и вы увидите сообщение об успешной загрузке в правой части интерфейса пользователя.

Написать стихотворение

Теперь большая языковая модель загружена на GPU, и мы можем использовать ее. Перейдите в раздел Notebook в интерфейсе пользователя, нажав на Notebook в верхнем меню. Здесь я тестирую модель, попросив ее написать стихотворение о солнце, сказав “Напишите стихотворение о Солнце”, а затем нажмите кнопку Generate. Будет сгенерировано следующее:

Выше показано, что модель сгенерировала стихотворение на основе нашего запроса. Самая лучшая часть здесь заключается в том, что стихотворение связано с Солнцем. Большинство больших языковых моделей пытаются отклониться от исходного запроса, но здесь наша большая языковая модель WizardLM сохраняет связь с запросом до конца. Вместо простого генерирования текста мы также можем общаться с моделью. Для этого переходим в раздел “Чат”, нажимая “Чат” в верхней части пользовательского интерфейса. Здесь давайте зададим модели несколько вопросов.

Здесь мы попросили модель предоставить информацию о Второй мировой войне в виде маркеров. Модель успешно ответила на наш запрос чат-сообщением, которое было связано с запросом. Модель также представила информацию в виде маркеров, как было запрошено в чат-сообщении. Таким образом, мы можем загружать любую открытую крупную языковую модель и использовать ее через пользовательский интерфейс на этом созданном нами экземпляре GPU.

Заключение

В этой статье мы рассмотрели облачную платформу под названием RunPod, которая предоставляет услуги GPU Serverless. Пошагово мы увидели, как создать учетную запись в RunPod, а затем создать экземпляр GPU внутри него. Наконец, в экземпляре GPU мы увидели процесс запуска интерфейса генерации текста, который позволяет загружать открытую крупную языковую модель и использовать ее.

Основные выводы

Некоторые из основных выводов из этой статьи:

  • RunPod – это облачная платформа, предлагающая услуги GPU.
  • RunPod предлагает свои услуги двумя способами. Одним из них являются общедоступные облачные услуги, где арендуемые нами GPU принадлежат отдельному лицу и являются более дешевыми, а другим являются защищенные облачные услуги, где любой созданный нами экземпляр GPU принадлежит GPU RunPod.
  • RunPod поставляется с шаблонами, содержащими некоторый исходный код, который мы можем использовать, то есть экземпляры GPU, созданные с помощью этих шаблонов, будут готовы с установленными библиотеками/программным обеспечением.
  • RunPod предлагает как автоматические, так и разовые платежные услуги.

Часто задаваемые вопросы

Медиа, показанное в этой статье, не принадлежит Analytics Vidhya и используется по усмотрению автора.