华为云用户手册

  • 原因分析 训练作业导入模块时日志出现前两条报错信息,可能原因如下: 代码如果在本地运行,需要将“project_dir”加入到PYTHONPATH或者将整个“project_dir”安装到“site-package”中才能运行。但是在ModelArts可以将“project_dir”加入到“sys.path”中解决该问题。 使用from module_dir import module_file来导包,代码结构如下: project_dir|- main.py|- module_dir| |- __init__.py| |- module_file.py 训练作业导入模块时日志出现“ImportError: No module named xxx”的报错,可以判断是环境中没有包含用户依赖的python包。
  • 处理方法 训练作业导入模块时日志出现前两条报错信息,处理方法如下: 首先保证被导入的module中有“__init__.py”存在,创建“module_dir”的“__init__.py”,如原因分析中的结构所示。 由于无法知晓“project_dir”在容器中的位置,所以利用绝对路径,在“main.py”中将“project_dir”添加到“sys.path”中,再导入: import osimport sys# __file__为获取当前执行脚本main.py的绝对路径# os.path.dirname(__file__)获取main.py的父目录,即project_dir的绝对路径current_path = os.path.dirname(__file__)sys.path.append(current_path)# 在sys.path.append执行完毕之后再导入其他模块from module_dir import module_file 训练作业导入模块时日志出现“ImportError: No module named xxx”的报错,请添加如下代码安装依赖包: import osos.system('pip install xxx')
  • 处理方法 1. 参数定义中增加该参数的定义,代码示例如下: parser.add_argument('--init_method', default='tcp://xxx',help="init-method") 2. 您需要通过使用解析方式args, unparsed = parser.parse_known_args()代替args = parser.parse_args()解决该问题。代码示例如下: import argparseparser = argparse.ArgumentParser()parser.add_argument('--data_url', type=str, default=None, help='obs path of dataset')args, unparsed = parser.parse_known_args()
  • 问题现象 ModelArts训练作业无法解析参数,遇到如下报错,导致无法正常运行: error: unrecognized arguments: --data_url=xxx://xxx/xxxerror: unrecognized arguments: --init_method=tcp://job absl.flags._exceptions.UnrecognizedFlagError:Unknown command line flag 'task_index'
  • 处理方法 需要排查执行命令的启动文件目录是否正确,具体操作如下: 在ModelArts管理控制台,使用训练的 自定义镜像 创建训练作业时,“算法来源”选择“自定义”页签。 若训练代码启动脚本在OBS路径为“obs://bucket-name/app/code/train.py”,创建作业时配置代码目录为“/bucket-name/app/code/”。 代码目录配置完成后,执行如下命令,那么“run_train.sh”将选中的“code”文件夹下载到旧版训练容器的“/home/work/user-job-dir”目录中。 bash /home/work/run_train.sh #旧版训练命令,run_train.sh训练启动引导脚本,打包在ModelArts提供的基础镜像中。 运行命令就可以设置为: bash /home/work/run_train.sh python /home/work/user-job-dir/code/train.py {python_file_parameter} #旧版训练
  • 问题现象 ModelArts训练作业出现如下报错: Encountered Unknown Error EntityTooLargeYour 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
  • 问题现象 ModelArts训练作业算法来源选用常用框架的Pytorch引擎,在训练作业运行时Pytorch Mox日志会每个epoch都打印Mox版本,具体日志如下: INFO:root:Using MoXing-v1.13.0-de803ac9INFO:root:Using OBS-Python-SDK-3.1.2INFO:root:Using MoXing-v1.13.0-de803ac9INFO:root:Using OBS-Python-SDK-3.1.2
  • 处理方法 安装第三方包 pip中存在的包,使用如下代码: import osos.system('pip install xxx') pip源中不存在的包,此处以“apex”为例,请您用如下方式将安装包上传到OBS桶中。 该样例已将安装包上传至“obs://cnnorth4-test/codes/mox_benchmarks/apex-master/”中,将在启动文件中添加以下代码进行安装。 try: import apexexcept Exception: import os import moxing as mox mox.file.copy_parallel('obs://cnnorth4-test/codes/mox_benchmarks/apex-master/', '/cache/apex-master') os.system('pip --default-timeout=100 install -v --no-cache-dir --global-option="--cpp_ext" --global-option="--cuda_ext" /cache/apex-master') 安装报错 “xxx.whl”文件无法安装,需要您按照如下步骤排查: 当出现“xxx.whl”文件无法安装,在启动文件中添加如下代码,查看当前pip命令支持的文件名和版本。 import pipprint(pip.pep425tags.get_supported()) 获取到支持的文件名和版本如下: [('cp36', 'cp36m', 'manylinux1_x86_64'), ('cp36', 'cp36m', 'linux_x86_64'), ('cp36', 'abi3', 'manylinux1_x86_64'), ('cp36', 'abi3', 'linux_x86_64'), ('cp36', 'none', 'manylinux1_x86_64'), ('cp36', 'none', 'linux_x86_64'), ('cp35', 'abi3', 'manylinux1_x86_64'), ('cp35', 'abi3', 'linux_x86_64'), ('cp34', 'abi3', 'manylinux1_x86_64'), ('cp34', 'abi3', 'linux_x86_64'), ('cp33', 'abi3', 'manylinux1_x86_64'), ('cp33', 'abi3', 'linux_x86_64'), ('cp32', 'abi3', 'manylinux1_x86_64'), ('cp32', 'abi3', 'linux_x86_64'), ('py3', 'none', 'manylinux1_x86_64'), ('py3', 'none', 'linux_x86_64'), ('cp36', 'none', 'any'), ('cp3', 'none', 'any'), ('py36', 'none', 'any'), ('py3', 'none', 'any'), ('py35', 'none', 'any'), ('py34', 'none', 'any'), ('py33', 'none', 'any'), ('py32', 'none', 'any'), ('py31', 'none', 'any'), ('py30', 'none', 'any')] 将“faiss_gpu-1.5.3-cp36-cp36m-manylinux2010_x86_64.whl”更改为“faiss_gpu-1.5.3-cp36-cp36m-manylinux1_x86_64.whl”,并安装,执行命令如下: import moxing as moximport osmox.file.copy('obs://wolfros-net/zp/AI/code/faiss_gpu-1.5.3-cp36-cp36m-manylinux2010_x86_64.whl','/cache/faiss_gpu-1.5.3-cp36-cp36m-manylinux1_x86_64.whl')os.system('pip install /cache/faiss_gpu-1.5.3-cp36-cp36m-manylinux1_x86_64.whl')
  • 问题现象 预测流量不大但频繁出现以下报错 Backend service internal error. Backend service read timed out Send the request from gateway to the service failed due to connection refused, please confirm your service is connectable Send the request from gateway to the service failed due to connection timeout, please confirm your service is able to process the new request
  • 解决方法 根据容器日志进行排查,查看健康检查接口失败的具体原因。 镜像健康检查配置问题,需修复代码后重新制作镜像创建AI应用后部署服务。了解镜像健康接口配置请参考模型配置文件编写说明中health参数说明。 AI应用健康检查配置问题,需重新创建AI应用或者创建AI应用新版本,配置正确的健康检查,使用新的AI应用或版本重新部署服务。了解AI应用健康检查请参考制作模型镜像并导入中的“健康检查”参数说明。
  • Notebook中无法打开“checkpoints”文件夹 checkpoints是Notebook的关键字,若用户创建文件夹命名为checkpoints,则在JupyterLab上无法打开、重命名和删除。 操作步骤: 打开terminal,用命令行进行操作。 执行mkdir xxx命令,新建一个文件夹,例如“xxx”(不要用checkpoints关键字命名) 然后移动checkpoints文件夹的数据到新建的文件夹下,然后用删除根目录下checkpoints文件夹即可。 mv checkpoints/* xxxrm -r checkpoints 父主题: 其他故障
  • 处理方法 重新构建镜像。 在构建镜像的dockerfile文件中安装pip依赖包,例如安装Flask依赖包。 # 配置华为云的源,安装 python、python3-pip 和 Flask RUN cp -a /etc/apt/sources.list /etc/apt/sources.list.bak && \ sed -i "s@http://.*security.ubuntu.com@http://repo.huaweicloud.comxxx@g" /etc/apt/sources.list && \ sed -i "s@http://.*archive.ubuntu.com@http://repo.huaweicloud.comxxx@g" /etc/apt/sources.list && \ apt-get update && \ apt-get install -y python3 python3-pip && \ pip3 install --trusted-host https://repo.huaweicloud.comxxx -i https://repo.huaweicloud.comxxx/repository/pypi/simple Flask
  • 原因分析及处理方法 服务预测报错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 disconncted, please wait moment." 出现该错误,是因为模型报错太多。当模型报错太多时,会触发dispatcher的熔断机制,导致预测失败。建议您检查模型返回结果,处理模型报错问题,可尝试通过调整请求参数、降低请求流量等方式,提高模型调用的成功率。
  • 问题现象 使用AI市场物体检测YOLOv3_Darknet53算法进行训练,将数据集切分后进行部署在线服务报错,日志如下:TypeError: Cannot interpret feed_dict key as Tensor: The name 'images:0' refers to a Tensor which does not exist. The operation, 'images', does not exist in the graph。
  • 处理方法 如果切分了数据集,需要删除推理代码中“Yolov3Service”类中的如下代码: self.model_inputs = {'images': 'images:0'}self.model_outputs = {'feat_1': 'feat_1:0', 'feat_2': 'feat_2:0', 'feat_3': 'feat_3:0'} 不做数据集切分操作。如果选择未切分的数据集,算法将做纯训练场景;
  • 问题现象 订阅的AI应用一直处于等待同步状态,可能原因如下: 我的订阅列表上方提示“由于ModelArts的数据存储、模型导入以及部署上线等功能依赖OBS、SWR等服务,需获取依赖服务的授权后,才能正常使用ModelArts的相关功能。” 图1 AI应用等待同步 单击资产名称左侧小三角或者单击“同步”,报错:ModelArts.0108: 您未被授权执行该操作。 单击资产名称左侧小三角或者单击“同步”,报错:ModelArts.5055: 订阅已过期。
  • 处理方法 在适配OBS路径后,读取文件模式从‘r’改成‘rb’,然后将mox.file.File的'_write_check_passed'属性值改为‘True’,参考如下代码。 import pandas as pdimport moxing as moxmox.file.shift('os', 'mox') # 将os的open操作替换未mox.file.File适配OBS路径的操作param = {'encoding': 'utf-8'}path = 'xxx.csv'with open(path, 'rb') as f: f._wirte_check_passed = True df = pd.read_csv(ff, **param) 必现的问题,使用本地Pycharm远程连接Notebook调试。
  • 检查依赖包路径是否能被识别 代码如果在本地运行,需要将“project_dir”加入到PYTHONPATH或者将整个“project_dir”安装到“site-package”中才能运行。但是在ModelArts可以将“project_dir”加入到“sys.path”中解决该问题。 使用from module_dir import module_file来导包,代码结构如下: project_dir|- main.py|- module_dir| |- __init__.py| |- module_file.py
  • 检查依赖包是否存在 如果依赖包不存在,您可以使用以下两种方式完成依赖包的安装。 方式一(推荐使用):在创建我的算法时,需要在“代码目录”下放置相应的文件或安装包。 请根据依赖包的类型,在代码目录下放置对应文件: 依赖包为开源安装包时 在“代码目录”中创建一个命名为“pip-requirements.txt”的文件,并且在文件中写明依赖包的包名及其版本号,格式为“包名==版本号”。 例如,“代码目录”对应的OBS路径下,包含模型文件,同时还存在“pip-requirements.txt”文件。“代码目录”的结构如下所示: |---模型启动文件所在OBS文件夹 |---model.py #模型启动文件。 |---pip-requirements.txt #定义的配置文件,用于指定依赖包的包名及版本号。 “pip-requirements.txt”文件内容如下所示: alembic==0.8.6bleach==1.4.3click==6.6 依赖包为whl包时 如果训练后台不支持下载开源安装包或者使用用户编译的whl包时,由于系统无法自动下载并安装,因此需要在“代码目录”放置此whl包,同时创建一个命名为“pip-requirements.txt”的文件,并且在文件中指定此whl包的包名。依赖包必须为“.whl”格式的文件。 例如,“代码目录”对应的OBS路径下,包含模型文件、whl包,同时还存在“pip-requirements.txt”文件。“代码目录”的结构如下所示: |---模型启动文件所在OBS文件夹 |---model.py #模型启动文件。 |---XXX.whl #依赖包。依赖多个时,此处放置多个。 |---pip-requirements.txt #定义的配置文件,用于指定依赖包的包名。 “pip-requirements.txt”文件内容如下所示: numpy-1.15.4-cp36-cp36m-manylinux1_x86_64.whltensorflow-1.8.0-cp36-cp36m-manylinux1_x86_64.whl 方式二:可以在启动文件添加如下代码安装依赖包: import osos.system('pip install xxx') 方式一在训练作业启动前即可完成相关依赖包的下载与安装,而方式二是运行启动文件过程中进行依赖包的下载与安装。
  • 处理方法 按照issues中的说明,应该是环境中的库冲突了,因此在启动脚本最开始之前,添加如下代码。 import osos.system("rm /home/work/anaconda3/lib/libmkldnn.so")os.system("rm /home/work/anaconda3/lib/libmkldnn.so.0") 必现的问题,使用本地Pycharm远程连接Notebook调试。
  • 问题现象 在现有镜像基础上,重新装了引擎版本,或者编译了新的CUDA包,出现如下错误: 1.“RuntimeError: cuda runtime error (11) : invalid argument at /pytorch/aten/src/THC/THCCachingHostAllocator.cpp:278 2.“libcudart.so.9.0 cannot open shared object file no such file or directory”3.“Make sure the device specification refers to a valid device, The requested device appeares to be a GPU,but CUDA is not enabled”
  • 处理方法 参考如下代码,三步走。 先卸载numpy中可以卸载的组件。 删除你环境中site-packages路径下的numpy文件夹。 重新进行安装需要的版本。 import osos.system("pip uninstall -y numpy")os.system('rm -rf /home/work/anaconda/lib/python3.6/site-packages/numpy/')os.system("pip install numpy==1.15.4")
  • 解决方案 拷贝文件和文件夹均可采用: import moxing as moxmox.file.set_auth(is_secure=False) 拷贝单个大文件5G以上时可采用: from moxing.framework.file import file_io 查看当前moxing调用的接口版本:file_io._LARGE_FILE_METHOD,如果输出值为1则为V1版本,如果输出值为2,则为V2版本。 V1版本修改:file_io._NUMBER_OF_PRO CES SES=1 V2版本修改:可以 file_io._LARGE_FILE_METHOD = 1,将模式设置成V1然后用V1的方式修改规避,也可以直接file_io._LARGE_FILE_TASK_NUM=1。 拷贝文件夹时可采用: mox.file.copy_parallel(threads=0,is_processing=False)
  • 处理方法 第二次增量训练设置的epochs数值需要大于第一次常规训练设置的epochs数值。 举例:对一个已经完成的训练作业(假设训练了50个epochs),想要训练更多的epochs(追加30个epochs),假设上一个训练作业的输出目录为“obs://my_bucket/train_url”,则设置参数“checkpoint_url=obs://my_bucket/train_url/last.pt”,并设置参数epochs=80(如果第二次设置参数epochs=30则增量训练只会训练29个epochs)。
  • 问题现象 训练启动的日志出现如下相关错误: time="2023-05-27T07:07:08Z" level=error msg="detect failed, error: dsmi-checker detect failed, error: fork/exec /home/ma-user/modelarts/bin/detect/ascend_check: no such file or directory" file="ascend_check.go:56" Command=bootstrap/run Component=ma-training-toolkit Platform=ModelArts-Servicetime="2023-05-27T07:07:13Z" level=error msg="[detect] ascend-check error, exiting..." file="run_train.go:94" Command=bootstrap/run Component=ma-training-toolkit Platform=ModelArts-Service
  • 解决方案 专属资源池的Ascend驱动版本需与训练基础镜像中的Cann软件版本版本匹配。 ModelArts上支持的Ascend驱动版本可以在ModelArts专属资源池(NEW)的详情页面查看到。ModelArts上支持的Cann软件版本可以在训练基础镜像详情页面查看,具体请参见训练基础镜像详情(Ascend-Powered-Engine)。 Ascend驱动版本与Cann软件版本的兼容关系如下表所示: 表1 Ascend驱动版本与Cann软件版本的兼容关系 Ascend驱动版本 支持Cann软件版本 基础镜像 c81-22.0.0.3 5.1.0 mindspore_1.7.0-cann_5.1.0-py_3.7-euler_2.8.3-aarch64 tensorflow_1.15.0-cann_5.1.0-py_3.7-euler_2.8.3-aarch64 pytorch_1.8.1-cann_5.1.0-py_3.7-euler_2.8.3-aarch64
  • 处理方法 在代码中打印出numpy的版本,查看是否为1.18.5版本,若非该版本号则在代码开始处执行: import osos.system('pip install numpy==1.18.5') 如果依旧有报错情况,将以上代码修改为: import osos.system('pip install numpy==1.18.5')os.system('pip install keras==2.6.0')os.system('pip install tensorflow==2.6.0')
  • 问题现象 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!
  • 检查报错的路径是否存在 由于用户本地开发的代码需要上传至ModelArts后台,训练代码中涉及到依赖文件的路径时,用户设置有误的场景较多。 推荐通用的解决方案:使用os接口得到依赖文件的绝对路径,避免报错。 示例: |---project_root #代码根目录 |---BootfileDirectory #启动文件所在的目录 |---bootfile.py #启动文件 |---otherfileDirectory #其他依赖文件所在的目录 |---otherfile.py #其他依赖文件 在启动文件中,建议用户参考以下方式获取依赖文件所在路径,即示例中的otherfile_path。 import oscurrent_path = os.path.dirname(os.path.realpath(__file__)) # BootfileDirectory, 启动文件所在的目录project_root = os.path.dirname(current_path) # 工程的根目录,对应ModelArts训练控制台上设置的代码目录otherfile_path = os.path.join(project_root, "otherfileDirectory", "otherfile.py")
  • 解决方法 根据容器日志进行排查,查看健康检查接口失败的具体原因。 镜像健康检查配置问题,需修复代码后重新制作镜像创建AI应用后部署服务。了解镜像健康接口配置请参考模型配置文件编写说明中health参数说明。 AI应用健康检查配置问题,需重新创建AI应用或者创建AI应用新版本,配置正确的健康检查,使用新的AI应用或版本重新部署服务。了解AI应用健康检查请参考制作模型镜像并导入中的“健康检查”参数说明。
共100000条