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的模型训练步骤如下:
-
使用MsDataset加载数据集
-
编写cfg_modify_fn方法,按需修改部分参数
-
构造trainer,开始训练
-
【训练后步骤】进行模型评估
-
【训练后步骤】使用训练后的模型进行推理
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加载到模型中。