华为云用户手册

  • 原因分析 分析EulerOS内核是如何在不知情的情况下升级的: 首先查看当前操作系统内核。 [root@Server-ddff ~]# uname -r4.18.0-147.5.1.6.h934.eulerosv2r9.x86_64 一般执行如下升级命令,就会导致自动下载和安装高级内核版本。 yum update -y 执行后查看当前可用内核,发现已经新增了内核h998: [root@Server-ddff ~]#[root@Server-ddff ~]# cat /boot/grub2/grub.cfg |grep "menuentry "menuentry 'EulerOS (4.18.0-147.5.1.6.h998.eulerosv2r9.x86_64) 2.0 (SP9x86_64)' --class euleros --class gnu-linux --class gnu --class os --unrestricted $menuentry_id_option 'gnulinux-4.18.0-147.5.1.6.h934.eulerosv2r9.x86_64-advanced-f6aefacb-f2d3-4809-b708-6ad0357037f5' {menuentry 'EulerOS (4.18.0-147.5.1.6.h934.eulerosv2r9.x86_64) 2.0 (SP9x86_64)' --class euleros --class gnu-linux --class gnu --class os --unrestricted $menuentry_id_option 'gnulinux-4.18.0-147.5.1.6.h934.eulerosv2r9.x86_64-advanced-f6aefacb-f2d3-4809-b708-6ad0357037f5' {menuentry 'EulerOS (0-rescue) 2.0 (SP9x86_64)' --class euleros --class gnu-linux --class gnu --class os --unrestricted $menuentry_id_option 'gnulinux-0-rescue-advanced-f6aefacb-f2d3-4809-b708-6ad0357037f5' {[root@Server-ddff ~]# 查看假如reboot(尚未reboot)后默认选择的内核版本: [root@Server-ddff ~]# grub2-editenv list saved_entry=EulerOS (4.18.0-147.5.1.6.h998.eulerosv2r9.x86_64) 2.0 (SP9x86_64)boot_success=0[root@Server-ddff ~]# 发现默认系统内核已经变为h998,reboot后就会生效。 此时如果重启那么内核版本就被升级了。
  • 处理方法 下文中假设当前服务器的内核版本是为4.18.0-147.5.1.6.h934.eulerosv2r9.x86_64,介绍如何避免操作系统内核自动升级。 操作系统内核升级生效,必然需要服务器重启, 因此重启reboot前需要查看当前默认选择的内核版本: [root@Server-ddff ~]# grub2-editenv list saved_entry=EulerOS (4.18.0-147.5.1.6.h998.eulerosv2r9.x86_64) 2.0 (SP9x86_64)boot_success=0[root@Server-ddff ~]# 如上发现reboot后内核为4.18.0-147.5.1.6.h998.eulerosv2r9.x86_64,和当前内核版本h934不一致,则需要重新设置内核版本与当前版本一致。 查看当前内核版本,并且锁定reboot后默认启动的内核版本,执行如下命令: grub2-set-default 'EulerOS (4.18.0-147.5.1.6.h934.eulerosv2r9.x86_64) 2.0 (SP9x86_64)' 执行后查看默认启动的内核版本是否和上述设置的相同: [root@Server-ddff ~]# grub2-editenv list saved_entry=EulerOS (4.18.0-147.5.1.6.h934.eulerosv2r9.x86_64) 2.0 (SP9x86_64)boot_success=0[root@Server-ddff ~]# 发现和当前内核一致,因此即使reboot也不会更改服务器的内核版本。 如果希望升级指定的操作系统内核,也可以执行grub2-set-default进行设置默认启动内核版本。但操作系统内核升级可能带来的问题。例如在操作系统内核4.18.0-147.5.1.6.h934.eulerosv2r9.x86_64 下安装的nvidia-driver-515,由于执行了yum update并reboot服务器, 发现再次执行nvidia命令时报错: [root@Server-ddff ~]# nvidia-smiNVIDIA-SMI has failed because it couldn't communicate with the NVIDIA driver. Make sure that the latest NVIDIA driver is installed and running.[root@Server-ddff ~]# 此时只能安裝nvidia-driver-515以及配套的cuda版本,安装方法可以参考GP Vnt1裸金属服务器EulerOS 2.9安装NVIDIA 515+CUDA 11.7。
  • 原因分析 在CCE纳管过程中,需要通过cloudinit userdata机制拉取cce-agent,但是在服务器上查看没有拉cce-agent的动作,理论上该动作是cloudinit中的脚本在创建时自动执行的,可能是由于安装脚本没有注入userdata或者注入了但未执行。 经查看是由于userdata未执行,可能原因为服务器A制作镜像时没有清理残留目录导致,即: 镜像里面“/var/lib/cloud/instances”残留了制作镜像机器(后面称模板机)的实例ID信息,如果制作镜像不清理“/var/lib/cloud/*”就会导致用该镜像再重装模板机时,cloud-init根据残留目录(含实例ID)判断已经执行过一次,进而不会再执行user-data里面的脚本。 而使用该镜像的服务器B和C,由于实例ID信息和镜像中残留的服务器A实例ID不同,就会执行user-data,所以CCE能纳管成功。
  • 处理方法 请排查是否将数据下载至“/cache”目录下,GPU规格资源的每个节点会有一个“/cache”目录,空间大小为4TB。并确认该目录下并发创建的文件数量是否过大,占用过多存储空间会出现inode耗尽的情况,导致空间不足。 请排查是否使用的是GPU资源。如果使用的是CPU规格的资源,“/cache”与代码目录共用10G,会造成内存不足,请更改为使用GPU资源。 请在代码中添加环境变量来解决。 import osos.system('export TMPDIR=/cache')
  • 原因分析及处理方法 服务预测报错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的熔断机制,导致预测失败。建议您检查模型返回结果,处理模型报错问题,可尝试通过调整请求参数、降低请求流量等方式,提高模型调用的成功率。
  • 处理方法 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()。
  • 处理步骤 进入训练作业详情页,在左侧获取SFS Turbo的名称。 图1 获取SFS Turbo的名称 登录弹性文件服务SFS控制台,在SFS Turbo列表找到训练作业挂载的SFS Turbo,单击名称进入详情页。获取VPC信息、安全组信息和endpoint信息。 VPC信息:SFS Turbo详情页的“虚拟私有云”。 安全组信息:SFS Turbo详情页的“安全组”。 endpoint信息:SFS Turbo详情页的“共享路径”,去除“:/”即为sfs-turbo-endpoint。例如共享路径为“4ab556b5-d689-44f1-9302-24c09daxxxxc.sfsturbo.internal:/”,则sfs-turbo-endpoint为“4ab556b5-d689-44f1-9302-24c09daxxxxc.sfsturbo.internal”。 查看SFS Turbo的VPC网段是否满足如下2个条件。 条件一:SFS Turbo网段不能与192.168.20.0/24重叠,否则会和专属资源池的网段发生冲突,因为专属资源池的默认网段为192.168.20.0/24。专属资源池实际使用的网段可以在资源池的详情页面查看“网络”获取。 条件二:SFS Turbo网段不能与172网段重叠,否则会和容器网络发生冲突,因为容器网络使用的是172网段。 如果不满足条件,则修改SFS Turbo的VPC网段,推荐网段为10.X.X.X。具体操作请参见修改虚拟私有云网段。 如果满足条件,则继续下一步。 查看SFS Turbo的VPC网段的安全组是否被限制了。 在所选专属资源池中新建一个未挂载的SFS Turbo的训练作业,当训练作业处于“运行中”时,通过Cloud Shell功能登录训练作业worker-0实例,使用curl {sfs-turbo-endpoint}:{port}命令检查port是否正常打开,SFS Turbo所需要入方向的端口号为111、445、2049、2051、2052、20048,具体请参见创建文件系统的“安全组”参数。Cloud Shell功能的操作指导请参见使用CloudShell登录训练容器。 是,则修改安全组的配置,具体操作请参见修改安全组规则。 否,则继续下一步。 确认SFS Turbo是否存在异常。 新建一个和SFS Turbo在同一个网段的E CS ,用ECS去挂载SFS Turbo,如果挂载失败,则表示SFS Turbo异常。 是,联系SFS服务的技术支持处理。 否,联系ModelArts的技术支持处理。
  • 处理方法 获取一个OBS文件夹的大小: import moxing as moxmox.file.get_size('obs://bucket_name/sub_dir_0/sub_dir_1', recursive=True) 获取一个OBS文件的大小: import moxing as moxmox.file.get_size('obs://bucket_name/obs_file.txt')
  • 处理方法 当出现此错误时,Notebook会自动恢复,您可以刷新页面,等待几分钟。 由于出现此错误,常见原因是内存占用满导致的,您可以尝试使用如下方法,从根本上解决错误。 方法1:将Notebook更换为更高规格的资源。 方法2:可以参考如下方法调整代码中的参数,减少内存占用。如果代码调整后仍然出现内存不足的情况,请使用方法1。 调用sklearn方法silhouette_score(addr_1,siteskmeans.labels),可以指定参数sample_size来减少内存占用。 调用train方法的时候可以尝试减少batch_size等参数。
  • 处理方法 您需要通过在代码中设置环境变量“TF_CPP_MIN_ LOG _LEVEL”来屏蔽INFO级别的日志信息。具体操作如下: import osos.environ['TF_CPP_MIN_LOG_LEVEL'] = '2'import tensorflow as tfimport moxing.tensorflow as mox “TF_CPP_MIN_LOG_LEVEL”与日志等级对应关系为: import osos.environ["TF_CPP_MIN_LOG_LEVEL"]='1' # 默认的显示等级,显示所有信息 os.environ["TF_CPP_MIN_LOG_LEVEL"]='2' # 只显示warning和Erroros.environ["TF_CPP_MIN_LOG_LEVEL"]='3' # 只显示Error
  • 处理方法 参数定义中增加该参数的定义,代码示例如下: parser.add_argument('--init_method', default='tcp://xxx',help="init-method") 通过使用解析方式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'
  • 处理方法 (推荐)解决方案一(按需使用volcano调度器): CCE页面上修改默认调度器为kube-scheduler。 删除maos-node-agent的pod(重启pod)。 CCE页面上删除节点上的污点A200008。 ModelArts页面上重置节点。 该方案的缺点:用户新建负载时需要手动指定调度器为volcano,参考指导。 解决方案二(默认全部使用volcano调度器): CCE页面上配置中心修改默认调度器为kube-scheduler。 删除maos-node-agent的pod(重启pod)。 CCE页面上删除节点上的污点A200008。 ModelArts上重置节点。 CCE页面上配置中心修改默认调度器为volcano。 该方案的缺点:后续对ModelArts的节点做相关操作如重置、升级驱动等可能会出现节点异常无法启动的情况。
  • 原因分析 nvidia-modprobe是一个Linux工具,用于在系统中加载NVIDIA驱动程序及其相关的内核模块。在Linux系统上安装NVIDIA显卡驱动后,需要通过“nvidia-modprobe”命令来加载相应的内核模块,以便让显卡驱动正常工作。 通常情况下,在安装NVIDIA驱动时,会自动执行“nvidia-modprobe”命令,将必要的内核模块加载到系统中。但有时候也可能需要手动执行该命令。例如,在更新了NVIDIA驱动后,需要重新加载新版本的内核模块才能使变更生效。 此外,如果使用了多个NVIDIA显卡,每个显卡都需要加载相应的内核模块才能正常工作。在这种情况下,也需要手动执行“nvidia-modprobe”命令来加载所有必要的内核模块。
  • 原因分析 经过对裸金属服务器排查,发现nvidia-drvier和cuda都已安装,并且正常运行。nvidia-fabricmanager服务可以使单节点GPU卡间互联,在多卡GPU机器上,出现这种问题可能是nvidia-fabricmanger异常导致。 执行以下命令,查看NVIDIA和CUDA的版本,以及nvidia-fabricmanager的状态。 systemctl status nvidia-fabricmanager 发现nvidia-fabricmanager的服务为failed状态,尝试重新启动nvidia-fabricmanager失败,且提示以下信息: nvidia-fabricmanager.service failed because the control process exited with error code 通过命令查看nvidia-fabricmanager的版本,发现nvidia-fabricmanager版本与当前NVIDIA驱动版本不一致。 dpkg -l | grep nvidia-fabricmanager 卸载并重新安装正确版本的nvidia-fabricmanager,验证CUDA成功。
  • 问题现象 弹性文件服务(Scalable File Service,SFS)提供按需扩展的高性能文件存储(NAS),可以在裸金属服务器中通过网络协议挂载使用,SFS支持NFS和CIFS的网络协议。在使用裸金属服务器时, 将数据放在SFS盘中, 并发建立多个NFS链接、并发的读写数据、做大模型训练。 但有时候会出现读取速度变慢的现象,并且SFS提示报错"rpc_check_timeout:939 callbacks suppressed"。
  • 原因分析 根据SFS客户端 日志分析 出现问题的时间点发现,SFS盘连接的客户端个数较多,在问题的时间点并发读取数据,I/O超高;当前SFS服务端的机制是:当SFS盘的性能到上限时,就会IO排队。IO排队造成处理时间超过 1 分钟时,客户端内核会打印"rpc_check_timeout:939 callbacks suppressed"日志。这个日志只是说明某个IO处理时间超过 1 分钟了,不会造成数据丢失。客户端有重试机制,等峰值过去后,所有IO最终都会正确处理。所以理论上,出现该错误日志, 并不会造成数据丢失, 只是SFS客户端I/O速度变慢或卡顿,但最终会争取处理。
  • 处理方法 查看nvidia-fabricmanager的版本,如果nvidia-fabricmanager版本与当前NVIDIA驱动版本不一致则执行下述命令卸载nvidia-fabricmanager。 dpkg -l | grep nvidia-fabricmanager# 如果有nvidia-fabricmanager软件,将其卸载# 如果无nvidia-fabricmanager软件,请跳过此命令sudo apt-get autoremove --purge nvidia-fabricmanager-版本 安装与NVIDIA驱动版本号相等的nvidia-fabricmanager(以515.105.01举例)。 version=515.105.01main_version=$(echo $version | awk -F '.' '{print $1}')apt-get updateapt-get -y install nvidia-fabricmanager-${main_version}=${version}-* 启动nvidia-fabricmanager,确保其服务状态为RUNNING。 systemctl enable nvidia-fabricmanagersystemctl start nvidia-fabricmanagersystemctl status nvidia-fabricmanager 重新验证cuda状态, 输出为True。 import torchprint(torch.cuda.is_available())
  • 处理方法 重新构建镜像。 在构建镜像的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
  • 解决方法 使用状态为告警的服务进行预测,可能存在预测失败的风险,请从以下4个角度进行排查,并重新部署。 后台预测请求过多。 如果您使用API接口进行预测,请检查是否预测请求过多。大量的预测请求会导致部署的在线服务进入告警状态。 业务内存不正常。 请检查推理代码是否存在内存溢出或者内存泄漏的问题。 模型运行异常。 请检查您的模型是否能正常运行。例如模型依赖的资源是否故障,需要排查推理日志。 实例pod数量异常 。 如果您曾经找过运维人员删除过异常的实例pod,事件中可能会出现告警“服务异常,不正常的实例数为XXX”。在出现这种告警后,服务会自动拉起新的正常实例,从而恢复到正常运行状态。请您耐心等待。
  • 问题现象 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
  • 处理方法 参考如下代码,三步走。 先卸载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")
  • 处理方法 针对原因1,需要在代码中补充如下环境变量。 import osos.environ["NCCL_IB_TC"] = "128"os.environ["NCCL_IB_GID_INDEX"] = "3"os.environ["NCCL_IB_TIMEOUT"] = "22" 针对原因2,需要在代码中设置环境变量NCCL_SOCKET_IFNAME。 import osos.environ["NCCL_SOCKET_IFNAME"] = "eth0" 只有当用户的NCCL版本低于2.14时,才需要进行以上设置。
  • 处理方法 如果是限流问题,日志中还会出现如下报错,OBS相关的错误码解释请参见OBS官方文档,这种情况建议提工单。 [ModelArts Service Log]2021-01-21 11:35:42,178 - file_io.py[line:658] - ERROR:stat:503errorCode:NoneerrorMessage:Nonereason:Service Unavailable 如果是client数太多,尤其对于5G以上文件,OBS接口不支持直接调用,需要分多个线程分段复制,目前OBS侧服务端超时时间是30S,可以通过如下设置减少进程数。 # 设置进程数os.environ['MOX_FILE_LARGE_FILE_TASK_NUM']=1import 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),超过该阈值的文件将使用并发下载模式进行分段下载。
  • 处理方法 在适配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调试。
  • 处理方法 将pretrained改成false,提前下载好预训练模型,加载下载好的预训练模型位置即可,可参考如下代码。 import torchimport torchvision.models as modelsmodel1 = models.resnet34(pretrained=False, progress=True)checkpoint = '/xxx/resnet34-333f7ec4.pth'state_dict = torch.load(checkpoint)model1.load_state_dict(state_dict) 必现的问题,使用本地Pycharm远程连接Notebook调试。
  • 检查依赖包是否存在 如果依赖包不存在,您可以使用以下两种方式完成依赖包的安装。 方式一(推荐使用):在创建我的算法时,需要在“代码目录”下放置相应的文件或安装包。 请根据依赖包的类型,在代码目录下放置对应文件: 依赖包为开源安装包时 在“代码目录”中创建一个命名为“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') 方式一在训练作业启动前即可完成相关依赖包的下载与安装,而方式二是运行启动文件过程中进行依赖包的下载与安装。
  • 处理方法 查看nv_peer_mem是否已安装。 dpkg -i | grep peer 如果未安装则需要安装,安装方法参考装机指导。 如果已安装则进入下一检测项。 查看该软件是否已经加载至内核。 lsmod | grep peer 如果没有则需要重新加载至内核,执行如下命令进行加载: /etc/init.d/nv_peer_mem start 如果执行失败,可能是未加载nv_peer_mem.conf至/etc/infiniband/中或nv_peer_mem不在/etc/init.d/中。 如果找不到相关文件的问题,可以搜索相关文件在哪里,然后复制到指定目录,例如可执行如下命令: cp /tmp/nvidia-peer-memory-1.3/nv_peer_mem.conf /etc/infiniband/cp /tmp/nvidia-peer-memory-1.3/debian/tmp/etc/init.d/nv_peer_mem /etc/init.d/
  • 检查依赖包路径是否能被识别 代码如果在本地运行,需要将“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
  • 处理方法 需要排查执行命令的启动文件目录是否正确,具体操作如下: 在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} #训练自定义镜像-预置命令场景
共100000条
提示

您即将访问非华为云网站,请注意账号财产安全