«LangChain 101 Часть 2ab. Все, что вам нужно знать о моделях (больших языковых)»
«Всё, что вам нужно знать о моделях (больших языковых) в LangChain 101, Часть 2аб»
Это часть 2ab курса LangChain 101. Настоятельно рекомендуется ознакомиться с первой частью, чтобы лучше понять контекст этой статьи (следите за автором, чтобы не пропустить следующую часть):
LangChain 101: Часть 1. Создание простого приложения вопрос-ответ
В этой статье я познакомлю вас с основами LangChain, фреймворка для создания приложений с большими возможностями…
pub.towardsai.net
Компонент Models является основой Langchain. Это ядро, которое отвечает за генерацию токенов, делающих технологию волшебной.
- Создание и развертывание приложений для вывода ML (машинного обучения) с нуля с помощью Amazon SageMaker
- Важные топовые статьи о компьютерном зрении за неделю с 18/9 по 24/9
- Это AI-информационное письмо – все, что вам нужно #66
Компонент Models позволяет использовать различные языковые модели, включая ChatGPT, GPT-4, LLAMA и т. д. Эти модели могут использоваться для выполнения различных задач, наиболее популярных: ответы на вопросы и генерация текста.
Компонент Models легок в использовании. Для генерации текста можно передать модели подсказку, и она создаст ответ. То же самое можно сделать для перевода предложения или ответа на вопрос.
Компонент Models также очень гибок. Вы можете комбинировать его с другими компонентами LangChain для создания более сложных систем. Например, вы можете объединить компонент Models с компонентом Prompts, чтобы создать чат-бота, который может генерировать различные виды творческого текста, такие как код или сценарии, стихи или музыкальные произведения, письма или электронные письма и т. д. Комбинируйте компоненты Models и Indexes, чтобы создать поисковую систему, способную отвечать на вопросы, используя информацию из разных источников.
Весь код (включая блокноты Colab) и дополнительные материалы доступны на GitHub.
Обзор
LangChain поддерживает различные модели, чтобы вы могли выбрать ту, которая лучше всего соответствует вашим потребностям:
- LLM используют API, которые принимают входной текст и генерируют текстовый вывод
- Модели чата используют модели, которые обрабатывают сообщения чата и генерируют ответы
- Модели встраивания текста преобразуют текст в числовые представления
Токенизация
Токенизация разбивает человеческий язык на более мелкие единицы, такие как слова или подслова, чтобы преобразовать текст в машинно-читаемые числовые представления. Позднее, когда мы говорим о генерации текста или кода, мы будем понимать это как разные виды генерации токенов.
Генерация текста
Предположим, что мы хотим создать продолжение фразы:
«Париж — город…».
Энкодер отправляет логиты для всех токенов, которые у нас есть (если вы не знаете, что такое логиты – рассмотрите их как оценки), которые могут быть преобразованы, с использованием функции софтмакса, в вероятности выбора токена для генерации.
Узнайте больше о генерации текста:
Как LLM генерирует текст?
Эта статья не будет обсуждать трансформеры или то, как обучаются большие языковые модели. Вместо этого мы сосредоточимся на использовании…
pub.towardsai.net
.from_pretrained(<модель>)
Во многих предобученных языковых моделях токенизатор и архитектура модели разработаны и тренируются вместе. Причина такой связи заключается в том, что токенизатор и архитектура модели должны быть совместимыми, чтобы обеспечивать последовательность токенизации и декодирования.
Если токенизатор и архитектура модели были бы разными или не синхронизироваными, это могло бы привести к ошибкам токенизации, несоответствующим вложениям и неправильным предсказаниям.
Ключи API
Сначала вам понадобится ключ API для провайдера LLM, которого вы хотите использовать. Мы должны выбрать между собственными или открытыми моделями на основе баланса между производительностью и стоимостью.
Многие открытые модели организованы и хранятся на Hugging Face как сообщество. Открытые модели обычно меньше и имеют более низкие возможности по сравнению с собственными моделями, но они более экономичны.
Примеры: BLOOM (BigScience), LLaMA (Meta), Flan-T5 (Google) и т. д.
Собственные модели – это закрытые модели, принадлежащие компаниям. Они обычно больше открытых моделей и, следовательно, имеют более высокую производительность, но могут иметь дорогие API.
Примеры: OpenAI, co:here, AI21 Labs, Anthropic и т. д.
Вложения
Вложения – это компактные числовые представления слов или сущностей, которые помогают компьютерам лучше понимать и обрабатывать язык. Эти представления кодируют смысл и контекст слов, позволяя машинам работать с языком более содержательно и эффективно.
- OpenAIEmbeddings
- HuggingFaceEmbeddings
- GPT4AllEmbeddings
- SpacyEmbeddings
- FakeEmbeddings
Ниже вы можете увидеть вложения для девяти предложений различных тем. Значения тепловой карты были предварительно отсортированы для лучшей визуализации.
- Лучшая подушка для шеи для длительных перелетов
- Легкий рюкзак для походов и путешествий
- Водонепроницаемая спортивная сумка для активного отдыха
- Набор нержавеющих столовых приборов для индукционных плит
- Набор высококачественных поварских ножей
- Высокопроизводительный миксер для выпечки
- Новинки в художественной литературе
- Вдохновляющие биографии и мемуары
- Лучшие книги по саморазвитию
Как можно заметить, сходство предложения 1 близко к 2 и 3, при этом сравнительно мало сходства с остальными предложениями. Можно видеть, что все предложения можно объединить в три группы.
Большие языковые и чат-модели
Языковая модель – это вероятностная модель естественного языка, которая может генерировать вероятности последовательности слов на основе текстовых корпусов на одном или нескольких языках, на которых она была обучена.
Большая языковая модель – это продвинутая языковая модель, обученная с использованием методов глубокого обучения на огромных объемах текстовых данных.
Языковая модель обычно поддерживает чат-модели, но их API более структурированы. Эти модели принимают список сообщений для чата в качестве ввода и возвращают сообщение чата.
Задание вопроса GPT
Необходимо подключать LangChain, чтобы задать модели вопрос. В приведенном ниже примере мы подготавливаем подсказку, подключаем пакет openai и возвращаем полученный ответ.
import openaidef get_completion(prompt, model="gpt-3.5-turbo"): """ Генерирует завершение для данной подсказки с использованием указанной модели. Args: prompt (str): Входная подсказка для генерации завершения. model (str): Название модели, которую использовать для генерации завершения. Returns: str: Сгенерированный текст завершения. """ # Создание списка словарей сообщений с подсказкой пользователя messages = [{"role": "user", "content": prompt}] # Генерация завершения чата с использованием API OpenAI response = openai.ChatCompletion.create( model=model, messages=messages, temperature=0, # Установка температуры на 0 для детерминированного вывода ) # Извлечение и возврат сгенерированного контента завершения return response.choices[0].message["content"]
Как видно, простые вопросы модель отвечает правильно. Но для сложных запросов, можно использовать LangChain.
Сколько оперативной памяти?
Чтобы определить размер модели в байтах, параметры умножают на выбранный размер точности.
Давайте скажем, что мы выбрали точность bfloat16 (16 бит = 2 байта). Мы хотим использовать модель BLOOM-176B. Это означает, что нам нужно 176 миллиардов параметров * 2 байта = 352GB!
В машинном обучении используется смешанный подход точности, где обучение и вывод идеально выполняются в FP32, но вычисления выполняются в FP16/BF16 для более быстрого обучения. Веса хранятся в FP32, и для их обновления используются градиенты FP16/BF16. Во время вывода полурекисные веса часто обеспечивают аналогичное качество, как и FP32, что позволяет более быстрой обработке с меньшим количеством графических процессоров.
Квантизация – это техника сжатия, которая уменьшает использование памяти модели и повышает эффективность вывода. Посттренировочная квантизация заключается в преобразовании весов предварительно обученной модели в более низкую точность без повторного обучения.
В коде вы, вероятно, увидите следующие параметры квантизации:
# Configure BitsAndBytesConfig for 4-bit quantizationbnb_config = BitsAndBytesConfig( load_in_4bit=True, bnb_4bit_use_double_quant=True, bnb_4bit_quant_type="nf4", bnb_4bit_compute_dtype=torch.bfloat16,)
Чтобы полностью понять квантизацию, ознакомьтесь с моей статьей по этой теме:
Как поместить большие языковые модели в ограниченную память: квантизация
Как запустить LLM на локальной машине
pub.towardsai.net
Запуск модели только на CPU
Может быть удивительно, но можно запустить LLM только на процессоре:
# check model versions https://huggingface.co/TheBloke/Llama-2-7B-Chat-GGML/tree/main!wget --output-document=llama-2-7b-chat.bin https://huggingface.co/TheBloke/Llama-2-7B-Chat-GGML/resolve/main/llama-2-7b-chat.ggmlv3.q8_0.binfrom langchain.llms import CTransformers# Initialize a Local CTransformers wrapper for the Llama-2-7B-Chat modelllm = CTransformers( model="llama-2-7b-chat.bin", # Location of the downloaded GGML model model_type="llama", # Specify the model type as Llama config={ "max_new_tokens": 256, "temperature": 0.1, }, # Set specific configuration)# Initialize an LLMChain instance with the provided prompt, llm, and verbose settingllm_chain = LLMChain(prompt=prompt, llm=llm, verbose=True)
Ответ займет несколько минут, но это показывает возможность запуска ллмс даже на устройствах Rasberry!
Это конец части 1аб. Следующая часть (cde) будет посвящена донастройке моделей.
Хлопайте и следите за мной, так как это мотивирует меня писать новые статьи 🙂