Начинающий гид по LLMOps для машинного обучения инженеров

Подробный руководитель для начинающих по LLMOps для инженеров машинного обучения

Введение

Выход ChatGPT от OpenAI вызвал огромный интерес к большим языковым моделям (LLM), и теперь все говорят о искусственном интеллекте. Но это не просто дружеские разговоры; сообщество машинного обучения (ML) представило новый термин – LLMOps. Мы все слышали о MLOps, но что такое LLMOps? Все дело в том, как мы обращаемся и управляем этими мощными языковыми моделями на протяжении их жизненного цикла.

LLM преобразуют способ, которым мы создаем и поддерживаем продукты, основанные на искусственном интеллекте, и это изменение приводит к необходимости использования новых инструментов и лучших практик. В этой статье мы рассмотрим основы LLMOps и его историю. Мы также рассмотрим различия между созданием продуктов искусственного интеллекта с использованием LLM и традиционных моделей машинного обучения. Плюс, мы рассмотрим, в чем разница между MLOps (операционными процессами машинного обучения) и LLMOps из-за этих различий. Наконец, мы обсудим, какие захватывающие разработки мы можем ожидать в мире пространства LLMOps в ближайшее время.

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

  • Усвоить основы LLMOps и его развитие.
  • Научиться создавать модель с использованием LLMOps на примерах.
  • Познакомиться с различиями между LLMOps и MLOps.
  • Взглянуть в будущее пространства LLMOps.

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

Что такое LLMOps?

LLMOps – это аббревиатура от Large Language Model Operations, аналогичная MLOps, но специально разработанная для больших языковых моделей (LLM). Это требует использования новых инструментов и лучших практик для обработки всего, что связано с применением LLM в приложениях, от разработки до развертывания и последующего обслуживания.

Чтобы лучше понять это, давайте разберем, что означают LLM и MLOps:

  • LLM – это большие языковые модели, способные генерировать человеческий язык. Они содержат миллиарды параметров и обучаются на миллиардах текстовых данных.
  • MLOps (операционные процессы машинного обучения) – это набор инструментов и практик, используемых для управления жизненным циклом приложений, основанных на машинном обучении.

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

Что такое горячая тема вокруг LLMOps?

Во-первых, LLM, такие как BERT и GPT-2, существуют с 2018 года. Однако только сейчас, почти через пять лет, мы сталкиваемся с всплеском идеи LLMOps. Основная причина в том, что LLM привлекли много внимания со стороны СМИ с выпуском ChatGPT в декабре 2022 года.

С тех пор мы видим множество различных типов приложений, использующих мощность LLM. Это включает чат-ботов, начиная от привычных примеров, таких как ChatGPT, до более персональных помощников по написанию текстов для редактирования или суммирования (например, Notion AI) и умных помощников по написанию рекламных текстов (например, Jasper и copy.ai). Кроме того, сюда входят помощники по программированию для написания и отладки кода (например, GitHub Copilot), тестирования кода (например, Codium AI) и выявления проблем безопасности (например, Socket AI).

Поскольку множество людей разрабатывает и запускает LLM-приложения в производственную среду, они делятся своими опытами.

“С LLM легко создать что-то крутое, но очень сложно создать с ними готовое к производству.” – Чип Хьюэн

Ясно, что создание готовых к производству приложений, работающих на LLM, сопряжено со своим набором трудностей, отличающихся от создания продуктов искусственного интеллекта с использованием классических моделей машинного обучения. Мы должны разрабатывать новые инструменты и лучшие практики, чтобы справиться с этими вызовами и управлять жизненным циклом применения LLM. Таким образом, мы видим расширение использования термина “LLMOps”.

Какие шаги включает LLMOps?

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

Более года назад Андрей Карпати рассказал, как изменится процесс создания продуктов искусственного интеллекта в будущем:

«Но самая важная тенденция заключается в том, что процесс обучения нейронной сети с нуля для какой-то конкретной задачи быстро устаревает из-за донастройки, особенно с появлением базовых моделей, таких как GPT. Эти базовые модели обучаются только несколькими институтами, обладающими значительными вычислительными ресурсами, и большинство приложений достигается путем легкой донастройки части сети, инжиниринга подсказок или необязательного этапа обработки данных или моделей в более маленькие, специальные сети вывода.» – Андрей Карпати.

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

Шаг 1: Выбор базовой модели

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

Чтобы поставить это в перспективу, согласно исследованию от Lambda Labs в 2020 году, для обучения OpenAI’s GPT-3 (с 175 миллиардами параметров) потребовалось бы 355 лет и $4.6 миллиона с использованием облачного инстанса Tesla V100.

Искусственный интеллект в настоящее время проходит то, что сообщество называет его «Linux Moment». В настоящее время разработчикам приходится выбирать между двумя типами базовых моделей, исходя из обмена между производительностью, стоимостью, простотой использования и гибкостью собственных моделей или моделей с открытым исходным кодом.

Эксклюзивные или собственные модели – это модели базового уровня с закрытым исходным кодом, принадлежащие компаниям с большими экспертными командами и большими бюджетами по искусственному интеллекту. Они обычно больше по размеру, чем модели с открытым исходным кодом, и имеют лучшую производительность. Их также можно купить и в целом они довольно легко использовать. Основным недостатком собственных моделей являются дорогостоящие API (интерфейсы программирования приложений). Кроме того, модели базового уровня с закрытым исходным кодом предлагают меньше или не предлагают гибкости для адаптации разработчикам.

Примеры поставщиков собственных моделей:

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

Примеры моделей с открытым исходным кодом:

Код:

Этот шаг включает импортирование всех необходимых библиотек.

from transformers import GPT2LMHeadModel, GPT2Tokenizer# Можете ли вы загрузить предварительно обученную модель GPT-3 и токенизаторtokenizer = GPT2Tokenizer.from_pretrained("gpt2")model = GPT2LMHeadModel.from_pretrained("gpt2")

Результат выполнения приведенного кода:

Шаг 2: Приспособление к следующим задачам

После того, как вы выбрали базовую модель, вы можете получить доступ к LLM через его API. Если вы обычно работаете с другими API, работа с LLM API может показаться немного странной, потому что не всегда понятно, какой ввод приведет к какому выводу. При заданном текстовом приглашении API вернет текстовое завершение, пытаясь соответствовать вашему шаблону.

Вот пример того, как вы можете использовать OpenAI API. Вы даете API ввод в качестве приглашения, например, приглашение = “Исправьте на правильный английский:\n\nОн никуда не пошел на рынок.”

import openaiopenai.api_key = ...response = openai.Completion.create(  engine = "text-davinci-003",    prompt = "Исправьте на правильный английский:\n\nОн никуда не пошел на рынок.",  # ...   )

API выдаст ответ, содержащий завершение response[‘choices’][0][‘text’] = “Он не пошел на рынок.”

Главной проблемой является то, что LLM не всемогущи, несмотря на свою мощность, и поэтому главный вопрос состоит в том, как заставить LLM выдавать нужный вам вывод?

Один из основных вопросов, о котором сообщали респонденты в опросе о LLM в процессе разработки, была точность модели и галлюцинации. Это означает, что для того, чтобы получить вывод от LLM API в нужном формате, может потребоваться несколько итераций, и LLM могут приводить в заблуждение, если у них нет необходимых специфических знаний. Чтобы справиться с этими проблемами, вы можете адаптировать базовые модели для следующих задач следующими способами:

  • Prompt engineering — это методика улучшения входных данных, чтобы вывод соответствовал вашим ожиданиям. Вы можете использовать разные хитрости для улучшения вашего приглашения (см. OpenAI Cookbook). Один из способов — предоставить несколько примеров ожидаемого формата вывода. Это подобно обучению с нулевой или небольшой обучающей выборкой. Инструменты, такие как LangChain или HoneyHive, уже доступны для помощи в управлении и версионировании ваших шаблонов приглашения.
  • Fine-tuning — это методика, используемая в ML, которая может помочь улучшить производительность и точность вашей модели на конкретной задаче. Хотя это увеличит усилия по подгонке модели, это может уменьшить стоимость вывода. Стоимость LLM API зависит от длины входной и выходной последовательности. Таким образом, уменьшение числа входных токенов уменьшает стоимость API, потому что вам больше не нужно давать примеры в приглашении.
  • Внешние данные: Базовые модели часто не имеют доступа к контекстной информации (например, к определенным документам) и могут устаревать быстро. Например, GPT-4 была обучена на данных до сентября 2021 года. Поскольку LLM могут воображать вещи, если у них недостаточно информации, нам нужно иметь возможность предоставлять им доступ к важным внешним данным.
  • Встраивания — немного более сложный способ извлечения информации в виде встраиваний из LLM API (например, описания продукта) и создание на их основе приложений (например, поиск, сравнение, рекомендации).
  • Альтернативы: Поскольку этот область быстро развивается, существует много других приложений LLM в продуктах ИИ. Некоторые примеры: настройка инструкций/приглашений и улучшение модели.

Код:

from transformers import GPT2LMHeadModel, GPT2Tokenizer, TextDataset, Trainer, TrainingArguments# Загрузите ваш набор данныхdataset = TextDataset(tokenizer=tokenizer, file_path="your_dataset.txt")# Подгоните модельtraining_args = TrainingArguments(    output_dir="./your_fine_tuned_model",    overwrite_output_dir=True,    num_train_epochs=3,    per_device_train_batch_size=4,)trainer = Trainer(    model=model,    args=training_args,    data_collator=data_collator,    train_dataset=dataset,)trainer.train()trainer.save_model()

Шаг 3: Оценка модели

В классическом MLOps, модели машинного обучения демонстрируются на удерживаемом проверочном наборе данных с метрикой, которая характеризует производительность моделей. Но как оценить выполнение LLM? Как определить, хорош или плох вывод? В настоящее время кажется, что организации проводят A/B-тестирование своих моделей.

Для оценки LLM-моделей появились такие инструменты, как HoneyHive или HumanLoop.

Код:

from transformers import pipeline# Создание конвейера генерации текстаgenerator = pipeline("text-generation", model="your_fine_tuned_model")# Генерация текста и оценкаgenerated_text = generator("Prompt text")print(generated_text)

Шаг 4: Развертывание и мониторинг

Достижения LLM-моделей могут сильно меняться между релизами. Например, OpenAI обновила свои модели, чтобы устранить генерацию неподходящего контента, например, ненавистнических высказываний. В результате, при поиске фразы “как AI-модель я” в Twitter, теперь появляются бесчисленные боты.

Уже появились инструменты для мониторинга LLM-моделей, такие как Whylabs или HumanLoop.

Код:

# Импорт необходимых библиотекfrom flask import Flask, request, jsonifyfrom transformers import GPT2LMHeadModel, GPT2Tokenizerimport logging# Инициализация приложения Flaskapp = Flask(__name__)# Загрузка предобученной модели GPT-2 и токенизатораmodel = GPT2LMHeadModel.from_pretrained("./your_fine_tuned_model")tokenizer = GPT2Tokenizer.from_pretrained("gpt2")# Настройка логгированияlogging.basicConfig(filename='app.log', level=logging.INFO)# Определение маршрута для генерации текста@app.route('/generate_text', methods=['POST'])def generate_text():    try:        data = request.get_json()        prompt = data['prompt']        # Генерация текста        generated_text = model.generate(            tokenizer.encode(prompt, return_tensors='pt'),            max_length=100,  # Подстройте максимальную длину по необходимости            num_return_sequences=1,            no_repeat_ngram_size=2,            top_k=50,            top_p=0.95,        )[0]        generated_text = tokenizer.decode(generated_text, skip_special_tokens=True)                # Логирование запроса и ответа        logging.info(f"Сгенерированный текст для запроса: {prompt}")        logging.info(f"Сгенерированный текст: {generated_text}")        return jsonify({'generated_text': generated_text})    except Exception as e:        # Логирование любых исключений        logging.error(f"Ошибка: {str(e)}")        return jsonify({'error': 'Произошла ошибка'}), 500if __name__ == '__main__':    app.run(host='0.0.0.0', port=5000)

Работа вышеуказанного кода:

  1. Импорт необходимых библиотек: В этом разделе происходит импорт необходимых библиотек и модулей. Flask используется для создания веб-приложений, transformers используются для работы с моделью GPT-2, а logging используется для записи информации.
  2. Инициализация приложения Flask.
  3. Загрузка модели: Вы можете загрузить предобученную модель GPT-2 и соответствующий токенизатор. Вы можете заменить “./your_fine_tuned_model” на путь к вашей настроенной модели GPT-2.
  4. Настройка логгирования: Здесь происходит настройка логгирования в приложении. Он задает имя лог-файла как app.log и устанавливает уровень логгирования на INFO.
  5. Настройка маршрута с использованием Flask: Здесь указывается, что при POST-запросе к конечной точке /generate_text должна вызываться функция generate_text.
  6. Генерация текста: Этот код извлекает JSON-данные из входящего POST-запроса. Предполагается, что в JSON-данных присутствует поле “prompt”, которое является текстом, на основе которого будет генерироваться дополнительный текст.
  7. Генерация текста с использованием GPT-2: В этом разделе используется загруженная модель GPT-2 и токенизатор для генерации текста на основе предоставленного промпт. Здесь задаются различные параметры генерации, такие как максимальная длина сгенерированного текста, количество возвращаемых последовательностей и параметры выборки.
  8. Декодирование и возврат сгенерированного текста: После генерации текста он декодируется и удаляются специальные токены. Затем сгенерированный текст возвращается в виде JSON-ответа.
  9. Логирование запроса и ответа: Здесь в журнал записывается промпт запроса и сгенерированный текст.
  10. Обработка исключений: Если в процессе генерации текста возникают исключения, они перехватываются и записываются как ошибки. Возвращается JSON-вывод с сообщением об ошибке и статусным кодом 500, указывающим на ошибку сервера.
  11. Запуск приложения Flask: Этот блок кода обеспечивает запуск приложения Flask только при непосредственном выполнении скрипта. Он запускает приложение на хосте “0.0.0.0” и порту 5000, делая его доступным с любого IP-адреса.

Вывод вышеуказанного кода:

Вводный запрос:

#{     "prompt": "Однажды в стародавние времена"}Выходной запрос:{ "generated_text": "Однажды в стародавние времена, в далекой стране, жил..."}импорт csv

Как LLMOps отличается от MLOps?

Различия между MLOps и LLMOps возникают из-за различий в построении ИИ-продуктов с использованием классических ML-моделей и LLM. Различия влияют преимущественно на управление данными, экспериментирование, оценку, стоимость и задержку.

Управление данными

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

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

Экспериментирование

В MLOps исследование выглядит похожим на то, обучаете ли вы модель с нуля или тонко настраиваете предварительно обученную. В обоих случаях вы будете делать входы, такие как архитектура модели, гиперпараметры и аугментации данных, и выходы, такие как метрики.

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

Оценка

В классическом MLOps для оценки производительности модели используется отложенный набор данных с оценочной метрикой. Так как оценка производительности LLM сложнее, организации в настоящее время, кажется, используют A/B-тестирование.

Стоимость

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

Скорость

Еще одна проблема, на которую указали опрошенные в рамках исследования LLM в производстве, – это задержка. Длительность выполнения LLM существенно влияет на скорость выполнения. Хотя проблемы задержки существуют и в MLOps, они имеют гораздо большее значение в LLMOps, поскольку это большая проблема для скорости экспериментирования во время разработки и пользовательского опыта в производстве.

Будущее LLMOps

LLMOps – это развивающаяся область. В связи со скоростью, с которой меняется этот пространство, трудно делать какие-либо прогнозы. Даже сомнительно, останется ли термин “LLMOps”. Мы уверены только в том, что мы увидим множество новых примеров использования LLM и инструментов, а также лучшие практики управления жизненным циклом LLM.

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

  • Останется ли термин “LLMOps”?
  • Как развивается LLMOps на фоне MLOps? Станут ли они эволюционировать вместе или станут отдельными группами операций?
  • Как сложится “Linux-момент” в ИИ?

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

Заключение

С момента выпуска ChatGPT от OpenAI LLM стал популярной темой в области искусственного интеллекта. Эти модели глубокого обучения могут генерировать выходные данные на человеческом языке, делая их мощным инструментом для таких задач, как разговорный ИИ, программные помощники и помощники по написанию.

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

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

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

  • LLMOps (Операции с Большими Языковыми Моделями) – это научная область, которая сосредоточена на управлении жизненным циклом мощных языковых моделей, таких как ChatGPT, и преобразовании процесса создания и поддержки продуктов, основанных на искусственном интеллекте.
  • Увеличение количества приложений, использующих Большие Языковые Модели (LLMs), такие как GPT-3, GPT-3.5 и GPT-4, привело к появлению LLMOps.
  • Процесс LLMOps включает выбор базовой модели, адаптацию модели для выполнения конкретных задач, оценку производительности модели с помощью A/B-тестирования и анализ затрат и задержек, связанных с применением LLM-powered приложений.
  • LLMOps отличаются от традиционных MLOps с точки зрения управления данными (обучение на небольшом объеме данных), анализа (исследование запроса), оценки (A/B-тестирование), затрат (затраты на вывод) и скорости (задержка).

В целом, рост LLMs и LLMOps описывает значительный сдвиг в создании и поддержке продуктов, основанных на искусственном интеллекте. Я надеюсь, что вам понравилась эта статья. Вы можете связаться со мной вот здесь: LinkedIn.

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

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