• [教程] 新建一个ipynb文件时,出现Error loading notebook的错误
    问题现象在Notebook Jupyter页面中,新建一个ipynb文件时,出现“Error loading notebook”错误提示,如何处理?图1 错误提示原因分析出现这个错误,其根本原因是您用于创建Notebook的OBS桶的属性。如果您使用的OBS桶,其“存储类别”为“归档存储”,且“归档数据直读”功能关闭,此时ModelArts Notebook会出现无法新建一个ipynb的错误。解决方案进入OBS管理控制台,选择此Notebook实例对应的桶,然后单击桶名称进入桶详情页面,在“基础配置”区域,找到“归档数据直读”功能设置,单击此功能,在弹出框中启用“归档数据直读”功能。设置完成后,Notebook实例可正常新建ipynb文件。图2 启用功能
  • [教程] 如何在Notebook中读写OBS文件?
    MoXing是华为云ModelArts团队自研的分布式训练加速框架,构建于开源的深度学习引擎TensorFlow、MXNet、PyTorch、Keras之上,使用MoXing API可让模型代码的编写更加简单、高效。MoXing提供了一套文件对象API,可以用来读写OBS文件。您可以通过MoXing API文档了解其与原生API对应关系,以及详细的接口调用示例,详细说明请参见MoXing文件操作。示例代码:import moxing as mox #下载一个OBS文件夹,从OBS下载至本地Notebook(OBS -> 本地) mox.file.copy_parallel('obs://bucket_name/sub_dir_0', '/tmp/sub_dir_0') #上传一个OBS文件夹,从本地Notebook上传至OBS(本地 -> OBS) mox.file.copy_parallel('/tmp/sub_dir_0', 'obs://bucket_name/sub_dir_0') #文件的操作 mox.file.copy_parallel('obs://bucket_name/file/name.txt', '/tmp/file/name.txt')
  • [教程] 如何在Notebook中导入Python库,解决ModuleNotFoundError错误?
    对于挂载EVS的Notebook实例导入python库获取需要导入的Python库的地址,然后参见Python3的“将文件夹加入到sys.path”的操作指导,完成python库的导入。导入操作有两种方式,比较常用的是使用PYTHONPATH环境变量来添加。导入之后,您可以在Notebook中查看您的PythonPath。在“ipynb”中查看PythonPath。在代码输入框中执行如下命令查看PythonPath,如果返回的地址与您设置的pyhon库地址一致,表示导入成功。!echo $PYTHONPATH在“Terminal”中查看PythonPath。执行如下命令查看PythonPath,如果返回的地址与您设置的python库地址一致,表示导入成功。echo $PYTHONPATH对于带OBS存储的Notebook实例导入python库对于带OBS存储的Notebook实例导入python库,根据python库文件大小不同,使用方式有所不同。当python库的文件较小(小于100MB)时,您可以使用如下2种方式。首先,将python文件上传至OBS,然后使用Sync OBS功能方式将OBS中的python文件同步到Notebook中。最后参见Python3的“将文件夹加入到sys.path”指导(推荐使用PYTHONPATH环境变量来添加),完成python库的导入。首先,将python文件上传至OBS,然后使用SDK将OBS中的文件同步到Notebook,最后参见Python3的“将文件夹加入到sys.path”指导(推荐使用PYTHONPATH环境变量来添加),完成python库的导入。当python库的文件较大(大于100MB)时首先,将python库的文件上传至OBS,然后使用Moxing操作OBS文件将OBS中的python文件文件同步到Notebook,最后参见Python3的“将文件夹加入到sys.path”指导(推荐使用PYTHONPATH环境变量来添加),完成python库的导入。在python库完成导入后,您可以在Notebook中查看您的PythonPath。在“ipynb”中查看PythonPath。在代码输入框中执行如下命令查看PythonPath,如果返回的地址与您设置的pyhon库地址一致,表示导入成功。!echo $PYTHONPATH在“Terminal”中查看PythonPath。执行如下命令查看PythonPath,如果返回的地址与您设置的pyhon库地址一致,表示导入成功。echo $PYTHONPATH
  • [教程] 创建Notebook实例后无法打开页面,如何处理?
    如果您在创建Notebook实例之后,打开Notebook时,因报错导致无法打开页面,您可以根据以下对应的错误码来排查解决。报错404如果是IAM用户在创建实例时出现此错误,表示此IAM用户不具备对应存储位置(OBS桶)的操作权限。解决方法:使用账号登录OBS,并将对应OBS桶的访问权限授予该IAM用户。详细操作指导请参见:被授权用户。IAM用户获得权限后,登录ModelArts管理控制台,删除该实例,然后重新使用此OBS路径创建Notebook实例。报错503如果出现503错误,可能是由于该实例运行代码时比较耗费资源。建议先停止当前Notebook实例,然后重新启动。报错504如果报此错误时,请提工单或拨打热线电话协助解决。提工单和热线电话请参见:https://www.huaweicloud.com/service/contact.html。
  • [数据加载及处理] 基于MindSpore的鸢尾花三分类体验分享
    # Softmax回归 ## 实验介绍 Softmax函数是Logistic函数的在多分类问题上的推广,本质上是将一个多维向量$Z$映射成另一个多维向量$\sigma(Z)$(维度不变),后者中每个元素的值在[0, 1]范围内,和为1。 $$ \sigma(Z_i) = \frac{\exp(Z_i)}{\sum_j \exp(Z_j)} $$ Logistic函数针对的是二分类问题,而Softmax解决的是多分类问题。Softmax多分类任务要求类与类之间互斥,即一个样本只能归于一个类。而基于Logistic实现的多分类任务(如One vs All)类别之间可以相交。Softmax函数也经常作为神经网络的输出层,进行多分类。本实验主要介绍使用MindSpore在多分类数据集上进行Softmax + CrossEntropy(交叉熵损失)实验。 ## 实验目的 - 了解Softmax和交叉熵损失的基本概念; - 了解如何使用MindSpore进行多分类实验。 ## 预备知识 - 熟练使用Python。 - 具备一定的机器学习理论知识,如Softmax、交叉熵损失函数、优化器,训练策略等。 - 了解华为云的基本使用方法,包括[OBS(对象存储)](https://www.huaweicloud.com/product/obs.html)、[ModelArts(AI开发平台)](https://www.huaweicloud.com/product/modelarts.html)、[训练作业](https://support.huaweicloud.com/engineers-modelarts/modelarts_23_0238.html)等功能。华为云官网:https://www.huaweicloud.com - 了解并熟悉MindSpore AI计算框架,MindSpore官网:https://www.mindspore.cn/ ## 实验环境 - MindSpore 1.0.0(MindSpore版本会定期更新,本指导也会定期刷新,与版本配套); - 华为云ModelArts(控制台左上角选择“华北-北京四”):ModelArts是华为云提供的面向开发者的一站式AI开发平台,集成了昇腾AI处理器资源池,用户可以在该平台**验MindSpore。 ## 实验准备 ### 数据准备 Iris数据集是模式识别最著名的数据集之一。数据集包含3类,每类50个实例,其中每个类都涉及一种鸢尾植物。 第一类与后两类可线性分离,后两类之间不能线性分离,所以本实验取前两类数据,做一个2分类数据集。Iris数据集的官网:[Iris Data Set](http://archive.ics.uci.edu/ml/datasets/Iris)。 - 方式一,从Iris数据集官网下载[iris.data文件](http://archive.ics.uci.edu/ml/machine-learning-databases/iris/iris.data)。 - 方式二,从华为云OBS中下载[iris.data文件](https://share-course.obs.cn-north-4.myhuaweicloud.com/dataset/iris.data)。 每个样本含有4个数值属性和一个类别属性: 1. sepal length in cm 2. sepal width in cm 3. petal length in cm 4. petal width in cm 5. class: - Iris Setosa - Iris Versicolour - Iris Virginica 概括统计: ``` Min Max Mean SD Class Correlation sepal length: 4.3 7.9 5.84 0.83 0.7826 sepal width: 2.0 4.4 3.05 0.43 -0.4194 petal length: 1.0 6.9 3.76 1.76 0.9490 (high!) petal width: 0.1 2.5 1.20 0.76 0.9565 (high!) ``` ### 脚本准备 从[课程gitee仓库](https://gitee.com/mindspore/course)中下载本实验相关脚本。将脚本和数据集组织为如下形式: ``` softmax_regression ├── main.py └── iris.data ``` ### 创建OBS桶 本实验需要使用华为云OBS存储脚本和数据集,可以参考[快速通过OBS控制台上传下载文件](https://support.huaweicloud.com/qs-obs/obs_qs_0001.html)了解使用OBS创建桶、上传文件、下载文件的使用方法(下文给出了操作步骤)。 > **提示:** 华为云新用户使用OBS时通常需要创建和配置“访问密钥”,可以在使用OBS时根据提示完成创建和配置。也可以参考[获取访问密钥并完成ModelArts全局配置](https://support.huaweicloud.com/prepare-modelarts/modelarts_08_0002.html)获取并配置访问密钥。 打开[OBS控制台](https://storage.huaweicloud.com/obs/?region=cn-north-4&locale=zh-cn#/obs/manager/buckets),点击右上角的“创建桶”按钮进入桶配置页面,创建OBS桶的参考配置如下: - 区域:华北-北京四 - 数据冗余存储策略:单AZ存储 - 桶名称:全局唯一的字符串 - 存储类别:标准存储 - 桶策略:公共读 - 归档数据直读:关闭 - 企业项目、标签等配置:免 ### 上传文件 点击新建的OBS桶名,再打开“对象”标签页,通过“上传对象”、“新建文件夹”等功能,将脚本和数据集上传到OBS桶中。上传文件后,查看页面底部的“任务管理”状态栏(正在运行、已完成、失败),确保文件均上传完成。若失败请: - 参考[上传对象大小限制/切换上传方式](https://support.huaweicloud.com/qs-obs/obs_qs_0008.html), - 参考[上传对象失败常见原因](https://support.huaweicloud.com/obs_faq/obs_faq_0134.html)。 - 若无法解决请[新建工单](https://console.huaweicloud.com/ticket/?region=cn-north-4&locale=zh-cn#/ticketindex/createIndex),产品类为“对象存储服务”,问题类型为“桶和对象相关”,会有技术人员协助解决。 ## 实验步骤 推荐使用ModelArts训练作业进行实验,适合大规模并发使用。若使用ModelArts Notebook,请参考[LeNet5](../lenet5)及[Checkpoint](../checkpoint)实验案例,了解Notebook的使用方法和注意事项。 ### 代码梳理 导入MindSpore模块和辅助模块: ```python import os # os.environ['DEVICE_ID'] = '7' import csv import numpy as np from pprint import pprint import mindspore as ms from mindspore import nn from mindspore import context from mindspore import dataset from mindspore.train.callback import LossMonitor context.set_context(mode=context.GRAPH_MODE, device_target="Ascend") ``` 读取Iris数据集`iris.data`,并作检查。 ```python with open('iris.data') as csv_file: data = list(csv.reader(csv_file, delimiter=',')) pprint(data[0:5]); pprint(data[50:55]); pprint(data[100:105]) # print some samples ``` [['5.1', '3.5', '1.4', '0.2', 'Iris-setosa'], ['4.9', '3.0', '1.4', '0.2', 'Iris-setosa'], ['4.7', '3.2', '1.3', '0.2', 'Iris-setosa'], ['4.6', '3.1', '1.5', '0.2', 'Iris-setosa'], ['5.0', '3.6', '1.4', '0.2', 'Iris-setosa']] [['7.0', '3.2', '4.7', '1.4', 'Iris-versicolor'], ['6.4', '3.2', '4.5', '1.5', 'Iris-versicolor'], ['6.9', '3.1', '4.9', '1.5', 'Iris-versicolor'], ['5.5', '2.3', '4.0', '1.3', 'Iris-versicolor'], ['6.5', '2.8', '4.6', '1.5', 'Iris-versicolor']] [['6.3', '3.3', '6.0', '2.5', 'Iris-virginica'], ['5.8', '2.7', '5.1', '1.9', 'Iris-virginica'], ['7.1', '3.0', '5.9', '2.1', 'Iris-virginica'], ['6.3', '2.9', '5.6', '1.8', 'Iris-virginica'], ['6.5', '3.0', '5.8', '2.2', 'Iris-virginica']] 数据集的3类样本共150条,将样本的4个属性作为自变量$X$,将样本的3个类别映射为{0, 1, 2},作为因变量$Y$。 ```python label_map = { 'Iris-setosa': 0, 'Iris-versicolor': 1, 'Iris-virginica': 2 } X = np.array([[float(x) for x in s[:-1]] for s in data[:150]], np.float32) Y = np.array([label_map[s[-1]] for s in data[:150]], np.int32) ``` 取样本的前两个属性进行2维可视化,可以看到在前两个属性上其中一类和余下两类是线性可分的,而余下两类之间线性不可分。 ```python from matplotlib import pyplot as plt plt.scatter(X[:50, 0], X[:50, 1], label='Iris-setosa') plt.scatter(X[50:100, 0], X[50:100, 1], label='Iris-versicolor') plt.scatter(X[100:, 0], X[100:, 1], label='Iris-virginica') plt.xlabel('sepal length') plt.ylabel('sepal width') plt.legend() ``` ![image.png](https://bbs-img-cbc-cn.obs.cn-north-1.myhuaweicloud.com/data/attachment/forum/202012/08/091147deftpueesdt7zntk.png) 将数据集按8:2划分为训练集和验证集: ```python train_idx = np.random.choice(150, 120, replace=False) test_idx = np.array(list(set(range(150)) - set(train_idx))) X_train, Y_train = X[train_idx], Y[train_idx] X_test, Y_test = X[test_idx], Y[test_idx] ``` 使用MindSpore`GeneratorDataset`接口将numpy.ndarray类型的数据转换为Dataset: ```python XY_train = list(zip(X_train, Y_train)) ds_train = dataset.GeneratorDataset(XY_train, ['x', 'y']) ds_train = ds_train.shuffle(buffer_size=120).batch(32, drop_remainder=True) XY_test = list(zip(X_test, Y_test)) ds_test = dataset.GeneratorDataset(XY_test, ['x', 'y']) ds_test = ds_test.batch(30) ``` 使用MindSpore提供的[`nn.Dense(1, 1)`算子](https://www.mindspore.cn/api/zh-CN/0.2.0-alpha/api/python/mindspore/mindspore.nn.html#mindspore.nn.Dense)作为线性部分,其中`(4, 3)`表示每个样本的输入是含4个元素的向量,输出是含3个元素的向量,即$W$是3x4的矩阵。算子会随机初始化权重$W$和偏置$b$。使用[`nn.loss.SoftMaxCrossEntropyWithLogits`算子](https://www.mindspore.cn/api/zh-CN/0.3.0-alpha/api/python/mindspore/mindspore.nn.html#mindspore.nn.SoftmaxCrossEntropyWithLogits)作为非线性部分: 对于每个样本$N_i$,模型的计算方式如下: $$ Z_i = W \cdot X_i + b \\ P_i = \frac{\exp(Z_i)}{\sum_j \exp(Z_{ij})} \\ l(Z_i, Y_i) = -log\left(P_{iY_i}\right) = -log\left(\frac{\exp(Z_{iY_i})}{\sum_j \exp(Z_{ij})}\right) = -Z_{iY_i} + \log\left(\sum_j \exp(Z_ij)\right) $$ 其中,$X_i$是1D Tensor(含4个元素),$Z_i$是1D Tensor(含3个元素),$Y_i$是真实类别(3个类别{1, 2, 3}中的一个),$P_i$是1D Tensor(含3个元素,每个元素表示属于相应类别的概率,值域为[0, 1]),$l(Z_i, Y_i)$是损失标量。 ```python net = nn.Dense(4, 3) loss = nn.loss.SoftmaxCrossEntropyWithLogits(sparse=True, reduction='mean') opt = nn.optim.Momentum(net.trainable_params(), learning_rate=0.05, momentum=0.9) ``` 使用训练集对模型进行若干代(Epoch)训练,然后计算模型在验证集上精度,验证集上的精度达到了0.96左右,即模型基本学会了区分3类鸢尾花。 ```python model = ms.train.Model(net, loss, opt, metrics={'acc', 'loss'}) model.train(25, ds_train, callbacks=[LossMonitor(per_print_times=ds_train.get_dataset_size())], dataset_sink_mode=False) metrics = model.eval(ds_test) print(metrics) ``` epoch: 1 step: 3, loss is 1.0359399 epoch: 2 step: 3, loss is 1.0467999 epoch: 3 step: 3, loss is 0.7531768 epoch: 4 step: 3, loss is 0.48917678 epoch: 5 step: 3, loss is 0.5157561 epoch: 6 step: 3, loss is 0.6030979 epoch: 7 step: 3, loss is 0.74226296 epoch: 8 step: 3, loss is 0.5172242 epoch: 9 step: 3, loss is 0.5850575 epoch: 10 step: 3, loss is 0.5275547 epoch: 11 step: 3, loss is 0.81789356 epoch: 12 step: 3, loss is 0.48474902 epoch: 13 step: 3, loss is 0.36841834 epoch: 14 step: 3, loss is 0.30692947 epoch: 15 step: 3, loss is 0.3739818 epoch: 16 step: 3, loss is 0.28519264 epoch: 17 step: 3, loss is 0.24835552 epoch: 18 step: 3, loss is 0.20413074 epoch: 19 step: 3, loss is 0.29615358 epoch: 20 step: 3, loss is 0.21207006 epoch: 21 step: 3, loss is 0.24251895 epoch: 22 step: 3, loss is 0.16571495 epoch: 23 step: 3, loss is 0.20547828 epoch: 24 step: 3, loss is 0.22648066 epoch: 25 step: 3, loss is 0.2847983 {'acc': 1.0, 'loss': 0.1306072622537613} ### 适配训练作业 创建训练作业时,运行参数会通过脚本传参的方式输入给脚本代码,脚本必须解析传参才能在代码中使用相应参数。如data_url对应数据存储路径(OBS路径),脚本对传参进行解析后赋值到`args`变量里,在后续代码里可以使用。 ```python import argparse parser = argparse.ArgumentParser() parser.add_argument('--data_url', required=True, default=None, help='Location of data.') args, unknown = parser.parse_known_args() ``` MindSpore暂时没有提供直接访问OBS数据的接口,需要通过ModelArts自带的moxing框架与OBS交互。将OBS桶中的数据拷贝至执行容器中,供MindSpore使用: ```python import moxing # src_url形如's3://OBS/PATH',为OBS桶中数据集的路径,dst_url为执行容器中的路径,两者皆为目录/皆为文件 moxing.file.copy_parallel(src_url=os.path.join(args.data_url, 'iris.data'), dst_url='iris.data') ``` ### 创建训练作业 可以参考[使用常用框架训练模型](https://support.huaweicloud.com/engineers-modelarts/modelarts_23_0238.html)来创建并启动训练作业(下文给出了操作步骤)。 打开[ModelArts控制台-训练管理-训练作业](https://console.huaweicloud.com/modelarts/?region=cn-north-4#/trainingJobs),点击“创建”按钮进入训练作业配置页面,创建训练作业的参考配置: - 算法来源:常用框架->Ascend-Powered-Engine->MindSpore - 代码目录:选择上述新建的OBS桶中的softmax_regression目录 - 启动文件:选择上述新建的OBS桶中的softmax_regression目录下的`main.py` - 数据来源:数据存储位置->选择上述新建的OBS桶中的softmax_regression目录,本实验使用其中的iris.data - 训练输出位置:选择上述新建的OBS桶中的softmax_regression目录并在其中创建output目录 - 作业日志路径:同训练输出位置 - 规格:Ascend:1*Ascend 910 - 其他均为默认 启动并查看训练过程: 1. 点击提交以开始训练; 2. 在训练作业列表里可以看到刚创建的训练作业,在训练作业页面可以看到版本管理; 3. 点击运行中的训练作业,在展开的窗口中可以查看作业配置信息,以及训练过程中的日志,日志会不断刷新,等训练作业完成后也可以下载日志到本地进行查看; 4. 参考上述代码梳理,在日志中找到对应的打印信息,检查实验是否成功。 ## 实验结论 本实验使用MindSpore实现了Softmax + CrossEntropy的多分类模型,用来解决3分类问题。在Iris数据集上进行训练后,所得的模型可以很好地对三类鸢尾花植物进行分类。
  • [教程] 为什么通过Manifest文件导入失败?
    问题现象针对已发布的数据集,使用此数据集的Manifest文件,重新导入,此时出现导入失败的错误。原因分析针对已发布的数据集,其对应的OBS目录下,发生了数据变化,如删除图片,导致此Manifest文件与当前OBS目录下的数据情况不符。使用此Manifest文件再次导入时,出现错误。解决方案方法1(推荐),建议将此数据集重新发布版本,然后再使用新版本的Manifest文件导入。方法2,修改您本地的Manifest文件,查找OBS目录下的数据变更,根据变更同步修改Manifest。确保Manifest文件与OBS目录下的数据现状相同,然后使用修改后的Manifest文件导入。
  • [数据加载及处理] 基于MindSpore的逻辑回归体验分享
    # 逻辑回归 ## 实验介绍 逻辑回归(Logistic Regression)是机器学习最经典的算法之一,与线性回归有很多不同,这两种回归都属于广义线性回归(Generalized Linear Regression)的范畴。逻辑回归具有如下特点: - 逻辑回归对自变量分布没有要求; - 因变量是离散型变量,即分类变量; - 逻辑回归分析的是因变量取某个值的概率与自变量的关系。 本实验主要介绍使用MindSpore在2分类数据集上进行逻辑回归实验,分析自变量和因变量(概率)之间的关系,即求得一个概率函数。 ## 实验目的 - 了解逻辑回归的基本概念; - 了解如何使用MindSpore进行逻辑回归实验。 ## 预备知识 - 熟练使用Python。 - 具备一定的机器学习理论知识,如逻辑回归、损失函数、优化器,训练策略等。 - 了解华为云的基本使用方法,包括[OBS(对象存储)](https://www.huaweicloud.com/product/obs.html)、[ModelArts(AI开发平台)](https://www.huaweicloud.com/product/modelarts.html)、[训练作业](https://support.huaweicloud.com/engineers-modelarts/modelarts_23_0238.html)等功能。华为云官网:https://www.huaweicloud.com - 了解并熟悉MindSpore AI计算框架,MindSpore官网:https://www.mindspore.cn/ ## 实验环境 - MindSpore 1.0.0(MindSpore版本会定期更新,本指导也会定期刷新,与版本配套); - 华为云ModelArts(控制台左上角选择“华北-北京四”):ModelArts是华为云提供的面向开发者的一站式AI开发平台,集成了昇腾AI处理器资源池,用户可以在该平台**验MindSpore。 ## 实验准备 ### 数据准备 Iris数据集是模式识别最著名的数据集之一。数据集包含3类,每类50个实例,其中每个类都涉及一种鸢尾植物。 第一类与后两类可线性分离,后两类之间不能线性分离,所以本实验取前两类数据,做一个2分类数据集。Iris数据集的官网:[Iris Data Set](http://archive.ics.uci.edu/ml/datasets/Iris)。 - 方式一,从Iris数据集官网下载[iris.data文件](http://archive.ics.uci.edu/ml/machine-learning-databases/iris/iris.data)。 - 方式二,从华为云OBS中下载[iris.data文件](https://share-course.obs.cn-north-4.myhuaweicloud.com/dataset/iris.data)。 每个样本含有4个数值属性和一个类别属性: 1. sepal length in cm 2. sepal width in cm 3. petal length in cm 4. petal width in cm 5. class: - Iris Setosa - Iris Versicolour - Iris Virginica 概括统计: ``` Min Max Mean SD Class Correlation sepal length: 4.3 7.9 5.84 0.83 0.7826 sepal width: 2.0 4.4 3.05 0.43 -0.4194 petal length: 1.0 6.9 3.76 1.76 0.9490 (high!) petal width: 0.1 2.5 1.20 0.76 0.9565 (high!) ``` ### 脚本准备 从[课程gitee仓库](https://gitee.com/mindspore/course)中下载本实验相关脚本。将脚本和数据集组织为如下形式: ``` logistic_regression ├── main.py └── iris.data ``` ### 创建OBS桶 本实验需要使用华为云OBS存储脚本和数据集,可以参考[快速通过OBS控制台上传下载文件](https://support.huaweicloud.com/qs-obs/obs_qs_0001.html)了解使用OBS创建桶、上传文件、下载文件的使用方法(下文给出了操作步骤)。 > **提示:** 华为云新用户使用OBS时通常需要创建和配置“访问密钥”,可以在使用OBS时根据提示完成创建和配置。也可以参考[获取访问密钥并完成ModelArts全局配置](https://support.huaweicloud.com/prepare-modelarts/modelarts_08_0002.html)获取并配置访问密钥。 打开[OBS控制台](https://storage.huaweicloud.com/obs/?region=cn-north-4&locale=zh-cn#/obs/manager/buckets),点击右上角的“创建桶”按钮进入桶配置页面,创建OBS桶的参考配置如下: - 区域:华北-北京四 - 数据冗余存储策略:单AZ存储 - 桶名称:全局唯一的字符串 - 存储类别:标准存储 - 桶策略:公共读 - 归档数据直读:关闭 - 企业项目、标签等配置:免 ### 上传文件 点击新建的OBS桶名,再打开“对象”标签页,通过“上传对象”、“新建文件夹”等功能,将脚本和数据集上传到OBS桶中。上传文件后,查看页面底部的“任务管理”状态栏(正在运行、已完成、失败),确保文件均上传完成。若失败请: - 参考[上传对象大小限制/切换上传方式](https://support.huaweicloud.com/qs-obs/obs_qs_0008.html), - 参考[上传对象失败常见原因](https://support.huaweicloud.com/obs_faq/obs_faq_0134.html)。 - 若无法解决请[新建工单](https://console.huaweicloud.com/ticket/?region=cn-north-4&locale=zh-cn#/ticketindex/createIndex),产品类为“对象存储服务”,问题类型为“桶和对象相关”,会有技术人员协助解决。 ## 实验步骤 推荐使用ModelArts训练作业进行实验,适合大规模并发使用。若使用ModelArts Notebook,请参考[LeNet5](../lenet5)及[Checkpoint](../checkpoint)实验案例,了解Notebook的使用方法和注意事项。 ### 代码梳理 导入MindSpore模块和辅助模块: ```python import os # os.environ['DEVICE_ID'] = '6' import csv import numpy as np import mindspore as ms from mindspore import nn from mindspore import context from mindspore import dataset from mindspore.train.callback import LossMonitor from mindspore.common.api import ms_function from mindspore.ops import operations as P context.set_context(mode=context.GRAPH_MODE, device_target="Ascend") ``` 读取Iris数据集`iris.data`,并查看部分数据。 ```python with open('iris.data') as csv_file: data = list(csv.reader(csv_file, delimiter=',')) print(data[40:60]) # 打印部分数据 ``` [['5.0', '3.5', '1.3', '0.3', 'Iris-setosa'], ['4.5', '2.3', '1.3', '0.3', 'Iris-setosa'], ['4.4', '3.2', '1.3', '0.2', 'Iris-setosa'], ['5.0', '3.5', '1.6', '0.6', 'Iris-setosa'], ['5.1', '3.8', '1.9', '0.4', 'Iris-setosa'], ['4.8', '3.0', '1.4', '0.3', 'Iris-setosa'], ['5.1', '3.8', '1.6', '0.2', 'Iris-setosa'], ['4.6', '3.2', '1.4', '0.2', 'Iris-setosa'], ['5.3', '3.7', '1.5', '0.2', 'Iris-setosa'], ['5.0', '3.3', '1.4', '0.2', 'Iris-setosa'], ['7.0', '3.2', '4.7', '1.4', 'Iris-versicolor'], ['6.4', '3.2', '4.5', '1.5', 'Iris-versicolor'], ['6.9', '3.1', '4.9', '1.5', 'Iris-versicolor'], ['5.5', '2.3', '4.0', '1.3', 'Iris-versicolor'], ['6.5', '2.8', '4.6', '1.5', 'Iris-versicolor'], ['5.7', '2.8', '4.5', '1.3', 'Iris-versicolor'], ['6.3', '3.3', '4.7', '1.6', 'Iris-versicolor'], ['4.9', '2.4', '3.3', '1.0', 'Iris-versicolor'], ['6.6', '2.9', '4.6', '1.3', 'Iris-versicolor'], ['5.2', '2.7', '3.9', '1.4', 'Iris-versicolor']] 取前两类样本(共100条),将数据集的4个属性作为自变量$X$。将数据集的2个类别映射为{0, 1},作为因变量$Y$。 ```python label_map = { 'Iris-setosa': 0, 'Iris-versicolor': 1, } X = np.array([[float(x) for x in s[:-1]] for s in data[:100]], np.float32) Y = np.array([[label_map[s[-1]]] for s in data[:100]], np.float32) ``` 取样本的前两个属性进行2维可视化,可以看到在前两个属性上两类样本是线性可分的。 ```python from matplotlib import pyplot as plt plt.scatter(X[:50, 0], X[:50, 1], label='Iris-setosa') plt.scatter(X[50:, 0], X[50:, 1], label='Iris-versicolor') plt.xlabel('sepal length') plt.ylabel('sepal width') plt.legend() ``` ![image.png](https://bbs-img-cbc-cn.obs.cn-north-1.myhuaweicloud.com/data/attachment/forum/202012/07/145320ax4wkzk8cnrjxqg6.png) 将数据集按8:2划分为训练集和验证集: ```python train_idx = np.random.choice(100, 80, replace=False) test_idx = np.array(list(set(range(100)) - set(train_idx))) X_train, Y_train = X[train_idx], Y[train_idx] X_test, Y_test = X[test_idx], Y[test_idx] ``` 对数据进行处理通常是有益的,但对于这个简单的任务是不必要的。 ```python # def normalize(data): # v_max = np.max(data, axis=0) # v_min = np.min(data, axis=0) # return np.divide(data - v_min, v_max - v_min) * 2.0 - 1.0 # train_data = list(zip(normalize(X_train), Y_train)) ``` 使用MindSpore`GeneratorDataset`接口将numpy.ndarray类型的数据转换为Dataset: ```python XY_train = list(zip(X_train, Y_train)) ds_train = dataset.GeneratorDataset(XY_train, ['x', 'y']) ds_train = ds_train.shuffle(buffer_size=80).batch(32, drop_remainder=True) ``` 逻辑回归常用的联系函数是Sigmoid(S形函数),Sigmoid函数如下图所示,可以将连续值映射到{0, 1},同时也是单调可微的。 ```python coor_x = np.arange(-10, 11, dtype=np.float32) coor_y = nn.Sigmoid()(ms.Tensor(coor_x)).asnumpy() plt.plot(coor_x, coor_y) plt.xlabel('x') plt.ylabel('p') ``` ![image.png](https://bbs-img-cbc-cn.obs.cn-north-1.myhuaweicloud.com/data/attachment/forum/202012/07/145344lc8xyqwwjkwa5ufn.png) 使用MindSpore提供的[`nn.Dense(4, 1)`算子](https://www.mindspore.cn/api/zh-CN/0.2.0-alpha/api/python/mindspore/mindspore.nn.html#mindspore.nn.Dense)作为线性部分,其中`(4, 1)`表示每个样本的输入是含4个元素的向量,输出是含1个元素的向量,即$W$是1x4的矩阵。算子会随机初始化权重$W$和偏置$b$。使用[`SigmoidCrossEntropyWithLogits`算子](https://www.mindspore.cn/api/zh-CN/0.3.0-alpha/api/python/mindspore/mindspore.ops.operations.html?#mindspore.ops.operations.SigmoidCrossEntropyWithLogits)作为非线性部分: 对于每个样本$N_i$,模型的计算方式如下: $$ Z_i = W \cdot X_i + b \\ P_{i} = sigmoid(Z_{i}) = \frac{1}{1 + e^{-Z_{i}}} \\ loss = -\frac{1}n\sum_i[Y_{i} * ln(P_{i}) + (1 - Y_{i})ln(1 - P_{i})] $$ 其中,$X_i$是1D Tensor(含4个元素),$Z_i$是1D Tensor(含1个元素),$Y_i$是真实类别(2个类别{0, 1}中的一个),$P_i$是1D Tensor(含1个元素,表示属于类别1的概率,值域为[0, 1]),$loss$是标量。 ```python # 自定义Loss class Loss(nn.Cell): def __init__(self): super(Loss, self).__init__() self.sigmoid_cross_entropy_with_logits = P.SigmoidCrossEntropyWithLogits() self.reduce_mean = P.ReduceMean(keep_dims=False) def construct(self, x, y): loss = self.sigmoid_cross_entropy_with_logits(x, y) return self.reduce_mean(loss, -1) net = nn.Dense(4, 1) loss = Loss() opt = nn.optim.SGD(net.trainable_params(), learning_rate=0.003) ``` 使用2分类的Iris数据集对模型进行几代(Epoch)训练: ```python model = ms.train.Model(net, loss, opt) model.train(5, ds_train, callbacks=[LossMonitor(per_print_times=ds_train.get_dataset_size())], dataset_sink_mode=False) ``` epoch: 1 step 2, loss is 0.6358570456504822 epoch: 2 step 2, loss is 0.5617856979370117 epoch: 3 step 2, loss is 0.5153790712356567 epoch: 4 step 2, loss is 0.5422952771186829 epoch: 5 step 2, loss is 0.42156651616096497 然后计算模型在测试集上精度,测试集上的精度达到了1.0左右,即逻辑回归模型学会了区分2类鸢尾花。 ```python x = model.predict(ms.Tensor(X_test)).asnumpy() pred = np.round(1 / (1 + np.exp(-x))) correct = np.equal(pred, Y_test) acc = np.mean(correct) print('Test accuracy is', acc) ``` Test accuracy is 1.0 ### 适配训练作业 创建训练作业时,运行参数会通过脚本传参的方式输入给脚本代码,脚本必须解析传参才能在代码中使用相应参数。如data_url对应数据存储路径(OBS路径),脚本对传参进行解析后赋值到`args`变量里,在后续代码里可以使用。 ```python import argparse parser = argparse.ArgumentParser() parser.add_argument('--data_url', required=True, default=None, help='Location of data.') args, unknown = parser.parse_known_args() ``` MindSpore暂时没有提供直接访问OBS数据的接口,需要通过ModelArts自带的moxing框架与OBS交互。将OBS桶中的数据拷贝至执行容器中,供MindSpore使用: ```python import moxing # src_url形如's3://OBS/PATH',为OBS桶中数据集的路径,dst_url为执行容器中的路径,两者皆为目录/皆为文件 moxing.file.copy_parallel(src_url=os.path.join(args.data_url, 'iris.data'), dst_url='iris.data') ``` ### 创建训练作业 可以参考[使用常用框架训练模型](https://support.huaweicloud.com/engineers-modelarts/modelarts_23_0238.html)来创建并启动训练作业(下文给出了操作步骤)。 打开[ModelArts控制台-训练管理-训练作业](https://console.huaweicloud.com/modelarts/?region=cn-north-4#/trainingJobs),点击“创建”按钮进入训练作业配置页面,创建训练作业的参考配置: - 算法来源:常用框架->Ascend-Powered-Engine->MindSpore - 代码目录:选择上述新建的OBS桶中的logistic_regression目录 - 启动文件:选择上述新建的OBS桶中的logistic_regression目录下的`main.py` - 数据来源:数据存储位置->选择上述新建的OBS桶中的logistic_regression目录,本实验使用其中的iris.data - 训练输出位置:选择上述新建的OBS桶中的logistic_regression目录并在其中创建output目录 - 作业日志路径:同训练输出位置 - 规格:Ascend:1*Ascend 910 - 其他均为默认 启动并查看训练过程: 1. 点击提交以开始训练; 2. 在训练作业列表里可以看到刚创建的训练作业,在训练作业页面可以看到版本管理; 3. 点击运行中的训练作业,在展开的窗口中可以查看作业配置信息,以及训练过程中的日志,日志会不断刷新,等训练作业完成后也可以下载日志到本地进行查看; 4. 参考上述代码梳理,在日志中找到对应的打印信息,检查实验是否成功。 ## 实验结论 本实验使用MindSpore实现了逻辑回归,用来解决2分类问题。在Iris数据集上进行训练后,所得的模型可以很好的表示每个样本类别y和属性x的关系。
  • [教程] 如何提升训练效率,同时减少与OBS的交互?
    场景描述在使用Modelarts进行自定义深度学习训练时,训练数据通常存储在对象存储服务(OBS)中,且训练数据较大时(如200GB以上),每次都需要使用GPU资源池进行训练,且训练效率低。希望提升训练效率,同时较少与对象存储OBS的交互。可通过如下方式进行调整优化。优化原理对于ModelArts提供的GPU资源池,每个训练节点会挂载500GB的NVMe类型SSD提供给用户免费使用。此SSD挂载到“/cache”目录,“/cache”目录下的数据生命周期与训练作业生命周期相同,当训练作业运行结束以后“/cache”目录下面所有内容会被清空,腾出空间,供下一次训练作业使用。因此,可以在训练过程中将数据从OBS拷贝到“/cache”目录,然后每次从“/cache”目录读取数据,直到训练结束。训练结束以后“/cache”目录的内容会自动被清空。优化方式以TensorFlow代码为例。优化前代码如下所示:... tf.flags.DEFINE_string('data_url', '', 'dataset directory.') FLAGS = tf.flags.FLAGS mnist = input_data.read_data_sets(FLAGS.data_url, one_hot=True)优化后的代码示例如下,将数据拷贝至“/cache”目录。... tf.flags.DEFINE_string('data_url', '', 'dataset directory.') FLAGS = tf.flags.FLAGS import moxing as mox TMP_CACHE_PATH = '/cache/data' mox.file.copy_parallel('FLAGS.data_url', TMP_CACHE_PATH) mnist = input_data.read_data_sets(TMP_CACHE_PATH, one_hot=True)
  • [数据管理] ModelArts访问不到obs
    obs中可以看到创建的桶,但在ModelArts中使用桶时却显示没有数据?obs:ModelArts:
  • [AI大赛] DynamicRCNN使用教程
    DynamicRCNN目标检测网络使用教程ModelArts AI市场算法DynamicRCNN使用指导本文档是ModelArts AI市场算法DynamicRCNN的详细使用方法。本算法使用MS Coco高质量标注数据集中的trian2017数据集上训练,在val2017和test-dev2017数据集上进行测试,在test-dev2017数据集上达到了mAP=49.2的准确率。1. 准备数据集本算法支持的数据集格式为MS Coco数据集。MS COCO通过大量使用Amazon Mechanical Turk来收集数据, MS COCO的全称是Microsoft Common Objects in Context,起源于微软于2014年出资标注的Microsoft COCO数据集,与ImageNet竞赛一样,被视为是计算机视觉领域最受关注和最权威的比赛之一。         COCO数据集是一个大型的、丰富的物体检测,分割和字幕数据集。这个数据集以scene understanding为目标,主要从复杂的日常场景中截取,图像中的目标通过精确的segmentation进行位置的标定。图像包括91类目标,328,000影像和2,500,000个label。目前为止有语义分割的最大数据集,提供的类别有80 类,有超过33 万张图片,其中20 万张有标注,整个数据集中个体的数目超过150 万个。1.1 下载数据集可点击此链接下载2017 Train images、2017 val images、2017 test images和Train/Val annotations文件如下图所示:下载好之后,需要根据算法要求整理成下述的目录结构:如果是使用模型的训练(train)模式则:|train.json #该文件为annotation标记文件,需要将名字更改为train.json,比如如果使用train_2017_annotations.json这个标记文件,需要将其改为train.json|-train #该目录下存放训练图片,目录名称必须为train,该文件夹下的图片在train.json中都有相对应的图片信息和标记信息    |xxx.jpg    |xxx.jpg    |....如果是使用模型的测试(test)模式则:|test.json #该文件为annotations标记文件,需要将名字改为test.json,要求与train.json一致|-test #该目录下存放测试图片,目录名称必须为test,该文件夹下的图片在test.json中都有与之对应的图片信息,如果test.json中也有标记信息,则会计算预测结果的mAP评测指标。    |xxx.jpg    |xxx.jpg    |....1.2 安装OBS Browser+并上传数据集ModelArts使用对象存储服务(OBS)来存储数据,实现安全、高可靠和低成本的存储需求。OBS Browser+是一款用于访问和管理对象存储服务(Object Storage Service,OBS)的图形化工具,支持完善的桶管理和对象管理操作。OBS Browser+的图形化界面可以非常方便地让用户在本地对OBS进行管理,例如:创建桶、上传下载文件、浏览文件等。具体操作步骤如下:(1)点此下载OBS Browser+,下载完成后解压缩,双击exe进行安装,安装完成后运行;(2)登录界面如下图所示,需要您填写账号名、Access Key ID(AK)和Secret Accsee Key(SK),参考此文档,获取AK和SK,华为云上的许多产品都需要用到访问密钥,请妥善保存该密钥文件,然后参考下图填写您的华为云账号名及刚获取的AK和SK,点击登录;3)参考下图,点击“创建桶”,输入桶名称,注意:区域要选择华北-北京四、标准存储、私有、关闭多AZ,桶名需自定义,OBS桶名要全局唯一,如提示桶名已存在,则需要您修改为其他名称,比如本文设置桶名为blb-paper。您设置的桶名必须与此不同,如在下文的操作指导中看到blb-paper,请主动将桶名替换为您自己的桶名,下文将不再进行提示;4)点击桶名称,进入到桶中,新建文件夹,上传自己已经整理好的训练与测试文件。(5)点击OBS Browser+左侧的“任务管理”,可查看数据上传进度。如下图所示,点击设置,在基础设置中,设置最大并发数为最大值50,可以加快数据上传速度2. 订阅本算法点击本页面右上方的【订阅】按钮。然后点击页面下方的【下一步】按钮,再点击【确认付款】按钮,最后点击【确定】按钮进入我的订阅页面,可以看到刚刚订阅的算法。点击【应用控制台】超链接,选择华北-北京四区域,进入算法管理页面。如下图所示,点击“同步”按钮,同步算法,可以点击刷新按钮,刷新状态。当状态变成就绪时,表示同步成功。3. 创建训练作业点击上图的创建训练作业、按照下表填写参数参数名参数值算法名称默认即可,无需修改数据来源数据存储位置,选择obs://blb-paper/coco-2017/finalcoco/(需要更改为你自己的OBS路径)模型输出选择路径,obs://blb-paper/train_output/(需要更改为你自己的OBS路径)training_iter1000num_gpus8evalFalsecheck_period200load_weightstd作业日志路径obs://blb-paper/modelartsLog/资源池公共资源池规格modelarts.bm.gpu.v100.2,可以根据需求选择计算节点个数1点击下一步,提交,训练作业的状态会经历“初始化”、“部署中”、“运行中”和“运行成功”四个状态。训练作业运行成功后,在上表中指定的“模型输出”路径下会自动生成model目录,该目录下有模型文件、ModelArts平台推理脚本(config.json、customize_service.py)和其他运行模型必备的文件。4. 模型导入准备好模型及相关的必备文件后,您可以将生成的模型导入至ModelArts模型管理。具体操作如下:(1)在ModelArts控制台的左侧导航栏点击“模型管理” -> “模型”,点击右侧页面中的“导入”。在导入模型页面填写名称,选择元模型来源,可以直接从训练中选择,也可以从OBS中选择。如果是从OBS中选择,则需要选择到model目录的上一级目录;例如,本次可选择的目录为obs://blb-paper/modelartsRes/,如下图所示:注意:选择好元模型路径后,“AI引擎”会自动填充。如未能自动填充,请检查元模型路径是否是model目录的上一级目录,或者model目录下是否包含模型配置文件config.json。(2)点击“立即创建”,需要一点时间来等待模型导入和构建,当模型版本状态为“正常”后,即表示模型导入成功。5. 创建在线服务在ModelArts上,可以将模型部署为在线服务,然后上传图片进行预测,直接在网页端观察预测结果。部署为在线服务具体步骤如下:(1)在ModelArts左侧导航栏中选择“部署上线 -> 在线服务”,然后点击页面中的“部署”;(2)在部署页面填写参数,其中在“模型列表”选择要导入的模型及版本,计算节点规格选择GPU:1*T4;3)点击“下一步”,参数确认无误后,点击“提交”。提交后,您可以在在线服务列表中查看部署进度,当状态变为“运行中”后,点击服务名称,进入详情页面,点击“预测”,上传图片进行测试。6. 创建批量服务在ModelArts上,还可以将模型部署为批量服务,从OBS加载测试集图片进行预测,然后将预测结果输出到OBS。部署为批量服务具体步骤如下:(1)在ModelArts左侧导航栏中选择“部署上线 -> 批量服务”,然后点击页面中的“部署”;(2)在部署页面填写参数,其中在“模型列表”选择要导入的模型及版本,填写输入数据目录和输出数据目录,计算节点规格选择“GPU:1*p4”,计算节点个数设为1;(3)点击“下一步”,参数确认无误后,点击“提交”。提交后,您可以在批量服务列表中查看部署进度,当状态变为“运行中”后,表示正在预测中,当状态变为“运行完成”,表示这批图片已经预测结束,预测结果是一批txt文件,保存在上图指定的OBS输出数据目录位置中,可以前往该目录查看结果。7. 模型评估参考本文第2节中的步骤,创建“训练作业”,按照下表设置训练参数:参数名参数值算法名称默认即可,无需修改数据来源数据存储位置,选择obs://blb-paper/coco-2017/finalcoco/(需要更改为你自己的OBS路径)模型输出选择路径,obs://blb-paper/train_output/(需要更改为你自己的OBS路径)training_iter默认即可,测试模式该参数无效num_gpus1evalTruecheck_period默认即可,测试模式该参数无效load_weightobs://blb-paper/train_output/model/final_model.pth(需要更改为你自己的OBS路径)作业日志路径obs://blb-paper/modelartsLog/(需要更改为你自己的OBS路径)资源池公共资源池规格modelarts.p3.large.ex,测试模式下选择单卡即可,无需选择多卡计算节点个数1点击下一步,提交,训练作业的状态会经历“初始化”、“部署中”、“运行中”和“运行成功”四个状态。训练作业运行成功后,在上表中指定的“模型输出”路径下会自动生成logs目录、inference目录和imgs目录,其中inference目录中是所有图片的预测结果bbox文件,imgs是所有图片的预测结果。
  • [问题求助] OBS安装失败怎么处理
    一直保持在这个界面不动
  • [教程] DynamicRCNN目标检测网络使用教程
    ModelArts AI市场算法DynamicRCNN使用指导(样例文档)本文档是ModelArts AI市场算法DynamicRCNN的详细使用方法。本算法使用MS Coco高质量标注数据集中的trian2017数据集上训练,在val2017和test-dev2017数据集上进行测试,在test-dev2017数据集上达到了mAP=49.2的准确率。1、准备数据集本算法支持的数据集格式为MS Coco数据集。MS COCO通过大量使用Amazon Mechanical Turk来收集数据, MS COCO的全称是Microsoft Common Objects in Context,起源于微软于2014年出资标注的Microsoft COCO数据集,与ImageNet竞赛一样,被视为是计算机视觉领域最受关注和最权威的比赛之一。         COCO数据集是一个大型的、丰富的物体检测,分割和字幕数据集。这个数据集以scene understanding为目标,主要从复杂的日常场景中截取,图像中的目标通过精确的segmentation进行位置的标定。图像包括91类目标,328,000影像和2,500,000个label。目前为止有语义分割的最大数据集,提供的类别有80 类,有超过33 万张图片,其中20 万张有标注,整个数据集中个体的数目超过150 万个。1.1、下载数据集可点击此链接下载2017 Train images、2017 val images、2017 test images和Train/Val annotations文件如下图所示:下载好之后,需要根据算法要求整理成下述的目录结构:如果是使用模型的训练(train)模式则:|train.json #该文件为annotation标记文件,需要将名字更改为train.json,比如如果使用train_2017_annotations.json这个标记文件,需要将其改为train.json|-train #该目录下存放训练图片,目录名称必须为train,该文件夹下的图片在train.json中都有相对应的图片信息和标记信息    |xxx.jpg    |xxx.jpg    |....如果是使用模型的测试(test)模式则:|test.json #该文件为annotations标记文件,需要将名字改为test.json,要求与train.json一致|-test #该目录下存放测试图片,目录名称必须为test,该文件夹下的图片在test.json中都有与之对应的图片信息,如果test.json中也有标记信息,则会计算预测结果的mAP评测指标。    |xxx.jpg    |xxx.jpg    |....|-xxx.pth #自己指定的训练参数文件,需要在训练参数的test_weights中传入改文件名。如果没有该文件,则不需要对test_weights参数进行更改,系统默认使用官方达到论文精度的参数文件1.2 安装OBS Browser+并上传数据集ModelArts使用对象存储服务(OBS)来存储数据,实现安全、高可靠和低成本的存储需求。OBS Browser+是一款用于访问和管理对象存储服务(Object Storage Service,OBS)的图形化工具,支持完善的桶管理和对象管理操作。OBS Browser+的图形化界面可以非常方便地让用户在本地对OBS进行管理,例如:创建桶、上传下载文件、浏览文件等。具体操作步骤如下:(1)点此下载OBS Browser+,下载完成后解压缩,双击exe进行安装,安装完成后运行;(2)登录界面如下图所示,需要您填写账号名、Access Key ID(AK)和Secret Accsee Key(SK),参考此文档,获取AK和SK,华为云上的许多产品都需要用到访问密钥,请妥善保存该密钥文件,然后参考下图填写您的华为云账号名及刚获取的AK和SK,点击登录;3)参考下图,点击“创建桶”,输入桶名称,注意:区域要选择华北-北京四、标准存储、私有、关闭多AZ,桶名需自定义,OBS桶名要全局唯一,如提示桶名已存在,则需要您修改为其他名称,比如本文设置桶名为blb-paper。您设置的桶名必须与此不同,如在下文的操作指导中看到blb-paper,请主动将桶名替换为您自己的桶名,下文将不再进行提示;4)点击桶名称,进入到桶中,点击“新建文件夹”,输入文件夹名称,如“train_input”,点击进入文件夹,再新建“datasets”,点击“上传”->“添加文件”-> 选择本地下载好的数据集压缩包(之所以选压缩包格式是因为如果数据集比较大,上传压缩包比上传文件夹快很多) –> 确定,如下图所示;(5)点击OBS Browser+左侧的“任务管理”,可查看数据上传进度。如下图所示,点击设置,在基础设置中,设置最大并发数为最大值50,可以加快数据上传速度2. 订阅本算法点击本页面右上方的【订阅】按钮。然后点击页面下方的【下一步】按钮,再点击【确认付款】按钮,最后点击【确定】按钮进入我的订阅页面,可以看到刚刚订阅的算法。点击【应用控制台】超链接,选择华北-北京四区域,进入算法管理页面。如下图所示,点击“同步”按钮,同步算法,可以点击刷新按钮,刷新状态。当状态变成就绪时,表示同步成功。3创建训练作业点击上图的创建训练作业、按照下表填写参数参数名参数值算法名称默认即可,无需修改数据来源数据存储位置,选择obs://blb-paper/coco-2017/finalcoco/模型输出选择路径,obs://blb-paper/train_output/training_iter2700000num_gpus8modetrainnetworkR101test_weightsstd作业日志路径obs://blb-paper/modelartsLog/资源池公共资源池规格modelarts.bm.gpu.v100.2,可以根据需求选择计算节点个数1点击下一步,提交,训练作业的状态会经历“初始化”、“部署中”、“运行中”和“运行成功”四个状态。训练作业运行成功后,在上表中指定的“模型输出”路径下会自动生成model目录,该目录下有模型文件、ModelArts平台推理脚本(config.json、customize_service.py)和其他运行模型必备的文件。4. 模型导入准备好模型及相关的必备文件后,您可以将生成的模型导入至ModelArts模型管理。具体操作如下:(1)在ModelArts控制台的左侧导航栏点击“模型管理” -> “模型”,点击右侧页面中的“导入”。在导入模型页面填写名称,选择元模型来源,可以直接从训练中选择,也可以从OBS中选择。如果是从OBS中选择,则需要选择到model目录的上一级目录;例如,本次可选择的目录为obs://blb-paper/modelartsRes/,如下图所示:注意:选择好元模型路径后,“AI引擎”会自动填充。如未能自动填充,请检查元模型路径是否是model目录的上一级目录,或者model目录下是否包含模型配置文件config.json。(2)点击“立即创建”,需要一点时间来等待模型导入和构建,当模型版本状态为“正常”后,即表示模型导入成功。5. 创建在线服务在ModelArts上,可以将模型部署为在线服务,然后上传图片进行预测,直接在网页端观察预测结果。部署为在线服务具体步骤如下:(1)在ModelArts左侧导航栏中选择“部署上线 -> 在线服务”,然后点击页面中的“部署”;(2)在部署页面填写参数,其中在“模型列表”选择要导入的模型及版本,计算节点规格选择GPU:1*T4;3)点击“下一步”,参数确认无误后,点击“提交”。提交后,您可以在在线服务列表中查看部署进度,当状态变为“运行中”后,点击服务名称,进入详情页面,点击“预测”,上传图片进行测试。6. 创建批量服务在ModelArts上,还可以将模型部署为批量服务,从OBS加载测试集图片进行预测,然后将预测结果输出到OBS。部署为批量服务具体步骤如下:(1)在ModelArts左侧导航栏中选择“部署上线 -> 批量服务”,然后点击页面中的“部署”;(2)在部署页面填写参数,其中在“模型列表”选择要导入的模型及版本,填写输入数据目录和输出数据目录,计算节点规格选择“GPU:1*p4”,计算节点个数设为1;(3)点击“下一步”,参数确认无误后,点击“提交”。提交后,您可以在批量服务列表中查看部署进度,当状态变为“运行中”后,表示正在预测中,当状态变为“运行完成”,表示这批图片已经预测结束,预测结果是一批txt文件,保存在上图指定的OBS输出数据目录位置中,可以前往该目录查看结果。7. 模型评估参考本文第2节中的步骤,创建“训练作业”,按照下表设置训练参数:参数名参数值算法名称默认即可,无需修改数据来源数据存储位置,选择obs://blb-paper/coco-2017/finalcoco/模型输出选择路径,obs://blb-paper/train_output/training_iter默认即可num_gpus1modetestnetworkR101test_weightsfinal_model.pth,需要根据自己的参数文件名进行修改作业日志路径obs://blb-paper/modelartsLog/资源池公共资源池规格modelarts.p3.large.ex,测试模式下选择单卡即可,无需选择多卡计算节点个数1点击下一步,提交,训练作业的状态会经历“初始化”、“部署中”、“运行中”和“运行成功”四个状态。训练作业运行成功后,在上表中指定的“模型输出”路径下会自动生成logs目录和inference目录,其中inference目录中是所有图片的预测结果bbox文件。
  • [问题求助] obs使用PHP-SDK不能直接删除文件夹对象
    要删除一个文件夹,首先要删除文件夹下面的所有对象才能成功删除这个文件夹,不能直接传文件夹的路径就直接删除整个目录吗
  • [产品讨论] OBS 模拟不存在的场景返回Not Found
    ErrorCode也是个String类型的, 我找了一下文档并没有描述都会返回对应什么值, 我需要在有异常的时候判断一些东西不会返回 NoSuchBucket 会返回 Notfound
  • [其他] Notebook从OBS同步数据报错解决办法
    Notebook从OBS同步数据报错,导致无法正常使用:obs sync failed。根据报错提示,判断是单次同步文件内容超过使用限制。如果单次同步文件个数超过1024,要整理文件之后重新同步。如果同步的文件和当前“/home/ma-user/work”目录下的文件大于500MB,清理该目录下的文件空间后重新同步。
总条数:1260 到第
上滑加载中