mistral-finetune
عبارة عن قاعدة تعليمات برمجية خفيفة الوزن تتيح ضبطًا دقيقًا فعالاً للذاكرة وأداءً لنماذج ميسترال. يعتمد ذلك على LoRA، وهو نموذج تدريب حيث يتم تجميد معظم الأوزان ويتم تدريب 1-2٪ فقط من الأوزان الإضافية في شكل اضطرابات مصفوفة منخفضة الرتبة.
للحصول على أقصى قدر من الكفاءة، يوصى باستخدام وحدة معالجة الرسومات A100 أو H100. تم تحسين قاعدة التعليمات البرمجية لإعدادات التدريب ذات العقدة الواحدة لوحدة معالجة الرسومات المتعددة، ولكن بالنسبة للنماذج الأصغر، مثل 7B، تكفي وحدة معالجة رسومات واحدة.
ملحوظة
الهدف من هذا المستودع هو توفير نقطة دخول بسيطة وموجهة لضبط نماذج ميسترال. على هذا النحو، فهو رأي إلى حد ما (خاصة فيما يتعلق بتنسيق البيانات) ولا يهدف إلى أن يكون شاملاً عبر بنيات النماذج المتعددة أو أنواع الأجهزة. لمزيد من الأساليب العامة، يمكنك الاطلاع على بعض المشاريع الرائعة الأخرى مثل torchtune.
13.08.2024 : أصبح إصدار Mistral Large v2 متوافقًا الآن مع mistral-finetune
!
من المستحسن استخدام معدل تعليم أقل مقارنة بالنماذج الأخرى، على سبيل المثال lr=1e-6 يجب أن يعمل بشكل جيد في معظم الحالات.
يتطلب الضبط الدقيق لـ Mistral-Large v2 ذاكرة أكبر بكثير نظرًا لحجم الطراز الأكبر. في الوقت الحالي، قم بتعيين seq_len
على <= 8192
قم بتنزيل تعليمات 123B هنا وقم بتعيين model_id_or_path
على دليل نقطة التفتيش التي تم تنزيلها.
19.07.2024 : ميسترال نيمو متوافق الآن مع mistral-finetune
!
يوصى باستخدام نفس المعلمات الفائقة المستخدمة في الإصدار 7B v3.
يتطلب الضبط الدقيق لـ Mistral-Nemo حاليًا ذاكرة أكبر بكثير نظرًا لحجم المفردات الأكبر الذي يزيد من متطلبات الذاكرة القصوى لفقد CE (سنضيف قريبًا خسارة CE محسّنة هنا). في الوقت الحالي، قم بتعيين seq_len
على <= 16384
قم بتشغيل pip install --upgrade mistral-common
للحصول على إصدار يدعم Tekkenizer ( >=1.3.1
).
قم بتنزيل قاعدة 12B أو Instruct هنا وقم بتعيين model_id_or_path
على دليل نقطة التفتيش الذي تم تنزيله.
للبدء في ضبط Mistral LoRA، اتبع الخطوات التالية:
استنساخ هذا المستودع:
cd $HOME && git clone https://github.com/mistralai/mistral-finetune.git
تثبيت كافة التبعيات المطلوبة:
cd mistral-finetune pip install -r requirements.txt
نوصي بضبط أحد نماذج ميسترال الرسمية التي يمكنك تنزيلها هنا:
نموذج | وصلة | المجموع الاختباري |
---|---|---|
7B قاعدة V3 | قاعدة 7 ب | 0663b293810d7571dad25dae2f2a5806 |
7B تعليمات الإصدار 3 | 7B تعليمات الإصدار 3 | 80b71fcb6416085bcb4efad86dfb4d52 |
8x7B قاعدة V1 | قاعدة 8x7B | (رابط عالي التردد) |
8x7B تعليمات V1 | تعليمات 8x7B | 8e2d3930145dc43d3084396f49d38a3f |
8x22 تعليمات V3 | 8x22 تعليمات | 471a02a6902706a2f1e44a693813855b |
8x22B قاعدة V3 | قاعدة 8x22B | a2fa75117174f87d1197e3a4eb50371a |
تعليمات 12 ب | 12B تعليمات (ميسترال نيمو) | 296fbdf911cb88e6f0be74cd04827fe7 |
قاعدة 12 ب | 12 قاعدة (ميسترال-نيمو) | c5d079ac4b55fc1ae35f51f0a3c0eb83 |
ميسترال كبير 2 | 123B تعليمات (الإصدار الثاني الكبير) | fc602155f9e39151fba81fcaab2fa7c4 |
ملاحظة هامة : بالنسبة إلى 8x7B Base V1 و8x7B Instruct V1، من الضروري استخدام رمز v3 الخاص بنا وتوسيع حجم المفردات إلى 32768 قبل الضبط الدقيق. للحصول على تعليمات مفصلة حول هذه العملية، يرجى الرجوع إلى قسم "امتداد النموذج".
على سبيل المثال، لتنزيل النموذج الأساسي 7B، يمكنك تشغيل الأمر التالي:
mkdir -p ~/${HOME}/mistral_modelscd ${HOME} && wget https://models.mistralcdn.com/mistral-7b-v0-3/mistral-7B-v0.3.tar القطران -xf ميسترال-7B-v0.3.tar -C ميسترال_models
تأكد من تعديل البرنامج النصي للتدريب الخاص بك وإضافة المسار إلى المجلد الذي تم تنزيله كـ model_id_or_path
.
على سبيل المثال، قم بتعديل example/7B.yaml ليشمل المسار المطلق إلى $HOME/mistral_models/7B
:
model_id_or_path: "/Users/johndoe/mistral_models/7B"
لضمان التدريب الفعال، لدى mistral-finetune
متطلبات صارمة لكيفية تنسيق بيانات التدريب.
يجب تخزين جميع ملفات البيانات في ملفات بتنسيق jsonl.
يمكنك إنشاء نوعين من ملفات البيانات:
تتوافق بيانات التدريب المسبق مع بيانات النص العادي المخزنة في مفتاح "text"
. على سبيل المثال:
{"text": "النص الموجود في الوثيقة رقم 1"} {"text": "النص الموجود في الوثيقة رقم 2"}
يتم حاليًا دعم نوعين مختلفين من التعليمات التالية للبيانات:
إرشاد : بيانات المحادثة المخزنة في مفتاح "messages"
على شكل قائمة. كل عنصر في القائمة عبارة عن قاموس يحتوي على مفتاحي "content"
و "role"
. "role"
عبارة عن سلسلة من "المستخدم" أو "المساعد" أو "النظام". لن يتم حساب الخسارة إلا إذا كان "الدور" == "المساعد". على سبيل المثال:
{ "رسائل": [ { "role": "user"، "content": "تفاعل المستخدم رقم 1 الوارد في المستند رقم 1" }, { "role": "assistant"، "content": "تفاعل الروبوت رقم 1 الوارد في المستند رقم 1" }, { "role": "user"، "content": "تفاعل المستخدم رقم 2 الوارد في الوثيقة رقم 1" }, { "role": "assistant"، "content": "تفاعل الروبوت رقم 2 الوارد في الوثيقة رقم 1" } ] } { "رسائل": [ { "role": "user"، "content": "تفاعل المستخدم رقم 1 الوارد في الوثيقة رقم 2" }, { "role": "assistant"، "content": "تفاعل الروبوت رقم 1 الوارد في الوثيقة رقم 2" }, { "role": "user"، "content": "تفاعل المستخدم رقم 2 الوارد في الوثيقة رقم 2" }, { "role": "assistant"، "content": "تفاعل الروبوت رقم 2 الوارد في الوثيقة رقم 2"، "الوزن": 0، # لا تتدرب على رقم 2 }, { "role": "user"، "content": "تفاعل المستخدم رقم 3 الوارد في الوثيقة رقم 2" }, { "role": "assistant"، "content": "تفاعل الروبوت رقم 3 الوارد في الوثيقة رقم 2" } ] }
استدعاء الوظيفة : بيانات المحادثة المخزنة في مفتاح "messages"
على شكل قائمة. كل عنصر قائمة عبارة عن قاموس يحتوي على مفاتيح "role"
و "content"
أو "tool_calls"
. "role"
عبارة عن سلسلة من "المستخدم" أو "المساعد" أو "النظام" أو "الأداة". لن يتم حساب الخسارة إلا إذا كان "الدور" == "المساعد".
ملاحظة : في وظيفة استدعاء "id"
"tool_calls"
و "tool_call_id"
يتم إنشاء سلاسل عشوائيًا تتكون من 9 أحرف بالضبط. نوصي بإنشاء هذا تلقائيًا في برنامج نصي لإعداد البيانات كما هو الحال هنا.
على سبيل المثال:
{ "رسائل": [ { "role": "system"، "content": "أنت مساعد مفيد ولديك إمكانية الوصول إلى الوظائف التالية لمساعدة المستخدم، ويمكنك استخدام الوظائف إذا لزم الأمر" }, { "role": "user"، "content": "هل يمكنك مساعدتي في إنشاء الجناس الناقص للكلمة "استمع"؟" }, { "دور": "مساعد"، "tool_calls": [ { "id": "TX92Jm8Zi"، "type": "function"، "function": { "name": "generate_anagram"، "arguments": "{"word": "listen"}" } } ] }, { "role": "tool"، "content": "{"الجناس الناقص": "صامت"}"، "tool_call_id": "TX92Jm8Zi" }, { "role": "assistant"، "content": "الجناس الناقص لكلمة "استمع" هو "صامت"." }, { "role": "user"، "content": "هذا رائع! هل يمكنك إنشاء الجناس الناقص لكلمة "سباق"؟" }, { "دور": "مساعد"، "tool_calls": [ { "id": "3XhQnxLsT"، "type": "function"، "function": { "name": "generate_anagram"، "arguments": "{"word": "race"}" } } ] } ]، "أدوات": [ { "type": "function"، "function": { "name": "generate_anagram"، "description": "إنشاء الجناس الناقص لكلمة معينة"، "parameters": { "type": "object"، " property": { "word": { "type": "string"، "description": "الكلمة المراد إنشاء الجناس الناقص لها" } }، "مطلوب": [ "كلمة" ] } } } ] }
قبل البدء في التدريب، يجب عليك التحقق من تنسيق مجموعة البيانات الخاصة بك بشكل صحيح والحصول على تقدير لوقت التدريب. يمكنك القيام بذلك باستخدام البرنامج النصي ./utils/validate_data.
لاحظ أن هذه الخطوة ضرورية لضمان تنسيق البيانات بشكل صحيح.
دعنا نتناول مثالًا بسيطًا لتدريب نموذج على التعليمات التالية:
قم بتحميل قطعة من Ultachat_200k
قم بإنشاء مجلد البيانات وانتقل إلى المجلد.
cd $HOME && mkdir -p data && cd $HOME/data
قم بتحميل البيانات في Pandas Dataframe.
ملاحظة : تأكد من تثبيت Pandas وPyarrow ( pip install pandas pyarrow
).
استيراد الباندا كـ pddf = pd.read_parquet('https://huggingface.co/datasets/HuggingFaceH4/ultrachat_200k/resolve/main/data/test_gen-00000-of-00001-3d4cd8309148a71f.parquet')
انقسم إلى تدريب وتقييم
df_train=df.sample(frac=0.95,random_state=200)df_eval=df.drop(df_train.index)
حفظ البيانات في jsonl
df_train.to_json("ultrachat_chunk_train.jsonl"، orient = "records"، خطوط = صحيح)df_eval.to_json ("ultrachat_chunk_eval.jsonl"، orient = "سجلات"، خطوط = صحيح)
قم بتعديل yaml التدريبي الخاص بك ليشمل مجموعة بيانات Ultrachat والتحقق من yaml
قم بتعديل المثال/7B.yaml ليشمل المسار المطلق إلى $HOME/data/ultrachat_chunk_train.jsonl
بالإضافة إلى وزن خلط مجموعة البيانات للتدريب و $HOME/data/ultrachat_chunk_eval.jsonl
للتقييم، على سبيل المثال
data: instruct_data: "/Users/johndoe/data/ultrachat_chunk_train.jsonl" eval_instruct_data: "/Users/johndoe/data/ultrachat_chunk_eval.jsonl"
يمكنك الآن التحقق من yaml التدريبي الخاص بك للتأكد من تنسيق البيانات بشكل صحيح وللحصول على تقدير لوقت التدريب الخاص بك.
cd $HOME/mistral-finetune python -m utils.validate_data --train_yaml example/7B.yaml
عند الانتهاء، من المفترض أن تشاهد تقرير خطأ يحتوي على العديد من الأخطاء التالية:
The data in line 1412 of dataset /Users/johndoe/data/ultrachat_chunk_eval.jsonl is incorrectly formatted. Expected last role to be one of: [assistant] but got user The data in line 1413 of dataset /Users/johndoe/data/ultrachat_chunk_eval.jsonl is incorrectly formatted. Expected last role to be one of: [assistant] but got user The data in line 1414 of dataset /Users/johndoe/data/ultrachat_chunk_eval.jsonl is incorrectly formatted. Expected last role to be one of: [assistant] but got user The data in line 1415 of dataset /Users/johndoe/data/ultrachat_chunk_eval.jsonl is incorrectly formatted. Expected last role to be one of: [assistant] but got user
يبدو أن العديد من المحادثات تنتهي بدور "المستخدم" وهو أمر غير ضروري لأننا نتدرب فقط على رسائل "المساعد" وبالتالي نقوم بمعالجة البيانات دون داع.
يمكنك الاستفادة من ./utils/reformat_data.py لتصحيح البيانات:
cd $HOME/mistral-finetune python -m utils.reformat_data $HOME/data/ultrachat_chunk_train.jsonl python -m utils.reformat_data $HOME/data/ultrachat_chunk_eval.jsonl
يجب أن ترى أنه سيتم تخطي بعض العينات.
إمكانية تغيير عدد خطوات التدريب
عند تصحيح مجموعة البيانات، قم بتشغيل البرنامج النصي مرة أخرى
cd $HOME/mistral-finetune python -m utils.validate_data --train_yaml example/7B.yaml
يجب أن تحصل على ملخص لإدخال البيانات ومعلمات التدريب:
Train States -------------------- { "expected": { "eta": "00:52:44", "data_tokens": 25169147, "train_tokens": 131072000, "epochs": "5.21", "max_steps": 500, "data_tokens_per_dataset": { "/Users/johndoe/data/ultrachat_chunk_train.jsonl": "25169147.0" }, "train_tokens_per_dataset": { "/Users/johndoe/data/ultrachat_chunk_train.jsonl": "131072000.0" }, "epochs_per_dataset": { "/Users/johndoe/data/ultrachat_chunk_train.jsonl": "5.2" } }, }
سيؤدي تعيين max_steps
على 500 إلى التكرار عبر مجموعة البيانات 5 مرات تقريبًا وهو أمر معقول، ولكنه قد يكون أكثر من اللازم. يظهر الإعداد الموصى به أدناه والذي قد يستغرق 30 دقيقة فقط على مجموعة 8xH100.
لننتقل بعد ذلك إلى حالة استخدام أكثر تقدمًا لضبط نموذج عند استدعاء الوظيفة. يتطلب استدعاء الوظيفة أن تكون البيانات بالتنسيق الموضح أعلاه. دعونا نتناول مثالا.
قم بتحميل نسخة بتنسيق الدردشة من مجموعة بيانات استدعاء دالة Glaive
قم بإنشاء مجلد البيانات وانتقل إلى المجلد.
cd $HOME && mkdir -p data && cd $HOME/data
قم بتحميل البيانات في Pandas Dataframe.
ملاحظة : تأكد من تثبيت Pandas وPyarrow ( pip install pandas pyarrow
).
استيراد الباندا بتنسيق pddf = pd.read_parquet('https://huggingface.co/datasets/Locutusque/function-calling-chatml/resolve/main/data/train-00000-of-00001-f0b56c6983b4a78f.parquet')
انقسم إلى تدريب وتقييم
df_train=df.sample(frac=0.95,random_state=200)df_eval=df.drop(df_train.index)
حفظ البيانات في jsonl
df_train.to_json("glaive_train.jsonl"، orient = "records"، خطوط = True)df_eval.to_json ("glaive_eval.jsonl"، orient = "records"، خطوط = True)
إعادة تنسيق مجموعة البيانات
كما يمكن للمرء أن يرى، فإن مجموعة البيانات لا تتبع تنسيق استدعاء الوظيفة المطلوبة، لذلك ستحتاج إلى إعادة تنسيقها. من بين أشياء أخرى، يجب إعادة تسمية "from"
إلى "user"
ويجب إزالة الأحرف "n"
الزائدة. بالنسبة لمجموعة البيانات هذه، يمكنك الاستفادة من ./utils/reformat_data_glaive.py
:
cd $HOME/mistral-finetune python -m utils.reformat_data_glaive $HOME/data/glaive_train.jsonl python -m utils.reformat_data_glaive $HOME/data/glaive_eval.jsonl
سيؤدي تشغيل هذا الأمر إلى التأكد من أن معظم العينات بالتنسيق الصحيح.
ملاحظة : من المستحيل كتابة نصوص برمجية لإعادة التنسيق تناسب جميع أنواع مجموعات البيانات. إذا كانت لديك مجموعات بيانات لا تتبع التنسيق المطلوب أعلاه بعد، فسيتعين عليك على الأرجح إنشاء برنامج نصي لإعادة التنسيق بنفسك (mistral-chat أو chat-gpt هو أفضل صديق لك هنا!).
التحقق من صحة مجموعة البيانات
يمكنك الآن التحقق من صحة مجموعة البيانات عن طريق تعيين data.instruct_data
و data.eval_instruct_data
على $HOME/data/glaive_train.jsonl
و $HOME/data/glaive_eval.jsonl
في example/7B.yaml
على التوالي.
لا تزال مجموعات البيانات المعاد تنسيقها تحتوي على بعض الأخطاء التي يمكن إزالتها باستخدام --create_corrected
. لهذا، تأكد من إضافة --create_corrected
على النحو التالي:
cd $HOME/mistral-finetune python -m utils.validate_data --train_yaml example/7B.yaml --create_corrected
سيؤدي تشغيل هذا الأمر إلى إظهار بعض الأخطاء وحفظ مجموعتي بيانات جديدتين $HOME/data/glaive_train.jsonl.corrected
و $HOME/data/glaive_eval.jsonl.corrected
. تأكد من استخدام مجموعتي البيانات هاتين في example/7B.yaml
وقم بتشغيل الأمر مرة أخرى. الآن يجب أن يتم تنسيق مجموعة البيانات بشكل صحيح!
بعد اتباع قسم التحقق من مجموعة البيانات، يمكننا الآن بدء التدريب. للحصول على تدريب أسرع، نوصي بتعيين max_steps على 300 فقط. تأكد من تحديد run_dir
في مجلد تجربتك وتعيين wandb_project
اختياريًا على مشروع الأوزان والتحيزات للتسجيل، على سبيل المثال :
max_steps: 300 run_dir: "/Users/johndoe/ultra_chat_test" wandb.project: ultra_chat
اختياريًا، يمكنك أيضًا تعيين wandb
احفظ تكوين التدريب وابدأ التدريب! تأكد من ضبط --nproc-per-node
على عدد وحدات معالجة الرسومات المتاحة.
cd $HOME/mistral-finetune torchrun --nproc-per-node 8 --master_port $RANDOM -m train example/7B.yaml
يجب أن يستغرق التدريب على الدردشة الفائقة حوالي 30 دقيقة على عقدة 8xH100 ويجب أن تعطي الأوزان الناتجة درجة MT Bench حوالي 6.3.
يجب أن يستغرق التدريب على glaive حوالي ساعة واحدة على عقدة 8xH100 ويجب أن تعمل الأوزان الناتجة بشكل جيد لاستدعاء الوظائف.
يحدد المثال mistral-finetune/examples/7B
معلمات معقولة لمعدل التعلم، وتناقص الوزن، وما إلى ذلك... ولكن ننصحك بتخصيص هذه الإعدادات لحالة الاستخدام الخاصة بك.
بشكل عام، يجب أن يملأ تكوين التدريب المعلمات التالية:
يحدد model_id_or_path
النموذج الذي سيتم بدء التدريب منه. يمكن أن يكون هذا مسارًا إلى نموذج تم تدريبه مسبقًا أو دليل نموذج محلي.
يحدد run_dir
الدليل الذي يتم فيه تخزين نقاط فحص ومقاييس التدريب.
يحدد seq_len
طول التسلسل للتدريب. هذا هو الحد الأقصى لطول تسلسلات الإدخال التي سيعالجها النموذج. يتم تعبئة العينات للوصول إلى طول seq_len
لتحقيق أقصى قدر من كفاءة التدريب.
يحدد batch_size
عدد أمثلة التدريب المستخدمة لكل وحدة معالجة رسومات. ملاحظة : إجمالي حجم الدفعة الفعالة (بالرموز) عبر جميع وحدات معالجة الرسومات يساوي num_gpus
x batch_size
x seq_len
.
يحدد max_steps
الحد الأقصى لعدد خطوات التدريب. هذا هو العدد الإجمالي للتكرارات التي سيتم تشغيلها في عملية التدريب. يمكن تعديله بناءً على الاحتياجات المحددة لسيناريو التدريب الخاص بك. إجمالي عدد الرموز المميزة التي تمت مشاهدتها أثناء التدريب هو max_steps
x num_gpus
x batch_size
x seq_len
.
يحدد optim.lr
معدل التعلم. هذا هو معدل التعلم الأولي للمحسن.
يحدد optim.weight_decay
تسوس الوزن. تسوس الوزن هو أسلوب تنظيم يستخدم لمنع الإفراط في التجهيز عن طريق معاقبة الأوزان الكبيرة. نوصي بتركه عند 0.1.
يحدد optim.pct_start
النسبة المئوية لإجمالي خطوات التدريب المستخدمة لمرحلة إحماء معدل التعلم قبل أن يبدأ في الانخفاض. وهو يتوافق مع pct_start لـ OneCycleLR الخاص بـ PyTorch.
يحدد lora.rank
حجم محولات LoRA (التكيف منخفض الرتبة). نوصي بـ 64 أو أقل، مما يضبط ترتيب التحليل منخفض المرتبة المستخدم في LoRA.
تحدد seed
البذرة العشوائية للتهيئة وخلط/أخذ العينات للبيانات. يضمن وضع البذرة إمكانية تكرار النتائج.
يحدد log_freq
تردد التسجيل. يحدد هذا عدد المرات (بالخطوات) لتسجيل مقاييس التدريب.
data.instruct_data
هو المسار إلى بيانات التعليمات المستخدمة للتدريب. يجب ملء هذا الحقل بمصدر بيانات واحد أو عدة مصادر بالتنسيق الموضح أعلاه. يجب أن يكون كل مصدر بيانات إما مسارًا إلى ملف jsonl أو مسارًا إلى دليل يحتوي على ملفات jsonl متبوعًا بوزن لتحديد أهمية مجموعة البيانات هذه:
. على سبيل المثال: data.instruct_data: "/path/to/data1.jsonl:5.,/path/to/data2.jsonl:1.,/path/to/dir_of_jsonls:1."
تعتبر data.data
مسارًا اختياريًا لبيانات التدريب المسبق الإضافية بالتنسيق كما هو موضح أعلاه. لاحظ أنه يمكن ترك هذا الحقل فارغًا.
data.eval_instruct_data
هو مسار اختياري لبيانات تعليمات التقييم لإجراء التحقق المتبادل في كل خطوات eval_freq
. يتم عرض مقاييس التحقق المتبادل loss
perplexity
.
يحدد eval_freq
عدد المرات (في الخطوات) لتقييم النموذج. يحدد هذا الفاصل الزمني الذي يتم فيه تقييم النموذج في مجموعة التحقق من الصحة.
no_eval
هي علامة لتمكين أو تعطيل التقييم المتوسط. يؤدي ضبطه على False إلى تمكين التقييم الدوري أثناء التدريب.
يحدد ckpt_freq
عدد المرات (في الخطوات) لحفظ نقاط التفتيش. يحدد هذا الفاصل الزمني الذي يتم فيه حفظ حالة النموذج.
يحدد save_adapters
ما إذا كان سيتم حفظ نقاط فحص LoRA المدربة فقط أو ما إذا كان يجب دمج LoRA المدرب مباشرة في النموذج الأساسي وحفظه. ملاحظة : عند ضبط save_adapters=False
، تأكد من أن لديك ذاكرة كافية لوحدة المعالجة المركزية (CPU) ووحدة معالجة الرسومات (GPU) لحفظ النموذج الكامل في عملية واحدة (عادةً ما يكون هذا ممكنًا فقط للطراز 7B).
يتم استخدام wandb.key
لتمرير مفتاح API الخاص بالأوزان والتحيزات (wandb) للتسجيل. يتيح لك ذلك تسجيل مقاييس التدريب في لوحة معلومات Wandb.
يحدد wandb.project
اسم مشروع wandb. هذا هو المكان الذي سيتم فيه تسجيل تشغيل التدريب في واجهة wandb.
بمجرد تدريب النموذج الخاص بك، يجب عليك تجربته في الاستدلال. نوصي باستخدام الاستدلال ميسترال.
تأكد من تثبيت mistral_inference
بشكل صحيح:
pip install mistral_inference
بافتراض أن lora.safetensors
الخاص بك محفوظ ضمن $HOME/ultra_chat_test/checkpoints/checkpoint_000300/consolidated/lora.safetensors
، يمكنك الدردشة مع النموذج باستخدام mistral_inference
، على سبيل المثال :
Mistral-chat /mnt/slow/runs/patrick/mistral-finetune/7B/ --max_tokens 256 --درجة الحرارة 1.0 --instruct --lora_path $HOME/ultra_chat_test/checkpoints/checkpoint_000300/consolidated/lora.safetensors
لقد أضفنا دعمًا صريحًا للأوزان والتحيزات لمساعدتك في مراقبة جولاتك التدريبية وتصورها. يتيح لك هذا التكامل تسجيل المقاييس المختلفة وتتبع التجارب بسهولة.
لاستخدام الأوزان والتحيزات مع mistral-finetune
، اتبع الخطوات التالية:
تثبيت الأوزان والتحيزات:
تأكد من تثبيت مكتبة wandb
. يمكنك تثبيته باستخدام النقطة:
نقطة تثبيت Wandb
بمجرد بدء التدريب، يمكنك مراقبة التقدم المحرز في الوقت الفعلي من خلال زيارة لوحة معلومات مشروع wandb. سيتم تسجيل وتصور جميع المقاييس، بما في ذلك فقدان التدريب، وفقدان التقييم، ومعدل التعلم، وما إلى ذلك.
لمزيد من التفاصيل حول كيفية استخدام wandb، قم بزيارة وثائق الأوزان والتحيزات.
هام : لاحظ أنه لا يمكن ضبط سوى نماذج ميسترال المتوافقة مع أداة الرمز المميز v3، مما يستلزم أن يكون حجم المفردات للنماذج 32768 - وليس 32000. ومع ذلك، يمكن بسهولة توسيع الإصدار الأقدم من حجم المفردات 32000 للحصول على حجم مفردات من 32768 باستخدام:
python -m utils.extend_model_vocab --original_model_ckpt /folder/to/old/model --extended_model_ckpt /folder/to/extended/model
بمجرد نجاح الامتداد، يمكن ضبطه باستخدام نقطة فحص النموذج التي تم إنشاؤها حديثًا في /folder/to/extended/model
.
ما هي أفضل الممارسات لضبط وزارة التربية والتعليم؟
نحن نرى درجة أعلى من التباين في الأداء عند ضبط نماذج وزارة التربية والتعليم. ليس من غير المعتاد أن نجد أن الضبط الدقيق لنماذج وزارة البيئة باستخدام بذور مختلفة يمكن أن يؤدي إلى تباين كبير في الأداء. لم نلاحظ مثل هذا التباين الكبير مع النماذج الكثيفة. ولذلك، نقترح تشغيل مثيلات متعددة لنفس عملية الضبط الدقيق على نماذج وزارة التربية واختيار النموذج الذي يحقق أفضل أداء.
كيف يمكنني تحديد عدد الرموز المميزة المستخدمة أثناء عملية التدريب على النموذج؟
يمكنك استخدام البرنامج النصي التالي لمعرفة ذلك: https://github.com/mistralai/mistral-finetune/blob/main/utils/validate_data.py. يقبل هذا البرنامج النصي ملف تدريب .yaml كمدخل ويعيد عدد الرموز المميزة التي يتم تدريب النموذج عليها.
ماذا علي أن أفعل إذا واجهت خطأ نفاد الذاكرة في CUDA؟
أحد الحلول الممكنة هو تقليل حجم الدفعة لكل وحدة معالجة رسومات. حجم الدفعة يساوي seq_len
x batch_size
. حاول ضبط batch_size
على 1 وتقليل seq_len
. يمكنك تحديد batch_size
و seq_len
في ملف .yaml.