Swift微調命令

發表於2024-03-14

源自 : https://github.com/modelscope/swift/blob/main/docs/source/LLM/LLM微調文件.md

命令列引數

目錄

  • sft 引數
  • dpo 引數
  • merge-lora infer 引數
  • export 引數
  • app-ui 引數
  • deploy 引數

sft 引數

  • --model_type: 表示你選擇的模型型別, 預設是None. model_type指定了對應模型預設的lora_target_modules, template_type等資訊. 你可以透過只指定model_type進行微調. 對應的model_id_or_path會使用預設的設定, 從ModelScope進行下載, 並使用預設的快取路徑. model_type和model_id_or_path必須指定其中的一個. 可以選擇的model_type可以檢視支援的模型.
  • --model_id_or_path: 表示模型在ModelScope Hub中的model_id或者本地路徑, 預設為None. 如果傳入的model_id_or_path已經被註冊, 則會根據model_id_or_path推斷出model_type. 如果未被註冊, 則需要同時指定model_type, e.g. --model_type <model_type> --model_id_or_path <model_id_or_path>.
  • --model_revision: 表示模型在ModelScope Hub中對應model_id的版本號, 預設為None. model_revision指定為None, 則使用註冊在MODEL_MAPPING中的revision. 否則強制使用命令列傳入的model_revision.
  • --sft_type: 表示微調的方式, 預設是'lora'. 你可以選擇的值包括: 'lora', 'full', 'longlora', 'qalora'. 如果你要使用qlora, 你需設定--sft_type lora --quantization_bit 4.
  • --freeze_parameters: 當sft_type指定為'full'時, 將模型最底部的引數進行freeze. 指定範圍為0. ~ 1., 預設為0.. 該引數提供了lora與全引數微調的折中方案.
  • --additional_trainable_parameters: 作為freeze_parameters的補充, 只有在sft_type指定為'full'才允許被使用, 預設為[]. 例如你如果想訓練50%的引數的情況下想額外訓練embedding層, 你可以設定--freeze_parameters 0.5 --additional_trainable_parameters transformer.wte, 所有以transformer.wte開頭的parameters都會被啟用.
  • --tuner_backend: 表示lora, qlora的後端支援, 預設是'swift'. 你可以選擇的值包括: 'swift', 'peft'.
  • --template_type: 表示使用的對話模板的型別, 預設是'AUTO', 即根據model_type查詢MODEL_MAPPING中的template. 可以選擇的template_type可以檢視TEMPLATE_MAPPING.keys().
  • --output_dir: 表示ckpt儲存的目錄, 預設是'output'. 我們會在該目錄後拼接model_type和微調版本號. 方便使用者對不同模型進行多次對比實驗, 而不需要改變output_dir命令列引數. 如果不需要拼接這些內容, 你需要額外指定引數--add_output_dir_suffix false.
  • --add_output_dir_suffix: 預設為True, 表示會在output_dir的目錄後拼接上model_type和微調版本號的字尾. 如果要避免此行為, 你可以設定為False.
  • --ddp_backend: 表示分散式的後端支援, 預設是'nccl'. 你可以選擇的值包括: 'nccl', 'gloo', 'mpi', 'ccl'.
  • --seed: 全域性的seed, 預設使用42. 用於復現訓練效果.
  • --resume_from_checkpoint: 用於斷點續訓, 預設為None. 你可以將其設定為checkpoint的路徑, 例如: 'output/qwen-7b-chat/vx-xxx/checkpoint-xxx', 來進行斷點續訓.
  • --dtype: 基模型載入時的torch_dtype, 預設為'AUTO', 即智慧選擇dtype: 如果機器不支援bf16, 則使用fp16, 如果MODEL_MAPPING中對應模型有指定torch_dtype, 則使用其對應dtype, 否則使用bf16. 你可以選擇的值包括: 'bf16', 'fp16', 'fp32'.
  • --dataset: 用於選擇訓練的資料集, 預設為[]. 可以選擇的資料集可以檢視支援的資料集. 如果需要使用多個資料集進行訓練, 你可以使用','或者' '進行分割, 例如: --dataset alpaca-en,alpaca-zh or --dataset alpaca-en alpaca-zh.
  • --dataset_seed: 用於指定資料集處理的seed, 預設為42. 以random_state形式存在, 不影響全域性seed.
  • --dataset_test_ratio: 用於指定子資料集切分成訓練集和驗證集的比例, 預設為0.01. 如果子資料集已經進行了訓練集和驗證集的切分, 則此引數無效.
  • --train_dataset_sample: 對訓練集進行取樣, 預設是20000, 用於加快訓練的速度. 該引數是為了避免資料集過大, 單個epoch訓練時間過長的問題. 如果你指定為-1, 則使用完整的訓練集進行訓練.
  • --val_dataset_sample: 對驗證集進行取樣, 預設是None, 自動選取合適數量的資料集數量進行驗證. 如果你指定為-1, 則使用完整的驗證集進行驗證.
  • --system: 對話模板中使用的system, 預設為None, 即使用模型預設的system. 如果指定為'', 則不使用system.
  • --max_length: token的最大長度, 預設為2048. 可以避免個別過長的資料樣本造成OOM的問題. 當指定--truncation_strategy delete時, 如果某資料樣本長度超過max_length, 我們會刪除該資料樣本. 如果指定--truncation_strategy truncation_left時, 我們會切除最前面的token: input_ids[-max_length:]. 如果設定為-1, 則無限制.
  • --truncation_strategy: 預設是'delete'表示把超過max_length的句子從資料集中刪除. 'truncation_left'表示會將超過文字的左邊給切除掉, 這可能會切到special token, 會影響效能, 並不推薦.
  • --check_dataset_strategy: 預設值為'none', 即不做檢查. 如果你訓練的模型是LLM, 則推薦使用'warning'作為資料檢查的策略. 如果你的訓練目標為句子分類等任務, 則建議設定為'none'.
  • --custom_train_dataset_path: 預設值為[]. 具體的含義參考自定義與擴充.
  • --custom_val_dataset_path: 預設值為[]. 具體的含義參考自定義與擴充.
  • --self_cognition_sample: 自我認知資料集的取樣數. 預設為0. 你該值設定為>0時, 需要同時指定--model_name, --model_author. 如果你想了解更多, 可以檢視自我認知微調最佳實踐.
  • --model_name: 預設為[None, None]. 如果開啟了自我認知資料集的取樣(即self_cognition_sample>0), 你需要傳入兩個值, 分別代表模型的中文名和英文名. 例如: --model_name 小黃 'Xiao Huang'.
  • --model_author: 預設為[None, None]. 如果開啟了自我認知資料集的取樣, 你需要傳入兩個值, 分別代表作者的中文名和英文名. 例如: --model_author 魔搭 ModelScope.
  • --quantization_bit: 用於指定是否進行量化和量化的bit數, 預設為0, 即不進行量化. 如果要使用4bit qlora, 你需要設定--sft_type lora --quantization_bit 4
  • --bnb_4bit_comp_dtype: 在進行4bit量化時, 我們需要在模型的forward和backward時, 將其進行反量化. 該引數用於指定反量化後的torch_dtype. 預設為'AUTO', 即與dtype保持一致. 可選擇的值包括: 'fp16', 'bf16', 'fp32'. 當quantization_bit為0時, 該引數無效.
  • --bnb_4bit_quant_type: 4bit量化時的量化方式, 預設是'nf4'. 可選擇的值包括: 'nf4', 'fp4'. 當quantization_bit為0時, 該引數無效.
  • --bnb_4bit_use_double_quant: 是否在4bit量化時開啟double量化, 預設為True. 當quantization_bit為0時, 該引數無效.
  • --lora_target_modules: 指定lora模組, 預設為['DEFAULT']. 如果lora_target_modules傳入'DEFAULT' or 'AUTO', 則根據model_type查詢MODEL_MAPPING中的lora_target_modules(預設指定為qkv). 如果傳入'ALL', 則將所有的Linear層(不含head)指定為lora模組. 如果傳入'EMBEDDING', 則Embedding層指定為lora模組. 如果記憶體允許, 建議設定成'ALL'. 當然, 你也可以設定['ALL', 'EMBEDDING'], 將所有的Linear和embedding層指定為lora模組. 該引數只有當sft_type指定為'lora'時才生效.
  • --lora_rank: 預設為8. 只有當sft_type指定為'lora'時才生效.
  • --lora_alpha: 預設為32. 只有當sft_type指定為'lora'時才生效.
  • --lora_dropout_p: 預設為0.05, 只有當sft_type指定為'lora'時才生效.
  • --lora_bias_trainable: 預設為'none', 可以選擇的值: 'none', 'all'. 如果你要將bias全都設定為可訓練, 你可以設定為'all'.
  • --lora_modules_to_save: 預設為[]. 如果你想要訓練embedding, lm_head, 或者layer_norm, 你可以設定此引數, 例如: --lora_modules_to_save EMBEDDING LN lm_head. 如果傳入'EMBEDDING', 則將Embedding層新增到lora_modules_to_save. 如果傳入'LN', 則將RMSNormLayerNorm新增到lora_modules_to_save.
  • --lora_dtype: 預設為'fp32', 指定lora模組的dtype型別. 如果是AUTO則跟隨原始模組的dtype型別. 你可以選擇的值: 'fp16', 'bf16', 'fp32', 'AUTO'.
  • --use_dora: 預設為False, 是否使用DoRA.
  • --use_rslora: 預設為False, 是否使用RS-LoRA.
  • --neftune_noise_alpha: NEFTune新增的噪聲係數, 可以提升模型在指令微調中的效能, 預設為None. 通常可以設定為5, 10, 15. 你可以檢視相關論文.
  • --neftune_backend: NEFTune的backend,預設使用transformers庫, 當訓練VL模型時可能遇到不適配的情況, 此時建議指定為swift.
  • --gradient_checkpointing: 是否開啟gradient checkpointing, 預設為True. 該引數可以用於節約視訊記憶體, 雖然這會略微降低訓練速度. 該引數在max_length較大, batch_size較大時作用顯著.
  • --deepspeed: 用於指定deepspeed的配置檔案的路徑或者直接傳入json格式的配置資訊, 預設為None, 即不開啟deepspeed. deepspeed可以節約視訊記憶體. 我們書寫了預設的ZeRO-2配置檔案, ZeRO-3配置檔案. 你只需要指定'default-zero2', 就會使用預設zero2配置檔案; 指定'default-zero3', 就會使用預設的zero3配置檔案.
  • --batch_size: 訓練時的batch_size, 預設為1. 增大batch_size可以增加GPU的利用率, 但不一定會增加訓練速度, 因為在一個batch中, 需要對較短的句子按該batch中最長句子的長度進行padding, 從而引入無效的計算量.
  • --eval_batch_size: 評估時的batch_size, 預設為None, 即當predict_with_generate為True時, 設定為1, 為False時, 設定為batch_size.
  • --num_train_epochs: 訓練的epoch數, 預設為1. 如果max_steps >= 0, 則覆蓋num_train_epochs. 通常情況下設定為3 ~ 5.
  • --max_steps: 訓練的max_steps數, 預設為-1. 如果max_steps >= 0, 則覆蓋num_train_epochs.
  • --optim: 預設為'adamw_torch'.
  • --learning_rate: 預設值為None, 即如果sft_type為lora, 則設定為1e-4, 如果sft_type為full, 則設定為1e-5.
  • --weight_decay: 預設值為0.01.
  • --gradient_accumulation_steps: 梯度累加, 預設值為None, 設定為math.ceil(16 / self.batch_size / world_size). total_batch_size = batch_size * gradient_accumulation_steps * world_size.
  • --max_grad_norm: 梯度裁剪, 預設值為0.5.
  • --predict_with_generate: 評估時是否使用生成式的方式, 預設為False. 如果設定為False, 則使用loss進行評估. 如果設定為True, 則使用ROUGE-L等指標進行評估. 使用生成式評估耗費的時間很長, 請謹慎選擇.
  • --lr_scheduler_type: 預設值為'linear', 你可以選擇: 'linear', 'cosine', 'constant'等.
  • --warmup_ratio: warmup佔用總的訓練steps的比例, 預設為0.05.
  • --eval_steps: 每訓練多少steps進行評估, 預設為50.
  • --save_steps: 每訓練多少個steps進行儲存, 預設為None, 即設定為eval_steps.
  • --save_only_model: 是否只儲存模型引數, 而不儲存斷點續訓所需的中間狀態, 預設為None, 即如果sft_type為'lora'並且不使用deepspeed(deepspeedNone), 設定為False, 否則設定為True(e.g. 使用了全引數微調或者使用了deepspeed).
  • --save_total_limit: 儲存的checkpoint的數量, 預設為2, 即儲存best和last的checkpoint. 如果設定為-1, 則儲存所有的checkpoint.
  • --logging_steps: 每訓練多少步列印訓練資訊(e.g. loss, learning_rate等), 預設為5.
  • --dataloader_num_workers: 預設值為1.
  • --push_to_hub: 是否將訓練的checkpoint同步推送到ModelScope Hub中, 預設為False.
  • --hub_model_id: 推送到的ModelScope Hub的model_id, 預設為None, 即設定為f'{model_type}-{sft_type}'. 你可以將其設定為model_id, 也可以設定為repo_name. 我們會根據hub_token推斷出user_name. 推送的遠端倉庫如果不存在, 則會建立一個新的倉庫, 如果存在, 則複用之前的倉庫. 該引數只有在push_to_hub設定為True時才生效.
  • --hub_token: 推送時需要的SDK token. 可以從https://modelscope.cn/my/myaccesstoken獲取, 預設為None, 即從環境變數MODELSCOPE_API_TOKEN中獲取. 該引數只有在push_to_hub設定為True時才生效.
  • --hub_private_repo: 推送的ModelScope Hub中的模型倉庫的許可權是否設定為私有, 預設為False. 該引數只有在push_to_hub設定為True時才生效.
  • --push_hub_strategy: 推送策略, 預設為'push_best'. 可選擇的值包括: 'end', 'push_best', 'push_last', 'checkpoint', 'all_checkpoints'. 'push_best'表示在每次儲存權重時, 將最好的模型進行推送並覆蓋之前的權重, 'push_last'表示在每次儲存權重時, 將最後的權重進行推送並覆蓋之前的權重, 'end'表示只在訓練的最後推送最好的模型. 該引數只有在push_to_hub設定為True時才生效.
  • --test_oom_error: 用於檢測訓練是否會發生OOM, 預設為False. 如果設定為True, 則會將訓練集按max_length倒序進行排列, 方便OOM的測試. 該引數一般用於測試, 請謹慎設定.
  • --disable_tqdm: 是否不啟用tqdm, 這在nohup啟動指令碼時很有用. 預設為False, 即為啟動tqdm.
  • --lazy_tokenize: 如果設定為False, 則在trainer.train()之前提前對所有文字進行預處理. 如果設定為True, 則延遲對文字進行編碼, 減少預處理的等待並減少記憶體佔用, 這在處理大資料集時很有用. 預設為None, 即我們會根據template的型別進行智慧選擇, LLM的模型通常設定為False, 多模態的模型通常設定為True(避免圖片和音訊載入導致過多的記憶體佔用).
  • --preprocess_num_proc: 在對資料集預處理時(對文字進行tokenize), 使用多程序. 預設為1. 與lazy_tokenize命令列引數一樣, 用於解決預處理速度慢的問題. 但該策略無法減少記憶體佔用, 所以如果當資料集巨大時, 建議使用lazy_tokenize. 推薦設定的值: 4, 8. 請注意: 當使用qwen-audio時, 該引數會強制設定為1, 因為qwen-audio的預處理函式中使用了torch的多程序, 會造成不相容問題.
  • --use_flash_attn: 是否使用flash attn, 預設為None. 安裝flash_attn的步驟可以檢視https://github.com/Dao-AILab/flash-attention. 支援flash_attn的模型可以檢視LLM支援的模型.
  • --ignore_args_error: 是否忽略命令列傳參錯誤丟擲的Error, 預設為False. 如果需要複製程式碼到notebook中執行, 需要設定成True.
  • --check_model_is_latest: 檢查模型是否是最新, 預設為True. 如果你需要斷網進行訓練, 請將該引數設定為False.
  • --logging_dir: 預設為None. 即設定為f'{self.output_dir}/runs', 表示tensorboard檔案儲存路徑.
  • --report_to: 預設為['tensorboard'].
  • --acc_strategy: 預設為'token', 可選擇的值包括: 'token', 'sentence'.
  • --save_on_each_node: 該引數在多機訓練時生效, 預設為True.
  • --save_strategy: 儲存checkpoint的策略, 預設為'steps', 可選擇的值包括: 'steps', 'no'.
  • --save_safetensors: 預設為True.
  • --max_new_tokens: 預設為2048. 該引數只有在predict_with_generate設定為True的時候才生效.
  • --do_sample: 預設為True. 該引數只有在predict_with_generate設定為True的時候才生效.
  • --temperature: 預設為0.3. 該引數只有在predict_with_generate設定為True的時候才生效.
  • --top_k: 預設為20. 該引數只有在predict_with_generate設定為True的時候才生效.
  • --top_p: 預設為0.7. 該引數只有在predict_with_generate設定為True的時候才生效.
  • --repetition_penalty: 預設為1.. 該引數只有在predict_with_generate設定為True的時候才生效.
  • --num_beams: 預設為1. 該引數只有在predict_with_generate設定為True的時候才生效.
  • --gpu_memory_fraction: 預設為None. 該引數旨在指定顯示卡最大可用視訊記憶體比例的情況下執行訓練,用於極限測試.
  • --train_dataset_mix_ratio: 預設為0. 該引數定義瞭如何進行資料集打混訓練. 指定該引數時, 訓練集會以train_dataset_mix_ratio倍數混合train_dataset_mix_ds指定的通用知識資料集, 使整體資料集長度達到train_dataset_sample.
  • --train_dataset_mix_ds: 預設為ms-bench. 用於防止知識遺忘的通用知識資料集.
  • --use_loss_scale: 預設為False. 生效時會將Agent的部分欄位(Action/Action Input部分)的loss權重加強以強化CoT, 對普通SFT場景沒有任何效果.

LoRA+微調引數

  • --lora_lr_ratio: 預設值None, 建議值10~16, 使用lora時指定該引數即可使用lora+.

GaLore微調引數

  • --use_galore: bool : 預設值False, 是否使用GaLore.
  • --galore_target_modules: Union[str, List[str]] : 預設值None, 不傳的情況下對attention和mlp應用GaLore.
  • --galore_rank: int : 預設值128, GaLore的rank值.
  • --galore_update_proj_gap: int : 預設值50, 分解矩陣的更新間隔.
  • --galore_scale: int : 預設值1.0, 矩陣權重係數.
  • --galore_proj_type: str : 預設值std, GaLore矩陣分解型別.
  • --galore_optim_per_parameter: bool : 預設值False, 是否給每個Galore目標Parameter設定一個單獨的optimizer.
  • --galore_with_embedding: bool : 預設值False, 是否對embedding應用GaLore.

LLaMA-PRO微調引數

  • --llamapro_num_new_blocks: 預設值4, 插入的新layers總數.
  • --llamapro_num_groups: 預設值None, 分為多少組插入new_blocks, 如果為None則等於llamapro_num_new_blocks, 即每個新的layer單獨插入原模型.

AdaLoRA微調引數

以下引數sft_type設定為adalora時生效. adalora的target_modules等引數繼承於lora的對應引數, 但lora_dtype引數不生效.

  • --adalora_target_r: 預設值8, adalora的平均rank.
  • --adalora_init_r: 預設值12, adalora的初始rank.
  • --adalora_tinit: 預設值0, adalora的初始warmup.
  • --adalora_tfinal: 預設值0, adalora的final warmup.
  • --adalora_deltaT: 預設值1, adalora的step間隔.
  • --adalora_beta1: 預設值0.85, adalora的EMA引數.
  • --adalora_beta2: 預設值0.85, adalora的EMA引數.
  • --adalora_orth_reg_weight: 預設值0.5, adalora的正則化引數.

IA3微調引數

以下引數sft_type設定為ia3時生效.

  • --ia3_target_modules: 指定IA3目標模組, 預設為['DEFAULT']. 具體含義可以參考lora_target_modules.
  • --ia3_feedforward_modules: 指定IA3的MLP的Linear名稱, 該名稱必須在ia3_target_modules中.
  • --ia3_modules_to_save: IA3參與訓練的額外模組. 具體含義可以參考lora_modules_to_save的含義.

dpo 引數

dpo引數繼承了sft引數, 除此之外增加了以下引數:

  • --ref_model_type: 對比模型的型別, 可以選擇的model_type可以檢視MODEL_MAPPING.keys().
  • --max_prompt_length: 最大的提示長度, 該引數會傳入DPOTrainer中, 使prompt長度不超過該值的設定, 預設值1024.
  • --beta: DPO logits的正則項,預設為0.1.
  • --label_smoothing: 是否使用DPO smoothing, 預設值為0,一般設定在0~0.5之間.
  • --loss_type: DPOloss型別, 支援'sigmoid', 'hinge', 'ipo', 'kto_pair', 預設值'sigmoid'.
  • --sft_beta: 是否在DPO中加入sft loss, 預設為0.1, 支援[0, 1)區間,最後的loss為(1-sft_beta)*KL_loss + sft_beta * sft_loss.

merge-lora infer 引數

  • --model_type: 預設值為None, 具體的引數介紹可以在sft.sh命令列引數中檢視.
  • --model_id_or_path: 預設值為None, 具體的引數介紹可以在sft.sh命令列引數中檢視. 推薦使用model_type的方式指定.
  • --model_revision: 預設值為None. 具體的引數介紹可以在sft.sh命令列引數中檢視. 如果model_id_or_path為None或者是本地的模型目錄, 則該引數失效.
  • --sft_type: 預設值為'lora', 具體的引數介紹可以在sft.sh命令列引數中檢視.
  • --template_type: 預設值為'AUTO', 具體的引數介紹可以在sft.sh命令列引數中檢視.
  • --infer_backend: 你可以選擇'AUTO', 'vllm', 'pt'. 預設使用'AUTO', 進行智慧選擇, 即如果沒有傳入ckpt_dir或使用全引數微調, 並且安裝了vllm且模型支援vllm則使用vllm引擎, 否則使用原生torch進行推理. vllm環境準備可以參考VLLM推理加速與部署, vllm支援的模型可以檢視支援的模型.
  • --ckpt_dir: 必填項, 值為SFT階段儲存的checkpoint路徑, e.g. '/path/to/your/vx-xxx/checkpoint-xxx'.
  • --load_args_from_ckpt_dir: 是否從ckpt_dirsft_args.json檔案中讀取模型配置資訊. 預設是True.
  • --load_dataset_config: 該引數只有在--load_args_from_ckpt_dir true時才生效. 即是否從ckpt_dirsft_args.json檔案中讀取資料集相關的配置資訊. 預設為False.
  • --eval_human: 使用資料集中的驗證集部分進行評估還是使用人工的方式評估. 預設值為None, 進行智慧選擇, 如果沒有任何資料集(含自定義資料集)傳入, 則會使用人工評估的方式. 如果有資料集傳入, 則會使用資料集方式評估.
  • --seed: 預設值為42, 具體的引數介紹可以在sft.sh命令列引數中檢視.
  • --dtype: 預設值為'AUTO, 具體的引數介紹可以在sft.sh命令列引數中檢視.
  • --dataset: 預設值為[], 具體的引數介紹可以在sft.sh命令列引數中檢視.
  • --dataset_seed: 預設值為42, 具體的引數介紹可以在sft.sh命令列引數中檢視.
  • --dataset_test_ratio: 預設值為0.01, 具體的引數介紹可以在sft.sh命令列引數中檢視.
  • --val_dataset_sample: 表示想要評估和展示的驗證集的數量, 預設值為10.
  • --system: 預設值為None. 具體的引數介紹可以在sft.sh命令列引數中檢視.
  • --max_length: 預設值為-1. 具體的引數介紹可以在sft.sh命令列引數中檢視.
  • --truncation_strategy: 預設是'delete'. 具體的引數介紹可以在sft.sh命令列引數中檢視.
  • --check_dataset_strategy: 預設值為'none', 具體的引數介紹可以在sft.sh命令列引數中檢視.
  • --custom_train_dataset_path: 預設值為[]. 具體的含義參考README.md中的自定義資料集模組.
  • --custom_val_dataset_path: 預設值為[]. 具體的含義參考README.md中的自定義資料集模組.
  • --quantization_bit: 預設值為0. 具體的引數介紹可以在sft.sh命令列引數中檢視.
  • --bnb_4bit_comp_dtype: 預設值為'AUTO'. 具體的引數介紹可以在sft.sh命令列引數中檢視. 若quantization_bit設定為0, 則該引數失效.
  • --bnb_4bit_quant_type: 預設值為'nf4'. 具體的引數介紹可以在sft.sh命令列引數中檢視. 若quantization_bit設定為0, 則該引數失效.
  • --bnb_4bit_use_double_quant: 預設值為True. 具體的引數介紹可以在sft.sh命令列引數中檢視. 若quantization_bit設定為0, 則該引數失效.
  • --max_new_tokens: 生成新token的最大數量, 預設值為2048.
  • --do_sample: 是使用貪婪生成的方式還是取樣生成的方式, 預設值為True.
  • --temperature: 預設值為0.3. 該引數只有在do_sample設定為True時才生效. 該引數會在部署引數中作為預設值使用.
  • --top_k: 預設值為20. 該引數只有在do_sample設定為True時才生效. 該引數會在部署引數中作為預設值使用.
  • --top_p: 預設值為0.7. 該引數只有在do_sample設定為True時才生效. 該引數會在部署引數中作為預設值使用.
  • --repetition_penalty: 預設值為1.. 該引數會在部署引數中作為預設值使用.
  • --num_beams: 預設為1.
  • --use_flash_attn: 預設值為None, 即為'auto'. 具體的引數介紹可以在sft.sh命令列引數中檢視.
  • --ignore_args_error: 預設值為False, 具體的引數介紹可以在sft.sh命令列引數中檢視.
  • --stream: 是否使用流式輸出, 預設為True. 該引數只有在使用資料集評估並且verbose為True時才生效.
  • --merge_lora: 是否將lora權重merge到基模型中, 並儲存完整的權重, 預設為False. 權重會儲存在ckpt_dir的同級目錄中, e.g. '/path/to/your/vx-xxx/checkpoint-xxx-merged'目錄下.
  • --merge_device_map: merge-lora時使用的device_map, 預設為None, 為減少視訊記憶體佔用, 在僅有merge-lora過程時使用auto,其他情況預設使用cpu.
  • --save_safetensors: 儲存成safetensors檔案還是bin檔案. 預設為True.
  • --overwrite_generation_config: 是否將評估所使用的generation_config儲存成generation_config.json檔案, 預設為None. 如果指定了ckpt_dir, 則設定為True, 否則設定為False. 訓練時儲存的generation_config檔案將被覆蓋.
  • --verbose: 如果設定為False, 則使用tqdm樣式推理. 如果設定為True, 則輸出推理的query, response, label. 預設為None, 進行自動選擇, 即len(val_dataset) >= 100時, 設定為False, 否則設定為True. 該引數只有在使用資料集評估時生效.
  • --gpu_memory_utilization: 初始化vllm引擎EngineArgs的引數, 預設為0.9. 該引數只有在使用vllm時才生效. VLLM推理加速和部署可以檢視VLLM推理加速與部署.
  • --tensor_parallel_size: 初始化vllm引擎EngineArgs的引數, 預設為1. 該引數只有在使用vllm時才生效.
  • --max_model_len: 覆蓋模型的max_model_len, 預設為None. 該引數只有在使用vllm時才生效.

export 引數

export引數繼承了infer引數, 除此之外增加了以下引數:

  • --merge_lora: 預設為False. 該引數已在InferArguments中定義, 不屬於新增引數. 是否將lora權重merge到基模型中, 並儲存完整的權重. 權重會儲存在ckpt_dir的同級目錄中, e.g. '/path/to/your/vx-xxx/checkpoint-xxx-merged'目錄下.
  • --quant_bits: 量化的bits數. 預設為0, 即不進行量化. 如果你設定了--quant_method awq, 你可以設定為4進行4bits量化. 如果你設定了--quant_method gptq, 你可以設定為2,3,4,8進行對應bits的量化. 如果對原始模型進行量化, 權重會儲存在f'{args.model_type}-{args.quant_method}-int{args.quant_bits}'目錄中. 如果對微調後模型進行量化, 權重會儲存在ckpt_dir的同級目錄中, e.g. f'/path/to/your/vx-xxx/checkpoint-xxx-{args.quant_method}-int{args.quant_bits}'目錄下.
  • --quant_method: 量化方法, 預設為'awq'. 你可以選擇為'awq', 'gptq'.
  • --dataset: 該引數已在InferArguments中定義, 在export時含義為量化資料集. 預設為[]. 推薦設定為--dataset ms-bench-mini. 該資料集含多語言的內容(中文為主)且質量很高, 量化中文模型具有很好的效果. 你也可以設定--dataset pileval, 使用autoawq預設量化資料集, 該資料集的語言為英文. 更多細節: 包括如何自定義量化資料集, 可以參考LLM量化文件.
  • --quant_n_samples: 量化引數, 預設為None, 如果使用awq量化設定為256, 如果使用gptq量化設定為1024. 當設定為--quant_method awq時, 如果出現量化的時候OOM, 可以適度降低--quant_n_samples--quant_seqlen. --quant_method gptq通常不會出現量化OOM.
  • --quant_seqlen: 量化引數, 預設為2048.
  • --quant_device_map: 預設為'cpu', 節約視訊記憶體. 你可以指定為'cuda:0', 'auto', 'cpu'等, 表示量化時模型匯入的裝置.
  • --push_to_hub: 預設為False. 是否將最後的ckpt_dirpush到ModelScope Hub中. 如果你指定了merge_lora, 則將推送全量引數; 如果你還指定了quant_bits, 則將推送量化後的模型.
  • --hub_model_id: 預設為None. 推送到的ModelScope Hub的model_id. 如果push_to_hub設定為True, 該引數必須被設定.
  • --hub_token: 預設為None. 具體的引數介紹可以在sft.sh命令列引數中檢視.
  • --hub_private_repo: 預設為False. 具體的引數介紹可以在sft.sh命令列引數中檢視.
  • --commit_message: 預設是'update files'.

app-ui 引數

app-ui引數繼承了infer引數, 除此之外增加了以下引數:

  • --server_name: 預設為'127.0.0.1'. 傳遞給gradio的demo.queue().launch(...)函式.
  • --server_port: 預設為7860. 傳遞給gradio的demo.queue().launch(...)函式.
  • --share: 預設為False. 傳遞給gradio的demo.queue().launch(...)函式.

deploy 引數

deploy引數繼承了infer引數, 除此之外增加了以下引數:

  • --host: 預設為'127.0.0.1.
  • --port: 預設為8000.
  • --ssl_keyfile: 預設為None.
  • --ssl_certfile: 預設為None.

相關文章