يوفر uniflow
واجهة LLM موحدة لاستخراج وتحويل المستندات الأولية.
تتناول Uniflow تحديين رئيسيين في إعداد بيانات تدريب LLM لعلماء تعلم الآلة:
ومن ثم، قمنا ببناء Uniflow، وهي واجهة LLM موحدة لاستخراج المستندات الأولية وتحويلها.
يهدف Uniflow إلى مساعدة كل عالم بيانات على إنشاء مجموعات بيانات تدريب خاصة به تحافظ على الخصوصية وجاهزة للاستخدام لضبط LLM، وبالتالي جعل الضبط الدقيق لـ LLM في متناول الجميع: Rocket:.
تحقق من حلول Uniflow العملية:
يستغرق تثبيت uniflow
حوالي 5 إلى 10 دقائق إذا اتبعت الخطوات الثلاث التالية:
قم بإنشاء بيئة كوندا على جهازك باستخدام:
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
في مجلد 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، فيمكنك تشغيل مثيل GPU بالتكوين التالي:
g4dn.xlarge
(إذا كنت تريد تشغيل LLM مُدرب مسبقًا بمعلمات 7B) إذا كنت تقوم بتشغيل أحد تدفقات OpenAI
التالية، فسيتعين عليك إعداد مفتاح OpenAI API الخاص بك.
للقيام بذلك، قم بإنشاء ملف .env
في مجلد uniflow الجذر الخاص بك. ثم أضف السطر التالي إلى ملف .env
:
OPENAI_API_KEY=YOUR_API_KEY
لاستخدام uniflow
، اتبع ثلاث خطوات رئيسية:
اختر Config
يحدد هذا LLM والمعلمات المختلفة القابلة للتكوين.
بناء Prompts
الخاصة بك
أنشئ السياق الذي تريد استخدامه لمطالبة النموذج الخاص بك. يمكنك تكوين تعليمات وأمثلة مخصصة باستخدام فئة PromptTemplate
.
قم بتشغيل Flow
الخاص بك
قم بتشغيل التدفق على بيانات الإدخال الخاصة بك وقم بإنشاء مخرجات من LLM الخاص بك.
ملاحظة: نقوم حاليًا ببناء تدفقات
Preprocessing
أيضًا للمساعدة في معالجة البيانات من مصادر مختلفة، مثلhtml
وMarkdown
والمزيد.
يحدد Config
أي LLM يتم استخدامه وكيفية تسلسل بيانات الإدخال وإلغاء تسلسلها. كما أن لديها معلمات خاصة بـ LLM.
فيما يلي جدول بالتكوينات المختلفة المحددة مسبقًا التي يمكنك استخدامها وLLMs المقابلة لها:
التكوين | ماجستير |
---|---|
التكوين | 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 | شارع | تعليمات تفصيلية لـ 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 | شارع | جي بي تي-3.5-تيربو-1106 | موقع OpenAI |
يرث OpenAIModelConfig
من ModelConfig
ويحتوي على المعلمات الإضافية التالية:
المعلمة | يكتب | تقصير | وصف |
---|---|---|---|
num_calls | كثافة العمليات | 1 | عدد الاستدعاءات التي سيتم إجراؤها إلى OpenAI API. |
temperature | يطفو | 1.5 | درجة الحرارة المستخدمة لـ OpenAI API. |
response_format | إملاء [شارع، شارع] | {"النوع": "نص"} | تنسيق الاستجابة المطلوب استخدامه لـ OpenAI API. يمكن أن يكون "نص" أو "json" |
يرث HuggingfaceModelConfig
من ModelConfig
، لكنه يتجاوز المعلمة model_name
لاستخدام نموذج mistralai/Mistral-7B-Instruct-v0.1
افتراضيًا.
المعلمة | يكتب | تقصير | وصف |
---|---|---|---|
model_name | شارع | ميسترالاي/ميسترال-7B-Instruct-v0.1 | موقع عناق الوجه |
batch_size | كثافة العمليات | 1 | حجم الدفعة المراد استخدامها لواجهة برمجة تطبيقات Hugging Face. |
يرث LMQGModelConfig
من ModelConfig
، ولكنه يتجاوز المعلمة model_name
لاستخدام النموذج lmqg/t5-base-squad-qg-ae
بشكل افتراضي.
المعلمة | يكتب | تقصير | وصف |
---|---|---|---|
model_name | شارع | 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
وفقًا لاحتياجاتنا.