ModelArts(一)——从快速入门到远程开发丨【华为云AI贺新年】
引言
关于ModelArts,你可能没有听说过很多。但是,你一定知道,云计算在现在日新月异的发展中有不可动摇的地位。你也一定知道notebook这款python应用在python编程中的重大作用,你也听说过人工智能中图片可以轻易的被计算机识别,效率大大高过人类;你也了解到Python可以进行智能预测,各项回归算法可以预测经济、新冠等的未来发展趋势。ModelArts就能够把云计算和我们熟知的jupyter结合起来,让我们仅仅使用浏览器就可以运行各样的Python程序,还能训练自己的算法和模型,让你在十五分钟左右就能完成一个简单的图像分类,今天就让我们从入门走向算法训练师!
一、小白入手ModelArts
连Python都不熟,我能用modelarts吗?当然可以。
1、准备工作
1.1创建自动学习项目
进入modelarts官网,点击管理控制台
点击自动学习
我们去创建一个自动学习:图像分类项目。
自定义名称,这个时候就需要找点数据集。
没有桶的话,新建桶即可。为了让小白也能轻松上手,在这里演示一下,看官大佬们可自行跳过。
1.2创建桶并上传数据集
选择新建桶。
多AZ存储能提高您的数据可用性,同时会采用相对较高的计费标准。由于桶存储是按需计费,我们的训练图片较少,这里选择多AZ存储即可。
配置信息:
区域 | 华北-北京四 | |
---|---|---|
数据冗余存储策略 | 多AZ存储 | |
桶名称 | 自定义 | |
存储类别 | 标准存储 | |
桶策略 | 私有 | |
默认加密 | 关闭 | |
归档数据直读 | 关闭 | |
标签 | 不添加 |
立即创建。
单击进入新创建的桶nice-photos查看详情。
点击对象,新建文件夹后上传对象。
新建文件夹input和output
进入到input文件夹,上传文件。
这里我们选择标准存储,上传从搜索引擎找到的鲸鱼和麻雀图片。如何利用爬虫查找图片,可参阅本人另一篇小短文Python批量自动下载获取图片。
本地自定义一个路径,运行如下python代码:
import requests
from bs4 import BeautifulSoup
import json
import eventlet
import os
urlshu = 1 #url中first = urlshu
pictureshu = 1 #图片下载时的名字(加上异常图片的第几张图片)
soupshu = 0 #每35张soup列表中第soupshu个
whileshu = 35 #用于while循环的数(因为每个页面35张图片)
url1 = 'https://cn.bing.com/images/async?q='
url2 = '&first=%d&count=35&cw=1177&ch=737&relp=35&tsc=ImageBasicHover&datsrc=I&layout=RowBased&mmasync=1'
head1 = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36 Edg/91.0.864.64'
}
#有35张图片的网页的请求标头
head2 = {
'Cookie': 'Hm_lvt_d60c24a3d320c44bcd724270bc61f703=1624084633,1624111635',
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36 Edg/91.0.864.64'
}
#具体图片的网页的请求标头
print('请输入查找内容:')
content = input()
if os.path.exists('./%s'%content):
pass #创建文件夹'图片'
else:
os.mkdir('./%s'%content)
print('请输入查找图片数量:')
number = int(input())
url = url1 + content + url2 #合并成去往有35张图片的网址
while whileshu:
r0 = requests.get(url%urlshu,headers = head1).text #发送get请求并将内容转化成文本
soup = BeautifulSoup(r0,features="html.parser").find_all('a','iusc') #解析r0并找到a和class=iusc的标签
data = str(soup[soupshu].get('m')) #将列表soup的第soupshu位中的m提取出来
zidian = json.loads(data) #将data转化成字典形式
ifopen = 1 #用于下方判断是否下载图片
with eventlet.Timeout(1,False): #设定1秒的超时判断
try:
picture = requests.get(zidian['murl'],headers = head2).content #发送get请求并返回二进制数据
except:
#print('图片%d超时异常'%pictureshu) #说明图片异常
pictureshu -= 1
ifopen = 0 #取消下载此图片,否则会一直卡着然后报错
while ifopen == 1:
text = open('%s/'%content + '%d'%pictureshu + '.jpg','wb') #将图片下载至文件夹'图片'中
text.write(picture) #上行代码中'wb'为写入二进制数据
text.close()
ifopen = 0
number = number - 1
pictureshu = pictureshu + 1
soupshu = soupshu + 1
whileshu = whileshu - 1
if whileshu == 0: #第一页图片下载完成,将网址的first进1
urlshu = urlshu + 1
whileshu = 35
soupshu = 0
if number == 0: #下载图片数量达标,退出循环
print("查找完成")
break
选择常用的数据集分割方法,训练集:验证集≈2:1,选择1~20,31~50为训练集,其余作为验证集,上传到input,output作为空文件夹输出。
注意:此处不要选择加密,否则会出现训练无法读取数据的情况。
上传完成后,回到创建图像分类项目的界面,选择输入输出位置为刚刚上传的训练集和验证集,创建项目。至此,准备工作完成。
2、开始训练
2.1标注数据集
刚刚上传的数据是未标注的,下面我们就来标注这些数据集。
enter添加标签:鲸、麻雀
选中其中所有为鲸的图片,标注为鲸,其余标注为麻雀。
标注完成,开始训练!
2.2训练数据集
点击开始训练,训练规格作为测试,免费学习即可,注意填入自己设定的训练集比例。
提交,耐心等待训练,
训练状态从发布中转为了训练中
训练完成,时长两分钟,准确率100%,非常可人。
2.3部署模型
提交,稍事等待。
部署成功,我们来测试一下。上传除训练集以外的图片,观察右侧输出结果。
预测准确度非常好。
2.4linuxAPI调用测试
使用curl命令发送预测请求的命令格式也分为文件输入、文本输入两类。
-
文件输入
curl -kv -F 'images=@图片路径' -H 'X-Auth-Token:Token值' -X POST 在线服务地址
- **“-k”**是指允许不使用证书到SSL站点。
- **“-F”**是指上传数据的是文件,本例中参数名为“images”,这个名字可以根据具体情况变化,@后面是图片的存储路径。
- **“-H”**是post命令的headers,Headers的Key值为“X-Auth-Token”,这个名字为固定的, Token值是用户获取到的token值(关于如何获取token,请参见获取请求认证)。
- **“POST”**后面跟随的是在线服务的调用地址。
curl命令文件输入样例:
curl -kv -F 'images=@/home/data/test.png' -H 'X-Auth-Token:MIISkAY***80T9wHQ==' -X POST https://modelarts-infers-1.cn-north-1.myhuaweicloud.com/v1/infers/eb3e0c54-3dfa-4750-af0c-95c45e5d3e83
-
文本输入
curl -kv -d '{"data":{"req_data":[{"sepal_length":3,"sepal_width":1,"petal_length":2.2,"petal_width":4}]}}' -H 'X-Auth-Token:MIISkAY***80T9wHQ==' -H 'Content-type: application/json' -X POST https://modelarts-infers-1.cn-north-1.myhuaweicloud.com/v1/infers/eb3e0c54-3dfa-4750-af0c-95c45e5d3e83
**“-d”**是Body体的文本内容。
进行token利用api需要注册IAM用户,此处不再赘述,请参考官网文档获取IAM用户Token
二、Python上手ModelArts
1、准备数据
1.1创建桶
参考实验步骤一中1.2创建桶,配置如下
①复制桶配置:不选
②区域:华北-北京四
③ 数据冗余存储策略:单AZ存储
④桶名称:自定义即可(需要记住此名称以备后续步骤使用)
⑤ 存储类别:标准存储
⑥桶策略:私有
⑦ 默认加密:关闭
⑧归档数据直读:关闭
然后新建一个文件夹data
1.2创建notebook
在ModelArts控制台左侧,点击开发环境下的Notebook,点击创建,配置如下:
①名称:自定义
②自动停止:根据自己需要时间设置
③镜像:公共镜像-pytorch1.4-cuda10.1-cudnn7-ubuntu18.04
④资源池:公共资源池
⑥类型:CPU
⑦规格:CPU:2核心8GB
⑧存储配置:默认存储
⑨SSH远程开发:关闭
配置好后提交,返回,直到notebook状态变为运行中。
1.3创建Notebook Python开发环境
点击“打开”进入Notebook,如果习惯旧版本的Notebook,可以点击返回旧版,这里新版本打开的是jupyter Lab。这里再次演示一下旧版本如何设计。
单击返回旧版,点击创建
选择multiengine2.0
选择对象存储服务,配置如下:
提交,返回Notebook列表
状态变为运行中,打开,进入华为云远程jupyter界面,选择新建一个TensorFlow-2.1.0
点击untitle,重命名
测试有关功能
2、Python代码实现
创建好了Notebook环境,接下来就跟我们平时的实验操作是一样的了。
我们来验证一下。
简单输出
3、新版Jupyter Lab体验
最新版的已经可以打开Lab界面
启动后单击打开
点击Python3.7.10即可新建Notebook
进行基本操作完全没有问题
文件读写操作,可以看到旁边生成了文件。
拖拽可以上传文件,非常方便。
三、自动学习
强化学习需要自己上传数据集。遵守有关规范。
1、图像分类
1.1数据准备
数据集要求
- 文件名规范:不能有中文,不能有+、空格、制表符。
- 保证图片质量:不能有损坏的图片目前支持的格式包括jpg、jpeg、bmp、png。
- 不要把明显不同的多个任务数据放在同一个数据集内。
- 每一类数据尽量多,尽量均衡。期望获得良好效果,图像分类项目中,建议训练数据集保证每类图片超过100张。
- 为了保证模型的预测准确度,训练样本跟真实使用场景尽量相似。
- 为保证模型的泛化能力,数据集尽量覆盖可能出现的各种场景。
OBS上传文件规范
-
如不需要提前上传训练数据,请创建一个空文件夹用于存放工程后期生成的文件。如:“/bucketName/data-cat”。
-
如需要提前上传待标注的图片,请创建一个空文件夹,然后将图片文件保存在该文件夹下,图片的目录结构如:“/bucketName/data-cat/cat.jpg”。
-
如您将已标注好的图片上传至OBS桶,请按照如下规范上传。
-
图像分类数据集要求将标注对象和标注文件存储在同一目录,并且一一对应,例如标注对象文件名为
“10.jpg”
,那么标注文件的文件名应为
“10.txt”
。
数据文件存储示例:
├─<dataset-import-path> │ 10.jpg │ 10.txt │ 11.jpg │ 11.txt │ 12.jpg │ 12.txt
-
只支持JPG、JPEG、PNG、BMP格式的图片。在ModelArts管理控制台上传时,单张图片的大小不能超过5MB,单次上传的图片总大小不能超过8MB,数据量大时推荐使用OBS Browser+上传 。
-
标签名是由中文、大小写字母、数字、中划线或下划线组成,且不超过32位的字符串。
-
图像分类标签
“.txt”
规范如下。
一行一个标签:
cat dog ...
-
那这次我们就下载猫、狗、麻雀、鲸各100张
我已经编写好了一段代码供大家使用。mkdir一个路径用于存放图片,然后运行即可。
import requests
from bs4 import BeautifulSoup
import json
import eventlet
import os
urlshu = 1 #url中first = urlshu
pictureshu = 1 #图片下载时的名字(加上异常图片的第几张图片)
soupshu = 0 #每35张soup列表中第soupshu个
whileshu = 35 #用于while循环的数(因为每个页面35张图片)
url1 = 'https://cn.bing.com/images/async?q='
url2 = '&first=%d&count=35&cw=1177&ch=737&relp=35&tsc=ImageBasicHover&datsrc=I&layout=RowBased&mmasync=1'
head1 = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36 Edg/91.0.864.64'
}
#有35张图片的网页的请求标头
head2 = {
'Cookie': 'Hm_lvt_d60c24a3d320c44bcd724270bc61f703=1624084633,1624111635',
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36 Edg/91.0.864.64'
}
#具体图片的网页的请求标头
print('请输入查找内容:')
content = input()
if os.path.exists('./%s'%content):
pass #创建文件夹'图片'
else:
os.mkdir('./%s'%content)
print('请输入查找图片数量:')
number = int(input())
url = url1 + content + url2 #合并成去往有35张图片的网址
while whileshu:
r0 = requests.get(url%urlshu,headers = head1).text #发送get请求并将内容转化成文本
soup = BeautifulSoup(r0,features="html.parser").find_all('a','iusc') #解析r0并找到a和class=iusc的标签
data = str(soup[soupshu].get('m')) #将列表soup的第soupshu位中的m提取出来
zidian = json.loads(data) #将data转化成字典形式
ifopen = 1 #用于下方判断是否下载图片
with eventlet.Timeout(1,False): #设定1秒的超时判断
try:
picture = requests.get(zidian['murl'],headers = head2).content #发送get请求并返回二进制数据
except:
#print('图片%d超时异常'%pictureshu) #说明图片异常
pictureshu -= 1
ifopen = 0 #取消下载此图片,否则会一直卡着然后报错
while ifopen == 1:
text = open('%s/'%content + '%d'%pictureshu + '.jpg','wb') #将图片下载至文件夹'图片'中
text.write(picture) #上行代码中'wb'为写入二进制数据
text.close()
full_path = '%s/'%content + '%d'%pictureshu + '.txt'
file = open(full_path, 'w',encoding="utf-8")
#写入的语句
file.write('%s'%content)
ifopen = 0
number = number - 1
pictureshu = pictureshu + 1
soupshu = soupshu + 1
whileshu = whileshu - 1
if whileshu == 0: #第一页图片下载完成,将网址的first进1
urlshu = urlshu + 1
whileshu = 35
soupshu = 0
if number == 0: #下载图片数量达标,退出循环
print("查找完成,已完成标注")
break
起始编号分别设置为1 101 201 301共400张图片。
把利用代码下载好的图片和标注归到一个文件夹dataset-animals。
比较过瘾的400个数据。
上传到obs,而一次只能上传100个。官网说上传文件较多,使用OBS Browser+,那我们下载了试试。win64下载地址:OBSBrowserPlus-win64,其余下载请参考下载OBS Browser+
解压运行
安装完成后,利用AK/SK登录。
直接添加文件夹,这样就很爽。
1.2创建项目
ModelArts控制台,自动学习-图像分类创建项目
配置如图。
需要稍等,会自动根据txt文件标注数据集
全部标注完成。
1.3训练模型并部署上线
开始训练。默认配置即可。
训练完成,部署上线
上传图片进行检验,效果很好。
2、物体检测
2.1准备数据
数据集需要有xml文件标注,或者未经标注需要现场标注。xml格式参考准备数据_AI开发平台ModelArts_自动学习_物体检测_华为云 (huaweicloud.com)
这里我们选择上传图片后再标注。
我们从网上下载100张海鸥图片。
2.2标注数据
上传50张进行标注
创建物体检测项目
挨个标注
好了,全部变成了已标注,我们同步一下数据集
2.3训练并发布
部署
变为运行中后,选择后50个海鸥图片开始测试
不错,识别比较准确。
3、预测分析
3.1准备数据
我们使用鸢尾花数据集,下载链接http://download.tensorflow.org/data/iris_training.csv
有关鸢尾花数据集的更多信息,可以看我的这篇笔记鸢尾花数据集的各种玩法_kewei chen-CSDN博客
训练数据的csv文件不能包含表头,否则会导致训练失败。
因此我们删除第一行。在excel里,光标移到1行上,右击删除即可。
输入数据的格式必须为csv格式,数据文件不包括表头,有效数据行数必须大于100行。列数必须小于200列,数据总大小不能超过100MB。
3.2创建项目
注意:当前由于特征筛选算法限制,标签列必须是数据集的最后一列。模型训练将会使用全部数据训练预测模型,该模型以其他列的数据为输入,以标签列的预测值为输出。
配置完成,开始训练。
3.3结果预测
键入以下内容
{
"data": {
"req_data": [{
"attr_1": 5.1,
"attr_2": 3.5,
"attr_3": 1.4,
"attr_4": 0.2
}]
}
}
输出为0,即代表Setosa
4、声音分类
数据准备
浏览记录 :: 第1页 :: 异种-canto (xeno-canto.org)
我们在这里,可以下载公益组织上传的鸟类声音。
利用如下代码,可以把文本转为人声
import pyttsx3
# 初始化来获取语音引擎
engine = pyttsx3.init()
text=input('请输入文本')
# 去掉文本中的换行符
text = text.replace('\n','')
# 保存音频到本地,格式为mp3
s = input('请输入你想要保存的文件名')
engine.save_to_file(text, '%s'%s+'.mp3')
engine.runAndWait()
使用以下代码,把mp3声音转为wav文件。
from ffmpy import FFmpeg as mpy # 音频格式转换对象
import os # 文件系统操作对象
def read_folder(mp3_folder, wav_folder):
'''
文件夹读取函数
:param mp3_folder:
:param wav_folder:
:return:
'''
# 遍历需要转换的MP3文件夹中的MP3文件
for a in os.listdir(mp3_folder):
# 创建MP3文件的绝对路径
mp3_file = os.path.join(mp3_folder, a)
# 调用格式转换函数
trans_to_wav(mp3_file, wav_folder)
def trans_to_wav(mp3_file, wav_folder):
'''
格式转换格式
:param mp3_file:
:param wav_folder:
:return:
'''
# 格式化文件
file_fmt = os.path.basename(mp3_file).strip()
# 获取文件格式
file_fmt = file_fmt.split('.')[-1]
# 校验文件格式
if file_fmt.strip() != 'mp3':
raise Exception('改文件不是MP3格式,请检查!')
elif file_fmt.strip() == '':
raise Exception('文件格式出现异常,请检查!')
# 创建wav的文件以供转换完成后输出
wav_file_path = os.path.join(wav_folder)
wav_file_path = os.path.join(wav_file_path, '{}.{}'.format(
os.path.basename(mp3_file).strip().split('.')[0], 'wav'
))
# 创建转换时的命令行参数字符串
cmder = '-f wav -ac 1 -ar 16000'
# 创建转换器对象
mpy_obj = mpy(
inputs={
mp3_file: None
},
outputs={
wav_file_path: cmder
}
)
print('执行CMDER 命令:{}'.format(mpy_obj.cmd))
# 执行转换
mpy_obj.run()
if __name__ == '__main__':
'''
主函数入口
'''
# 输入MP3文件夹
mp3_folder = input('输入MP3文件夹路径:\n')
# 校验MP3文件夹是否存在
if mp3_folder.strip() == '':
raise Exception('输入空值,请检查!')
elif mp3_folder.strip() != '':
if os.path.exists(mp3_folder) is False:
raise Exception('文件路径不存在')
# 输入wav文件夹路径
wav_folder = input('输入wav文件夹路径:\n')
# 校验wav文件夹是否存在
if wav_folder.strip() == '':
raise Exception('输入空值,请检查!')
#elif wav_folder.strip() != '':
# if os.path.exists(wav_folder) is False:
# raise Exception('文件路径不存在')
# 调用文件夹读取批量文件
read_folder(mp3_folder, wav_folder)
m4a转wav
'''
功能:读取指定文件夹下的所有mp3文件,转换为wav文件
用法:修改path路径 filter改为".m4a",就是遍历当前目录下的m4a文件,注释掉35行的cmd_command
转换其它的:最主要是用字符串拼接出cmd_command命令
'''
import os
path=r'./'
filter=[".m4a"] #设置过滤后的文件类型 当然可以设置多个类型
def all_path(dirname):
result = []#所有的文件
for maindir, subdir, file_name_list in os.walk(dirname):
for filename in file_name_list:
apath = os.path.join(maindir, filename)#合并成一个完整路径
ext = os.path.splitext(apath)[1] # 获取文件后缀 [0]获取的是除了文件名以外的内容
if ext in filter:
result.append(apath)
return result
filenames=all_path(path)
for filename in filenames:
filename=str(filename)
temp=filename.split('.')
#将.m4a格式转为wav格式的命令
cmd_command = "ffmpeg -i {0} -acodec pcm_s16le -ac 1 -ar 16000 -y {1}.wav && del {0}".format(filename,temp[0])
# 将.mp3格式转为wav格式的命令
#cmd_command = "ffmpeg -loglevel quiet -y -i {0} -ar 16000 -ac 1 {1}.wav && del {0}".format(filename, temp[0])
#print(cmd_command)
os.system(cmd_command)
最后那几个是用计算机合成的人声。其他的都是鸟类声音数据集。
登录我的obs控制台
上传。
创建声音分类项目。
进行批量标注
开始训练
模型部署
数据集小了,拟合效果还不够好。
增加数据集数目后,效果好多了。
5、文本分类
我们使用中文数据集:链接
https://thunlp.oss-cn-qingdao.aliyuncs.com/THUCNews.zip
模仿上述自动学习步骤即可,此处不在赘述。
四、进阶体验
1、一键完成商超商品识别模型部署
订阅模型:商超商品识别 (huaweicloud.com),前往控制台
部署为在线服务
配置如下,提交
在在线服务详情界面,点击预测
点击上传,我上传了一张西瓜,预测结果如下
可以看见,输出结果为西瓜,占了绝对优势。
上传的苹果,给我预测成了石榴。。。
下面是香蕉
2、一键运行Notebook实现工地钢筋盘点
进入案例界面基于计算机视觉的钢筋条数检测 (huaweicloud.com)
Run in modelarts
等待右上角链接完成
链接成功,切换规格
选择限时免费的GPU,等待切换
切换完成后,直接run即可
还可以一键自动运行
3、使用自动学习0代码开发图像分类AI模型
3.1下载数据集
进入AI Gallery,在“资产集市”>“数据”页面找到四类花卉图像分类小数据集,单击右侧“下载”。
配置如图
3.2创建图像分类项目
进入ModelArts控制台,在左侧导航栏选择“自动学习”>“图象分类”,单击“创建项目”。
配置如图
开始训练
配置如图,训练完成后部署
模型变成了运行中
上传玫瑰进行预测,准确度蛮高
雏菊
使用完成后,选择停止
4、使用订阅算法构建模型实现花卉识别
我们这次仍然以花卉识别为例,参考步骤{(四)3.1}下载数据集
将数据集下载:四类花卉图像分类小数据集 (huaweicloud.com)
下载到空目录:/test-modelartsz/dataset-flower/
数据集下载后,记住下载路径,订阅识别算法图像分类-ResNet_v1_50 (huaweicloud.com)
提交
点击名称,进入详情界面,等待完成。
完成后,点击右上角创建AI应用。
全部为默认即可,立即创建。
部署为在线服务
配置如下
等待部署完成
点击预测,选择上传
当然也有预测不准的时候,比如这个玫瑰给我搞成100%的雏菊。。。
上面这个还比较合理。
不需要训练后,可以点击右上角的停止。
5、使用自定义算法构建模型(手写数字识别)
5.1准备数据
点此下载数据集:数据集下载链接
解压后如图
进入对象存储服务,选择桶。新建一个文件夹,取名test-modelarts-cz/dataset-mnist,会自动生成子路径。
上传**“Mnist-Data-Set”**数据集
去gitee下载modelarts的工程zipModelArts-Lab
在新建的路径上传对象,上传,不要加密。
再新建两个文件夹mnist-tensorflow-code和mnist-model,存放脚本和模型。
下载完成后,解压缩“ModelArts-Lab-master.zip”文件,然后在“\ModelArts-Lab-master\official_examples\Using Custom Algorithms to Build Models on ModelArts\codes”目录中获取到训练脚本“train_mnist_tf.py”、推理代码“customize_service.py”和配置文件“config.json”,并上传至对应OBS路径。上传文件至OBS的操作指导请参见上传文件。
文件名称 | 描述 | 上传至如下OBS路径中 |
---|---|---|
“train_mnist_tf.py” | 训练脚本。 | “test-modelarts-cz/mnist-tensorflow-code” |
“customize_service.py” | 推理代码。 | “test-modelarts-cz/mnist-model/model”**说明:**请在训练作业完成后,再执行上传操作。训练任务完成后,会在“test-modelarts-cz/mnist-model”路径下自动生成model文件夹,用于存放训练输出的模型。如果训练作业运行多次,在“mnist-model”目录下将生成多种版本的目录,如“V0001”、“V0002”,请基于训练作业的版本,将推理代码和配置文件上传至对应版本下的“model”文件夹内。 |
“config.json” | 配置文件。 | “test-modelarts-cz/mnist-model/model”训练完后再传 |
默认下载路径:C:\Users\25122\Downloads\ModelArts-Lab-master\official_examples\Using Custom Algorithms to Build Models on ModelArts\codes
先上传第一个,后两个先不传。
5.2创建算法并训练
modelarts控制台-算法管理-我的算法-创建
配置如下图
提交即可。
ModelArts管理控制台>训练管理 > 训练作业(New)>创建
参数配置:
-
“算法>我的算法”:选择上一步创建的算法
-
“训练输入”:OBS中的“test-modelarts-cz/dataset-mnist”。
-
“训练输出”:OBS路径“test-modelarts-cz/mnist-model”。
-
“资源类型 ”:选GPU单卡,GPU: 1*NVIDIA-V100(32GB) | CPU: 8 核 64GB。
-
配置如下
-
训练作业已完成。
5.3部署AI应用
推理代码“customize_service.py”和配置文件“config.json”并上传至OBS路径test-modelarts-cz/mnist-model/model中,请查看前面我们的表格。此推理代码和配置文件为ModelArts为操作样例提供的示例。也可以基于模型包规范,开发自己所需的推理代码及配置文件。
ModelArts控制台 AI应用
配置如图
部署为在线服务
配置如图,其余默认。
等待部署完成
开启预测
和样例(点击另存为)吻合很好,但是和自己写的就不怎么行了。
至于为什么不行,本人有一篇小文说明原因:mnist模型为何识别咱自己写的字就不行?_kewei chen-CSDN博客
测试完成后,停止应用作业。
6、使用PyCharm ToolKit在本地进行云上训练(手写数字识别)
在Pycharm中的插件,安装HUAWEI ModelArts
单击ToolKit工具的下载地址
重启。
之后就可以看到顶部有modelarts这一栏了。
点击第一行edit credential
即可把自己的AKSK输入
点击OK,可以看到右下角的提示信息SUCCESS。
下载mnist数据集数据集下载链接
解压,上传至“test-modelarts/dataset-mnist”OBS路径下
obs控制台,对象
克隆/下载gitee的ModelArts-Lab工程ZIP
下载完成后,解压缩“ModelArts-Lab-master.zip”文件,然后在“\ModelArts-Lab-master\official_examples\Using_MXNet_to_Create_a_MNIST_Dataset_Recognition_Application\codes”目录中获取到训练代码“train_mnist.py”。
打开PyCharm工具,单击**“File > New Project”**创建新工程, 在工程目录下创建“src”文件夹,并将训练代码文件“train_mnist.py”拷贝到“src”文件夹下。
在PyCharm工具栏中,选择**“ModelArts > Edit Training Job Configuration”**
配置如图。
训练完成。
右侧的信息提示我们去WEB端控制台看日志。
我们去modelarts控制台,训练作业旧版看。
这就是我们刚刚训练的。点击名称查看详情。
日志让我们去找log。
我们在本地也可以看到同样的信息。
这里超过max log length,应该是我把项目名称起太长了。
根据提示,我们在obs控制台的对象中找到log
点击下载
我们看到了最后的成功信息。
我们在pycharm的左侧栏,单击ModelArts Explorer
第一版配置出现了一些错误,把AI引擎选错了,选成了TensorFlow,应该是MXNet,因此我们查看,对比两个版本
训练作业生成的模型存储在“test-modelarts/mnist-output/MA-mnist-11-30-16/output/V0002(根据自己版本决定)”路径下(其中MA-mnist-11-30-16是Job Name,笔者在配置时填写了自定义Job Name,则路径中就是自定义的Job Name),且系统将自动生成“model”文件夹,模型相关的文件存储在此目录下。将获取的“customize_service.py”和“config.json”(在\ModelArts-Lab-master\official_examples\Using Custom Algorithms to Build Models on ModelArts\codes)文件,上传至OBS的“model”文件夹下。
现在,在pycharm控制台,将其部署为在线服务。
“Environment Variables”:填写运行参数,设置为“input_data_name=images;input_data_shape=0,1,28,28;output_data_shape=0,10”
配置如图
部署完成后,会自动弹出链接。点击即可进入测试,也可以在控制台的在线服务中找到。
下面我们开始预测工作,注意mnist模型需要黑底白字,使用windows画图制作几张即可。
糟糕,预测超时了。
查看日志
报了一个路径不存在的错。
为什么呢?可能是上线的时候出了问题。
发现了问题的所在:模型路径错了,不应该是Using Custom Algorithms to Build Models on ModelArts,而是\ModelArts-Lab-master\official_examples\Using_MXNet_to_Create_a_MNIST_Dataset_Recognition_Application\codes
重新来V0003,训练完成
上传,部署配置如图
开始部署,部署完成。
可以了,预测成功。
预测成了8,把5的概率预测的那么小。。。
成功,不错!
最后,我们清除响应资源。
停止在线服务
五、开发工具体验——远程开发
1、配置本地IDE(PyCharm ToolKit连接)
新建一个notebook实例
创建实例后,新建一个notebook
在(四)6中已安装ToolKit的条件下,点击config
选择我们刚刚创建的Conatiner
apply后需要重启,首次约需20min进行update python interpreter
链接成功后,右击即可stop
单击即可链接
开启自动上传
可以选择远程python解释器
首次需要约20min更新解释器
上传后,我们可以看到如图所示的工程文件已经在云端了。
可以直接在本地运行,在控制台可以看到有关信息。
我们也可以断点调试,并且读出每一步变量的情况。
2、配置本地IDE(PyCharm手动连接)
手动SSH连接需要下载Pycharm专业版。
创建一个notebook实例
在百度上查询自己的ip地址,配置ssh远程开发
在实例详情界面,查看实例链接和端口
在Pycharm中,选择File -> Settings -> Tools -> SSH Configurations,单击+号,增加一个SSH连接配置。
根据地址填写配置如图,选择密钥对方式连接,进行测试
可以进行重命名,起个好听的名字。
然后,单击“Tools > Start SSH Session”,进入虚拟开发环境。
选择刚刚起好名字的notebook-kewei
cat /home/ma-user/README
执行上面这个命令查看有关配置。
我们的notebook有两个环境,执行右侧的source命令可以进入具体环境。
执行which python查看python路径并拷贝出来,以备后续配置云上Python Interpreter使用
/home/ma-user/anaconda3/envs/python-3.7.10/bin/python
就是Python的路径
-
单击“File > Settings > Project:PythonProject > Python Interpreter”,单击设置图标,再单击“Add”,添加一个新的interpreter。
-
选择“Existing server configuration”,在下拉菜单中选择上一步配置好的SSH configuration,单击“Next”
-
解释器选择刚刚记录的解释器环境,工作文件夹选择modelarts的默认工作文件夹
\home\ma-user\work
,勾选自动上传到服务器。 -
完成配置。
单击工具栏“Tools >Start SSH session”,选择SSH Configuration中配置的开发环境。可以执行pip install安装所需要的包。
跟我们命令行的一般操作是一样的。
我们也可以像上一步一样,新建py或者ipynb文件,进行远程开发。
3、VScode远程开发
安装vscode:Windows用户直接单击此处下载:https://update.code.visualstudio.com/1.57.1/win32-x64-user/stable。
其他系统用户的下载地址: https://code.visualstudio.com/updates/v1_57
配置python解释器详见VSCode官方指导。
下载ToolKit工具包下载链接
右下角提示安装完成。点击ModelArts图标登录。AKSK我们已经用到多次,不在赘述。可参考:参考链接
开启了远程连接的,我们会看到状态
初次登录需要选择密钥对。
建议把keypair文件放到c/user/{{username}}下
vscode中,选择远程系统为Linux系统
左下角显示为具体的notebook实例名称,表示已经连接成功了。
打开文件件->确定
左侧会显示目录结构
配置python解释器
启动运行和调试。
在远程控制台也可以看见我们刚刚创建的文件
4、手动配置VScode远程开发
安装vscode的ssh插件
进行远程配置
HOST remote-dev
hostname <instance connection host>
port <instance connection port>
user ma-user
IdentityFile ~/.ssh/test.pem
UserKnownHostsFile=/dev/null
StrictHostKeyChecking no
- User:登录用户只支持ma-user进行登录
单击“File > Preference > Settings > Extensions > Remote-SSH”, 在“Remote Platform”中,单击“Add Item”选项,设置**“Item”和“Value”**,配置完成后,单击“OK”
在SSH控制界面,单击此处
连接成功
安装云端Python插件
可以在云端安装常用的依赖库。比如常用的NLP处理包spacy。
-
在VSCode环境中,执行Ctrl+Shift+P。
-
搜Python:Select Interpreter,选择对应的Python环境。
-
单击页面上方的“Terminal > New Terminal”,此时打开的的命令行界面即为远端容器环境命令行。
-
进入引擎后,通过执行如下命令安装依赖包。
pip install spacy
5、本地工具ssh远程开发
创建一个ssh远程开发的实例。
下载并安装SSH远程连接工具,以PuTTY为例,下载链接。
使用puttygen将密钥对.pem文件转成.ppk文件
-
下载puttygen,并双击运行puttygen。
-
单击“Load”,上传.pem密钥(即在创建Notebook实例时创建并保存的密钥对文件)。
-
单击“Save private key”,保存生成的.ppk文件。.ppk文件的名字可以自定义,例如key.ppk。
点击save,即可保存配置,下次可以直接使用
Translation:UTF-8
填写用户名,必须为ma-user
打开刚刚制作的ppk密码文件。
之后选择右下角open
选择accept
成功连接到notebook实例。
cd到work目录下,创建一个python文件
运行成功。
小结
通过这次的实战演练,我们学会了基础的notebook操作,可以在云端实现jupyter lab愉快编程。在自动学习中的图像、声音、文本分类和预测,我们体会到了低代码运作的乐趣,短短十几分钟就可以做一个自己的物体识别程序。在远程开发中,我们可以用自己熟悉的Pycharm、vscode进行开发和程序设计,同时又能接触云上的算力,为我们的代码插上翅膀。这次体验,真是体会到了ModelArts的无限乐趣。
文章同步发表于CSDN:https://blog.csdn.net/weixin_54227557/article/details/122665425
【华为云AI贺新年】有奖征文火热进行中:https://bbs.huaweicloud.com/blogs/325842
- 点赞
- 收藏
- 关注作者
评论(0)