Освоение будущего оценка архитектур данных, создаваемых LLM с применением технологий IaC’.

Оценка будущего развития архитектуры данных, создаваемой LLM с применением IaC-технологий

Оцените пригодность LLM для генерации инфраструктуры в виде кода для предоставления, настройки и развертывания современных приложений

Фото от ZHENYU LUO на Unsplash

Введение

В данной статье мы рассматриваем пригодность LLM для использования в жизненном цикле реальных приложений, начиная с предоставления инфраструктуры до настройки и развертывания. Исходный код, полученный в результате этого усилия, доступен на GitHub¹¹. Решения типа “инфраструктура в виде кода” (Infrastructure as Code, IaC) облегчают управление и предоставление инфраструктуры с помощью кода вместо ручного процесса¹. Они становятся обычными, и ведущие облачные провайдеры разработали свою собственную реализацию решений IaC для взаимодействия со своими сервисами. В этом отношении обеспечение облачных услуг AWS CloudFormation, Google Cloud Deployment Manager и Azure Resource Manager Templates устраняет необходимость в ручном запуске серверов, баз данных и сетей IT-специалистами. Однако эти разнообразные возможности заставляют столкнуться с риском привязанности к поставщику, поскольку определение необходимого IaC для конкретного облачного провайдера не является переносимым и требует перевода, если требуется использование другого облачного провайдера. В этом отношении инструменты, такие как Terraform² или Pulumi³, предоставляют абстракцию над различными реализациями разных облачных провайдеров и упрощают разработку переносимых развертываний. Таким образом, риск привязанности к поставщику существенно снижается, и организации могут динамически реагировать на свои потребности без значительных затрат на внедрение. Дополнительно, технологии IaC предоставляют множество преимуществ⁴:

  • Согласованность: позволяет автоматизировать предоставление инфраструктуры, обеспечивая повторяемость развертываний.
  • Снижение рисков: способствует менее подверженному ошибкам подходу к управлению инфраструктурой, минимизируя ручные вмешательства.
  • Оптимизация затрат: облегчает выявление ненужных ресурсов и более быструю миграцию между облачными провайдерами в ответ на изменение тарификации.
  • Улучшение сотрудничества: сценарии могут быть интегрированы в инструменты контроля версий, способствуя сотрудничеству между отдельными лицами и командами.

Однако жизненный цикл приложения выходит за рамки предоставления инфраструктуры. Ниже показан жизненный цикл приложения, поддерживаемый различными технологиями IaC⁵.

Жизненный цикл приложения, поддерживаемый технологиями Infrastructure as Code. | Источник: Josu Diaz-de-Arcaya et al.⁵

В данном сценарии целью технологий IaC является не только предоставление инфраструктурных ресурсов. После создания необходимой инфраструктуры, стадия настройки управляет установкой всех требуемых компонентов. Обычно для этого используются инструменты, такие как ansible⁶, chef⁷ или puppet⁸. Наконец, развертывание приложения осуществляется оркестрацией приложения на различных устройствах инфраструктуры.

Понимание LLM

Модели большого языка (Large Language Models, LLM) относятся к классу искусственных интеллектуальных моделей, разработанных для понимания и генерации текста, подобного человеческому, на основе введенных данных. Эти модели известны своим значительным количеством параметров, которые позволяют им улавливать сложные языковые образцы и нюансы⁹.

  • Генерация текста: Текст, созданный LLM, может быть связным и соответствующим контексту. Их используют для завершения текстов, создания материала и даже для творческого письма.
  • Понимание языка: LLM способны понимать и извлекать информацию из текста. Они способны анализировать отношение, классифицировать текст и извлекать информацию.
  • Перевод: LLM могут переводить текст с одного языка на другой. Это очень полезно для приложений машинного перевода.
  • Ответы на вопросы: LLM могут отвечать на вопросы на основе заданного контекста. Они используются в чат-ботах и виртуальных помощниках для ответов на запросы пользователей.
  • Сжатие текста: LLM могут кратко излагать длинные тексты в более короткие, более логические резюме. Это полезно для сжатия информации для быстрого усвоения.

Среди вышеупомянутых возможностей мы сосредоточимся на генерации текста. В частности, на его способности создавать правильный код IaC по вводным данным. Большие языковые модели (LLMs) сделали значительные прорывы в области обработки естественного языка, но они также создали несколько вызовов и проблем. Некоторые основные вопросы и проблемы, связанные с LLMs в то время, включают:

  • Предвзятость и справедливость: LLM-модели могут усваивать предвзятость присутствующую в исходных данных, что может привести к предвзятым или несправедливым результатам.
  • Дезинформация и ложная информация: LLMs могут генерировать ложную или вводящую в заблуждение информацию, что может способствовать развитию дезинформации и ложной информации в Интернете. Эти модели имеют потенциал создовать контент, который кажется достоверным, но на самом деле является нефактами.
  • Безопасность и конфиденциальность: LLMs могут злоупотребляться для создания вредоносного контента, такого как глубоко фейковые тексты, фейковые новости или рассылка фишинговых писем.

В следующей таблице приведено сравнение различных LLMs¹⁰:

Генерация IaC с помощью LLMs

Для тестирования работы текущих инструментов LLM в области IaC было разработано использование. Конечная цель – создать API в виртуальной машине с использованием фреймворка FastAPI, которое позволяет клиенту выполнять операции поиска и удаления в кластере Elasticsearch с использованием HTTP-методов. Кластер будет состоять из трех узлов, каждый в своей собственной виртуальной машине, и на другой машине будет установлен Kibana, инструмент администрирования кластера, поддерживающий визуализацию. Все должно находиться в облаке AWS. Следующее изображение показывает эту архитектуру:

use case designed to test the feasibility of llms generated iac

Задача состоит в успешном выполнении следующих трех задач с использованием инструментов LLM. В этой статье мы использовали ChatGPT от OpenAI.

  1. Terraform-код для создания инфраструктуры с пятью виртуальными машинами в AWS.
  2. Исходный код приложения FastAPI для выполнения операций поиска и удаления документов через HTTP-методы API.
  3. Ansible-код для развертывания и установки кластера Elasticsearch на трех узлах, Kibana на другом узле и приложения FastAPI на оставшемся узле.

Задача №1

Для этой задачи мы использовали следующую начальную точку:

Мне нужно создать, с помощью Terraform, пять виртуальных машин в публичном облачном провайдере, который вы выбираете. Целью этих виртуальных машин является следующее: три из них предназначены для развертывания кластера Elasticsearch, который будет принимать по 2 Гб данных каждый день; еще один для Kibana; и последний для развертывания приложения FastAPI. Вы должны выбрать аппаратное обеспечение для каждой виртуальной машины и провайдера облачных ресурсов для каждой виртуальной машины. Для неизвестных вам переменных используйте плейсхолдеры. Используйте дешевые экземпляры.

Первоначальный ответ был хорошей попыткой, но нам нужно было продолжать работу над ним. Например, мы хотели, чтобы все переменные были определены в отдельном файле, что привело к следующему изображению.

Выдержка из кода variables.tf, содержащего переменные, которые требуется настроить.

Аналогично, мы хотели узнать IP-адреса развертывания, и хотели, чтобы эта конфигурация находилась в отдельном файле.

Выдержка из кода output.tf, содержащего IP-адреса только что созданных виртуальных машин.

Искусственный интеллект отлично справился с описанием требуемых нами экземпляров и настройкой их с требуемыми группами безопасности.

Выдержка из кода main.tf, содержащего виртуальные машины для создания.

Также, были созданы необходимые ресурсы для требуемых групп безопасности, и использовались плейсхолдеры для определения различных портов как переменных.

Выдержка из кода main.tf, содержащего группы безопасности для использования.

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

Я хочу получить доступ SSH ко всем виртуальным машинам с моего ноутбука, а для экземпляра Kibana требуется доступ HTTP и HTTPS с моего ноутбука.

Вышеуказанная подсказка создала почти правильный код, поскольку ИИ путался с политиками входа и выхода. Тем не менее, это было легко заметить и исправить.

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

Задача №2

Для этой задачи мы использовали следующую подсказку:

Мне нужно создать приложение FastAPI. Это API должно иметь методы для сохранения одиночного JSON-документа в кластере Elasticsearch, сохранения нескольких документов и удаления их. Кластер Elasticsearch развертывается на 3 узлах и имеет базовую аутентификацию с пользователем “tecnalia” и паролем “iac-llm”.

Результат этой подсказки оказался замечательно успешным. Приложение использует пакет Elasticsearch python¹² для взаимодействия с кластером Elasticsearch и полностью корректно. Мы просто должны помнить, что нам нужно изменить IP-адреса узлов, на которых развернут кластер. На следующей картинке создан первый метод, который предназначен для вставки одного документа в Elasticsearch.

Код метода для сохранения одиночного документа.

Затем второй метод используется для создания массовой вставки нескольких документов одним вызовом.

Код метода для сохранения нескольких документов.

Наконец, последний метод можно использовать для удаления одного документа из кластера Elasticsearch.

Код метода для удаления документа.

Мы считаем, что этот эксперимент был очень успешным, так как он правильно выбирает подходящую библиотеку для выполнения задачи. Однако, требуется дальнейшая ручная настройка кода для превращения его в готовое к производству программное обеспечение.

Задача №3

Для этой задачи мы использовали следующую подсказку:

Сгенерируйте код Ansible для установки кластера Elasticsearch на трех узлах. Пожалуйста, добавьте также узел Kibana, подключенный к кластеру.

Эта подсказка справилась с созданием необходимых скриптов Ansible. Она отлично справилась с организацией исходного кода в различные файлы. Сначала, создана инвентаризация с подробной информацией о всех узлах. Имейте в виду, что этот файл должен быть настроен с правильными IP-адресами, сгенерированными в Задаче №1.

Отрывок кода из inventory.ini

Затем, основной скрипт ansible для установки Elasticsearch отображается на следующей фигуре. Это представляет собой отрывок из него, полный пример можно найти в репозитории¹¹.

Отрывок кода из elasticsearch_playbook.yml

С другой стороны, необходимая конфигурация для каждого из узлов Elasticsearch удобно сгенерирована в виде файла Jinja. В этом случае нам пришлось вручную добавить конфигурации path.logs и path.data, так как Elasticsearch не мог запуститься из-за проблем с разрешениями.

Отрывок кода из elasticsearch.yml.j2

По аналогии, ChatGPT смог сгенерировать аналогичную конфигурацию для экземпляра Kibana. Однако в этом случае мы вручную разделили конфигурацию на отдельный файл для удобства. Отрывок этого файла можно увидеть на следующей картинке.

Отрывок кода из kibana_playbook.yml.

Также, следующий файл jinja, который относится к экземпляру Kibana, кажется хорошим, хотя IP-адреса лучше параметризовать.

Отрывок кода из kibana.yml.j2

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

Выводы

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

Преимущества

  • Использование LLM для поддержки различных этапов жизненного цикла приложения особенно полезно при запуске проекта, особенно в известных технологиях.
  • Исходная структура хорошо структурирована и предоставляет структуры и методологии, которые в противном случае не были бы использованы.

Недостатки

  • LLM подвержены риску пристрастия, связанному с использованием ИИ-решений; в данном случае ChatGPT выбрал AWS вместо подобных вариантов.
  • Отшлифовка проекта до готовности для производства может вызвать проблемы, и иногда проще настраивать код вручную, что требует глубоких знаний используемых технологий.

Благодарности

Эта работа финансируется проектом SIIRSE Elkartek (Надежные, безопасные и этичные интеллектуальные промышленные системы для промышленности 5.0: Передовые парадигмы для спецификации, проектирования, оценки и мониторинга) от правительства Баскской страны (ELKARTEK 2022 KK-2022/00007).

Вклад авторов

Концепция, анализ, исследование и написание – это совместные усилия Хуана Лопеса-де-Арментии, Аны Торре и Горки Зарате.

Ссылки

  1. Что такое Infrastructure as Code (IaC)? (2022). https://www.redhat.com/en/topics/automation/what-is-infrastructure-as-code-iac
  2. Terraform от HashiCorp. (н.д.). Получено 5 октября 2023 года, с https://www.terraform.io
  3. Pulumi — Универсальный Infrastructure as Code. (н.д.). Получено 5 октября 2023 года, с https://www.pulumi.com/
  4. 7 важнейших преимуществ Infrastructure as Code — DevOps. (н.д.). Получено 5 октября 2023 года, с https://duplocloud.com/blog/infrastructure-as-code-benefits/
  5. Diaz-De-Arcaya, J., Lobo, J. L., Alonso, J., Almeida, A., Osaba, E., Benguria, G., Etxaniz, I., & Torre-Bastida, A. I. (2023). IEM: A Unified Lifecycle Orchestrator for Multilingual IaC Deployments ACM Reference Format. https://doi.org/10.1145/3578245.3584938
  6. Ansible is Simple IT Automation. (н.д.). Получено 5 октября 2023 года, с https://www.ansible.com/
  7. Chef Software DevOps Automation Solutions | Chef. (н.д.). Получено 5 октября 2023 года, с https://www.chef.io/
  8. Puppet Infrastructure & IT Automation at Scale | Puppet by Perforce. (н.д.). Получено 5 октября 2023 года, с https://www.puppet.com/
  9. Kerner, S. M. (н.д.). Что такое большие языковые модели? | Определение от TechTarget. Получено 5 октября 2023 года, с https://www.techtarget.com/whatis/definition/large-language-model-LLM
  10. Sha, A. (2023). 12 лучших больших языковых моделей (LLMs) в 2023 году | Beebom. https://beebom.com/best-large-language-models-llms/
  11. Diaz-de-Arcaya, J., Lopez de Armentia, J., & Zarate, G. (н.д.). iac-llms GitHub. Получено 5 октября 2023 года, с https://github.com/josu-arcaya/iac-llms
  12. Elastic Client Library Maintainers. (2023). elasticsearch · PyPI. https://pypi.org/project/elasticsearch/