uniflow
предоставляет унифицированный интерфейс LLM для извлечения и преобразования необработанных документов.
Uniflow решает две ключевые проблемы при подготовке данных обучения LLM для ученых ML:
Поэтому мы создали Uniflow, унифицированный интерфейс LLM для извлечения и преобразования необработанных документов.
Uniflow стремится помочь каждому специалисту по обработке данных создать свои собственные, готовые к использованию наборы обучающих данных с сохранением конфиденциальности для точной настройки LLM и, следовательно, сделать тонкую настройку LLM более доступной для всех:rocket:.
Ознакомьтесь с практическими решениями Uniflow:
Установка uniflow
займет около 5-10 минут, если вы выполните 3 шага ниже:
Создайте среду conda на своем терминале, используя:
conda create -n uniflow python=3.10 -y
conda activate uniflow # some OS requires `source activate uniflow`
Установите совместимый Pytorch на основе вашей ОС.
nvcc -V
. pip3 install --pre torch --index-url https://download.pytorch.org/whl/nightly/cu121 # cu121 means cuda 12.1
pip3 install torch
Установите uniflow
:
pip3 install uniflow
(Необязательно) Если вы используете один из следующих потоков OpenAI
, вам необходимо настроить ключ API OpenAI. Для этого создайте файл .env
в корневой папке uniflow. Затем добавьте следующую строку в файл .env
:
OPENAI_API_KEY=YOUR_API_KEY
(Необязательно) Если вы используете HuggingfaceModelFlow
, вам также потребуется установить библиотеки transformers
, accelerate
, bitsandbytes
, scipy
:
pip3 install transformers accelerate bitsandbytes scipy
(Необязательно) Если вы используете LMQGModelFlow
, вам также потребуется установить библиотеки lmqg
и spacy
:
pip3 install lmqg spacy
Поздравляем, вы завершили установку!
Если вы заинтересованы в том, чтобы помочь нам, вот предварительные настройки разработки.
conda create -n uniflow python=3.10 -y
conda activate uniflow
cd uniflow
pip3 install poetry
poetry install --no-root
Если вы используете EC2, вы можете запустить экземпляр графического процессора со следующей конфигурацией:
g4dn.xlarge
(если вы хотите запустить предварительно обученный LLM с параметрами 7B) Если вы используете один из следующих потоков OpenAI
, вам необходимо настроить ключ API OpenAI.
Для этого создайте файл .env
в корневой папке uniflow. Затем добавьте следующую строку в файл .env
:
OPENAI_API_KEY=YOUR_API_KEY
Чтобы использовать uniflow
, выполните три основных шага:
Выберите Config
Это определяет LLM и различные настраиваемые параметры.
Создайте свои Prompts
Создайте контекст, который вы хотите использовать для подсказки вашей модели. Вы можете настроить собственные инструкции и примеры с помощью класса PromptTemplate
.
Запустите свой Flow
Запустите поток входных данных и сгенерируйте выходные данные из вашего LLM.
Примечание. В настоящее время мы также создаем потоки
Preprocessing
, которые помогут обрабатывать данные из разных источников, таких какhtml
,Markdown
и других.
Config
определяет, какой LLM используется и как сериализуются и десериализуются входные данные. Он также имеет параметры, специфичные для LLM.
Вот таблица различных предопределенных конфигураций, которые вы можете использовать, и соответствующих им LLM:
Конфигурация | Магистр права |
---|---|
Конфигурация | gpt-3.5-turbo-1106 |
ОпенАИКонфиг | gpt-3.5-turbo-1106 |
HuggingfaceConfig | mistralai/Mistral-7B-Instruct-v0.1 |
ЛМКГКонфиг | lmqg/t5-base-squad-qg-ae |
Вы можете запустить каждую конфигурацию со значениями по умолчанию или передать собственные параметры, такие как temperature
или batch_size
, в конфигурацию для вашего варианта использования. Дополнительные сведения см. в разделе расширенной пользовательской конфигурации.
По умолчанию uniflow
настроен на генерирование вопросов и ответов на основе передаваемого вами Context
. Для этого у него есть инструкция по умолчанию и несколько примеров, которые он использует для управления LLM.
Вот инструкция по умолчанию:
Generate one question and its corresponding answer based on the last context in the last example. Follow the format of the examples below to include context, question, and answer in the response
Вот примеры нескольких снимков по умолчанию:
context="The quick brown fox jumps over the lazy brown dog.",
question="What is the color of the fox?",
answer="brown."
context="The quick brown fox jumps over the lazy black dog.",
question="What is the color of the dog?",
answer="black."
Чтобы выполнить эти инструкции и примеры по умолчанию, все, что вам нужно сделать, — это передать в поток список объектов Context
. Затем uniflow
сгенерирует пользовательское приглашение с инструкциями и примерами для каждого объекта Context
для отправки в LLM. Дополнительные сведения см. в разделе «Запуск потока».
Класс Context
используется для передачи контекста приглашения LLM. Context
состоит из свойства context
, которое представляет собой текстовую строку.
Чтобы запустить uniflow
с инструкциями по умолчанию и примерами из нескольких фрагментов, вы можете передать в поток список объектов Context
. Например:
from uniflow.op.prompt import Context
data = [
Context(
context="The quick brown fox jumps over the lazy brown dog.",
),
...
]
client.run(data)
Более подробный обзор запуска потока см. в разделе «Выполнение потока».
Если вы хотите запустить пользовательскую инструкцию приглашения или несколько примеров, вы можете использовать объект PromptTemplate
. Он имеет свойства instruction
и example
.
Свойство | Тип | Описание |
---|---|---|
instruction | ул. | Подробная инструкция для LLM |
examples | Список[Контекст] | Несколько примеров. |
При необходимости вы можете перезаписать любые значения по умолчанию.
Чтобы увидеть пример использования PromptTemplate
для запуска uniflow
с настраиваемой instruction
, примерами из нескольких фрагментов и настраиваемыми полями Context
для создания сводки, посетите блокнот openai_pdf_source_10k_summary.
После того, как вы определились со своей Config
и стратегией подсказок, вы можете запустить поток на входных данных.
Импортируйте объекты uniflow
Client
, Config
и Context
.
from uniflow.flow.client import TransformClient
from uniflow.flow.config import TransformOpenAIConfig, OpenAIModelConfig
from uniflow.op.prompt import Context
Предварительно обработайте данные на фрагменты для передачи в поток. В будущем у нас будут потоки Preprocessing
которые помогут на этом этапе, но сейчас вы можете использовать библиотеку по вашему выбору, например pypdf, для разделения ваших данных.
raw_input_context = ["It was a sunny day and the sky color is blue.", "My name is bobby and I am a talent software engineer working on AI/ML."]
Создайте список объектов Context
для передачи данных в поток.
data = [
Context(context=c)
for c in raw_input_context
]
[Необязательно] Если вы хотите использовать индивидуальные инструкции и/или примеры, создайте PromptTemplate
.
from uniflow.op.prompt import PromptTemplate
guided_prompt = PromptTemplate(
instruction="Generate a one sentence summary based on the last context below. Follow the format of the examples below to include context and summary in the response",
few_shot_prompt=[
Context(
context="When you're operating on the maker's schedule, meetings are a disaster. A single meeting can blow a whole afternoon, by breaking it into two pieces each too small to do anything hard in. Plus you have to remember to go to the meeting. That's no problem for someone on the manager's schedule. There's always something coming on the next hour; the only question is what. But when someone on the maker's schedule has a meeting, they have to think about it.",
summary="Meetings disrupt the productivity of those following a maker's schedule, dividing their time into impractical segments, while those on a manager's schedule are accustomed to a continuous flow of tasks.",
),
],
)
Создайте объект Config
для передачи в объект Client
.
config = TransformOpenAIConfig(
prompt_template=guided_prompt,
model_config=OpenAIModelConfig(
response_format={"type": "json_object"}
),
)
client = TransformClient(config)
Используйте client
объект для запуска потока на входных данных.
output = client.run(data)
Обработать выходные данные. По умолчанию вывод LLM будет списком выходных слов, по одному для каждого Context
переданного в поток. Каждый словарь имеет свойство response
, которое содержит ответ LLM, а также любые ошибки. Например, output[0]['output'][0]
будет выглядеть так:
{
'response': [{'context': 'It was a sunny day and the sky color is blue.',
'question': 'What was the color of the sky?',
'answer': 'blue.'}],
'error': 'No errors.'
}
Дополнительные примеры см. в папке примеров.
Вы также можете настроить потоки, передав пользовательские конфигурации или аргументы объекту Config
, если вы хотите дополнительно настроить определенные параметры, такие как модель LLM, количество потоков, температура и многое другое.
Каждая конфигурация имеет следующие параметры:
Параметр | Тип | Описание |
---|---|---|
prompt_template | PromptTemplate | Шаблон, используемый для управляемой подсказки. |
num_threads | интервал | Количество потоков, используемых для потока. |
model_config | ModelConfig | Конфигурация, передаваемая в модель. |
Вы можете дополнительно настроить model_config
, передав одну из Model Configs
с настраиваемыми параметрами.
Конфигурация модели — это конфигурация, которая передается базовому объекту Config
и определяет, какая модель LLM используется, и имеет параметры, специфичные для модели LLM.
Базовая конфигурация называется ModelConfig
и имеет следующие параметры:
Параметр | Тип | По умолчанию | Описание |
---|---|---|---|
model_name | ул. | gpt-3.5-турбо-1106 | Сайт ОпенАИ |
OpenAIModelConfig
наследует ModelConfig
и имеет следующие дополнительные параметры:
Параметр | Тип | По умолчанию | Описание |
---|---|---|---|
num_calls | интервал | 1 | Количество вызовов API OpenAI. |
temperature | плавать | 1,5 | Температура, используемая для API OpenAI. |
response_format | Dict[строка, строка] | {"тип": "текст"} | Формат ответа, используемый для API OpenAI. Может быть «текст» или «json». |
HuggingfaceModelConfig
наследует ModelConfig
, но переопределяет параметр model_name
, чтобы по умолчанию использовать модель mistralai/Mistral-7B-Instruct-v0.1
.
Параметр | Тип | По умолчанию | Описание |
---|---|---|---|
model_name | ул. | мистралай/Mistral-7B-Instruct-v0.1 | Сайт «Обнимающее лицо» |
batch_size | интервал | 1 | Размер пакета, который будет использоваться для API Hugging Face. |
LMQGModelConfig
наследует ModelConfig
, но переопределяет параметр model_name
, чтобы по умолчанию использовать модель lmqg/t5-base-squad-qg-ae
.
Параметр | Тип | По умолчанию | Описание |
---|---|---|---|
model_name | ул. | lmqg/t5-base-squad-qg-ae | Сайт «Обнимающее лицо» |
batch_size | интервал | 1 | Размер пакета, который будет использоваться для API LMQG. |
Вот пример того, как передать пользовательскую конфигурацию объекту Client
:
from uniflow.flow.client import TransformClient
from uniflow.flow.config import TransformOpenAIConfig, OpenAIModelConfig
from uniflow.op.prompt import Context
contexts = ["It was a sunny day and the sky color is blue.", "My name is bobby and I am a talent software engineer working on AI/ML."]
data = [
Context(
context=c
)
for c in contexts
]
config = OpenAIConfig(
num_threads=2,
model_config=OpenAIModelConfig(
model_name="gpt-4",
num_calls=2,
temperature=0.5,
),
)
client = TransformClient(config)
output = client.run(data)
Как видите, мы передаем пользовательские параметры в OpenAIModelConfig
в конфигурации OpenAIConfig
в соответствии с нашими потребностями.