华为云用户手册

  • 图片标注 在“数据标注”页面单击“未标注”页签,此页面展示所有未标注的图片数据。依次单击选中待标注的图片,或勾选“选择当前页”选中该页面所有图片,在页面右侧进行图片标注。 图1 图片标注 选中图片后,在页面右侧“添加标签”,输入“标签名”或从下拉列表中选择已添加的标签。单击“确定”,完成选中图片的标注操作。例如,您可以选择多张图片,按照花朵种类将图片标注为“tulips”。同样选择其他未标注分类图片,将其标注为“sunflowers”、“roses”等。标注完成后,图片将存储至“已标注”页签下。 图片标注支持多标签,即一张图片可添加多个标签。 标签名是由中文、大小写字母、数字、中划线或下划线组成,且不超过32位的字符串。 图2 图像分类图片标注 当图片目录中所有图片都完成标注后,您可以在“已标注”页签下查看已完成标注的图片,或者通过右侧的“全部标签”列表,了解当前已完成的标签名称和标签数量。
  • 修改标注 当数据完成标注后,您还可以进入已标注页签,对已标注的数据进行修改。 基于图片修改 在数据标注页面,单击“已标注”页签,然后在图片列表中选中待修改的图片(选择一个或多个)。在右侧标签信息区域中对图片信息进行修改。 添加标签:在“标签名”右侧文本框中,选择已有标签或输入新的标签名,然后单击“确定”,为选中图片增加标签。 修改标签:在“选中文件标签”区域中,单击操作列的编辑图标,然后在文本框中输入正确的标签名,然后单击图标完成修改。 图5 编辑标签 删除标签:在“选中文件标签”区域中,单击操作列的删除该标签。 基于标签修改 在数据标注页面,单击“已标注”页签,在图片列表右侧,显示全部标签的信息。 图6 全部标签的信息 修改标签:单击操作列的编辑按钮,然后在弹出的对话框中输入修改后的标签名,然后单击“确定”完成修改。修改后,之前添加了此标签的图片,都将被标注为新的标签名称。 删除标签:单击操作列的删除按钮,在弹出的对话框中,选择“仅删除标签”、“删除标签及仅包含此标签的图片(不删除源文件)”或“删除标签及仅包含此标签的图片(同时删除源文件)”,然后单击“确定”。 图7 删除标签
  • 处理方法 将pretrained改成false,提前下载好预训练模型,加载下载好的预训练模型位置即可,可参考如下代码。 import torch import torchvision.models as models model1 = models.resnet34(pretrained=False, progress=True) checkpoint = '/xxx/resnet34-333f7ec4.pth' state_dict = torch.load(checkpoint) model1.load_state_dict(state_dict) 必现的问题,使用本地Pycharm远程连接Notebook调试。
  • 处理方法 如果是限流问题,日志中还会有如下错误,OBS相关的错误码解释请参见OBS官方文档,这种情况建议提工单。 图2 错误日志 如果是client数太多,尤其对于5G以上文件,OBS接口不支持直接调用,需要分多个线程分段拷贝,目前OBS侧服务端超时时间是30S,可以通过如下设置减少进程数。 # 设置进程数 os.environ['MOX_FILE_LARGE_FILE_TASK_NUM']=1 import moxing as mox # 拷贝文件 mox.file.copy_parallel(src_url=your_src_dir, dst_url=your_target_dir, threads=0, is_processing=False) 创建训练作业时,可通过环境变量“MOX_FILE_PARTIAL_MAXIMUM_SIZE”设置用户需要分段下载的大文件阈值(单位为Bytes),超过该阈值的文件将使用并发下载模式进行分段下载。
  • 原因分析 出现该问题的可能原因如下: 程序运行过程中,产生了core文件,core文件占满了"/"根目录空间。 本地数据、文件保存将"/cache"目录3.5T空间用完了。 云上训练磁盘空间一般指如下两个目录的磁盘空间: “/”根目录,是docker中配置项“base size”,默认是10G,云上统一改为50G。 “/cache”目录满了,一般是3.5T存储空间满了,具体规格的空间大小可参见训练环境中不同规格资源“/cache”目录的大小。
  • 标注信息不满足训练要求 针对不同类型的自动学习项目,训练作业对数据集的要求如下。 图像分类:用于训练的图片,至少有2种以上的分类(即2种以上的标签),每种分类的图片数不少于5张。 物体检测:用于训练的图片,至少有1种以上的分类(即1种以上的标签),每种分类的图片数不少于5张。 预测分析:由于预测分析任务的数据集不在数据管理中进行统一管理,即使数据不满足要求,不在此环节出现故障信息。 声音分类:用于训练的音频,至少有2种以上的分类(即2种以上的标签),每种分类的音频数不少于5个。 文本分类:用于训练的文本,至少有2种以上的分类(即2种以上的标签),每种分类的文本数不少于20个。
  • 解决方法 在遇到资源不足的情况时,ModelArts会进行三次重试,在服务重试期间,如果有资源释放出来,则服务可以正常部署成功。 如果三次重试后依然没有足够的资源,则本次服务部署失败。参考以下方式解决: 如果是在公共资源池部署服务,可等待其他用户释放资源后,再进行服务部署。 如果是在专属资源池部署服务,在满足模型需求的前提下,尝试选用更小的容器规格或自定义规格,进行服务部署; 如果当前资源池的资源确实不够,也可以考虑将资源池扩容后再进行服务部署。公共资源池扩容,请联系系统管理员。专属资源池扩容,可参考扩缩容资源池。 如果磁盘空间不够,可以尝试重试,使实例调度到其他节点。如果单实例仍磁盘空间不足,请联系系统管理员,更换合适的规格。 如果是大模型导入的AI应用部署服务,请确保专属资源池磁盘空间大于1T(1000GB)。
  • 处理方法 到SWR检查下对应的镜像是否存在,对应镜像的镜像地址是否和实际地址一致,大小写,拼写等是否一致。 检查用户给ModelArts的委托中是否有SWR的权限,可以在全局配置中查看对应用户的授权内容,查看授权详情。如果没有对应权限,需要到统一身份认证服务给对应委托中加上对应权限。 图1 全局配置 图2 查看权限详情和去IAM修改委托权限 图3 给委托添加授权 将镜像设置成私有镜像 登录容器镜像服务(SWR),左侧导航栏选择“我的镜像”,查看镜像详情,单击右上角“编辑”按钮,把镜像类型修改为“私有”。 图4 修改镜像类型为私有
  • 处理方法 在ModelArts管理控制台,选择“全局配置”。 在用户名对应的“授权内容”列,单击“查看权限”,确认用户的委托权限是否已包含Tenant Administrator。 图1 查看委托权限详情 是,重新“启动”边缘服务,若还是“异常”则联系技术支持处理。 否,执行下一步,给用户添加委托权限。 添加委托权限。 如果是IAM子账号,没有修改委托权限,请联系管理员添加Tenant Adiministrator委托权限。 登录统一身份认证服务IAM管理控制台。 单击导航栏的“委托”,进入委托页面。 搜索ModelArts使用的委托,例如“modelarts_agency”,单击委托名称进入“基本信息”页面。 单击“授权”,添加Tenant Adiministrator权限,按操作指引完成授权。 授权完成后,重新“启动”边缘服务,观察状态是否正常。
  • 常见问题 模型文件目录下不能出现dockerfile文件; “查看构建日志”中显示“Not only a Dockerfile in your OBS path, please make sure, The dockerfile list”,表示dockerfile文件目录有问题,模型文件目录下不能出现dockerfile文件,需要去掉模型文件目录下存在dockerfile文件。 图2 构建日志:dockerfile文件目录有问题 pip软件包版本不匹配,需要修改为日志中打印的存在的版本。 图3 pip版本不匹配 构建日志中出现报错:“exec /usr/bin/sh: exec format error”。 这种报错一般是因为所用镜像系统引擎和构建镜像的系统引擎不一致引起的,例如使用的是x86的镜像却标记的是arm的系统架构。 可以通过查看AI应用详情看到配置的系统运行架构。基础镜像的系统架构详情可以参考推理基础镜像列表。
  • 问题定位和处理 创建AI应用失败有两种场景:创建AI应用时直接报错或者是调用API报错和创建AI应用任务下发成功,但最终AI应用创建失败。 创建AI应用时直接报错或者是调用API报错。一般都是输入参数不合法导致的。您可以根据提示信息进行排查修改即可。 创建AI应用任务下发成功,但最终AI应用创建失败。需要从以下几个方面进行排查: 在AI应用详情页面,查看“事件”页签中的事件信息。根据事件信息分析AI应用失败原因,进行处理。 如果AI应用状态为“构建失败”,可以在AI应用详情页面,查看“事件”页签中的“查看构建日志”。构建日志中有对应的构建镜像失败的详细原因,根据构建失败的原因进行排查处理。 图1 查看构建日志
  • 解决方案 查看“/home/ma-user/log/”下以“kernelgateway”开头的最新日志文件,搜索“Starting kernel”附近的日志。若看到如下类似的堆栈,可看到是因为用户工作目录下的“code.py”和创建kernel依赖的import code文件名冲突: 重命名当前工作目录下和创建kernel依赖的库文件冲突的文件名称。 常见容易冲突的文件:code.py、select.py。
  • 问题现象 输入输出目录不存在,报如下错误 "error_code": "ModelArts.3551", "error_msg": "OBS path xxxx does not exist." 当访问目录权限不足时,报如下错误 "error_code": "ModelArts.3567", "error_msg": "OBS error occurs because Access Denied."
  • 处理方法 ModelArts.3551:到obs检查输入数据目录是否存在,如果不存在,请按照实际需要创建obs目录;如果检查发现目录存在,但依然报同样的错,可以提工单申请技术支持 ModelArts.3567:用户只能访问自己账号下的obs目录,ModelArts在读取其他用户obs下的数据时,需要用户委托权限,没有创建委托,就没有权限使用其他用户obs中的数据。 登录ModelArts控制台,管理控制台,在左侧导航栏中选择“全局配置”,单击“查看权限”,检查是否配置了obs的委托权限。 图1 查看权限 如果检查后已经存在委托,但是仍然无法访问,可以提工单寻求技术支持。
  • 处理方法 如果是正常的OOM,就需要修改一些超参,释放一些不需要的tensor。 修改网络参数,比如batch_size、hide_layer、cell_nums等。 释放一些不需要的tensor,使用过的,如下: del tmp_tensor torch.cuda.empty_cache() 必现的问题,使用本地Pycharm远程连接Notebook调试超参。 如果还存在问题,可能需要提工单进行定位,甚至需要隔离节点修复。
  • 问题现象 因为OOM导致的训练作业失败,会有如下几种现象: 错误码返回137,如下图所示: 图1 错误日志 日志中有报错,含有“killed”相关字段,例如如下截图: 图2 错误日志信息 日志中有报错“RuntimeError: CUDA out of memory. ”,如下图所示: 图3 错误日志信息 Tensorflow引擎日志中出现“Dst tensor is not initialized”。
  • 处理方法 进入到“Terminal”界面。在“/tmp”目录下,执行命令du -sh *,查看该目录下的空间占用情况。 sh-4.3$cd /tmp sh-4.3$du -sh * 4.0K core-js-banners 0 npm-19-41ed4c62 6.7M v8-compile-cache-1000 请删除不用的大文件。 删除示例文件“test.txt”:rm -f /home/ma-user/work/data/test.txt 删除示例文件夹“data”:rm -rf /home/ma-user/work/data/
  • 原因分析及处理方法 服务预测需要经过客户端、外部网络、APIG、Dispatch、模型服务多个环节。每个环节出现都会导致服务预测失败。 图1 推理服务流程图 出现APIG.XXXX类型的报错,表示请求在APIG(API网关)出现问题而被拦截。 常见问题请参见服务预测失败,报错APIG.XXXX。 其他被APIG(API网关)拦截的场景: Method Not Allowed 请求超时返回Timeout 出现Modelart.XXXX类型的报错,表示请求在Dispatcher出现问题而被拦截。 常见报错: 在线服务预测报错ModelArts.4302 在线服务预测报错ModelArts.4206 在线服务预测报错ModelArts.4503 当使用推理的镜像并且出现MR.XXXX类型的错误时,表示已进入模型服务,一般是模型推理代码编写有问题。 请根据构建日志报错信息,定位服务预测失败原因,修改模型推理代码后,重新导入模型进行预测。 经典案例:在线服务预测报错MR.0105 出现其他情况,优先检查客户端和外部网络是否有问题。 以上方法均未解决问题,请联系系统管理员。
  • 预测分析作业失败的排查思路 检查用于预测分析的数据是否满足要求。 由于预测分析任务未使用数据管理的功能发布数据集,因此当数据不满足训练作业要求时,会出现训练作业运行失败的错误。 建议检查用于训练的数据,是否满足预测分析作业的要求。要求如下所示,如果数据满足要求,执行下一步检查。如果不满足要求,请根据要求仅需数据调整后再重新训练。 文件规范:名称由以字母数字及中划线下划线组成,以'.csv'结尾,且文件不能直接放在OBS桶的根目录下,应该存放在OBS桶的文件夹内。如:“/obs-xxx/data/input.csv”。 文件内容:文件保存为“csv”文件格式,文件内容以换行符(即字符“\n”,或称为LF)分隔各行,行内容以英文逗号(即字符“,”)分隔各列。文件内容不能包含中文字符,列内容不应包含英文逗号、换行符等特殊字符,不支持引号语法,建议尽量以字母及数字字符组成。 训练数据:训练数据列数一致,总数据量不少于100条不同数据(有一个特征取值不同,即视为不同数据)。训练数据列内容不能有时间戳格式(如:yy-mm-dd、yyyy-mm-dd等)的数据。确保指定标签列的取值至少有两个且无数据缺失,除标签列外数据集中至少还应包含两个有效特征列(列的取值至少有两个且数据缺失比例低于10%)。训练数据的csv文件不能包含表头,否则会导致训练失败。当前由于特征筛选算法限制,标签列建议放在数据集最后一列,否则可能导致训练失败。 由于ModelArts会自动对数据进行一些过滤,过滤后再启动训练作业。当预处理后的数据不满足训练要求时,也会导致训练作业运行失败。 对于数据集中列的过滤策略如下所示: 如果某一列空缺的比例大于系统设定的阈值(0.9),此列数据在训练时将被剔除。 如果某一列只有一种取值(即每一行的数据都是一样的),此列数据在训练时将被剔除。 对于非纯数值列,如果此列的取值个数等于行数(即每一行的数值都是不一样的),此列数据在训练时将被剔除。 经过上述过滤后,如果数据集不再满足第一点中关于训练数据的要求,则会导致训练失败或无法进行。建议完善数据后,再启动训练。 数据集文件有以下限制: 如果您使用2u8g规格,测试建议数据集文件应小于10MB。当文件大小符合限制要求,如果存在极端的数据规模(行数列数之积)时,仍可能会导致训练失败,建议的数据规模低于10000。 如果您使用8u32g规格,测试建议数据集文件应小于100MB。当文件大小符合限制要求,如果存在极端的数据规模(行数列数之积)时,仍可能会导致训练失败,建议的数据规模低于1000000。 如果上述排查操作仍无法解决,请联系华为云技术支持。
  • 健康检查配置有问题 镜像如果配置了健康检查,服务启动失败,从以下两个方面进行排查: 健康检查端口是否可以正常工作 自定义镜像中配置了健康检查,需要在测试镜像时,同步测试健康检查接口是否可以正常工作,具体参考从0-1制作自定义镜像并创建AI应用中的本地验证镜像方法。 创建AI应用界面上配置的健康检查地址与实际配置的是否一致 如果使用的是ModelArts提供的基础镜像创建AI应用,健康检查URL默认必须为/health。 图4 设置健康检查URL
  • 镜像中配置的端口错误 AI应用可以正常启动,但是因为镜像中启用的端口非8080,或者镜像启用的端口与创建AI应用时配置的端口不一致,导致部署服务时register-agent无法与AI应用通信,超过一定时间后(最长20分钟)认为AI应用启动失败。 需要检查两个地方:自定义镜像中的代码开放的端口和创建AI应用界面上配置的端口。确认两处端口保持一致。AI应用创建界面如果不填端口信息,则ModelArts会默认监听8080端口,即镜像代码中启用的端口必须是8080。 图2 自定义镜像中的代码开放的端口 图3 创建AI应用界面上配置的端口
  • ModelArts.4342 标注信息不满足切分条件 出现此故障时,建议根据如下建议,修改标注数据后重试。 多标签的样本(即一张图片包含多个标签),至少需要有2张。如果启动训练时,设置了数据集切分功能,如果多标签的数据少于2张,会导致数据集切分失败。建议检查您的标注信息,保证标注多标签的图片,超过2张。 数据集切分后,训练集和验证集包含的标签类别不一样。出现这种情况的原因:多标签场景下时,做随机数据切分后,包含某一类标签的样本均被划分到训练集,导致验证集无该标签样本。由于这种情况出现的概率比较小,可尝试重新发布版本来解决。
  • 处理方法 可以参考官方文档,如下: """run.py:""" #!/usr/bin/env python import os import torch import torch.distributed as dist import torch.multiprocessing as mp def run(rank, size): """ Distributed function to be implemented later. """ pass def init_process(rank, size, fn, backend='gloo'): """ Initialize the distributed environment. """ os.environ['MASTER_ADDR'] = '127.0.0.1' os.environ['MASTER_PORT'] = '29500' dist.init_process_group(backend, rank=rank, world_size=size) fn(rank, size) if __name__ == "__main__": size = 2 processes = [] mp.set_start_method("spawn") for rank in range(size): p = mp.Process(target=init_process, args=(rank, size, run)) p.start() processes.append(p) for p in processes: p.join()
  • 处理方法 如果是多个节点拷贝不同步,并且没有barrier的话导致的超时,可以在拷贝数据之前,先进行torch.distributed.init_process_group(),然后再根据local_rank()==0去拷贝数据,之后再调用torch.distributed.barrier()等待所有rank完成拷贝。具体可参考如下代码: import moxing as mox import torch torch.distributed.init_process_group() if local_rank == 0: mox.file.copy_parallel(src,dst) torch.distributed.barrier()
  • 原因分析 出现该问题的可能原因如下。 磁盘空间不足。 分布式作业时,有些节点的docker base size配置未生效,容器内“/”根目录空间未达到50GB,只有默认的10GB,导致作业训练失败。 实际存储空间足够,却依旧报错“No Space left on device”。 同一目录下创建较多文件,为了加快文件检索速度,内核会创建一个索引表,短时间内创建较多文件时,会导致索引表达到上限,进而报错。 触发条件和下面的因素有关: 文件名越长,文件数量的上限越小 blocksize越小,文件数量的上限越小。( blocksize,系统默认 4096B。总共有三种大小:1024B、2048B、4096B) 创建文件越快,越容易触发(机制大概是:有一个缓存,这块大小和上面的1和2有关,目录下文件数量比较大时会启动,使用方式是边用边释放)
  • 处理方法 可以参照日志提示"write line error"文档进行修复。 如果是分布式作业有的节点有错误,有的节点正常,建议提工单请求隔离有问题的节点。 如果是触发了欧拉操作系统的限制,有如下建议措施。 分目录处理,减少单个目录文件量。 减慢创建文件的速度。 关闭ext4文件系统的dir_index属性,具体可参考:https://access.redhat.com/solutions/29894,(可能会影响文件检索性能)。
  • 问题现象 在Notebook里保存镜像时报错“there are processes in 'D' status, please check process status using 'ps -aux' and kill all the 'D' status processes”。 在Notebook里保存镜像时报错“Buildimge,False,Error response from daemon: Cannot pause container xxx”。
  • 处理方法 请您对作业代码进行排查分析,确认是否对训练代码和参数进行过修改。 检查资源分配情况(cpu/mem/gpu/snt9/infiniband)是否符合预期。 通过CloudShell登录到Linux工作页面,检查GPU工作情况: 通过输入“nvidia-smi”命令,查看GPU工作是否异常。 通过输入“nvidia-smi -q -d TEMPERATURE”命令, 查看TEMP参数是否存在异常, 如果温度过高,会导致训练性能下降。
  • 处理方法 在使用Tensorflow多节点作业下载数据时,正确的下载逻辑如下: import argparse parser = argparse.ArgumentParser() parser.add_argument("--job_name", type=str, default="") args = parser.parse_known_args() if args[0].job_name != "ps": copy..............................
  • 原因分析 可以从以下角度排查: 请检查CUDA_VISIBLE_DEVICES设置的值是否与作业规格匹配。例如您选择4卡规格的作业,实际可用的卡ID为0、1、2、3,但是您在进行cuda相关的运算时,例如"tensor.to(device="cuda:7")",将张量搬到了7号GPU卡上,超过了实际可用的ID号。 如果cuda相关运算设置的卡ID号在所选规格范围内,但是依旧出现了上述报错。可能是该资源节点中存在GPU卡损坏的情况,导致实际能检测到的卡少于所选规格。
共100000条