Axolotl هي أداة مصممة لتبسيط الضبط الدقيق لنماذج الذكاء الاصطناعي المختلفة، وتقدم الدعم لتكوينات وبنيات متعددة.
سمات:
جدول المحتويات
| يوفر Axolotl مستودعًا موحدًا للضبط الدقيق تفضل وأسئلة قنفذ البحر !! |
FP16/FP32 | لورا | qlora | gptq | gptq مع فلاش عناية | فلاش عناية | عناية xformers | |
---|---|---|---|---|---|---|---|
اللاما | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
ميسترال | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
ميكسترال-وزارة التعليم | ✅ | ✅ | ✅ | ❓ | ❓ | ❓ | ❓ |
ميكسترال8X22 | ✅ | ✅ | ✅ | ❓ | ❓ | ❓ | ❓ |
بيثيا | ✅ | ✅ | ✅ | ❓ | |||
المخ | ✅ | ✅ | ✅ | ❓ | |||
btlm | ✅ | ✅ | ✅ | ❓ | |||
mpt | ✅ | ❓ | ❓ | ||||
الصقر | ✅ | ✅ | ✅ | ❓ | |||
gpt-j | ✅ | ✅ | ✅ | ❓ | ❓ | ||
XGen | ✅ | ❓ | ✅ | ❓ | ❓ | ❓ | ✅ |
فاي | ✅ | ✅ | ✅ | ❓ | ❓ | ❓ | ❓ |
RWKV | ✅ | ❓ | ❓ | ❓ | ❓ | ❓ | ❓ |
كوين | ✅ | ✅ | ✅ | ❓ | ❓ | ❓ | ❓ |
جيما | ✅ | ✅ | ✅ | ❓ | ❓ | ✅ | ❓ |
جامبا | ✅ | ✅ | ✅ | ❓ | ❓ | ✅ | ❓ |
✅: مدعوم : غير مدعوم ❓: غير مجرب
ابدأ مع Axolotl في خطوات قليلة فقط! سيرشدك دليل البدء السريع هذا خلال عملية إعداد مهمة الضبط الدقيق الأساسية وتشغيلها.
المتطلبات : Nvidia GPU (بنية Ampere أو أحدث لـ bf16
وFlash Attention)، وPython >=3.10 وPyTorch >=2.3.1.
git clone https://github.com/axolotl-ai-cloud/axolotl
cd axolotl
pip3 install packaging ninja
pip3 install -e ' .[flash-attn,deepspeed] '
# preprocess datasets - optional but recommended
CUDA_VISIBLE_DEVICES= " " python -m axolotl.cli.preprocess examples/openllama-3b/lora.yml
# finetune lora
accelerate launch -m axolotl.cli.train examples/openllama-3b/lora.yml
# inference
accelerate launch -m axolotl.cli.inference examples/openllama-3b/lora.yml
--lora_model_dir= " ./outputs/lora-out "
# gradio
accelerate launch -m axolotl.cli.inference examples/openllama-3b/lora.yml
--lora_model_dir= " ./outputs/lora-out " --gradio
# remote yaml files - the yaml config can be hosted on a public URL
# Note: the yaml config must directly link to the **raw** yaml
accelerate launch -m axolotl.cli.train https://raw.githubusercontent.com/axolotl-ai-cloud/axolotl/main/examples/openllama-3b/lora.yml
docker run --gpus ' "all" ' --rm -it axolotlai/axolotl:main-latest
أو قم بتشغيل الملفات الحالية للتطوير:
docker compose up -d
نصيحة
إذا كنت تريد تصحيح أخطاء axolotl أو تفضل استخدام Docker كبيئة التطوير الخاصة بك، فراجع قسم دليل تصحيح الأخطاء في Docker.
سيكون أمر Docker الأكثر قوة للتشغيل هو:
docker run --privileged --gpus ' "all" ' --shm-size 10g --rm -it --name axolotl --ipc=host --ulimit memlock=-1 --ulimit stack=67108864 --mount type=bind,src= " ${PWD} " ,target=/workspace/axolotl -v ${HOME} /.cache/huggingface:/root/.cache/huggingface axolotlai/axolotl:main-latest
بالإضافة إلى ذلك:
--ipc
و --ulimit
args.--mount
/ -v
args.--name
ببساطة الإشارة إلى الحاوية في vscode ( Dev Containers: Attach to Running Container...
) أو في المحطة الطرفية الخاصة بك.--privileged
جميع الإمكانات للحاوية.--shm-size 10g
على زيادة حجم الذاكرة المشتركة. استخدم هذا إذا رأيت exitcode: -7
أخطاء باستخدام السرعة العميقة.مزيد من المعلومات على موقع نفيديا
تثبيت بايثون>= 3.10
تثبيت pytorch المستقر https://pytorch.org/get-started/locally/
تثبيت Axolotl مع تبعيات بايثون
pip3 install packaging
pip3 install -e ' .[flash-attn,deepspeed] '
(اختياري) قم بتسجيل الدخول إلى Huggingface لاستخدام النماذج/مجموعات البيانات المسورة.
huggingface-cli login
احصل على الرمز المميز على Huggingface.co/settings/tokens
بالنسبة لموفري وحدات معالجة الرسومات السحابية الذين يدعمون صور عامل الإرساء، استخدم axolotlai/axolotl-cloud:main-latest
sudo apt update
sudo apt install -y python3.10
sudo update-alternatives --install /usr/bin/python python /usr/bin/python3.10 1
sudo update-alternatives --config python # pick 3.10 if given option
python -V # should be 3.10
wget https://bootstrap.pypa.io/get-pip.py
python get-pip.py
تثبيت Pytorch https://pytorch.org/get-started/locally/
اتبع التعليمات الخاصة بالبدء السريع.
يجري
pip3 install protobuf==3.20.3
pip3 install -U --ignore-installed requests Pillow psutil scipy
export LD_LIBRARY_PATH=/usr/lib/x86_64-linux-gnu: $LD_LIBRARY_PATH
استخدم نظام التشغيل Deeplearning linux مع تثبيت cuda وpytorch. ثم اتبع التعليمات الموجودة على التشغيل السريع.
تأكد من تشغيل ما يلي لإلغاء تثبيت xla.
pip uninstall -y torch_xla[tpu]
الرجاء استخدام WSL أو Docker!
استخدم ما يلي بدلاً من طريقة التثبيت في QuickStart.
pip3 install -e '.'
مزيد من المعلومات: mac.md
الرجاء استخدام هذا المثال دفتر الملاحظات.
للتشغيل على مثيلات GPU (سواء عند الطلب أو المثيلات الفورية) على أكثر من 7 سحابات (GCP وAWS وAzure وOCI والمزيد)، يمكنك استخدام SkyPilot:
pip install " skypilot-nightly[gcp,aws,azure,oci,lambda,kubernetes,ibm,scp] " # choose your clouds
sky check
احصل على مثال YAMLs لاستخدام Axolotl لضبط mistralai/Mistral-7B-v0.1
:
git clone https://github.com/skypilot-org/skypilot.git
cd skypilot/llm/axolotl
استخدم أمرًا واحدًا لبدء التشغيل:
# On-demand
HF_TOKEN=xx sky launch axolotl.yaml --env HF_TOKEN
# Managed spot (auto-recovery on preemption)
HF_TOKEN=xx BUCKET= < unique-name > sky spot launch axolotl-spot.yaml --env HF_TOKEN --env BUCKET
للتشغيل على مثيل وحدة معالجة الرسومات (سواء عند الطلب أو المثيلات الفورية) على السحابات العامة (GCP وAWS وAzure وLambda Labs وTensorDock وVast.ai وCUDO)، يمكنك استخدام dstack.
اكتب الوصف الوظيفي في YAML على النحو التالي:
# dstack.yaml
type : task
image : axolotlai/axolotl-cloud:main-latest
env :
- HUGGING_FACE_HUB_TOKEN
- WANDB_API_KEY
commands :
- accelerate launch -m axolotl.cli.train config.yaml
ports :
- 6006
resources :
gpu :
memory : 24GB..
count : 2
ثم قم ببساطة بتشغيل المهمة باستخدام أمر dstack run
. إلحاق خيار --spot
إذا كنت تريد مثيلًا موضعيًا. سيُظهر لك أمر dstack run
المثيل بأرخص سعر عبر الخدمات السحابية المتعددة:
pip install dstack
HUGGING_FACE_HUB_TOKEN=xxx WANDB_API_KEY=xxx dstack run . -f dstack.yaml # --spot
لمزيد من حالات الاستخدام الدقيقة، يرجى الرجوع إلى وثائق dstack الرسمية والوصف التفصيلي لمثال axolotl في المستودع الرسمي.
يدعم Axolotl مجموعة متنوعة من تنسيقات مجموعات البيانات. يوصى باستخدام ملف JSONL. يعتمد مخطط JSONL على المهمة ونموذج المطالبة الذي ترغب في استخدامه. بدلاً من JSONL، يمكنك أيضًا استخدام مجموعة بيانات HuggingFace مع أعمدة لكل حقل JSONL.
راجع الوثائق لمزيد من المعلومات حول كيفية استخدام تنسيقات مجموعات البيانات المختلفة.
انظر الأمثلة للبدء السريع. يوصى بتكرارها وتعديلها حسب احتياجاتك. وأهم الخيارات هي:
نموذج
base_model : ./llama-7b-hf # local or huggingface repo
ملاحظة: سيقوم الكود بتحميل البنية الصحيحة.
dataset
datasets :
# huggingface repo
- path : vicgalle/alpaca-gpt4
type : alpaca
# huggingface repo with specific configuration/subset
- path : EleutherAI/pile
name : enron_emails
type : completion # format from earlier
field : text # Optional[str] default: text, field to use for completion data
# huggingface repo with multiple named configurations/subsets
- path : bigcode/commitpackft
name :
- ruby
- python
- typescript
type : ... # unimplemented custom format
# chat_template https://axolotl-ai-cloud.github.io/axolotl/docs/dataset-formats/conversation.html#chat_template
- path : ...
type : chat_template
chat_template : chatml # defaults to tokenizer's chat_template
# local
- path : data.jsonl # or json
ds_type : json # see other options below
type : alpaca
# dataset with splits, but no train split
- path : knowrohit07/know_sql
type : context_qa.load_v2
train_on_split : validation
# loading from s3 or gcs
# s3 creds will be loaded from the system default and gcs only supports public access
- path : s3://path_to_ds # Accepts folder with arrow/parquet or file path like above. Supports s3, gcs.
...
# Loading Data From a Public URL
# - The file format is `json` (which includes `jsonl`) by default. For different formats, adjust the `ds_type` option accordingly.
- path : https://some.url.com/yourdata.jsonl # The URL should be a direct link to the file you wish to load. URLs must use HTTPS protocol, not HTTP.
ds_type : json # this is the default, see other options below.
تحميل
load_in_4bit : true
load_in_8bit : true
bf16 : auto # require >=ampere, auto will detect if your GPU supports this and choose automatically.
fp16 : # leave empty to use fp16 when bf16 is 'auto'. set to false if you want to fallback to fp32
tf32 : true # require >=ampere
bfloat16 : true # require >=ampere, use instead of bf16 when you don't want AMP (automatic mixed precision)
float16 : true # use instead of fp16 when you don't want AMP
ملحوظة: الريبو لا يقوم بتكميم 4 بت.
لورا
adapter : lora # 'qlora' or leave blank for full finetune
lora_r : 8
lora_alpha : 16
lora_dropout : 0.05
lora_target_modules :
- q_proj
- v_proj
راجع هذه المستندات للتعرف على جميع خيارات التكوين.
يجري
accelerate launch -m axolotl.cli.train your_config.yml
نصيحة
يمكنك أيضًا الرجوع إلى ملف التكوين المستضاف على عنوان URL عام، على سبيل المثال accelerate launch -m axolotl.cli.train https://yourdomain.com/your_config.yml
يمكنك بشكل اختياري إنشاء رمز مميز مسبقًا لمجموعة البيانات بما يلي قبل الضبط الدقيق. يوصى بهذا لمجموعات البيانات الكبيرة.
dataset_prepared_path:
إلى مجلد محلي لحفظ وتحميل مجموعة البيانات المُرمزة مسبقًا.push_dataset_to_hub: hf_user/repo
لدفعه إلى Huggingface.--debug
لرؤية الأمثلة التي تمت معالجتها مسبقًا. python -m axolotl.cli.preprocess your_config.yml
فيما يلي الخيارات المتاحة في axolotl للتدريب باستخدام وحدات معالجة الرسومات المتعددة. لاحظ أن DeepSpeed هو خيار GPU المتعدد الموصى به حاليًا لأن FSDP قد يواجه عدم استقرار الخسارة.
Deepspeed عبارة عن مجموعة تحسين لأنظمة GPU المتعددة، مما يسمح لك بتدريب نماذج أكبر بكثير مما قد تكون قادرًا عادةً على ملاءمته لذاكرة VRAM الخاصة بوحدة معالجة الرسومات الخاصة بك. مزيد من المعلومات حول أنواع التحسين المختلفة للسرعة العميقة متاحة على https://huggingface.co/docs/accelerate/main/en/usage_guides/deepspeed#what-is-integrated
نحن نقدم العديد من تكوينات JSON الافتراضية للسرعة العميقة للمرحلة 1 و2 و3 من Zero.
deepspeed : deepspeed_configs/zero1.json
accelerate launch -m axolotl.cli.train examples/llama-2/config.yml --deepspeed deepspeed_configs/zero1.json
fsdp :
- full_shard
- auto_wrap
fsdp_config :
fsdp_offload_params : true
fsdp_state_dict_type : FULL_STATE_DICT
fsdp_transformer_layer_cls_to_wrap : LlamaDecoderLayer
يدعم Axolotl التدريب على FSDP وQLoRA، راجع هذه المستندات لمزيد من المعلومات.
تأكد من تعيين متغير البيئة WANDB_API_KEY
(مستحسن) أو تسجيل الدخول إلى wandb باستخدام wandb login
.
wandb_mode :
wandb_project :
wandb_entity :
wandb_watch :
wandb_name :
wandb_log_model :
تأكد من تعيين متغير البيئة COMET_API_KEY
(مستحسن) أو تسجيل الدخول إلى wandb باستخدام comet login
.
use_comet :
comet_api_key :
comet_workspace :
comet_project_name :
comet_experiment_key :
comet_mode :
comet_online :
comet_experiment_config :
من المهم أن يكون لديك رموز مميزة مثل المحددات ونهاية التسلسل وبداية التسلسل في مفردات أداة الرمز المميز الخاصة بك. سيساعدك هذا على تجنب مشكلات الترميز ويساعد نموذجك على التدريب بشكل أفضل. يمكنك القيام بذلك في axolotl مثل هذا:
special_tokens :
bos_token : " <s> "
eos_token : " </s> "
unk_token : " <unk> "
tokens : # these are delimiters
- " <|im_start|> "
- " <|im_end|> "
عندما تقوم بتضمين هذه الرموز المميزة في تكوين axolotl الخاص بك، يضيف axolotl هذه الرموز المميزة إلى مفردات أداة الرمز المميز.
نواة لايجر: حبات تريتون فعالة للتدريب على LLM
https://github.com/linkedin/Liger-Kernel
Liger (LinkedIn GPU Efficient Runtime) Kernel عبارة عن مجموعة من حبات Triton المصممة خصيصًا لتدريب LLM. يمكنه زيادة إنتاجية التدريب على وحدات معالجة الرسومات المتعددة بشكل فعال بنسبة 20% وتقليل استخدام الذاكرة بنسبة 60%. يتكون Liger Kernel بشكل جيد ويتوافق مع كل من FSDP وDeepspeed.
plugins :
- axolotl.integrations.liger.LigerPlugin
liger_rope : true
liger_rms_norm : true
liger_glu_activation : true
liger_layer_norm : true
liger_fused_linear_cross_entropy : true
يتيح لك Axolotl تحميل النموذج الخاص بك في ساحة اللعب الطرفية التفاعلية لإجراء التجارب السريعة. ملف التكوين هو نفس ملف التكوين المستخدم للتدريب.
قم بتمرير العلامة المناسبة إلى أمر الاستدلال، اعتمادًا على نوع النموذج الذي تم تدريبه:
python -m axolotl.cli.inference examples/your_config.yml --lora_model_dir= " ./lora-output-dir "
python -m axolotl.cli.inference examples/your_config.yml --base_model= " ./completed-model "
cat /tmp/prompt.txt | python -m axolotl.cli.inference examples/your_config.yml
--base_model= " ./completed-model " --prompter=None --load_in_8bit=True
- مع استضافة جراديو
python -m axolotl.cli.inference examples/your_config.yml --gradio
الرجاء استخدام --sample_packing False
إذا كان لديك وتلقيت الخطأ المشابه لما يلي:
خطأ في وقت التشغيل: يتوقع المكدس أن يكون كل موتر متساويًا في الحجم، ولكنه حصل على [1، 32، 1، 128] عند الإدخال 0 و [1، 32، 8، 128] عند الإدخال 1
سيقوم الأمر التالي بدمج محول LORA الخاص بك مع النموذج الأساسي الخاص بك. يمكنك اختياريًا تمرير الوسيطة --lora_model_dir
لتحديد الدليل الذي تم حفظ محول LORA الخاص بك فيه، وإلا فسيتم استنتاج ذلك من output_dir
في ملف تكوين axolotl الخاص بك. يتم حفظ النموذج المدمج في الدليل الفرعي {lora_model_dir}/merged
.
python3 -m axolotl.cli.merge_lora your_config.yml --lora_model_dir= " ./completed-model "
قد تحتاج إلى استخدام خيارات التكوين gpu_memory_limit
و/أو lora_on_cpu
لتجنب نفاد الذاكرة. إذا كنت لا تزال تنفد من ذاكرة CUDA، فيمكنك محاولة الدمج في ذاكرة الوصول العشوائي للنظام مع
CUDA_VISIBLE_DEVICES= " " python3 -m axolotl.cli.merge_lora ...
على الرغم من أن هذا سيكون بطيئًا جدًا، إلا أنه يوصى باستخدام خيارات التكوين المذكورة أعلاه بدلاً من ذلك.
راجع أيضًا الأسئلة الشائعة ودليل تصحيح الأخطاء.
إذا واجهت خطأ "Cuda نفاد الذاكرة"، فهذا يعني أن ذاكرة وحدة معالجة الرسومات الخاصة بك قد نفدت أثناء عملية التدريب. وإليك كيفية حلها:
يرجى تقليل أي أدناه
micro_batch_size
eval_batch_size
gradient_accumulation_steps
sequence_len
إذا لم يساعد ذلك، فحاول التشغيل بدون سرعة عميقة وبدون تسريع (استبدل "تسريع الإطلاق" بـ "python") في الأمر.
قد يؤدي استخدام adamw_bnb_8bit أيضًا إلى توفير بعض الذاكرة.
failed (exitcode: -9)
عادةً ما يعني ذلك أن ذاكرة النظام قد نفدت في نظامك. وبالمثل، يجب أن تفكر في تقليل نفس الإعدادات التي يتم إجراؤها عند نفاد VRAM. بالإضافة إلى ذلك، فكر في ترقية ذاكرة الوصول العشوائي (RAM) للنظام لديك والتي يجب أن تكون أبسط من ترقية وحدة معالجة الرسومات (GPU).
RuntimeError: النوع العددي المتوقع Float ولكن تم العثور على النصف
حاول ضبط fp16: true
NotImplementedError: لم يتم العثور على عامل تشغيل لـ
memory_efficient_attention_forward
...
حاول إيقاف تشغيل xformers.
تسريع التكوين في عداد المفقودين
من الآمن تجاهلها.
مهلات NCCL أثناء التدريب
راجع دليل NCCL.
بالنسبة للعديد من التنسيقات، يقوم Axolotl بإنشاء المطالبات عن طريق تسلسل معرفات الرموز المميزة بعد تحويل السلاسل إلى رموز مميزة. السبب وراء تسلسل معرفات الرموز المميزة بدلاً من العمل على السلاسل هو الحفاظ على المحاسبة الدقيقة لأقنعة الانتباه.
إذا قمت بفك تشفير موجه تم إنشاؤه بواسطة axolotl، فقد ترى مسافات بين الرموز المميزة (أو عدم وجودها) التي لا تتوقعها، خاصة حول المحددات والرموز المميزة. عند البدء بتنسيق جديد، يجب عليك دائمًا القيام بما يلي:
python -m axolotl.cli.preprocess your_config.yml --debug
، ثم قم بفك تشفير الصفوف القليلة الأولى باستخدام الرمز المميز للنموذج الخاص بك.يمكن أن يؤدي وجود اختلال في المحاذاة بين المطالبات أثناء التدريب والاستدلال إلى أداء النماذج بشكل سيئ للغاية، لذا فمن المفيد التحقق من ذلك. راجع منشور المدونة هذا للحصول على مثال ملموس.
راجع دليل تصحيح الأخطاء هذا للحصول على نصائح حول تصحيح أخطاء Axolotl، إلى جانب تكوين مثال لتصحيح الأخطاء باستخدام VSCode.
انضم إلى خادم Discord الخاص بنا حيث يمكننا نحن أعضاء مجتمعنا مساعدتك.
هل تحتاج إلى دعم مخصص؟ يرجى الاتصال بنا على ✉️[email protected] للحصول على خيارات الدعم المخصصة.
بناء شيء رائع مع Axolotl؟ فكر في إضافة شارة إلى بطاقتك النموذجية.
[ < img src = " https://raw.githubusercontent.com/axolotl-ai-cloud/axolotl/main/image/axolotl-badge-web.png " alt = " Built with Axolotl " width = " 200 " height = " 32 " /> ] ( https://github.com/axolotl-ai-cloud/axolotl )
تعرف على بعض المشاريع والنماذج التي تم إنشاؤها باستخدام Axolotl! هل لديك نموذج ترغب في إضافته إلى معرض المجتمع الخاص بنا؟ افتح العلاقات العامة مع النموذج الخاص بك.
الوصول المفتوح لمنظمة العفو الدولية الجماعية
مختبرات PocketDoc
يرجى قراءة دليل المساهمة
البق؟ يرجى التحقق من القضايا المفتوحة وإلا قم بإنشاء مشكلة جديدة.
العلاقات العامة هي موضع ترحيب كبير !
يرجى تشغيل تعليمات التشغيل السريع متبوعة بما يلي لإعداد env:
pip3 install -r requirements-dev.txt -r requirements-tests.txt
pre-commit install
# test
pytest tests/
# optional: run against all files
pre-commit run --all-files
شكرا لجميع المساهمين لدينا حتى الآن. ساعد في دفع تقدم الذكاء الاصطناعي مفتوح المصدر إلى الأمام من خلال المساهمة في Axolotl.
يتم تشغيل OpenAccess AI Collective بواسطة مساهمين متطوعين مثل Winglian وNanoCode012 وtmm1 وmhenrichsen وcasper-hansen وhamelsmu وغيرهم ممن يساعدوننا في تسريع التقدم من خلال إصلاح الأخطاء والإجابة على أسئلة المجتمع وتنفيذ ميزات جديدة. تحتاج Axolotl إلى تبرعات من الجهات الراعية للحوسبة اللازمة لتشغيل اختبارات الوحدة والتكامل، واستكشاف مشكلات المجتمع وإصلاحها، وتقديم المنح. إذا كنت تحب axolotl، فكر في رعاية المشروع عبر GitHub Sponsors، Ko-fi أو تواصل مباشرة مع[email protected].