uniflow
มอบอินเทอร์เฟซ LLM แบบรวมเพื่อแยกและแปลงและเอกสารดิบ
Uniflow จัดการกับความท้าทายหลักสองประการในการเตรียมข้อมูลการฝึกอบรม LLM สำหรับนักวิทยาศาสตร์ ML:
ดังนั้นเราจึงสร้าง Uniflow ซึ่งเป็นอินเทอร์เฟซ LLM แบบรวมเพื่อแยกและแปลงเอกสารดิบ
Uniflow มุ่งหวังที่จะช่วยให้นักวิทยาศาสตร์ด้านข้อมูลทุกคนสร้างชุดข้อมูลการฝึกอบรมที่พร้อมใช้งานและสงวนความเป็นส่วนตัวของตนเองสำหรับการปรับแต่ง LLM อย่างละเอียด และด้วยเหตุนี้ ทุกคนจึงสามารถเข้าถึง 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
อย่างใดอย่างหนึ่งต่อไปนี้ คุณจะต้องตั้งค่าคีย์ OpenAI API ของคุณ โดยสร้างไฟล์ .env
ในโฟลเดอร์ root uniflow จากนั้นเพิ่มบรรทัดต่อไปนี้ในไฟล์ .env
:
OPENAI_API_KEY=YOUR_API_KEY
(ไม่บังคับ) หากคุณใช้งาน HuggingfaceModelFlow
คุณจะต้องติดตั้ง transformers
, accelerate
, bitsandbytes
, scipy
libraries:
pip3 install transformers accelerate bitsandbytes scipy
(ทางเลือก) หากคุณรัน LMQGModelFlow
คุณจะต้องติดตั้ง lmqg
และ spacy
libraries ด้วย:
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
(หากคุณต้องการรัน LLM ที่ได้รับการฝึกล่วงหน้าด้วยพารามิเตอร์ 7B) หากคุณใช้งานโฟลว์ OpenAI
อย่างใดอย่างหนึ่งต่อไปนี้ คุณจะต้องตั้งค่าคีย์ OpenAI API ของคุณ
โดยสร้างไฟล์ .env
ในโฟลเดอร์ root 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 |
OpenAIConfig | gpt-3.5-turbo-1106 |
HuggingfaceConfig | mistralai/Mistral-7B-Instruct-v0.1 |
LMQGConfig | 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 | STR | คำแนะนำโดยละเอียดสำหรับ 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
ที่ส่งผ่านไปยังโฟลว์ แต่ละ dict มีคุณสมบัติ 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
ใดรายการหนึ่งด้วยพารามิเตอร์ที่กำหนดเอง
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 อาจเป็น "ข้อความ" หรือ "json" |
HuggingfaceModelConfig
สืบทอดมาจาก ModelConfig
แต่จะแทนที่พารามิเตอร์ model_name
เพื่อใช้โมเดล mistralai/Mistral-7B-Instruct-v0.1
ตามค่าเริ่มต้น
พารามิเตอร์ | พิมพ์ | ค่าเริ่มต้น | คำอธิบาย |
---|---|---|---|
model_name | STR | มิสทราไล/มิสทรัล-7B-Instruct-v0.1 | เว็บไซต์กอดใบหน้า |
batch_size | ภายใน | 1 | ขนาดแบตช์ที่จะใช้สำหรับ Hugging Face API |
LMQGModelConfig
สืบทอดมาจาก ModelConfig
แต่แทนที่พารามิเตอร์ model_name
เพื่อใช้โมเดล lmqg/t5-base-squad-qg-ae
โดยดีฟอลต์
พารามิเตอร์ | พิมพ์ | ค่าเริ่มต้น | คำอธิบาย |
---|---|---|---|
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
ตามความต้องการของเรา