生信log

学习log2|llm学习之Modelscope-Swift训练框

2023-10-19  本文已影响0人  小周的万用胶囊

接着modelscope的学习,今天依靠Swift跑通了训练的部分,modelscope平台出了一个Swift框架可以让小白,爱好者非AI专业人士无痛训练大模型,仅需少量代码即可完成。经过测试,发现Swift框架是和huggingface hub出的transformers混搭使用的,可能因为transformers这个库已经包含了基础的内容就没必要再重复造轮子吧(属于是无端猜测)。序列的字节化是通过transformers库完成的,而训练参数之类繁杂的代码则是被Swift框架封装了,能够达到直观训练的目的。

0. Swift框架是什么

官方的解释:Swift是一个提供LLM模型轻量级训练和推理的开源框架。
用户层面的解释:无痛训练的大模型的包。

1. Swift训练模型的流程

1. 数据加载

2. 如何设置训练的参数、定义一个trainer和训练模型

# 设定训练参数下面是LoRA的调参
LORA_TARGET_MODULES = ['query_key_value']
LORA_RANK = 8
LORA_ALPHA = 32
LORA_DROPOUT_P = 0.1
lora_config = LoRAConfig(
    target_modules=LORA_TARGET_MODULES,
    merge_weights=LORA_RANK,
    lora_alpha=LORA_ALPHA,
    lora_dropout=LORA_DROPOUT_P
)

#序列化输入,填充和剪裁
def tokenize_function(examples):
    return tokenizer(examples["sentence1"], examples["sentence2"],
    padding="max_length", truncation=True, max_length=128)

# 处理数据集
train_dataset = train_dataset.map(tokenize_function)
val_dataset = val_dataset.map(tokenize_function)

# 训练参数,定义模型输出路径、batch的数量等等
arguments = TrainingArguments(
    output_dir='./outputs',
    per_device_train_batch_size=16,
)

# 更多参数查看
print(TrainingArguments.__dict__)

#实例化一个训练
trainer = Trainer(model, arguments, train_dataset=train_dataset,
                  eval_dataset=val_dataset,
                  data_collator=default_data_collator)


#训练代码
trainer.train()

3. 怎么运行用Swift框架微调好的模型

# 掩码任务
from modelscope.pipelines import pipeline
unmasker = pipeline('fill-mask', model='bert-base-uncased')

#序列标注任务part-of-speech
pipeline_ins = pipeline(task='part-of-speech', model='damo/nlp_structbert_part-of-speech_chinese-lite')
pipeline_ins(input='今天天气不错,适合出去游玩')

# 文本生成
input = '昨天起,上海地铁3号线长江南路站、殷高西路站、江湾镇站三站进一步限流。体验发现,高峰时段排队5分钟能进站;不少乘客选择提前起床,“现在提前10到20分钟起床,即便限流也不会影响上班”。被限流的XDJMS,你们提前多久?新民网'
text_summary = pipeline('text-generation', model='damo/nlp_palm2.0_text-generation_chinese-base')
text_summary(input)

from modelscope import AutoModelForSequenceClassification, AutoTokenizer
from swift import Trainer, LoRAConfig, Swift


model = AutoModelForSequenceClassification.from_pretrained(
            'AI-ModelScope/bert-base-uncased', revision='v1.0.0')
tokenizer = AutoTokenizer.from_pretrained(
    'AI-ModelScope/bert-base-uncased', revision='v1.0.0')
lora_config = LoRAConfig(target_modules=['query', 'key', 'value'])
model = Swift.from_pretrained(model, model_id='./outputs/checkpoint-21')

print(model(**tokenizer('this is a test', return_tensors='pt')))

Bert-base-uncased的模型官方用法

注意事项

官方的bert-base-uncased用法

参考
ModelScope Swift官方手册

上一篇 下一篇

猜你喜欢

热点阅读