华为云用户手册

  • 原因分析及处理方法 服务预测报错ModelArts.4503有多种场景,常见场景如下: 通信出错 请求报错:{"error_code":"ModelArts.4503","error_msg":"Failed to respond due to backend service not found or failed to respond"} 基于高性能考虑,ModelArts会复用同模型服务的连接。根据tcp协议,连接的断开可以由该连接的client端发起,也可以由server端发起。断开连接需要经过四次握手,所以可能会存在作为服务端的模型服务侧发起断开连接,但是该连接正在被作为客户端的ModelArts使用,从而导致通信出错,返回此错误信息。 如果您使用的是 自定义镜像 导入的模型,请增大自定义镜像中所使用的web server的keep-alive的参数值,尽量避免由服务端发起关闭连接。如您使用的Gunicorn来作为web server,可以通过Gunicorn命令的--keep-alive参数来设置该值。其他方式导入的模型,服务内部已做处理。 协议错误 请求报错:{"error_code":"ModelArts.4503", "error_msg":"Failed to find backend service because SSL error in the backend service, please check the service is https"} 部署在线服务使用的模型是从容器镜像中导入时,容器调用接口协议填写错误,会导致此错误信息。 出于安全考虑,ModelArts提供的推理请求都是https请求,从容器镜像中选择导入模型时,ModelArts允许使用的镜像提供https或http服务,但必须在“容器调用接口”中明确指定该镜像使用的是https或http服务。如下图所示: 图1 容器调用接口 如果您在“容器调用接口”中选择的结果跟您镜像实际提供的结果不匹配,例如您在这里选择的是https,但镜像里面实际提供的是http,就会遇到上述错误。反之,如果您选择的是http,但镜像里面实际提供的是https,也会遇到类似错误。 您可以创建一个新的模型版本,选择正确的协议(http或者https),重新部署在线服务或更新已有在线服务。 请求预测时间过长 报错:{"error_code": "ModelArts.4503", "error_msg": "Backend service respond timeout, please confirm your service is able to process the request without timeout. "}及报错:{"error_code": "ModelArts.4503", "error_msg": "Failed to find backend service because response timed out, please confirm your service is able to process the request without timeout. "} 因APIG(API网关)限制,平台每次请求预测的时间不超过40秒。数据从平台发送到服务,服务预测推理,再将结果返回的时间不超过限制,可以成功返回预测结果。当服务预测的时间过长或者频繁预测导致服务接收不过来请求,即会出现该报错。 可以通过以下方式解决问题: 服务预测请求内容过大时,会因数据处理慢导致请求超时,优化预测代码,缩短预测时间。 推理速度与模型复杂度强相关,优化模型,缩短预测时间。 扩容实例数或者选择性能更好的“计算节点规格”,例如使用GPU资源代替CPU资源,提升服务处理能力。 服务出错 报错:{"error_code": "ModelArts.4503","error_msg": "Backend service respond timeout, please confirm your service is able to process the request without timeout. "} 服务日志输出: [2022-10-24 11:37:31 +0000] [897] [INFO] Booting worker with pid: 897 [2022-10-24 11:41:47 +0000] [1997] [INFO] Booting worker with pid: 1997 [2022-10-24 11:41:22 +0000] [1897] [INFO] Booting worker with pid: 1897 [2022-10-24 11:37:54 +0000] [997] [INFO] Booting worker with pid: 997 服务异常进程反复重启导致预测请求无法发送到服务实例。 可以通过以下方式解决问题: 缩小预测请求数量看是否问题还复现,如果不复现是因为负载过大导致服务进程退出,需要扩容实例数量或者提升规格。 推理代码本身存在错误,请排查推理代码解决。
  • 原因分析及处理方法 服务预测报错ModelArts.4302有多种场景,以下主要介绍两种场景: "error_msg": "Gateway forwarding error. Failed to invoke backend service due to connection refused. " 出现该报错有两种情况: 流量超过了模型的处理能力。可以考虑降低流量或者增加模型实例数量。 镜像自身有问题。需要单独运行镜像确保镜像本身能正确提供服务。 "error_msg":"Due to self protection, the backend service is disconnected, please wait moment." 出现该错误,是因为模型报错太多。当模型报错太多时,会触发dispatcher的熔断机制,导致预测失败。建议您检查模型返回结果,处理模型报错问题,可尝试通过调整请求参数、降低请求流量等方式,提高模型调用的成功率。
  • 原因分析及处理方法 服务预测需要经过客户端、外部网络、APIG、Dispatch、模型服务多个环节。每个环节出现都会导致服务预测失败。 图1 推理服务流程图 出现APIG.XXXX类型的报错,表示请求在APIG(API网关)出现问题而被拦截。 常见问题请参见服务预测失败,报错APIG.XXXX。 其他被APIG(API网关)拦截的场景: Method Not Allowed 请求超时返回Timeout 出现ModelArts.XXXX类型的报错,表示请求在Dispatcher出现问题而被拦截。 常见报错: 在线服务预测报错ModelArts.4302 在线服务预测报错ModelArts.4206 在线服务预测报错ModelArts.4503 当使用推理的镜像并且出现MR.XXXX类型的错误时,表示已进入模型服务,一般是模型推理代码编写有问题。 请根据构建日志报错信息,定位服务预测失败原因,修改模型推理代码后,重新导入模型进行预测。 经典案例:在线服务预测报错MR.0105 出现其他情况,优先检查客户端和外部网络是否有问题。 以上方法均未解决问题,请联系系统管理员。
  • 处理方法 到SWR检查下对应的镜像是否存在,对应镜像的镜像地址是否和实际地址一致,大小写,拼写等是否一致。 检查用户给ModelArts的委托中是否有SWR的权限,可以在权限管理中查看对应用户的授权内容,查看授权详情。如果没有对应权限,需要到 统一身份认证 服务给对应委托中加上对应权限。 图1 权限管理 图2 查看权限详情和去 IAM 修改委托权限 图3 给委托添加授权 将镜像设置成私有镜像 登录 容器镜像服务 (SWR),左侧导航栏选择“我的镜像”,查看镜像详情,单击右上角“编辑”按钮,把镜像类型修改为“私有”。 图4 修改镜像类型为私有
  • 问题现象 用户创建模型时,构建镜像失败,失败日志中提示下载obs文件失败(Get object size from OBS failed!)。 图1 下载obs文件失败 用户创建模型时,事件提示:复制模型文件失败,请检查OBS权限是否正常(Failed to copy model file due to obs exception. Please Check your obs access right.)或用户%s没有OBS的obs:object:PutObjectAcl权限(User %s does not have obs:object:PutObjectAcl permission.)。 图2 复制模型文件失败
  • 问题定位和处理 创建模型失败有两种场景:创建模型时直接报错或者是调用API报错和创建模型任务下发成功,但最终模型创建失败。 创建模型时直接报错或者是调用API报错。一般都是输入参数不合法导致的。您可以根据提示信息进行排查修改即可。 创建模型任务下发成功,但最终模型创建失败。需要从以下几个方面进行排查: 在模型详情页面,查看“事件”页签中的事件信息。根据事件信息分析模型失败原因,进行处理。 如果模型状态为“构建失败”,可以在模型详情页面,查看“事件”页签中的“查看构建日志”。构建日志中有对应的构建镜像失败的详细原因,根据构建失败的原因进行排查处理。 图1 查看构建日志
  • 常见问题 模型文件目录下不能出现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的系统架构。 可以通过查看模型详情看到配置的系统运行架构。基础镜像的系统架构详情可以参考推理基础镜像列表。
  • 问题现象 ModelArts SDK在OBS下载文件时,目标路径设置为文件名,在本地IDE运行不报错,部署为在线服务时报错。 代码如下: session.obs.download_file(obs_path, local_path) 报错信息如下: 2022-07-06 16:22:36 CS T [ThreadPoolEx] - /home/work/predict/model/customize_service.py[line:184] - WARNING: 4 try: IsADirectoryError(21, 'Is a directory'). update products failed!
  • 镜像中配置的端口错误 模型可以正常启动,但是因为镜像中启用的端口非8080,或者镜像启用的端口与创建模型时配置的端口不一致,导致部署服务时register-agent无法与模型通信,超过一定时间后(最长20分钟)认为模型启动失败。 需要检查两个地方:自定义镜像中的代码开放的端口和创建模型界面上配置的端口。确认两处端口保持一致。模型创建界面如果不填端口信息,则ModelArts会默认监听8080端口,即镜像代码中启用的端口必须是8080。 图2 自定义镜像中的代码开放的端口 图3 创建模型界面上配置的端口
  • 健康检查配置有问题 镜像如果配置了健康检查,服务启动失败,从以下两个方面进行排查: 健康检查端口是否可以正常工作 自定义镜像中配置了健康检查,需要在测试镜像时,同步测试健康检查接口是否可以正常工作,具体参考从0-1制作自定义镜像并创建AI应用中的本地验证镜像方法。 创建模型界面上配置的健康检查地址与实际配置的是否一致 如果使用的是ModelArts提供的基础镜像创建模型,健康检查URL默认必须为/health。 图4 设置健康检查URL
  • 处理方法 需要排查执行命令的启动文件目录是否正确,具体操作如下: 在ModelArts管理控制台,使用训练的自定义镜像创建训练作业时,“创建方式”选择“自定义算法”,“启动方式”选择“自定义”。 例如,当训练代码启动脚本在OBS路径为“obs://bucket-name/app/code/train.py”,创建作业时配置代码目录为“/bucket-name/app/code/”。则代码目录配置完成后,执行如下命令,那么“run_train.sh”将选中的“code”文件夹下载到训练容器的“/home/ma-user/modelarts/user-job-dir”目录中。 bash /home/ma-user/modelarts/user-job-dir/run_train.sh #训练自定义镜像-预置命令场景 运行命令就可以设置为: bash /home/ma-user/modelarts/user-job-dir/run_train.sh python /home/ma-user/modelarts/user-job-dir/code/train.py {python_file_parameter} #训练自定义镜像-预置命令场景
  • 处理方法1 在ModelArts管理控制台,选择“权限管理”。 在用户名对应的“授权内容”列,单击“查看权限”,确认用户的委托权限是否已包含Tenant Administrator。 图1 查看委托权限详情 是,重新“启动”边缘服务,若还是“异常”则联系技术支持处理。 否,执行下一步,给用户添加委托权限。 添加委托权限。 如果是IAM子账号,没有修改委托权限,请联系管理员添加Tenant Administrator委托权限。 登录统一身份认证服务IAM管理控制台。 单击导航栏的“委托”,进入委托页面。 搜索ModelArts使用的委托,例如“modelarts_agency”,单击委托名称进入“基本信息”页面。 单击“授权”,添加Tenant Administrator权限,按操作指引完成授权。 授权完成后,重新“启动”边缘服务,观察状态是否正常。
  • 排查办法 根据错误信息判断,报错原因来源于用户代码。 您可以通过以下两种方式排查: 线上环境调试代码(仅适用于非分布式代码) 在开发环境(notebook)申请相同规格的开发环境实例。 在notebook调试用户代码,并找出问题的代码段。 通过关键代码段 + 退出码尝试去搜索引擎寻找解决办法。, 通过训练日志排查问题 通过日志判断出问题的代码范围。 修改代码,在问题代码段添加打印,输出更详细的日志信息。 再次运行作业,判断出问题的代码段。
  • 排查办法 根据错误信息判断,报错原因来源于用户代码。 您可以通过以下两种方式排查: 线上环境调试代码(仅适用于非分布式代码) 在开发环境(notebook)申请相同规格的开发环境实例。 在notebook调试用户代码,并找出问题的代码段。 通过关键代码段 + 退出码尝试去搜索引擎寻找解决办法。, 通过训练日志排查问题 通过日志判断出问题的代码范围。 修改代码,在问题代码段添加打印,输出更详细的日志信息。 再次运行作业,判断出问题的代码段。
  • 原因分析 日志显示训练进程的退出码为137。训练进程表示用户的代码启动后的进程,所以这里的退出码是用户的训练作业代码返回的。常见的错误码还包括247、139等。 退出码137或者247 可能是内存溢出造成的。请减少数据量、减少batch_size,优化代码,合理聚合、复制数据。 请注意,数据文件大小不等于内存占用大小,需仔细评估内存使用情况。 退出码139 请排查安装包的版本,可能存在包冲突的问题。
  • 解决方法 使用状态为告警的服务进行预测,可能存在预测失败的风险,请从以下4个角度进行排查,并重新部署。 后台预测请求过多。 如果您使用API接口进行预测,请检查是否预测请求过多。大量的预测请求会导致部署的在线服务进入告警状态。 业务内存不正常。 请检查推理代码是否存在内存溢出或者内存泄漏的问题。 模型运行异常。 请检查您的模型是否能正常运行。例如模型依赖的资源是否故障,需要排查推理日志。 实例pod数量异常 。 如果您曾经找过运维人员删除过异常的实例pod,事件中可能会出现告警“服务异常,不正常的实例数为XXX”。在出现这种告警后,服务会自动拉起新的正常实例,从而恢复到正常运行状态。请您耐心等待。
  • 模型发布失败 模型发布任务提交失败和模型发布失败问题,一般是因为后台服务故障导致的,建议稍等片刻,然后重新创建训练作业。如果重试超过3次仍无法解决,请获取如下信息,并联系华为云技术支持协助解决故障。 获取模型ID。 进入“模型管理”页面,在模型管理页面找到自动学习任务中自动创建的模型,自动学习产生的模型都是以“exeML-”开头的。单击模型名称进入模型详情页面,在“基本信息”区域,获取“ID”的值。 图1 获取模型ID 获取模型事件信息。 进入模型详情页面后,单击“事件”页签,将事件信息表截图后反馈给技术支持人员。 图2 获取事件信息 父主题: 模型发布
  • 预测分析作业失败的排查思路 检查用于预测分析的数据是否满足要求。 由于预测分析任务未使用数据管理的功能发布数据集,因此当数据不满足训练作业要求时,会出现训练作业运行失败的错误。 建议检查用于训练的数据,是否满足预测分析作业的要求。要求如下所示,如果数据满足要求,执行下一步检查。如果不满足要求,请根据要求仅需数据调整后再重新训练。 文件规范:名称由以字母数字及中划线下划线组成,以'.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。 如果上述排查操作仍无法解决,请联系华为云技术支持。
  • 标注信息不满足训练要求 针对不同类型的自动学习项目,训练作业对数据集的要求如下。 图像分类:用于训练的图片,至少有2种以上的分类(即2种以上的标签),每种分类的图片数不少于5张。 物体检测:用于训练的图片,至少有1种以上的分类(即1种以上的标签),每种分类的图片数不少于5张。 预测分析:由于预测分析任务的数据集不在数据管理中进行统一管理,即使数据不满足要求,不在此环节出现故障信息。 声音分类:用于训练的音频,至少有2种以上的分类(即2种以上的标签),每种分类的音频数不少于5个。 文本分类:用于训练的文本,至少有2种以上的分类(即2种以上的标签),每种分类的文本数不少于20个。
  • ModelArts.4342 标注信息不满足切分条件 出现此故障时,建议根据如下建议,修改标注数据后重试。 多标签的样本(即一张图片包含多个标签),至少需要有2张。如果启动训练时,设置了数据集切分功能,如果多标签的数据少于2张,会导致数据集切分失败。建议检查您的标注信息,保证标注多标签的图片,超过2张。 数据集切分后,训练集和验证集包含的标签类别不一样。出现这种情况的原因:多标签场景下时,做随机数据切分后,包含某一类标签的样本均被划分到训练集,导致验证集无该标签样本。由于这种情况出现的概率比较小,可尝试重新发布版本来解决。
  • 处理方法 编译环境的cuda版本与训练环境不一致,训练作业运行就会报错。例如:使用cuda版本为10的开发环境tf-1.13中编译生成的so包,在cuda版本为9.0训练环境中tf-1.12训练会报该错。 编译环境和训练环境的cuda版本不一致时,可参考如下处理方法: 在业务执行前加如下命令,检查是否能找到so文件。如果已经找到so文件,执行2;如果没有找到,执行3。 import os; os.system(find /usr -name *libcudart.so*); 设置环境变量LD_LIBRARY_PATH,设置完成后,重新下发作业即可。 例如so文件的存放路径为:/use/local/cuda/lib64,LD_LIBRARY_PATH设置如下: export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/cuda/lib64 执行如下命令,查看训练环境的cuda版本,确认当前cuda版本是否支持so文件。 os.system("cat /usr/local/cuda/version.txt") 支持。当前cuda版本无so文件,需外部导入so文件(自行在浏览器下载),再设置LD_LIBRARY_PATH,具体见2。 不支持。尝试更换引擎,重新下发作业。或者使用自定义镜像创建作业,可参考使用自定义镜像创建作业。
  • 处理方法 请排查是否将数据下载至“/cache”目录下,GPU规格资源的每个节点会有一个“/cache”目录,空间大小为4TB。并确认该目录下并发创建的文件数量是否过大,占用过多存储空间会出现inode耗尽的情况,导致空间不足。 请排查是否使用的是GPU资源。如果使用的是CPU规格的资源,“/cache”与代码目录共用10G,会造成内存不足,请更改为使用GPU资源。 请在代码中添加环境变量来解决。 import os os.system('export TMPDIR=/cache')
  • 处理方法 当出现此错误时,Notebook会自动恢复,您可以刷新页面,等待几分钟。 由于出现此错误,常见原因是内存占用满导致的,您可以尝试使用如下方法,从根本上解决错误。 方法1:将Notebook更换为更高规格的资源。 方法2:可以参考如下方法调整代码中的参数,减少内存占用。如果代码调整后仍然出现内存不足的情况,请使用方法1。 调用sklearn方法silhouette_score(addr_1,siteskmeans.labels),可以指定参数sample_size来减少内存占用。 调用train方法的时候可以尝试减少batch_size等参数。
  • 处理方法 获取一个OBS文件夹的大小: import moxing as mox mox.file.get_size('obs://bucket_name/sub_dir_0/sub_dir_1', recursive=True) 获取一个OBS文件的大小: import moxing as mox mox.file.get_size('obs://bucket_name/obs_file.txt')
  • 处理方法 按照报错提示,需要排查以下几个问题: 检查moxing.file.copy_parallel()的第一个参数中是否有文件,否则会出现报错:No files to copy 文件存在,请执行2。 文件不存在,请忽略该报错继续执行后续操作。 检查复制的OBS的路径是否与开发环境或训练作业在同一个区域。 进入ModelArts管理控制台,查看其所在区域。然后再进入OBS管理控制台,查看您使用的OBS桶所在的区域。查看是否在同一区域。 是,请执行3。 否,请在ModelArts同一区域的OBS中新建桶和文件夹,并将所需的数据上传至此OBS桶中。 检查OBS的路径是否正确,是否写为了“obs://xxx”。可使用如下方式判断OBS路径是否存在。 mox.file.exists('obs://bucket_name/sub_dir_0/sub_dir_1') 路径存在,请执行4。 路径不存在,请在更换为一个可用的OBS路径。 检查使用的资源是否为CPU,CPU的“/cache”与代码目录共用10G,可能是空间不足导致,可在代码中使用如下命令查看磁盘大小。 os.system('df -hT') 磁盘空间满足,请执行5。 磁盘空间不足,请您使用GPU资源。 如果是在Notebook使用MoXing复制数据不成功,可以在Terminal界面中使用df -hT命令查看空间大小,排查是否因空间不足导致,可在创建Notebook时使用EVS挂载。
  • 处理方法 Fine Tune就是用别人训练好的模型,加上自己的数据,来训练新的模型。相当于使用别人的模型的前几层,来提取浅层特征,然后在最后再落入自己的分类中。 由于一般新训练模型准确率都会从很低的值开始慢慢上升,但是Fine Tune能够在比较少的迭代次数之后得到一个比较好的效果。Fine Tune的好处在于不用完全重新训练模型,从而提高效率,在数据量不是很大的情况下,Fine Tune会是一个比较好的选择。 moxing.tensorflow包含所有的接口,对TensorFlow做了优化,里面的实际接口还是TensorFlow的原生接口。 当非MoXing代码中没有Adam名称范围时,需要修改非MoXing代码,在其中增加如下内容: with tf.variable_scope("Adam"): 在增加代码时不建议使用自定义“global_step”,推荐使用tf.train.get_or_create_global_step()。
  • 处理方法 将如下代码放在“启动文件”里“import mxnet”之前可以看到节点间相互通信状态,同时ps能够重新发送。 import os os.environ['PS_VERBOSE'] = '2' os.environ['PS_RESEND'] = '1' 其中,“os.environ['PS_VERBOSE'] = '2'”为打印所有的通信信息。“os.environ['PS_RESEND'] = '1'”为在“PS_RESEND_TIMEOUT”毫秒后没有收到ACK消息,Van实例会重发消息。
  • 处理方法 在使用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..............................
  • 处理方法 请您根据报错原因排查创建训练作业时指定的代码目录,即OBS桶的路径是否正确。有两种方法判断是否存在。 使用当前账户登录OBS管理控制台,去查找对应的OBS桶、文件夹、文件是否存在。 通过接口判断路径是否存在。在代码中执行如下命令,检查路径是否存在。 import moxing as mox mox.file.exists('obs://obs-test/ModelArts/examples/')
  • 问题现象 ModelArts训练作业出现如下报错: Encountered Unknown Error EntityTooLarge Your proposed upload exceeds the maximum allowed object size.: If the signature check failed. This could be because of a time skew. Attempting to adjust the signer
共100000条