uniflow
원시 문서를 추출하고 변환하기 위한 통합 LLM 인터페이스를 제공합니다.
Uniflow는 ML 과학자를 위한 LLM 교육 데이터를 준비하는 데 있어 두 가지 주요 과제를 해결합니다.
따라서 우리는 원시 문서를 추출하고 변환하는 통합 LLM 인터페이스인 Uniflow를 구축했습니다.
Uniflow의 목표는 모든 데이터 과학자가 LLM 미세 조정을 위해 개인 정보가 보호되고 즉시 사용 가능한 교육 데이터 세트를 생성하도록 지원하여 모든 사람이 미세 조정 LLM에 더 쉽게 액세스할 수 있도록 하는 것입니다:rocket:.
Uniflow 실습 솔루션을 확인하세요.
아래 3단계를 따르면 uniflow
설치는 약 5~10분 정도 소요됩니다.
다음을 사용하여 터미널에 conda 환경을 만듭니다.
conda create -n uniflow python=3.10 -y
conda activate uniflow # some OS requires `source activate uniflow`
OS에 따라 호환되는 pytorch를 설치하세요.
nvcc -V
통해 CUDA 버전을 찾을 수 있습니다. 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
흐름 중 하나를 실행하는 경우 OpenAI API 키를 설정해야 합니다. 이렇게 하려면 루트 uniflow 폴더에 .env
파일을 만듭니다. 그런 다음 .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를 사용하는 경우 다음 구성을 사용하여 GPU 인스턴스를 시작할 수 있습니다.
g4dn.xlarge
(7B 매개변수로 사전 훈련된 LLM을 실행하려는 경우) 다음 OpenAI
흐름 중 하나를 실행하는 경우 OpenAI API 키를 설정해야 합니다.
이렇게 하려면 루트 uniflow 폴더에 .env
파일을 만듭니다. 그런 다음 .env
파일에 다음 줄을 추가합니다.
OPENAI_API_KEY=YOUR_API_KEY
uniflow
사용하려면 다음 세 가지 주요 단계를 따르세요.
Config
선택
이에 따라 LLM과 다양한 구성 가능한 매개변수가 결정됩니다.
Prompts
구성
모델에 메시지를 표시하는 데 사용할 컨텍스트를 구성합니다. PromptTemplate
클래스를 사용하여 사용자 지정 지침과 예제를 구성할 수 있습니다.
Flow
실행
입력 데이터에 대해 흐름을 실행하고 LLM에서 출력을 생성합니다.
참고: 현재
html
,Markdown
등과 같은 다양한 소스의 데이터를 처리하는 데 도움이 되는Preprocessing
흐름도 구축 중입니다.
Config
어떤 LLM이 사용되는지, 입력 데이터가 직렬화 및 역직렬화되는 방법을 결정합니다. 또한 LLM에 특정한 매개변수도 있습니다.
다음은 사용할 수 있는 사전 정의된 다양한 구성과 해당 LLM에 대한 표입니다.
구성 | 법학대학원 |
---|---|
구성 | gpt-3.5-turbo-1106 |
OpenAI구성 | gpt-3.5-turbo-1106 |
포옹얼굴 구성 | mistralai/Mistral-7B-Instruct-v0.1 |
LMQG구성 | 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
LLM으로 보낼 각 Context
개체에 대한 지침과 몇 가지 예시가 포함된 사용자 정의 프롬프트를 생성합니다. 자세한 내용은 흐름 실행 섹션을 참조하세요.
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 | str | LLM에 대한 자세한 지침 |
examples | 목록[컨텍스트] | 몇 장의 예시입니다. |
필요에 따라 기본값을 덮어쓸 수 있습니다.
PromptTemplate
사용하여 사용자 정의 instruction
, 몇 장의 예시 및 사용자 정의 Context
필드로 uniflow
실행하여 요약을 생성하는 방법에 대한 예를 보려면 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.",
),
],
)
Client
개체에 전달할 Config
개체를 만듭니다.
config = TransformOpenAIConfig(
prompt_template=guided_prompt,
model_config=OpenAIModelConfig(
response_format={"type": "json_object"}
),
)
client = TransformClient(config)
client
개체를 사용하여 입력 데이터에 대한 흐름을 실행합니다.
output = client.run(data)
출력 데이터를 처리합니다. 기본적으로 LLM 출력은 흐름에 전달된 각 Context
에 대해 하나씩 출력 사전 목록이 됩니다. 각 사전에는 LLM 응답과 오류가 포함된 response
속성이 있습니다. 예를 들어 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.'
}
더 많은 예제를 보려면 예제 폴더를 참조하세요.
LLM 모델, 스레드 수, 온도 등과 같은 특정 매개 변수를 추가로 조정하려는 경우 사용자 지정 구성이나 인수를 Config
개체에 전달하여 흐름을 구성할 수도 있습니다.
모든 구성에는 다음 매개변수가 있습니다.
매개변수 | 유형 | 설명 |
---|---|---|
prompt_template | PromptTemplate | 안내 프롬프트에 사용할 템플릿입니다. |
num_threads | 정수 | 흐름에 사용할 스레드 수입니다. |
model_config | ModelConfig | 모델에 전달할 구성입니다. |
사용자 정의 매개변수와 함께 Model Configs
중 하나를 전달하여 model_config
를 추가로 구성할 수 있습니다.
Model Config 는 기본 Config
객체에 전달되어 어떤 LLM 모델이 사용되는지 결정하고 LLM 모델에 특정한 매개변수를 갖는 구성입니다.
기본 구성은 ModelConfig
라고 하며 다음 매개변수를 갖습니다.
매개변수 | 유형 | 기본 | 설명 |
---|---|---|---|
model_name | str | gpt-3.5-터보-1106 | OpenAI 사이트 |
OpenAIModelConfig
는 ModelConfig
에서 상속되며 다음과 같은 추가 매개변수를 갖습니다.
매개변수 | 유형 | 기본 | 설명 |
---|---|---|---|
num_calls | 정수 | 1 | OpenAI API에 대한 호출 수입니다. |
temperature | 뜨다 | 1.5 | OpenAI API에 사용할 온도입니다. |
response_format | 사전[str, str] | {"유형": "텍스트"} | OpenAI API에 사용할 응답 형식입니다. "text" 또는 "json"일 수 있습니다. |
HuggingfaceModelConfig
는 ModelConfig
에서 상속되지만 기본적으로 mistralai/Mistral-7B-Instruct-v0.1
모델을 사용하도록 model_name
매개변수를 재정의합니다.
매개변수 | 유형 | 기본 | 설명 |
---|---|---|---|
model_name | str | mistralai/Mistral-7B-Instruct-v0.1 | 포옹 얼굴 사이트 |
batch_size | 정수 | 1 | Hugging Face API에 사용할 배치 크기입니다. |
LMQGModelConfig
는 ModelConfig
에서 상속되지만 기본적으로 lmqg/t5-base-squad-qg-ae
모델을 사용하도록 model_name
매개변수를 재정의합니다.
매개변수 | 유형 | 기본 | 설명 |
---|---|---|---|
model_name | str | lmqg/t5-base-squad-qg-ae | 포옹 얼굴 사이트 |
batch_size | 정수 | 1 | LMQG API에 사용할 배치 크기입니다. |
다음은 사용자 정의 구성을 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
구성에 전달하고 있습니다.