创新项目实训-ModelScope 笔记

1.以开源方式提供众多预训练模型,免费体验,下载使用。SOTA model:state-of-the-art model,并不是特指某个具体的模型,而是指在该项研究任务中,目前最好/最先进的模型。

2.数据集

3.一行代码使用模型推理能力,十几行代码实现快速构建行业专属模型(十几行代码微调模型)

4.在线Notebook训练平台,链接云端算力。集成好环境了,不用再配环境

5.以模型为中心的模型开源社区,围绕模型和模型的使用

6.任务=图像分类、语音识别等。

7.模型=具体模型实例,包括模型网络结构和模型参数。

8.数据集:数据集合,可用于算法训练、测试、验证,通常以表格形式出现。按照模态可划分为文本、图像、音频、视频、多模态等

9.ModelScope Library是ModelScope平台自研的一套Python Library框架,通过调用特定的方法,用户可以只写短短的几行代码,就可以完成模型的推理、训练和评估等任务,也可以在此基础上快速进行二次开发,实现自己的创新想法。

10.模型详情页 右侧有在线体验功能。在NoteBook中打开。选择实例环境,启动。启动完毕后选择查看notebook。Notebook标签下的Python3为使用环境。当不需要实例后及时关闭,避免浪费资源。

11.使用modelscope pipeline接口来快速使用模型实例化task对象并使用。

from modelscope.pipelines import pipeline
word_segmentation = pipeline('word-segmentation',model='damo/nlp_structbert_word-segmentation_chinese-base')
​
input_str = '今天天气不错,适合出去游玩'
print(word_segmentation(input_str))
{'output': '今天 天气 不错 , 适合 出去 游玩'}

12.训练模型

ModelScope的模型训练步骤如下:

  1. 使用MsDataset加载数据集

  2. 编写cfg_modify_fn方法,按需修改部分参数

  3. 构造trainer,开始训练

  4. 【训练后步骤】进行模型评估

  5. 【训练后步骤】使用训练后的模型进行推理

PyTorch模型的训练使用EpochBasedTrainer(及其子类),该类会根据配置文件实例化模型、预处理器、优化器、指标等模块。因此训练模型的重点在于修改出合理的配置,其中用到的各组件都是ModelScope的标准模块。

13.云平台

1.python console 是交互模式的python,按shift+enter来发送

2.获得托管在modelscope上的数据集:

from modelscope.msdatasets import MsDataset
​
# 以cats_and_dogs数据集为例,数据集链接: https://modelscope.cn/datasets/tany0699/cats_and_dogs/summary
ds = MsDataset.load('cats_and_dogs', namespace='tany0699', split='train')
print(next(iter(ds)))
​
# 也可以通过namespace/dataset_name的形式传入数据集名称
ds = MsDataset.load('tany0699/cats_and_dogs', split='train')
print(next(iter(ds)))
​
# 使用强制加载模式(删除该数据集的本地缓存并强制重新下载)
ds = MsDataset.load('cats_and_dogs', namespace='tany0699', split='train', download_mode=DownloadMode.FORCE_REDOWNLOAD)
print(next(iter(ds)))

注意强制加载模式。

超大型数据集加载代码如下(返回一个迭代器)

from modelscope.msdatasets import MsDataset
​
# 以uni-fold蛋白质折叠数据集为例,链接:https://modelscope.cn/datasets/DPTech/Uni-Fold-Data/summary
ds = MsDataset.load(dataset_name='Uni-Fold-Data', namespace='DPTech', split='train', use_streaming=True)
print(next(iter(ds)))

加载特殊权限的数据集

from modelscope.msdatasets import MsDataset
from modelscope.hub.api import HubApi
​
# public权限数据集-正常加载即可,参考上文示例
​
# private/internal权限数据集加载
api = HubApi()
api.login('my-sdk-token')  # 备注:my-sdk-token 需要从modelscope-个人中心-访问令牌获取
​
input_kwargs = {'delimiter': '\t'}
ds = MsDataset.load('Alimeeting4MUG', subset_name="only_topic_segmentation", **input_kwargs)
print(ds["test"][0])

MsDataset对象可以和pytorch、tensorflow、hugging face dataset对象互相转换。

另,加载本地数据集:

from modelscope.msdatasets import MsDataset
# 载入训练数据
train_dataset = MsDataset.load('/path/to/my_train_file.txt')
# 载入评估数据
eval_dataset = MsDataset.load('/path/to/my_eval_file.txt')

3.加载模型和预处理器

from modelscope.models import Model
# 传入模型id或模型目录
model = Model.from_pretrained('some model')

from_pretrained方法传入的参数将会覆盖模型的默认参数。

model_name_or_path: 字符串类型,本地模型路径或ModelHub的模型id
task: 额外的task参数,可选,指定后不会使用默认的task,比如模型configuration.json中指定了task='backbone',在此指定task='text-classification',则会尝试使用text-classification模型加载checkpoint
kwargs: 可以传入模型构造的任意参数,这些参数都会覆盖配置文件中的默认参数,如Model.from_pretrained('some model', num_labels=2)

加载模型预处理器

from modelscope.preprocessors import Preprocessor
# 传入模型id或模型目录
preprocessor = Preprocessor.from_pretrained('some model')

4.修改训练参数(本质是修改配置文件)

通过cfg_modify_fn函数来修改配置。此函数将作为参数传入trainer中。

打印配置文件,查看哪些需要修改。

from modelscope.utils.hub import read_config
# 上面的model_id
config = read_config(model_id)
print(config.pretty_text)

修改参数,推荐查看各类模型最佳实践文档。

具体的函数代码形式如下:

# 这个方法在trainer读取configuration.json后立即执行,先于构造模型、预处理器等组件
def cfg_modify_fn(cfg):
  cfg.preprocessor.type='sen-sim-tokenizer'
  cfg.preprocessor.first_sequence = 'sentence1'
  cfg.preprocessor.second_sequence = 'sentence2'
  cfg.preprocessor.label = 'label'
  cfg.preprocessor.label2id = {'0': 0, '1': 1}
  cfg.model.num_labels = 2
  cfg.task = 'text-classification'
  cfg.pipeline = {'type': 'text-classification'}
  cfg.train.max_epochs = 5
  cfg.train.work_dir = '/tmp'
  cfg.train.dataloader.batch_size_per_gpu = 32
  cfg.evaluation.dataloader.batch_size_per_gpu = 32
  cfg.train.dataloader.workers_per_gpu = 0
  cfg.evaluation.dataloader.workers_per_gpu = 0
  cfg.train.optimizer.lr = 2e-5
  cfg.train.lr_scheduler.total_iters = int(len(train_dataset) / cfg.train.dataloader.batch_size_per_gpu) * cfg.train.max_epochs
  cfg.evaluation.metrics = 'seq-cls-metric'
  # 注意这里需要返回修改后的cfg
  return cfg

5.构造trainer,开始训练

from modelscope.trainers import build_trainer
​
# 配置参数
kwargs = dict(
        model=model_id,
        train_dataset=train_dataset,
        eval_dataset=eval_dataset,
        cfg_modify_fn=cfg_modify_fn)
trainer = build_trainer(default_args=kwargs)
trainer.train()

6.模型评估。训练后的模型在工作目录下的output文件夹中(默认)

from modelscope.msdatasets import MsDataset
# 载入评估数据
eval_dataset = MsDataset.load('clue',  subset_name='afqmc', split='validation')
​
from modelscope.trainers import build_trainer
​
# 配置参数
kwargs = dict(
        # 由于使用的模型训练后的目录,因此不需要传入cfg_modify_fn
        model='/tmp/output',
        eval_dataset=eval_dataset)
trainer = build_trainer(default_args=kwargs)
trainer.evaluate()

7.模型保存

模型保存文件的三种格式:pkl,pt,pth。就使用上来说没有差别。

pytorch模型分为模型结构和权重。推荐只存储模型权重,每次加载权重文件。

save_dir是保存路径。

loaded_model=torch.load(save_dir)# 从指定路径加载整个模型
#或采用以下方式
loaded_model=model.from_pretrained("")#先加载模型
loaded_model=load_state_dict(torch.load(save_dir))#先从指定路径加载state_dict,再将dict加载到模型中。
  • 13
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值