Skip to content

Commit 2fcc9f0

Browse files
authored
Update yi sh (#506)
1 parent 56132d7 commit 2fcc9f0

File tree

10 files changed

+125
-19
lines changed

10 files changed

+125
-19
lines changed

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -64,7 +64,7 @@ Users can check the [documentation of SWIFT](docs/source/GetStarted/快速使用
6464

6565

6666
## 🎉 News
67-
- 2024.03.06: Support training and inference of qwen1.5 awq series, support training and inference of yi-9b.
67+
- 2024.03.06: Support training and inference of qwen1.5 awq series, support training and inference of [yi-9b](https://github.com/modelscope/swift/blob/main/examples/pytorch/llm/scripts/yi_9b/lora_mp_ddp).
6868
- 🔥2024.02.29: Support [LLaMA PRO](https://arxiv.org/pdf/2401.02415.pdf), use [this script](https://github.com/modelscope/swift/blob/main/examples/pytorch/llm/scripts/yi_6b_chat/llamapro/sft.sh) to begin.
6969
- 🔥2024.02.29: Support [LoRA+](https://arxiv.org/pdf/2402.12354.pdf), use [this script](https://github.com/modelscope/swift/blob/main/examples/pytorch/llm/scripts/yi_6b_chat/lorap/sft.sh) to begin.
7070
- 2024.02.25: Support `swift export` to export models for **AWQ/GPTQ** quantization and push to ModelScope Hub. For more details, please refer to the document: [LLM Quantization Document](https://github.com/modelscope/swift/blob/main/docs/source/LLM/LLM%E9%87%8F%E5%8C%96%E6%96%87%E6%A1%A3.md).

README_CN.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -62,7 +62,7 @@ SWIFT(Scalable lightWeight Infrastructure for Fine-Tuning)是一个可扩展
6262
用户可以查看 [SWIFT官方文档](docs/source/GetStarted/快速使用.md) 来了解详细信息。
6363

6464
## 🎉 新闻
65-
- 2024.03.06: 支持qwen1.5 awq系列训练与推理, 支持yi-9b训练与推理.
65+
- 2024.03.06: 支持qwen1.5 awq系列训练与推理, 支持[yi-9b](https://github.com/modelscope/swift/blob/main/examples/pytorch/llm/scripts/yi_9b/lora_mp_ddp)训练与推理.
6666
- 🔥2024.02.29: 支持[LLaMA PRO](https://arxiv.org/pdf/2401.02415.pdf), 使用[这个脚本](https://github.com/modelscope/swift/blob/main/examples/pytorch/llm/scripts/yi_6b_chat/llamapro/sft.sh)即可开始训练.
6767
- 🔥2024.02.29: 支持[LoRA+](https://arxiv.org/pdf/2402.12354.pdf), 使用[这个脚本](https://github.com/modelscope/swift/blob/main/examples/pytorch/llm/scripts/yi_6b_chat/lorap/sft.sh)即可开始训练.
6868
- 2024.02.25: 支持`swift export`, 对模型进行**AWQ/GPTQ**量化导出, 以及推送ModelScope Hub. 具体可以查看文档: [LLM量化文档](https://github.com/modelscope/swift/blob/main/docs/source/LLM/LLM%E9%87%8F%E5%8C%96%E6%96%87%E6%A1%A3.md).

docs/source/LLM/命令行参数.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,7 @@
4848
- `--lora_alpha`: 默认为`32`. 只有当`sft_type`指定为'lora'时才生效.
4949
- `--lora_dropout_p`: 默认为`0.05`, 只有当`sft_type`指定为'lora'时才生效.
5050
- `--lora_bias_trainable`: 默认为`'none'`, 可以选择的值: 'none', 'all'. 如果你要将bias全都设置为可训练, 你可以设置为`'all'`.
51-
- `--lora_modules_to_save`: 默认为`[]`. 如果你想要训练embedding, lm_head, 或者layer_norm, 你可以设置此参数, 例如: `--lora_modules_to_save wte ln_1 ln_2 ln_f lm_head`, 这个参数用于任何adapter的训练中.
51+
- `--lora_modules_to_save`: 默认为`[]`. 如果你想要训练embedding, lm_head, 或者layer_norm, 你可以设置此参数, 例如: `--lora_modules_to_save EMBEDDING LN lm_head`. 如果传入`'EMBEDDING'`, 则将Embedding层添加到`lora_modules_to_save`. 如果传入`'LN'`, 则将`RMSNorm``LayerNorm`添加到`lora_modules_to_save`.
5252
- `--lora_dtype`: 默认为`'fp32'`, 指定lora模块的dtype类型. 如果是`AUTO`则跟随原始模块的dtype类型. 你可以选择的值: 'fp16', 'bf16', 'fp32', 'AUTO'.
5353
- `--use_dora`: 默认为`False`, 是否使用`DoRA`.
5454
- `--use_rslora`: 默认为`False`, 是否使用`RS-LoRA`.
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
# Experimental environment: 2 * 3090
2+
CUDA_VISIBLE_DEVICES=0,1 \
3+
swift infer \
4+
--ckpt_dir "output/yi-9b/vx-xxx/checkpoint-xxx" \
5+
--load_dataset_config true \
6+
--max_length 2048 \
7+
--use_flash_attn true \
8+
--max_new_tokens 2048 \
9+
--temperature 0.3 \
10+
--top_p 0.7 \
11+
--repetition_penalty 1. \
12+
--do_sample true \
13+
--merge_lora false \
Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
# Experimental environment: 4 * 3090
2+
# 4 * 22GB GPU memory
3+
# Train a chat model with agent capabilities and self-cognition from the base.
4+
5+
CUDA_VISIBLE_DEVICES=0,1,2,3 \
6+
NPROC_PER_NODE=2 \
7+
swift sft \
8+
--model_type yi-9b \
9+
--sft_type lora \
10+
--tuner_backend swift \
11+
--template_type yi \
12+
--dtype AUTO \
13+
--output_dir output \
14+
--dataset ms-agent \
15+
--train_dataset_sample 20000 \
16+
--train_dataset_mix_ratio 2 \
17+
--num_train_epochs 3 \
18+
--max_length 4096 \
19+
--check_dataset_strategy warning \
20+
--lora_rank 8 \
21+
--lora_alpha 32 \
22+
--lora_dropout_p 0.05 \
23+
--lora_target_modules ALL \
24+
--lora_modules_to_save EMBEDDING LN \
25+
--gradient_checkpointing true \
26+
--batch_size 1 \
27+
--weight_decay 0.1 \
28+
--learning_rate 5e-5 \
29+
--gradient_accumulation_steps 16 \
30+
--max_grad_norm 0.5 \
31+
--warmup_ratio 0.03 \
32+
--eval_steps 100 \
33+
--save_steps 100 \
34+
--save_total_limit 2 \
35+
--logging_steps 10 \
36+
--use_flash_attn false \
37+
--self_cognition_sample 2000 \
38+
--model_name 小黄 'Xiao Huang' \
39+
--model_author 魔搭 ModelScope \

swift/llm/tuner.py

Lines changed: 23 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -13,12 +13,13 @@
1313
from swift.tuners.module_mapping import MODEL_KEYS_MAPPING
1414
from swift.utils import (activate_model_parameters, freeze_model_parameters,
1515
get_logger)
16-
from .utils import SftArguments, find_all_linears, find_embedding, is_adapter
16+
from .utils import (SftArguments, find_all_linears, find_embedding, find_ln,
17+
is_adapter)
1718

1819
logger = get_logger()
1920

2021

21-
def handle_target_modules_all(model, args: SftArguments) -> None:
22+
def handle_target_modules(model, args: SftArguments) -> None:
2223
if args.sft_type == 'ia3':
2324
target_modules = args.ia3_target_modules
2425
assert len(args.ia3_feedforward_modules) > 0, (
@@ -39,11 +40,30 @@ def handle_target_modules_all(model, args: SftArguments) -> None:
3940
logger.info(f'lora_target_modules: {args.lora_target_modules}')
4041

4142

43+
def handle_modules_to_save(model, args: SftArguments) -> None:
44+
if args.sft_type == 'ia3':
45+
modules_to_save = args.ia3_modules_to_save
46+
else:
47+
modules_to_save = args.lora_modules_to_save
48+
if args.lora_m2s_use_embedding:
49+
modules_to_save += find_embedding(model)
50+
if args.lora_m2s_use_ln:
51+
modules_to_save += find_ln(model)
52+
53+
if args.sft_type == 'ia3':
54+
args.ia3_modules_to_save = modules_to_save
55+
logger.info(f'ia3_modules_to_save: {args.ia3_modules_to_save}')
56+
else:
57+
args.lora_modules_to_save = modules_to_save
58+
logger.info(f'lora_modules_to_save: {args.lora_modules_to_save}')
59+
60+
4261
def prepare_model(model, args: SftArguments):
4362
# Preparing LoRA
4463
if is_adapter(args.sft_type):
4564
if args.resume_from_checkpoint is None:
46-
handle_target_modules_all(model, args)
65+
handle_target_modules(model, args)
66+
handle_modules_to_save(model, args)
4767
lora_kwargs = {
4868
'r': args.lora_rank,
4969
'target_modules': args.lora_target_modules,

swift/llm/utils/__init__.py

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -30,12 +30,12 @@
3030
StopWords, Template, TemplateType, get_template,
3131
register_template)
3232
from .utils import (LazyLLMDataset, LLMDataset, dataset_map, download_dataset,
33-
find_all_linears, find_embedding, get_max_model_len,
34-
get_time_info, history_to_messages, inference,
35-
inference_stream, is_vllm_available, limit_history_length,
36-
messages_to_history, print_example, safe_tokenizer_decode,
37-
set_generation_config, sort_by_max_length, stat_dataset,
38-
to_device)
33+
find_all_linears, find_embedding, find_ln,
34+
get_max_model_len, get_time_info, history_to_messages,
35+
inference, inference_stream, is_vllm_available,
36+
limit_history_length, messages_to_history, print_example,
37+
safe_tokenizer_decode, set_generation_config,
38+
sort_by_max_length, stat_dataset, to_device)
3939

4040
try:
4141
if is_vllm_available():

swift/llm/utils/argument.py

Lines changed: 20 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -216,7 +216,7 @@ class SftArguments:
216216
deepspeed_config_path: Optional[str] = None
217217
model_cache_dir: Optional[str] = None
218218

219-
def _prepare_target_modules(self, target_modules):
219+
def _prepare_target_modules(self, target_modules) -> List[str]:
220220
if isinstance(target_modules, str):
221221
target_modules = [target_modules]
222222
if len(target_modules) == 0:
@@ -238,6 +238,19 @@ def _prepare_target_modules(self, target_modules):
238238
self.lora_use_all = True
239239
return target_modules
240240

241+
def _prepare_modules_to_save(self, modules_to_save) -> List[str]:
242+
if isinstance(modules_to_save, str):
243+
modules_to_save = [modules_to_save]
244+
if len(modules_to_save) == 0:
245+
return modules_to_save
246+
if 'EMBEDDING' in modules_to_save:
247+
modules_to_save.remove('EMBEDDING')
248+
self.lora_m2s_use_embedding = True
249+
if 'LN' in modules_to_save:
250+
modules_to_save.remove('LN')
251+
self.lora_m2s_use_ln = True
252+
return modules_to_save
253+
241254
def __post_init__(self) -> None:
242255
handle_compatibility(self)
243256
if is_pai_training_job():
@@ -259,14 +272,20 @@ def __post_init__(self) -> None:
259272

260273
self.lora_use_embedding = False
261274
self.lora_use_all = False
275+
self.lora_m2s_use_embedding = False
276+
self.lora_m2s_use_ln = False
262277
if self.sft_type == 'ia3':
263278
self.ia3_feedforward_modules = self._prepare_target_modules(
264279
self.ia3_feedforward_modules)
265280
self.ia3_target_modules = self._prepare_target_modules(
266281
self.ia3_target_modules)
282+
self.ia3_modules_to_save = self._prepare_modules_to_save(
283+
self.ia3_modules_to_save)
267284
else:
268285
self.lora_target_modules = self._prepare_target_modules(
269286
self.lora_target_modules)
287+
self.lora_modules_to_save = self._prepare_modules_to_save(
288+
self.lora_modules_to_save)
270289
if self.sft_type in {'adalora', 'ia3'} and self.lora_use_embedding:
271290
raise ValueError(
272291
'`adalora` and `ia3` do not support setting embedding as target_modules.'

swift/llm/utils/model.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1004,7 +1004,7 @@ def cross_entropy_forward(self, inputs: Tensor,
10041004
support_vllm=True)
10051005
@register_model(
10061006
ModelType.yi_9b,
1007-
'AI-ModelScope/Yi-9B',
1007+
'01ai/Yi-9B',
10081008
LoRATM.llama2,
10091009
TemplateType.default_generation,
10101010
support_flash_attn=True,

swift/llm/utils/utils.py

Lines changed: 20 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -339,13 +339,28 @@ def print_example(example: Dict[str, Any],
339339
logger.info(f'[LABLES] {labels_str}')
340340

341341

342-
def find_embedding(model: Module) -> List[str]:
343-
target_module_names = set()
342+
def _find_layers(model: Module, module_cls: type) -> List[str]:
343+
module_names = set()
344344
for name, module in model.named_modules():
345-
if isinstance(module, torch.nn.Embedding):
345+
if isinstance(module, module_cls):
346346
module_name = '.'.join(name.split('.')[-2:])
347-
target_module_names.add(module_name)
348-
return list(target_module_names)
347+
module_names.add(module_name)
348+
return list(module_names)
349+
350+
351+
def find_ln(model: Module) -> List[str]:
352+
module_names = set()
353+
for name, module in model.named_modules():
354+
module_cls_name = module.__class__.__name__.lower()
355+
if isinstance(module,
356+
torch.nn.LayerNorm) or 'rmsnorm' in module_cls_name:
357+
module_name = '.'.join(name.split('.')[-1:])
358+
module_names.add(module_name)
359+
return list(module_names)
360+
361+
362+
def find_embedding(model: Module) -> List[str]:
363+
return _find_layers(model, torch.nn.Embedding)
349364

350365

351366
def find_all_linears(model: Module, quantization_bit: int,

0 commit comments

Comments
 (0)