华为云用户手册

  • 问题现象 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
  • 处理方法 您需要通过在代码中设置环境变量“TF_CPP_MIN_ LOG _LEVEL”来屏蔽INFO级别的日志信息。具体操作如下: import os os.environ['TF_CPP_MIN_LOG_LEVEL'] = '2' import tensorflow as tf import moxing.tensorflow as mox “TF_CPP_MIN_LOG_LEVEL”与日志等级对应关系为: import os os.environ["TF_CPP_MIN_LOG_LEVEL"]='1' # 默认的显示等级,显示所有信息 os.environ["TF_CPP_MIN_LOG_LEVEL"]='2' # 只显示warning和Error os.environ["TF_CPP_MIN_LOG_LEVEL"]='3' # 只显示Error
  • 处理方法 读取文件报错,您可以使用Moxing将数据复制至容器中,再直接访问容器中的数据。请参见步骤1。 您也可以根据不同的文件类型,进行读取。请参见读取“json”文件、读取“npy”文件、使用cv2库读取文件和在MXNet环境下使用torch包。 读取文件报错,您可以使用Moxing将数据复制至容器中,再直接访问容器中的数据。具体方式如下: import moxing as mox mox.file.make_dirs('/cache/data_url') mox.file.copy_parallel('obs://bucket-name/data_url', '/cache/data_url') 读取“json”文件,请您在代码中尝试如下方法: json.loads(mox.file.read(json_path, binary=True)) 使用“numpy.load”读取“npy”文件,请您在代码中尝试如下方法: 使用MoXing API读取OBS中的文件 np.load(mox.file.read(_SAMPLE_PATHS['rgb'], binary=True)) 使用MoXing的file模块对OBS文件进行读写 with mox.file.File(_SAMPLE_PATHS['rgb'], 'rb') as f: np.load(f) 使用cv2库读取文件,请您尝试如下方法: cv2.imdecode(np.fromstring(mox.file.read(img_path), np.uint8), 1) 在MXNet环境下使用torch包,请您尝试如下方法先进行导包: import os os.sysytem('pip install torch') import torch
  • 问题现象 创建训练作业如何读取“json”和“npy”文件。 训练作业如何使用cv2库读取文件。 如何在MXNet环境下使用torch包。 训练作业读取文件,出现如下报错: NotFoundError (see above for traceback): Unsucessful TensorSliceReader constructor: Failed to find any matching files for xxx://xxx
  • 处理方法 安装第三方包 pip中存在的包,使用如下代码: import os os.system('pip install xxx') pip源中不存在的包,此处以“apex”为例,请您用如下方式将安装包上传到OBS桶中。 该样例已将安装包上传至“obs://cnnorth4-test/codes/mox_benchmarks/apex-master/”中,将在启动文件中添加以下代码进行安装。 try: import apex except 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 pip print(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 mox import os mox.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')
  • 原因分析 训练作业导入模块时日志出现前两条报错信息,可能原因如下: 代码如果在本地运行,需要将“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 os import 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 os os.system('pip install xxx')
  • 处理方法 参数定义中增加该参数的定义,代码示例如下: parser.add_argument('--init_method', default='tcp://xxx',help="init-method") 通过使用解析方式args, unparsed = parser.parse_known_args()代替args = parser.parse_args()解决该问题。代码示例如下: import argparse parser = 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/xxx error: unrecognized arguments: --init_method=tcp://job absl.flags._exceptions.UnrecognizedFlagError:Unknown command line flag 'task_index'
  • 处理方法 可以参照日志提示"write line error"文档进行修复。 如果是分布式作业有的节点有错误,有的节点正常,建议提工单请求隔离有问题的节点。 如果是触发了欧拉操作系统的限制,有如下建议措施。 分目录处理,减少单个目录文件量。 减慢创建文件的速度。 关闭ext4文件系统的dir_index属性,具体可参考:https://access.redhat.com/solutions/29894,(可能会影响文件检索性能)。
  • 原因分析 出现该问题的可能原因如下。 磁盘空间不足。 分布式作业时,有些节点的docker base size配置未生效,容器内“/”根目录空间未达到50GB,只有默认的10GB,导致作业训练失败。 实际存储空间足够,却依旧报错“No Space left on device”。 同一目录下创建较多文件,为了加快文件检索速度,内核会创建一个索引表,短时间内创建较多文件时,会导致索引表达到上限,进而报错。 触发条件和下面的因素有关: 文件名越长,文件数量的上限越小 blocksize越小,文件数量的上限越小。( blocksize,系统默认 4096B。总共有三种大小:1024B、2048B、4096B) 创建文件越快,越容易触发(机制大概是:有一个缓存,这块大小和上面的1和2有关,目录下文件数量比较大时会启动,使用方式是边用边释放)
  • 问题现象 ModelArts训练作业算法来源选用常用框架的Pytorch引擎,在训练作业运行时Pytorch Mox日志会每个epoch都打印Mox版本,具体日志如下: INFO:root:Using MoXing-v1.13.0-de803ac9 INFO:root:Using OBS-Python-SDK-3.1.2 INFO:root:Using MoXing-v1.13.0-de803ac9 INFO:root:Using OBS-Python-SDK-3.1.2
  • 处理方法 进入到“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/
  • 处理方法 查看虚拟机所使用的存储空间,再查看回收站文件占用内存,根据实际删除回收站里不需要的大文件。 在Notebook实例详情页,查看实例的存储容量。 执行如下命令,排查虚拟机所使用的存储空间,一般接近存储容量,请排查回收站占用内存。 cd /home/ma-user/work du -h --max-depth 0 执行如下命令,排查回收站占用内存(回收站文件默认在/home/ma-user/work/.Trash-1000/files下)。 cd /home/ma-user/work/.Trash-1000/ du -ah 根据实际删除回收站不需要的大文件。(注:请谨慎操作,文件删除后不可恢复) rm {文件路径} 如果删除的文件夹或者文件中带有空格,需要给文件夹或文件加上单引号。如图示例: 执行如下命令,再次检查虚拟机所使用的存储空间。 cd /home/ma-user/work du -h --max-depth 0 如果Notebook实例的存储配置采用的是云硬盘EVS,可在Notebook详情页申请扩容磁盘。
  • 解决方案 打开MobaXterm,单击菜单栏“Settings”,如图1 打开“Settings”所示。 图1 打开“Settings” 在打开的“MobaXterm Configuration”配置页面,选择“SSH”选项卡,勾选“SSH keepalive”,如图2 勾选“SSH keepalive”所示。 图2 勾选“SSH keepalive” 如果使用的是专业版的MobaXterm工具,请执行步骤3。 如果使用的是专业版的MobaXterm工具,请参考图3 设置“Stop server after”,此参数默认值为360s,将其设置为3600s或更大值。 图3 设置“Stop server after”
  • 解决方案 找到.ssh文件夹。一般位于“C:\Users”,例如“C:\Users\xxx”。 “C:\Users”目录下的文件名必须和Windows登录用户名完全一致。 右键单击.ssh文件夹,选择“属性”。然后单击“安全”页签。 单击“高级”,在弹出的高级安全设置界面单击“禁用继承”, 在弹出的“阻止继承”窗口单击“从此对象中删除所有继承的权限”。此时所有用户都将被删除。 添加所有者:在同一窗口中,单击“添加”,在弹出的新窗口中,单击“主体”后面的“选择主体”,弹出“选择用户,计算机,服务账户或组”窗口,单击“高级”,输入用户名, 单击“立即查找”按钮,显示用户搜索结果列表。 选择您的用户账户,然后单击“确定”(大约四个窗口)以关闭所有窗口。 图1 添加所有者 完成所有操作后,再次关闭并打开VS Code并尝试连接到远程SSH主机。备注:此时密钥需放到.ssh文件夹中。
  • APIG.0201 请求体内容过大 请求体内容过大时,APIG(API网关)会拦截请求,报错“APIG.0201”:“Request entity too large”。请减少预测请求内容后重试。 当使用API调用地址预测时,请求体的大小限制是12MB,超过12MB时,请求会被拦截。 使用ModelArts console的预测页签进行的预测,由于console的网络链路的不同,要求请求体的大小不超过8MB。 图2 请求报错APIG.0201
  • APIG.0301 鉴权失败 通过API进行服务预测,或者使用Token进行APP认证,需要获取正确的Token鉴权,当Token不合法时,APIG(API网关)拦截请求,报错“APIG.0301”:“Incorrect IAM authentication information: decrypt token fail”。请获取正确的token填入X-Auth-Token,进行预测。如何 获取Token 请参考获取IAM用户Token。
  • APIG.0101 预测地址错误 当预测的地址有问题时,APIG(API网关)将拦截请求,报错“APIG.0101”:“The API does not exist or has not been published in the environment”,请到在线服务详情界面,“调用指南”页签中获取正确的API接口地址。 如果您在配置文件url中有定义路径,需要在API调用body体中调用路径后拼接自定义路径,例如:您定义url为“/predictions/poetry”,那么在API调用时路径为“{API接口地址}/predictions/poetry”。 图1 获取API接口地址
  • 问题现象 预测流量不大但频繁出现以下报错 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
  • Notebook中无法打开“checkpoints”文件夹 checkpoints是Notebook的关键字,如果用户创建文件夹命名为checkpoints,则在JupyterLab上无法打开、重命名和删除。此时可以在Terminal里使用命令行打开checkpoints,或者新建文件夹将checkpoints里的数据移动到新的文件夹下。 图1 JupyterLab浏览器左侧导航无法打开checkpoints 操作步骤: 打开Terminal,用命令行进行操作。 方法一:执行cd checkpoints命令打开checkpoints文件夹。 方法二:新建一个文件夹,移动checkpoints文件夹的数据到新建的文件夹下。 执行mkdir xxx命令,新建一个文件夹,例如“xxx”(不要用checkpoints关键字命名) 然后移动checkpoints文件夹的数据到新建的文件夹下,删除根目录下checkpoints文件夹即可。 mv checkpoints/* xxx rm -r checkpoints 父主题: 其他故障
  • 解决方法 在遇到资源不足的情况时,ModelArts会进行三次重试,在服务重试期间,如果有资源释放出来,则服务可以正常部署成功。 如果三次重试后依然没有足够的资源,则本次服务部署失败。参考以下方式解决: 如果是在公共资源池部署服务,可等待其他用户释放资源后,再进行服务部署。 如果是在专属资源池部署服务,在满足模型需求的前提下,尝试选用更小的容器规格或自定义规格,进行服务部署; 如果当前资源池的资源确实不够,也可以考虑将资源池扩容后再进行服务部署。公共资源池扩容,请联系系统管理员。专属资源池扩容,可参考扩缩容资源池。 如果磁盘空间不够,可以尝试重试,使实例调度到其他节点。如果单实例仍磁盘空间不足,请联系系统管理员,更换合适的规格。 如果是大模型导入的模型部署服务,请确保专属资源池磁盘空间大于1T(1000GB)。
  • 解决方法 在VS Code中使用命令方式进行远程连接时,增加参数"-o StrictHostKeyChecking=no" ssh -tt -o StrictHostKeyChecking=no -i ${IdentityFile} ${User}@${HostName} -p ${Port} 参数说明: - IdentityFile:本地密钥路径 - User:用户名,例如:ma-user - HostName:IP地址 - Port:端口号 在VS Code中手工配置远程连接时,在本地的ssh config文件中增加配置参数“StrictHostKeyChecking no”和“UserKnownHostsFile=/dev/null” Host xxx HostName x.x.x.x #IP地址 Port 22522 User ma-user IdentityFile C:/Users/my.pem StrictHostKeyChecking no UserKnownHostsFile=/dev/null ForwardAgent yes 提示:增加参数后SSH登录时会忽略known_hosts文件,有安全风险。
  • 解决方法 若当前环境未安装OpenSSH,请下载并安装OpenSSH。 当通过“可选功能”未能成功安装时,请手动下载OpenSSH安装包,然后执行以下步骤: 下载zip包并解压放入“C:\Windows\System32”。 以管理员身份打开CMD,在“C:\Windows\System32\OpenSSH-xx”目录下,执行以下命令: powershell.exe -ExecutionPolicy Bypass -File install-sshd.ps1 添加环境变量:将“C:\Program Files\OpenSSH-xx”(路径中包含ssh可执行exe文件)添加到环境系统变量中。 重新打开CMD,并执行ssh,结果如下图即说明安装成功,如果还未装成功则执行5和6。 OpenSSH默认端口为22端口,开启防火墙22端口号,在CMD执行以下命令: netsh advfirewall firewall add rule name=sshd dir=in action=allow protocol=TCP localport=22 启动OpenSSH服务,在CMD执行以下命令: Start-Service sshd 若OpenSSH未安装在默认路径下,打开命令面板(Windows: Ctrl+Shift+P,macOS:Cmd+Shift+P), 搜索“Open settings”。 然后将remote.SSH.path属性添加到settings.json中,例如:"remote.SSH.path": "本地OpenSSH的安装路径"
  • 解决方法 方法一(本地):打开命令面板(Windows: Ctrl+Shift+P,macOS:Cmd+Shift+P),搜索“Kill VS Code Server on Host”,选择出问题的实例进行自动清除,然后重新进行连接。 图1 清除异常的实例 方法二(远端):在VS Code的Terminal中删除“/home/ma-user/.vscode-server/bin/”下正在使用的文件,然后重新进行连接。 ssh -tt -o StrictHostKeyChecking=no -i ${IdentityFile} ${User}@${HostName} -p ${Port} rm -rf /home/ma-user/.vscode-server/bin/ 参数说明: - IdentityFile:本地密钥路径 - User:用户名,例如:ma-user - HostName:IP地址 - Port:端口号 vscode-server相关问题也可以使用上述的解决方法。
  • 解决方法一 方法一:检查VS Code网络是否正常。在VS Code插件市场上搜索ModelArts-HuaweiCloud,若显示如下则网络异常,请切换代理或使用其他网络。 操作完成后再次执行搜索,若显示如下则网络正常,请回到ModelArts控制台界面再次单击界面上的“VS Code接入”按钮。 方法二:出现如下图报错,是由于VS Code版本过低,建议升级VS Code版本为1.57.1或者最新版。
  • 解决方法 参考如下示例进行图片显示。注意opencv加载的是BGR格式, 而matplotlib显示的是RGB格式。 Python语言: 1 2 3 4 5 6 from matplotlib import pyplot as plt import cv2 img = cv2.imread('图片路径') plt.imshow(cv2.cvtColor(img, cv2.COLOR_BGR2RGB)) plt.title('my picture') plt.show()
  • Notebook无法执行代码,如何处理? 当Notebook出现无法执行时,您可以根据如下几种情况判断并处理。 如果只是Cell的执行过程卡死或执行时间过长,如图1中的第2个和第3个Cell,导致第4个Cell无法执行,但整个Notebook页面还有反应,其他Cell也还可以单击,则直接单击下图中红色方框处的“interrupt the kernel”,停止所有Cell的执行,同时会保留当前Notebook中的所有变量空间。 图1 停止所有Cell 如果整个Notebook页面也已经无法使用,单击任何地方都无反应,则关闭Notebook页面,关闭ModelArts管理控制台页面。然后,重新打开管理控制台,打开之前无法使用的Notebook,此时的Notebook仍会保留无法使用之前的所有变量空间。 如果重新打开的Notebook仍然无法使用,则进入ModelArts管理控制台页面的Notebook列表页面,“停止”此无法使用的Notebook。待Notebook处于“停止”状态后,再单击“启动”,重新启动此Notebook,并打开Notebook。此时,Notebook仍会保留无法使用之前的所有变量空间。 父主题: 代码运行故障
  • 运行训练代码,出现dead kernel,并导致实例崩溃 在Notebook实例中运行训练代码,如果数据量太大或者训练层数太多,亦或者其他原因,导致出现“内存不够”问题,最终导致该容器实例崩溃。 出现此问题后,系统将自动重启Notebook,来修复实例崩溃的问题。此时只是解决了崩溃问题,如果重新运行训练代码仍将失败。 如果您需要解决“内存不够”的问题,建议您创建一个新的Notebook,使用更高规格的资源池,比如专属资源池来运行此训练代码。 已经创建成功的Notebook不支持选用更高规格的资源规格进行扩容。 父主题: 代码运行故障
  • Notebook 自定义镜像 故障基础排查 当制作的自定义镜像使用出现故障时,请用户按照如下方法排查: 用户自定义镜像没有ma-user用户及ma-group用户组; 用户自定义镜像中/home/ma-user目录,属主和用户组不是ma-user和ma-group; 用户自定义镜像必须满足用户目录/home/ma-user权限为750,不能为其他权限; 用户自定义镜像使用远程SSH功能,OpenSSH版本要兼容或高于8.0; 用户制作的自定义镜像,在本地执行docker run启动,无法正常运行; 用户自行安装了Jupyterlab服务导致冲突的,需要用户本地使用Jupyterlab命令罗列出相关的静态文件路径,删除并且卸载镜像中的Jupyterlab服务; 用户自己业务占用了开发环境官方的8888、8889端口的,需要用户修改自己的进程端口号; 用户的镜像指定了PYTHONPATH、sys.path导致服务启动调用冲突的,需在实例启动后,再指定PYTHONPATH、sys.path; 用户使用了已开启sudo权限的专属池,使用自定义镜像时,sudo工具未安装或安装错误; 用户使用的cann、cuda环境有兼容性问题; 用户的docker镜像配置错误、网络或防火墙限制、镜像构建问题(文件权限、依赖缺失或构建命令错误)等原因导致的。 父主题: 自定义镜像故障
共100000条