云服务器内容精选

  • 步骤五:准备推理环境 安装ultralytics,用于转换模型。 pip install ultralytics==8.2.70 numpy==1.23.0 onnxslim==0.1.34 获取推理代码。 cd ${container_work_dir} unzip AscendCloud-CV-6.3.909-xxx.zip cd Yolov8/yolov8_infer/mindspore_lite 获取yolov8 detection pt模型文件。下载地址:https://github.com/autogyro/yolo-V8 图1 下载yolov8 detection pt模型文件 pt模型转onnx模型。以转换yolov8n.pt为例,执行如下命令,执行完会在当前目录生成yolov8n.onnx文件。 python pt2onnx.py --pt yolov8n.pt onnx模型转mindir格式,执行如下命令,转换完成后会生成yolov8n.mindir文件。 converter_lite --fmk=ONNX --modelFile=yolov8n.onnx --outputFile=yolov8n --inputShape='images:1,3,640,640' --saveType=MINDIR --optimize=ascend_oriented 如果要使用动态batch,使用如下转换命令 converter_lite --fmk=ONNX --modelFile=yolov8n.onnx --outputFile=yolov8n_dy --saveType=MINDIR --optimize=ascend_oriented --configFile=convert_config.ini 配置文件convert_config.ini的内容如下: [acl_build_options] input_format="ND" input_shape="images:-1,3,640,640" ge.dynamicDims="1;8;16" 其中input_shape中的-1表示设置动态batch,ge.dynamicDims表示支持的batch值,上面的配置表示输入模型shape支持[1,3,640,640],[8,3,640,640],[16,3,640,640]这三种。 关于动态batch配置说明详见:https://www.mindspore.cn/lite/docs/zh-CN/r2.3.0/use/cloud_infer/converter_tool_ascend.html 使用converter_lite转换模型时,如果报E10001: Value [linux] for parameter [--host_env_os] is invalid. Reason: os not supported, support setting are the OS types of opp package。 建议在步骤三:启动容器镜像中通过docker run启动容器时,加上--privileged=true参数。
  • 步骤一:准备环境 请参考DevServer资源开通,购买DevServer资源,并确保机器已开通,密码已获取,能通过SSH登录,不同机器之间网络互通。 购买DevServer资源时如果无可选资源规格,需要联系华为云技术支持申请开通。 当容器需要提供服务给多个用户,或者多个用户共享使用该容器时,应限制容器访问Openstack的管理地址(169.254.169.254),以防止容器获取宿主机的元数据。具体操作请参见禁止容器获取宿主机元数据。 SSH登录机器后,检查NPU设备检查。运行如下命令,返回NPU设备信息。 npu-smi info # 在每个实例节点上运行此命令可以看到NPU卡状态 npu-smi info -l | grep Total # 在每个实例节点上运行此命令可以看到总卡数 如出现错误,可能是机器上的NPU设备没有正常安装,或者NPU镜像被其他容器挂载。请先释放被挂载的NPU或者联系华为方技术支持。 检查驱动版本。 运行如下命令查询驱动版本,回显信息中的“Software Version”字段值表示驱动版本。NPU ID表示设备编号,可通过npu-smi info -l命令查询。 npu-smi info -t board -i NPU ID 如果Atlas 300I Duo推理卡的驱动版本低于24.1.RC2.3,请参考升级文档升级驱动(24.1.RC2.3升级操作和24.1.RC2相同),24.1.RC2.3驱动软件包获取地址参考驱动软件包。 检查docker是否安装。 docker -v #检查docker是否安装 如尚未安装,运行以下命令安装docker。 yum install -y docker-engine.aarch64 docker-engine-selinux.noarch docker-runc.aarch64 配置IP转发,用于容器内的网络访问。执行以下命令查看net.ipv4.ip_forward配置项的值,如果为1,可跳过此步骤。 sysctl -p | grep net.ipv4.ip_forward 如果net.ipv4.ip_forward配置项的值不为1,执行以下命令配置IP转发。 sed -i 's/net\.ipv4\.ip_forward=0/net\.ipv4\.ip_forward=1/g' /etc/sysctl.conf sysctl -p | grep net.ipv4.ip_forward
  • 步骤三:启动容器镜像 启动容器镜像。启动前请先按照参数说明修改${}中的参数。 docker run -it --net=host \ --device=/dev/davinci0 \ --device=/dev/davinci1 \ --device=/dev/davinci2 \ --device=/dev/davinci3 \ --device=/dev/davinci4 \ --device=/dev/davinci5 \ --device=/dev/davinci6 \ --device=/dev/davinci7 \ --device=/dev/davinci_manager \ --device=/dev/devmm_svm \ --device=/dev/hisi_hdc \ --shm-size=32g \ -v /usr/local/dcmi:/usr/local/dcmi \ -v /usr/local/Ascend/driver:/usr/local/Ascend/driver \ -v /var/log/npu/:/usr/slog \ -v /usr/local/bin/npu-smi:/usr/local/bin/npu-smi \ -v ${work_dir}:${container_work_dir} \ --name ${container_name} \ ${image_id} \ /bin/bash 参数说明: device=/dev/davinci0,..., --device=/dev/davinci7:挂载NPU设备,示例中挂载了8张卡davinci0~davinci7。 ${work_dir}:${container_work_dir} 代表需要在容器中挂载宿主机的目录。宿主机和容器使用不同的文件系统,work_dir为宿主机中工作目录,目录下存放着训练所需代码、数据等文件。container_dir为要挂载到的容器中的目录。为方便两个地址可以相同。 shm-size:共享内存大小。 ${container_name}:容器名称,进入容器时会用到,此处可以自己定义一个容器名称。 ${image_id}:镜像ID,通过docker images查看刚拉取的镜像ID。 容器不能挂载到/home/ma-user目录,此目录为ma-user用户家目录。如果容器挂载到/home/ma-user下,拉起容器时会与基础镜像冲突,导致基础镜像不可用。 driver及npu-smi需同时挂载至容器。 不要将多个容器绑到同一个NPU上,会导致后续的容器无法正常使用NPU功能。
  • 步骤四:获取代码并上传 上传推理代码AscendCloud-CV-6.3.909-xxx.zip到宿主机的工作目录中,包获取路径请参见表2。 上传代码到宿主机时使用的是root用户,此处需要在容器中执行如下命令统一文件属主为ma-user用户。 #统一文件属主为ma-user用户 sudo chown -R ma-user:ma-group ${container_work_dir} # ${container_work_dir}:/home/ma-user/ws 容器内挂载的目录 #例如:sudo chown -R ma-user:ma-group /home/ma-user/ws
  • 步骤六:开始推理 执行如下命令开始推理,推理完成后会生产*_result.jpg,即检测结果。 python infer.py --model yolov8n.mindir infer.py是NPU上使用MindSpore Lite推理的样例,与GPU推理代码区别主要参考infer函数,不同业务场景需根据实际情况做相应修改。infer.py文件预置在AscendCloud-CV-6.3.909-xxx.zip软件包中。 模型每次推理的图片数量必须是支持的batchsize,比如当前转换的mindir模型batchsize仅支持1,那么模型推理输入的图片数只能是1张;如果当前转换的mindir模型的batchsize支持多个,比如1,2,4,8,那么模型推理输入的图片数可以是1,2,4,8。 如果使用动态batch模型,需要将infer.py中如下图红框中的两行代码取消注释。 图2 修改infer.py
  • 获取软件和镜像 表2 获取软件和镜像 分类 名称 获取路径 插件代码包 AscendCloud-6.3.909-xxx.zip软件包中的AscendCloud-CV-6.3.909-xxx.zip 说明: 包名中的xxx表示具体的时间戳,以包名的实际时间为准。 获取路径:Support-E 说明: 如果没有下载权限,请联系您所在企业的华为方技术支持下载获取。 基础镜像 西南-贵阳一: swr.cn-southwest-2.myhuaweicloud.com/atelier/pytorch_2_1_ascend:pytorch_2.1.0-cann_8.0.rc3-py_3.9-hce_2.0.2406-aarch64-snt3p-20240906180137-154bd1b 从SWR拉取。
  • 迁移环境准备 迁移环境准备有以下两种方式: 方式一 ModelArts Notebook:该环境为在线调试环境,主要面向演示、体验和快速原型调试场景。 优点:可快速、低成本地搭建环境,使用标准化容器镜像,官方notebook示例可直接运行。 缺点:由于是容器化环境因此不如裸机方式灵活,例如不支持root权限操作、驱动更新等。 环境开通指导参考:Notebook环境创建。 样例演示可参考Notebook样例:Stable Diffusion模型迁移到Ascend上进行推理。 方式二 ModelArts Lite DevServer:该环境为裸机开发环境,主要面向深度定制化开发场景。 优点:支持深度自定义环境安装,可以方便的替换驱动、固件和上层开发包,具有root权限,结合配置指导、初始化工具及容器镜像可以快速搭建昇腾开发环境。 缺点:资源申请周期长,购买成本高,管理视角下资源使用效率较低。 环境开通指导参考:DevServer资源开通 环境配置指导参考:Snt9B裸金属服务器环境配置指南 本文基于方式二的环境进行操作,请参考方式二中的环境开通和配置指导完成裸机和容器开发初始化配置。注意业务基础镜像选择Ascend+PyTorch镜像。 配置好的容器环境如下图所示: 图1 环境配置完成 父主题: 基于AIGC模型的GPU推理业务迁移至昇腾指导
  • 常见问题 模型转换失败怎么办? 常见的模型转换失败原因可以通过查询转换失败错误码来确认具体导失败的原因,Stable Diffusion新推出的模型在转换中可能会遇到算子不支持的问题,可以到华为云管理页面上提交工单来寻求帮助。 图片大Shape性能劣化严重怎么办? 在昇腾设备上,可能由于GPU内存墙导致在大shape下遇到性能问题,MindSporeLite提供了Flash Attention编译优化机制,可以考虑升级最新版本的MindSporeLite Convertor来进行编译器的算子优化,在大Shape场景下会有明显的改善。 同样功能的PyTorch Pipeline,因为指导要求适配onnx pipeline,两个pipeline本身功能就有差别,如何适配? 由于Diffusers社区的“single model file policy”设计原则,不同的pipeline是不同路径在独立演进的。先确保应用输出符合预期后,再进入到MindSpore Lite模型转换的过程,否则迁移昇腾后还是会遇到同样的问题。 AOE的自动性能调优使用上完全没有效果怎么办? 在MindSpore Lite Convertor2.1版本之前可能出现的调优不生效的场景,建议直接使用MindSpore Lite Convertor2.1及以后的版本。配置文件指定选项进行AOE调优。使用转换工具配置config参数,具体如下所示,其中“subgraph tuning”表示子图调优,“operator tuning”表示算子调优。 其中,“ge.op_compiler_cache_mode”在该场景下必须设置为“force”,表示该场景下要强制刷新缓存,保证AOE调优后的知识库能够命中,实现模型调优。示例如下: # config.ini [ascend_context] aoe_mode="subgraph tuning, operator tuning" [acl_init_options] ge.op_compiler_cache_mode="force" 迁移后应用出图效果相比GPU无法对齐怎么办? 扩散模型在噪音和随机数上的生成,本身就有一定的随机性,GPU和NPU(Ascend)硬件由于存在一定细小的差别,很难确保完全一致,较难达成生成图片100%匹配,建议通过盲测的方式对效果进行验证。 模型精度有问题怎么办? 首先考虑通过FP16的方式进行转换和执行,再通过精度诊断工具来进行分析,更进一步可以到华为云官网上提交工单处理。 模型转换失败时如何查看日志和定位原因? 在模型转换的过程,如果出现模型转换失败,可以参考以下步骤查看日志并定位原因: 设置DEBUG日志。 设置MindSpore日志环境变量。 #shell export G LOG _v=0 # 0-DEBUG、1-INFO、2-WARNING、3-ERROR 设置CANN日志环境变量。 #shell export ASCEND_GLOBAL_LOG_LEVEL=1 # 0:表示DEBUG、1:表示INFO、2:表示WARNING、3:表示ERROR 4: 表示NONE export ASCEND_SLOG_PRINT_TO_STDOUT=1 # 表示日志打印 设置DUMP模型转换中间图。 设置DUMP中间图环境变量。 #shell export DUMP_GE_GRAPH=2 # 1:表示dump图全量内容、 2:表示不dump权重数据的基础图、 3:表示只dump节点关系的精简图 export DUMP_GRAPH_LEVEL=2 # 1:表示dump图所有图、 2:表示dump除子图外的所有图、 3:表示只dump最后一张图 问题分析。 配置以上的环境变量之后,再重新转换模型,导出对应的日志和dump图进行分析: 报错日志中搜到“not support onnx data type”,表示MindSpore暂不支持该算子。 报错日志中搜到“Convert graph to om failed”,表示CANN模块进行图编译存在保存,需要结合CANN的报错日志和dump图进行具体分析。 Stable Diffusion WebUI如何适配? WebUI一般可以分为前端和后端实现两部分,后端的实现模式种类多样,并且依赖了多个的第三方库,当前在WebUI适配时,并没有特别好的方式。在对后端实现比较理解的情况下,建议针对具体的功能进行Diffusers模块的适配与替换,然后针对替换上去的Diffusers,对其pipeline进行昇腾迁移适配,进而替代原有WebUI的功能。针对很多参数以及三方加速库(如xformers)的适配,当前没有特别好的处理方案。 LoRA适配流是怎么样的? 因为现在pytorch-npu推理速度比较慢(固定shape比mindir慢4倍),在现在pth-onnx-mindir的模型转换方式下,暂时只能把lora合并到unet主模型内,在每次加载模型前lora特性就被固定了(无法做到pytorch每次推理都可以动态配置的能力)。 目前临时的静态方案可参考sd-scripts, 使用其中的“networks/merge_lora.py”把lora模型合入unet和text-encoder模型。 数据类型不匹配问题如何处理? 报错“data type not equal”时,按照堆栈信息,将对应的行数的数据类型修改为匹配的类型。 图1 报错信息 处理该问题时,pipeline_onnx_stable_diffusion_img2img_mslite.py文件的第454行修改如下: 图2 修改内容 父主题: 基于AIGC模型的GPU推理业务迁移至昇腾指导
  • 步骤六:增加适配代码 # 安装优化加速包 cd ${container_work_dir}/multimodal_algorithm/ascendcloud_multimodal_plugin pip install -e . # 使能优化加速包(此步默认在环境安装阶段已完成,可忽略) # 在${container_work_dir}/ms-swift/swift/cli/sft.py中引入优化代码包 from ascendcloud_multimodal.train.models.llama32_vision import ascend_modeling_mllama
  • 步骤七:数据集下载与制作 下载COCO2014数据集:train2014.zip,coco_karpathy_train_567k.zip。本节展示了基于COCO2014数据集制作一个演示的demo数据集,若用户有自定义数据集需求,可按以下叙述的数据集格式构建用户自定义数据集。 在${container_work_dir}目录下载以上数据集,并将其放置在${container_work_dir}路径下; cd ${container_work_dir} wget http://images.cocodataset.org/zips/train2014.zip && unzip train2014.zip wget https://github.com/OpenGVLab/InternVL/releases/download/data/coco_karpathy_train_567k.zip && unzip coco_karpathy_train_567k.zip
  • 步骤一:检查环境 请参考DevServer资源开通,购买DevServer资源,并确保机器已开通,密码已获取,能通过SSH登录,不同机器之间网络互通。 购买DevServer资源时如果无可选资源规格,需要联系华为云技术支持申请开通。 当容器需要提供服务给多个用户,或者多个用户共享使用该容器时,应限制容器访问Openstack的管理地址(169.254.169.254),以防止容器获取宿主机的元数据。具体操作请参见禁止容器获取宿主机元数据。 SSH登录机器后,检查NPU卡状态。运行如下命令,返回NPU设备信息。 npu-smi info # 在每个实例节点上运行此命令可以看到NPU卡状态 npu-smi info -l | grep Total # 在每个实例节点上运行此命令可以看到总卡数 如出现错误,可能是机器上的NPU设备没有正常安装,或者NPU镜像被其他容器挂载。请先正常安装固件和驱动,或释放被挂载的NPU。 检查是否安装docker。 docker -v #检查docker是否安装 如尚未安装,运行以下命令安装docker。 yum install -y docker-engine.aarch64 docker-engine-selinux.noarch docker-runc.aarch64 配置IP转发,用于容器内的网络访问。执行以下命令查看net.ipv4.ip_forward配置项的值,如果为1,可跳过此步骤。 sysctl -p | grep net.ipv4.ip_forward 如果net.ipv4.ip_forward配置项的值不为1,执行以下命令配置IP转发。 sed -i 's/net\.ipv4\.ip_forward=0/net\.ipv4\.ip_forward=1/g' /etc/sysctl.conf sysctl -p | grep net.ipv4.ip_forward
  • 步骤五:下载代码安装环境 下载华为侧插件代码包AscendCloud-AIGC-6.3.911-xxx.zip文件,获取路径参见表1 获取软件和镜像。 mv AscendCloud-AIGC-6.3.911-*.zip ${container_work_dir} cd ${container_work_dir} unzip AscendCloud-AIGC-6.3.911-*.zip cp -r multimodal_algorithm/Llama32_Vision/train/6b33108084eb4a8efd5d09090a3e1a51f6920129/* ${container_work_dir} # 下载复制贝后${container_work_dir}目录下存在如下5个文件 # 1.llama32_vision_install.sh # 2.custom_dataset_info_demo.json # 3.llama32_vision.patch # 4.llama32_vision_11b_finetune_sft.sh # 5.llama32_vision_11b_finetune_lora.sh
  • 获取软件和镜像 表1 获取软件和镜像 分类 名称 获取路径 插件代码包 AscendCloud-6.3.911软件包中的AscendCloud-AIGC-6.3.911-xxx.zip 文件名中的xxx表示具体的时间戳,以包名发布的实际时间为准。 获取路径:Support-E,在此路径中查找下载ModelArts 6.3.911 版本。 说明: 如果上述软件获取路径打开后未显示相应的软件信息,说明您没有下载权限,请联系您所在企业的华为方技术支持下载获取。 基础镜像包 swr.cn-southwest-2.myhuaweicloud.com/atelier/pytorch_2_1_ascend:pytorch_2.1.0-cann_8.0.rc3-py_3.9-hce_2.0.2409-aarch64-snt9b-20241112192643-c45ac6b SWR上拉取。
  • 步骤八:下载模型权重 从modelscope下载Llama-3.2-11B-Vision-Instruct或将您已下载的权重文件上传到容器能正常访问的目录。 方式1:手动下载,并将其放置在${container_work_dir}路径下。 方式2:利用git下载,须确保git lfs已成功安装: cd ${container_work_dir} git clone https://www.modelscope.cn/LLM-Research/Llama-3.2-11B-Vision-Instruct.git cd Llama-3.2-11B-Vision-Instruct git lfs pull
  • 步骤九:开始训练 单机训练 cd ${container_work_dir} # 指定model_path为步骤八:下载模型权重下载的Llama-3.2-11B-Vision-Instruct权重路径 # 指定dataset参数为步骤七:数据集下载与制作中所述custom_dataset_info_demo.json中文件设置的数据集名称:coco2014_train_40k_demo # 修改custom_dataset_info参数路径为${container_work_dir}/ms-swift/swift/llm/data/custom_dataset_info_demo.json # finetune sft全参微调场景 model_path=path/to/Llama-3.2-11B-Vision-Instruct \ dataset=coco2014_train_40k_demo \ custom_dataset_info=path/to/ms-swift/swift/llm/data/custom_dataset_info_demo.json \ work_dir=${container_work_dir} \ globol_batch_size=32 \ per_device_batch_size=2 \ bash llama32_vision_11b_finetune_sft.sh # finetune lora微调场景 model_path=path/to/Llama-3.2-11B-Vision-Instruct \ dataset=coco2014_train_40k_demo \ custom_dataset_info=path/to/ms-swift/swift/llm/data/custom_dataset_info_demo.json \ work_dir=${container_work_dir} \ globol_batch_size=32 \ per_device_batch_size=4 \ bash llama32_vision_11b_finetune_lora.sh 多机训练 cd ${container_work_dir} # 指定model_path为步骤八:下载模型权重下载的Llama-3.2-11B-Vision-Instruct权重路径 # 指定dataset参数为步骤七:数据集下载与制作中所述custom_dataset_info_demo.json中文件设置的数据集名称:coco2014_train_40k_demo # 指定custom_dataset_info参数路径为${container_work_dir}/ms-swift/swift/llm/data/custom_dataset_info_demo.json # finetune sft场景 model_path=path/to/Llama-3.2-11B-Vision-Instruct \ dataset=coco2014_train_40k_demo \ custom_dataset_info=path/to/ms-swift/swift/llm/data/custom_dataset_info_demo.json \ work_dir=${container_work_dir} \ node_num=${NODE_NUM} \ node_rank=${NODE_RANK} \ master_addr=${MASTER_ADDR} \ globol_batch_size=32*${NODE_NUM} \ per_device_batch_size=2 \ bash llama32_vision_11b_finetune_sft.sh # finetune lora场景 model_path=path/to/Llama-3.2-11B-Vision-Instruct \ dataset=coco2014_train_40k_demo \ custom_dataset_info=path/to/ms-swift/swift/llm/data/custom_dataset_info_demo.json \ work_dir=${container_work_dir} \ node_num=${NODE_NUM} \ node_rank=${NODE_RANK} \ master_addr=${MASTER_ADDR} \ globol_batch_size=32*${NODE_NUM} \ per_device_batch_size=4 \ bash llama32_vision_11b_finetune_lora.sh 参数说明: node_num/NODE_NUM:机器数量,修改${NODE_NUM}为具体数字。 node_rank/NODE_RANK:机器rank num,主机为0,其余递增,修改${NODE_RANK}为具体数字。 master_addr/MASTER_ADDR:主机IP地址,修改${MASTER_ADDR}为主机IP。 globol_batch_size:全局批次大小。 per_device_batch_size:每张卡上的批次大小。 以单机结果为例,训练成功如下图所示。