欢迎来到ModelScope平台!本篇文章介绍如何快速开始使用ModelScope平台上的模型,包括所需的基础概念,环境安装,模型推理和训练的快速实践示例。

如何开始#

  • 如果你是新手,想快速体验产品, 请参阅本文快速开始。快速开始包含基础概念知识和环境安装指南,可帮助你快速启动并运行ModelScope Library;
  • 如果你准备好环境,想要进一步探索ModelScope Library的模型使用,请参阅ModelScope Library教程。该模块将帮你获得平台使用所需的基础使用和教学指导;
  • 如果你对特定的模型感兴趣,并想了解该模型的推理、训练等过程,请参阅模型介绍。该模块将进一步介绍针对特定模型的最佳实践说明;
  • 如果你对特定的任务感兴趣,并想了解该任务的推理、训练、导出及可用模型等信息,请参阅各任务最佳实践。该模块将介绍针对特定任务的端到端使用说明;
  • 如果你想成为社区的贡献者,请参阅贡献者指南。该模块介绍作为社区贡献者您所需要具备的基础知识、平台的设计规范和使用说明。我们非常欢迎您成为社区的贡献者分享您的内容,在成为贡献者之前,请您仔细阅读开源行为准则,共同为推进绿色社区助力!
  • 其他平台功能说明,请参阅具体的功能模块获取您所需的信息。
    • 模型库的介绍
    • 数据集的介绍
    • ModelScope Library的介绍

开始之前,您需要具备如下基础背景知识,并理解相关的名词概念,点击可快速获取相关内容。

名词解释#

ModelScope平台是以模型为中心的模型开源社区,与模型的使用相关,您需要先了解如下概念。

基础概念 定义 了解更多
任务 任务(Task)指某一领域具体的应用,以用于完成特定场景的任务。例如图像分类、文本生成、语音识别等,您可根据任务的输入输出找到适合您的应用场景的任务类型,通过任务的筛选来查找您所需的模型。 了解更多信息,请参阅任务的介绍
模型 模型(Model)是指一个具体的模型实例,包括模型网络结构和相应参数。ModelScope平台提供丰富的模型信息供用户体验与使用。  
模型库 模型库(Modelhub)是指对模型进行存储、版本管理和相关操作的模型服务,用户上传和共享的模型将存储至ModelScope的模型库中,同时用户也可在Model hub中创建属于自己的模型存储库,并沿用平台提供的模型库管理功能进行模型管理。 了解更多信息,请参阅模型库的介绍
数据集 数据集(Dataset)是方便共享及访问的数据集合,可用于算法训练、测试、验证,通常以表格形式出现。按照模态可划分为文本、图像、音频、视频、多模态等。 了解更多信息,请参阅数据集的介绍
数据集库 数据集库(Datasethub)用于集中管理数据,支持模型进行训练、预测等,使各类型数据具备易访问、易管理、易共享的特点。  
ModelScope Library ModelScope Library是ModelScope平台自研的一套Python Library框架,通过调用特定的方法,用户可以只写短短的几行代码,就可以完成模型的推理、训练和评估等任务,也可以在此基础上快速进行二次开发,实现自己的创新想法。 了解更多信息,请参阅ModelScope Library的介绍

此外,您还需要了解基础的python命令与用法。 如果您完全不懂也没关系,平台将提供简单的命令代码,复制即可使用! 至此,恭喜你,已经具备了初步的概念!你现在可以在平台上探索你感兴趣的模型,若需要查看模型效果,可在模型卡片页面进行在线体验(当前仅部分模型支持在线体验),如果您想更深度地体验模型,需要安装环境进行模型验证与使用。

一、模型探索#

首先访问平台网址https://www.modelscope.cn/models, 您将看见平台上已有的所有公开模型,根据任务筛选或者关键词搜索可查找您感兴趣的模型。

若需要查找可在线体验或者可支持训练调优的模型,可通过搜索框右侧筛选框进行筛选。可在线体验和可支持训练的模型将不断的丰富扩展,敬请期待。

此文以中文分词模型为例,带您探索ModelScope的模型体验使用之旅。

通过筛选“分词”的任务,或者搜索关键词“分词”您可以检索到对应的中文分词模型。在右侧模型卡片上,将展示该模型的基础信息包括中英文名称、任务类型标签和其他模型标签、模型使用的深度学习框架、模型提供者、下载数、点赞数和模型描述等信息,帮助您快速了解模型。


点击模型,进入模型详情页,您可以查看该模型具体的模型介绍。模型提供者将在此处介绍模型具体的应用场景、功能描述、技术方法、模型训练与使用还有效果评估,供您参考。 右侧有“在线体验”功能,您可以通过切换默认示例来查看模型效果,或输入适合该模型的测试信息进行模型的效果测试。

在执行在线体验前,请您仔细阅读并理解相关免责声明,并合法合规使用在线体验的模块功能。

除了模型体验外,还可查看关于该模型具体的模型文件并进行下载。(当前支持通过git、Python SDK方式下载,更多请参阅模型的下载)

若您对模型效果满意,想进一步了解并对该模型进行代码验证,您可点击“快速使用”查看具体的代码示例方法。平台提供了两种方式的模型下载:
1)通过ModelScope Library安装下载
2)通过git拉取仓库。
这两种方式可以在本地运行模型。但需要先安装ModelScope Library才能运行代码,具体参见第二步【环境准备】-【本地开发环境安装】。 同时,我们也提供了在线Notebook,为您准备了模型所需的运行环境,无需用户自行安装依赖环境,使用更加流畅,推荐使用此种方式进行模型的深度体验!具体参见第二步【环境安装】-【在Notebook中开发】。

二、环境准备#

1、本地开发环境安装#

如果您需要在本地运行模型,需要进行相应的环境安装准备,包括:

  • 安装python环境。支持python3,不支持python2,建议3.7版本及以上。我们推荐您使用Anaconda进行安装。
  • 安装深度学习框架。ModelScope Library目前支持Tensorflow,Pytorch两大深度学习框架进行模型训练、推理。您可根据模型所需的框架选择适合的框架进行安装。
  • 安装ModelScope Library。我们提供两种安装方式,您可选择适合的方式进行安装。
    • pip安装。ModelScope提供了根据不同领域的安装包,您可根据对应的模型选择所需的安装包。
    • 使用源码安装。

更完整的安装信息参考:环境安装指南。

2、在Notebook中开发#

若您觉得本地安装较为复杂, ModelScope 平台也提供在线的运行环境,您可直接在Notebook中运行,Notebook中提供官方镜像无需自主进行环境安装,更加方便快捷,推荐大家使用! 注意:该功能需要您登录后使用,新用户注册ModelScope账号并完成阿里云账号绑定后即可获得免费算力资源,详情请参阅免费额度说明 。

成功登录后,您可直接在模型详情页中,点击“在Notebook中打开”,并选择需要运行的实例环境(CPU环境或GPU环境)。系统将预装ModelScope官方镜像,点击“启动”按钮即可在Notebook中使用。此时实例启动需要一些时间,请耐心等待,当环境启动后点击“查看Notebook”,则跳转notebook页面,即可在新环境中使用。


系统将新开一个页面,点击Python3,进入为您搭建好的Python3开发环境。

复制模型详情页面里快速使用的代码到该python环节中,点击运行按钮,即可跑出推理结果。(一些模型的使用方法,可参看具体的模型卡片的README信息中的代码要求)



执行命令后,系统将进行模型的下载、推理等一系列操作日志,推理完毕后输入测试的内容即可得到输出结果。
您也可使用该环节实现您的代码编程。关于Notebook功能,更多详情参阅:Notebook功能概述 。

三、2分钟跑通模型推理#

若您准备好本地环境或者已经打开一个Notebook的预装环境实例,则根据下述代码可对该模型进行推理。 使用modelscope pipeline接口只需要两步,同样以上述中文分词模型(damo/nlp_structbert_word-segmentation_chinese-base)为例简单说明:

  1. 首先根据task实例化一个pipeline对象
from modelscope.pipelines import pipeline
word_segmentation = pipeline('word-segmentation',model='damo/nlp_structbert_word-segmentation_chinese-base')
 
  1. 输入数据,拿到结果
input_str = '今天天气不错,适合出去游玩'
print(word_segmentation(input_str))
{'output': '今天 天气 不错 , 适合 出去 游玩'}
 

四、模型的训练与评估#

若您想更进一步使用自己的数据集进行模型训练,ModelScope提供了不同模态、场景下丰富的预训练模型,简单易用的调用接口,统一的配置文件设计,使得用户可以仅仅使用十几行python代码,就可以拉起一个finetune任务。 下面以一个简单的文本分类任务为例,演示如何通过十几行代码,就可以端到端拉起一个finetune任务。整体流程包含一下步骤:

  • 载入数据集
  • 数据预处理
  • 训练
  • 评估

1、载入数据集#

ModelScope提供了标准的MsDataset接口供用户进行基于ModelScope生态的数据源加载。下面以加载NLP领域的afqmc(Ant Financial Question Matching Corpus)数据集为例进行演示

from modelscope.msdatasets import MsDataset
# 载入训练数据
train_dataset = MsDataset.load('afqmc_small', split='train')
# 载入评估数据
eval_dataset = MsDataset.load('afqmc_small', split='validation')
 

数据集的使用,具体参看数据集的介绍。

2、数据预处理#

在ModelScope中,数据预处理与模型强相关,因此,在指定模型以后,ModelScope框架会自动从对应的modelcard中读取配置文件中的preprocessor关键字,自动完成预处理的实例化。

# 指定文本分类模型
model_id = 'damo/nlp_structbert_sentence-similarity_chinese-tiny'
 

配置文件的相关字段:

...
"preprocessor":{
"type": "sen-cls-tokenizer",
},
...
 

当然,对于进阶的使用者,配置文件也支持用户自定义并从任意本地路径读取,具体参考文档:Configuration详解

3、模型的训练#

我们支持单卡训练和分布式训练,请根据您的机器规格从下列方式中选择一种即可。如果您是新手,推荐您优先选择单卡的方式。

单卡#

首先,配置训练所需参数:

from modelscope.trainers import build_trainer

# 指定工作目录
tmp_dir = "/tmp"

# 配置参数
kwargs = dict(
model=model_id,
train_dataset=train_dataset,
eval_dataset=eval_dataset,
work_dir=tmp_dir)

 

其次,根据参数实例化trainer对象

trainer = build_trainer(default_args=kwargs)
 

最后,调用train接口进行训练

trainer.train()
 

恭喜,你完成了一次模型训练!

分布式#

首先,准备训练脚本,并将下列代码保存到例如./train.py脚本中:

import argparse
import os

from modelscope.trainers import build_trainer

parser = argparse.ArgumentParser(description='Train a model')
parser.add_argument('--local_rank', type=int, default=0)
args = parser.parse_args()
if 'LOCAL_RANK' not in os.environ:
os.environ['LOCAL_RANK'] = str(args.local_rank)

# 指定工作目录
tmp_dir = "/tmp"

# 配置参数
kwargs = dict(
model=model_id,
train_dataset=train_dataset,
eval_dataset=eval_dataset,
work_dir=tmp_dir,
launcher='pytorch' # 分布式启动方式
)

# 实例化trainer对象
trainer = build_trainer(default_args=kwargs)

# 调用train接口进行训练
trainer.train()

 

然后启动分布式训练:

PyTorch:

单机多卡:

$ python -m torch.distributed.launch --nproc_per_node=${NUMBER_GPUS} --master_port=${MASTER_PORT} ./train.py
  • nproc_per_node:当前主机创建的进程数(使用的GPU个数), 例如--nproc_per_node=8
  • master_port:主节点的端口号,例如--master_port=29527

多机多卡:

以两个节点为例。

节点1:

python -m torch.distributed.launch --nproc_per_node=${NUMBER_GPUS} --nnodes=2 --node_rank=0 --master_addr=${YOUR_MASTER_IP_ADDRESS} --master_port=${MASTER_PORT} ./train.py

节点2:

python -m torch.distributed.launch --nproc_per_node=${NUMBER_GPUS} --nnodes=2 --node_rank=1 --master_addr=${YOUR_MASTER_IP_ADDRESS} --master_port=${MASTER_PORT} ./train.py
  • nproc_per_node:当前主机创建的进程数(使用的GPU个数), 例如--nproc_per_node=8
  • nnodes:节点的个数。
  • node_rank:当前节点的索引值。
  • master_addr:主节点的ip地址,例如--master_addr=104.171.200.62
  • master_port:主节点的端口号,例如--master_port=29527

恭喜,你完成了一次模型分布式训练!

4、模型的评估#

训练完成以后,配置评估数据集,直接调用trainer对象的evaluate函数,即可完成模型的评估,

# 直接调用trainer.evaluate,可以传入train阶段生成的ckpt # 也可以不传入参数,直接验证model metrics = trainer.evaluate(checkpoint_path=None) print(metrics)
 

modelscope也支持在训练时同步进行交叉验证,需要配置config文件中的 train.hooks的 EvaluationHook,具体配置如下:

{ ... "train": { ... "hooks": [ ... , { "type": "EvaluationHook", "by_epoch": false, "interval": 100 }] }, }
 

用户可以根据自己实际情况进行调整配置文件,也可自行注册相应hook,并通过type字段注册在配置文件中进行调用。关于hook的详细说明请参考文档:回调函数机制详解。

使用教程#

恭喜你!至此你已经成功学习完一个模型的完整使用。若你对平台功能想要更多地了解可具体参考对应的功能模块,同时平台提供了相应的教程来帮助您更好地理解模型的应用!我们也欢迎你加入到我们的社区贡献你的模型与想法,共同构建绿色开源社区! 详细教程请参阅:(更多丰富教程与课程内容开发中,敬请期待!)

  • 模型的推理
  • 数据的预处理
  • 模型的训练
  • 模型的评估
 

ModelScope的更多相关文章

  1. ThinkPHP3.1新特性:命名范围

    概述 命名范围功能,给模型操作提供了一系列的(连贯操作)封装,让你更方便的查询和操作数据.我们来具体了解下这一用法. 定义属性 要使用命名范围功能,主要涉及到模型类的_scope属性定义和scope连 ...

  2. thinkphp 杂乱笔记(1)

    部署模式可用两个单入口表示前后台thinkphpUploadspublic Home(前台)Admin(后台)index.php(前台入口文件)admin.php(后台入口文件)上面两个项目目录 也可 ...

  3. struts2 18拦截器详解(九)

    ScopedModelDrivenInterceptor 该拦截器处于defaultStack第八的位置,其主要功能是从指定的作用域内检索相应的model设置到Action中,该类中有三个相关的属性: ...

  4. 学习ThinkPHP笔记

    学习ThinkPHP笔记 TP的模块化设计 名称 描述 应用 基于同一个入口文件访问的项目我们称之为一个应用. 模块 一个应用下面可以包含多个模块,每个模块在应用目录下面都是一个独立的子目录. 控制器 ...

  5. ThinkPHP- 3.1

    基础: 1. 基础概念 LAMP LAMP是基于Linux,Apache,MySQL和PHP的开放资源网络开发平台.这个术语来自欧洲,在那里这些程序常用来作为一种标准开发环境.名字来源于每个程序的第一 ...

  6. tp5 关键字模糊查询 日期查询 小于大于某范围等查询的优点

    挺不错,用熟了这tp5封装的很方便. 类似上边一个查询多个操作,基本在model 一个方法搞定代码也不用很多, 首先要学会用scope  网上搜tp scope 有几个例子可以借鉴 model 内添加 ...

  7. AngularJS 前端 MVC 的设计与搭建

    代码 #未引入MVC框架之前的代码 <!doctype html> <html> <head> <meta charset="UTF-8" ...

  8. thinkphp 命名范围

    在应用开发过程中,使用最多的操作还是数据查询操作,凭借ThinkPHP的连贯操作的特性,可以使得查询操作变得更优雅和清晰,命名范围功能则是给模型操作定义了一系列的封装,让你更方便的操作数据. 命名范围 ...

  9. Python 霸榜的一周,又有什么新 AI 力作呢?「GitHub 热点速览」

    GPT 带火了一波语言模型,LLaMA 和 Alpaca 也在持续发力.依旧是各类 GPT 后缀霸榜 GitHub trending 的一周,为此特推部分专门收录了两个比较不错的 GPT 应用.而作为 ...

  10. 官宣 | Hugging Face 中文博客正式发布!

    作者:Tiezhen.Adina.Luke Hugging Face 的中国社区成立已经有五个月之久,我们也非常高兴的看到 Hugging Face 相关的中文内容在各个平台广受好评,我们也注意到,H ...

随机推荐

  1. 5. Mybatis获取参数值的两种方式

    ‍ MyBatis 获取参数值的两种方式:​${} 和 #{}​ ${}的本质就是字符串拼接,#{}的本质就是占位符赋值 ${}使用字符串拼接的方式拼接 sql,若为字符串类型或日期类型的字段进行赋值 ...

  2. 如何让一句话木马绕过waf ?

    一.什么是一句话木马? 一句话木马就是只需要一行代码的木马,短短一行代码,就能做到和大马相当的功能.为了绕过waf的检测,一句话木马出现了无数中变形,但本质是不变的:木马的函数执行了我们发送的命令. ...

  3. Windows同时安装多个JDK

    一.下载并安装JDK这一步选择你需要的JDK并下载安装,记得要记住安装的路径. 二.为JDK配置环境变量①找到系统环境变量 ②新建如下三个环境变量 第一个表示默认Java的home路径,以后在更改JD ...

  4. 一张表实现类某音的视频"评论回复"功能

    ​前言 现如今,不管是哪种类型的应用,评论区都少不了.从工具类的到媒体信息流类的,评论留言都是最基本的互动环节.比如抖音短视频下,针对视频每个用户都可以发表自己的观点:而针对用户的评论,其他的用户又可 ...

  5. Mariadb取24小时数据--九五小庞

    Mariadb是一种常用的关系型数据库管理系统.在进行实时数据处理时,我们常常需要查询最近24小时的数据来进行分析和处理.下面我们将介绍如何使用MySQL查询最近24小时的数据. SELECT * F ...

  6. iptables简要介绍及使用iptables实践NAT技术

    简介 iptables的文章多如牛毛,但是,我读了一些,发现虽然成体系,但是不便理解,今天就结合自己的理解,好好讲解下,另外,我们也会使用iptables来实验一个nat地址转换的demo,nat转换 ...

  7. Java与PHP的区别

    1.PHP暂时不支持像Java那样的JIT运行时编译的热点代码,但PHP具有opcache机制,能够将脚本对应的opcode缓存在内存中. 补充:JIT与JVM的三种执行模式:解释模式.编译模式.混合 ...

  8. Shell 摘抄:growpart中的参数处理

    下面这段代码中,变量cur表示这次循环所要处理的参数.如果没有触发前面的选项开关,第一个参数会被赋值给$DISK,第二个参数会赋值给$PART. 强无敌!- while [ $# -ne 0 ]; d ...

  9. Kubernetes: Kubectl 源码分析

    0. 前言 kubectl 看了也有一段时间,期间写了两篇设计模式的文章,是时候对 kubectl 做个回顾了. 1. kubectl 入口:Cobra kubectl 是 kubernetes 的命 ...

  10. 你真的知道吗?catch、finally和return哪个先执行

    我的一位朋友前阵子遇到一个问题,问题的核心就是try--catch--finally中catch和finally代码块到底哪个先执.这个问题看起来很简单,当然是"catch先执行.final ...