實(shí)戰(zhàn)教程:4條命令跑通首次訓(xùn)練)
Axolotl 大模型微調(diào)實(shí)戰(zhàn)教程4條命令跑通首次訓(xùn)練【免費(fèi)下載鏈接】axolotlGo ahead and axolotl questions項(xiàng)目地址: https://gitcode.com/GitHub_Trending/ax/axolotlAxolotl 是一個(gè)開(kāi)源 LLM 微調(diào)框架用一份 YAML 配置文件即可控制數(shù)據(jù)加載、LoRA 訓(xùn)練、量化與評(píng)估的完整流程。本文從安裝到產(chǎn)出首個(gè)微調(diào)結(jié)果帶你完整跑通一遍并講透三個(gè)關(guān)鍵配置項(xiàng)。先看效果3分鐘跑通演示先拿到結(jié)果4 條命令就能對(duì) Llama-3.2-1B 模型完成一次 LoRA 微調(diào)LoRA 是一種低秩適配方法只訓(xùn)練少量新增參數(shù)不改動(dòng)原始模型權(quán)重。axolotl fetch examples # 拉取官方示例配置 axolotl train examples/llama-3/lora-1b.yml # 直接訓(xùn)練訓(xùn)練啟動(dòng)后終端會(huì)滾動(dòng)輸出 loss 與步數(shù)結(jié)束時(shí)在./outputs/lora-out目錄生成 LoRA 權(quán)重。多卡環(huán)境下每個(gè)節(jié)點(diǎn)的 GPU 占用可以這樣觀察跑通后想深入理解每一步在做什么可以從 docs/getting-started.qmd 開(kāi)始讀。它到底解決了什么問(wèn)題Axolotl 的價(jià)值在于把自己寫(xiě)訓(xùn)練代碼壓縮成寫(xiě)一份配置。一份 YAML 管全程不做框架的話微調(diào)需要自己處理數(shù)據(jù) collator、優(yōu)化器、檢查點(diǎn)保存、混合精度這些環(huán)節(jié)且每換一個(gè)模型往往要改代碼。Axolotl 把這些統(tǒng)一收斂到一個(gè) YAML 里同一份配置可以直接貫穿數(shù)據(jù)預(yù)處理、訓(xùn)練、量化、推理全流程換模型通常只需改base_model和個(gè)別適配項(xiàng)。單卡也能訓(xùn)起來(lái)全量微調(diào)一個(gè) 8B 模型需要多卡集群而 LoRA 只訓(xùn)練適配器層QLoRA在 4 位量化基座上再做 LoRA進(jìn)一步壓低了顯存下限。官方 Quick Start 用的就是 1B 模型加 LoRA 的組合單張消費(fèi)級(jí)顯卡Ampere 架構(gòu)及以上即可運(yùn)行。環(huán)境搭建一條命令起步安裝只需三步建虛擬環(huán)境、裝包、拉示例配置。官方推薦 uv 管理環(huán)境要求 Python 3.11 及以上推薦 3.12、PyTorch 2.11 及以上、NVIDIA Ampere 或更新的 GPU也支持 AMD 卡。uv venv --python 3.12 source .venv/bin/activate uv pip install --no-build-isolation axolotl[deepspeed] # 含 DeepSpeed 多卡支持如果不想維護(hù)本地環(huán)境也可以直接跑官方鏡像docker run --gpus all --ipchost --rm -it axolotlai/axolotl:main-latest。核心配置拆解YAML 里配置項(xiàng)很多新手先抓下面三項(xiàng)就夠啟動(dòng)對(duì)照表來(lái)自官方示例 examples/llama-3/lora-1b.yml。配置項(xiàng)作用推薦值改錯(cuò)會(huì)怎樣adapter指定訓(xùn)練方式lora/qlora只訓(xùn)適配器層不寫(xiě)則全量微調(diào)lora1B~8B 模型漏寫(xiě)會(huì)按全量微調(diào)走顯存需求翻幾倍sequence_len單條樣本參與訓(xùn)練的最大 token 長(zhǎng)度1024~2048設(shè)太大顯存線性上漲容易 OOM太小則長(zhǎng)樣本被截?cái)鄐ample_packing把多條短樣本拼進(jìn)同一條序列減少 padding 浪費(fèi)true關(guān)閉后短文本數(shù)據(jù)大量時(shí)間浪費(fèi)在計(jì)算填充 token 上速度明顯下降另外顯存吃緊時(shí)打開(kāi)gradient_checkpointing: true梯度檢查點(diǎn)用重算換顯存通常多花約兩三成時(shí)間換大幅下降的顯存占用1B 模型就能塞進(jìn)更小的卡。打包為什么需要防串?dāng)_sample_packing把多條樣本拼成一條長(zhǎng)序列后如果不加限制前面的樣本會(huì)看到后面的樣本。pretrain_multipack_attn: true會(huì)把注意力掩碼按樣本邊界重置右圖就是重置后的效果真實(shí)場(chǎng)景演練場(chǎng)景繼續(xù)預(yù)訓(xùn)練——不寫(xiě)一行預(yù)處理代碼從 Hugging Face 流式拉取大規(guī)模語(yǔ)料訓(xùn)練小模型。對(duì)應(yīng)配置在 examples/streaming/ 目錄以pretrain.yaml為例base_model: HuggingFaceTB/SmolLM2-135M pretraining_dataset: - path: HuggingFaceFW/fineweb-edu name: sample-10BT type: pretrain text_column: text split: train streaming_multipack_buffer_size: 10000 # 打包緩沖區(qū)越大越省內(nèi)存越多 sequence_len: 1024 sample_packing: true pretrain_multipack_attn: true # 防止打包樣本間交叉注意力 max_steps: 1000 output_dir: ./outputs/smollm2-135m-pretrain-streamingaxolotl train examples/streaming/pretrain.yaml與常規(guī)流程的差別一目了然環(huán)節(jié)常規(guī)流程流式流程數(shù)據(jù)預(yù)處理先axolotl preprocess落盤不需要邊加載邊訓(xùn)磁盤占用完整 tokenized 數(shù)據(jù)集僅緩沖區(qū)大小適用語(yǔ)料GB 級(jí)TB 級(jí)如 fineweb-edu訓(xùn)練按save_steps示例為 250 步保存檢查點(diǎn)結(jié)束后在output_dir得到最終權(quán)重之后可直接用于推理或繼續(xù)微調(diào)。翻車急救包 首次運(yùn)行最容易碰到的四種情況現(xiàn)象常見(jiàn)原因修法啟動(dòng)即報(bào) CUDA out of memory批次過(guò)大或未開(kāi)梯度檢查點(diǎn)micro_batch_size降到 1打開(kāi)gradient_checkpointing: true必要時(shí)load_in_4bit: true數(shù)據(jù)預(yù)處理反復(fù)報(bào)錯(cuò)緩存與配置不同步刪除dataset_prepared_path指向的目錄默認(rèn)last_run_prepared數(shù)據(jù)太大可加shards: 20只取一部分loss 劇烈波動(dòng)或出現(xiàn) NaN學(xué)習(xí)率偏高調(diào)低learning_rate把warmup_ratio提到 0.1 左右Flash Attention 報(bào)錯(cuò)不可用GPU 早于 Ampere 架構(gòu)把a(bǔ)ttn_implementation改為sdpa結(jié)語(yǔ)第一次跑通之后下一步是替換成自己的數(shù)據(jù)各模型現(xiàn)成的配置模板在 examples/ 目錄數(shù)據(jù)集格式說(shuō)明在 docs/dataset-formats/多節(jié)點(diǎn)與并行進(jìn)階可查 docs/multi-node.qmd。遇到更細(xì)的報(bào)錯(cuò)時(shí)倉(cāng)庫(kù)里的 docs/debugging.qmd 給出了單卡、小數(shù)據(jù)、清緩存的最小化排查方法。完整的代碼與發(fā)布情況以 Axolotl 官方倉(cāng)庫(kù)為準(zhǔn)。【免費(fèi)下載鏈接】axolotlGo ahead and axolotl questions項(xiàng)目地址: https://gitcode.com/GitHub_Trending/ax/axolotl創(chuàng)作聲明:本文部分內(nèi)容由AI輔助生成(AIGC),僅供參考