云服务器内容精选

  • 获取软件和镜像 表1 获取软件和镜像 分类 名称 获取路径 插件代码包 AscendCloud-6.3.909软件包中的AscendCloud-AIGC-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-snt9b-20240910112800-2a95df3 SWR上拉取。 表2 模型镜像版本 模型 版本 CANN cann_8.0.rc3 驱动 23.0.6 PyTorch 2.1.0
  • Step8 下载模型权重 模型权重(可选择)InternVL2-8B, InternVL2-26B, InternVL2-40B 手动下载放置在${container_name}/InternVL/internvl_chat/pretrained路径下, pretrained目录需手动创建。 https://huggingface.co/OpenGVLab/InternVL2-8B/tree/main https://huggingface.co/OpenGVLab/InternVL2-26B/tree/main https://huggingface.co/OpenGVLab/InternVL2-40B/tree/main
  • 步骤一 检查环境 请参考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.909-xxx.zip文件,获取路径参见表1。 unzip AscendCloud-AIGC-6.3.909-xxx.zip cd multimodal_algorithm/InternVL2/train/5d8f485ad09b3eb9b2a7d9a24cca727fa58bb775 bash InternVL2_install.sh cp shells/* InternVL/internvl_chat/shell/internvl2.0/2nd_finetune/ mv InternVL ${container_work_dir}
  • 步骤六 增加适配代码 # internVL2-40B模型需要执行下列步骤 cd ${container_work_dir}/multimodal_algorithm/ascendcloud_multimodal_plugin pip install -e . cd ${container_work_dir} 在InternVL/internvl_chat/internvl/train/internvl_chat_finetune.py 引入优化代码包 from ascendcloud_multimodal.train.models.internvl2 import ascend_modeling_internvl
  • Step9 开始训练 单机训练 cd ${container_work_dir}/InternVL/internvl_chat # 8B全参微调 GPUS=8 PER_DEVICE_BATCH_SIZE=2 sh shell/internvl2.0/2nd_finetune/internvl2_8b_internlm2_7b_dynamic_res_2nd_finetune_full.sh # 8Blora微调 GPUS=8 PER_DEVICE_BATCH_SIZE=2 sh shell/internvl2.0/2nd_finetune/internvl2_8b_internlm2_7b_dynamic_res_2nd_finetune_lora.sh # 26Blora微调 GPUS=8 PER_DEVICE_BATCH_SIZE=2 sh shell/internvl2.0/2nd_finetune/internvl2_26b_internlm2_20b_dynamic_res_2nd_finetune_lora.sh # 40Blora微调 GPUS=8 PER_DEVICE_BATCH_SIZE=2 sh shell/internvl2.0/2nd_finetune/internvl2_40b_hermes2_yi_34b_dynamic_res_2nd_finetune_lora.sh 多机训练 cd ${container_work_dir}/InternVL/internvl_chat # 8B lora GPUS=8 PER_DEVICE_BATCH_SIZE=2 NNODES=${NODE_NUM} NODE_RANK=${NODE_RANK} MASTER_ADDR="${master_node_ip}" sh shell/internvl2.0/2nd_finetune/internvl2_8b_internlm2_7b_dynamic_res_2nd_finetune_lora_multi.sh # 8B full GPUS=8 PER_DEVICE_BATCH_SIZE=2 NNODES=${NODE_NUM} NODE_RANK=${NODE_RANK} MASTER_ADDR="${master_node_ip}" sh shell/internvl2.0/2nd_finetune/internvl2_8b_internlm2_7b_dynamic_res_2nd_finetune_full_multi.sh # 26B lora GPUS=8 PER_DEVICE_BATCH_SIZE=2 NNODES=${NODE_NUM} NODE_RANK=${NODE_RANK} MASTER_ADDR="${master_node_ip}" sh shell/internvl2.0/2nd_finetune/internvl2_26b_internlm2_20b_dynamic_res_2nd_finetune_lora_multi.sh # 26B full GPUS=8 PER_DEVICE_BATCH_SIZE=2 NNODES=${NODE_NUM} NODE_RANK=${NODE_RANK} MASTER_ADDR="${master_node_ip}" sh shell/internvl2.0/2nd_finetune/internvl2_26b_internlm2_20b_dynamic_res_2nd_finetune_full_multi.sh 参数说明: NODE_NUM:机器数量。 NODE_RANK:机器rank num,主机为0,其余递增。 MASTER_ADDR:主机IP地址。 训练成功如下图所示。
  • 步骤三 运行并验证SDXL模型 首先在容器中运行命令。 source /usr/local/Ascend/ascend-toolkit/set_env.sh 进入/home/ma-user/AscendCloud-AIGC-6.3.908-xxx/aigc_inference/torch_npu/diffusers/0_21_2/ascend_diffusers,查看README.md文件,根据README.md文件里的指引启动单卡推理脚本。 cd /home/ma-user/AscendCloud-AIGC-6.3.908-xxx/aigc_inference/torch_npu/diffusers/0_21_2/ascend_diffusers cat README.md python examples/sd_inference_example.py --sdxl --model_id stabilityai/stable-diffusion-xl-base-1.0 --prompt 'a dog' --num_inference_steps 50 --width 512 768 1024 --height 512 768 1024 --dynamo --dynamic 会首先下载模型文件到/home/ma-user/.cache目录下,然后启动推理步骤。 图1 启动脚本 运行结束后,可以看到当前目录下生成了对应尺寸的图像。 图2 推理生成的图像
  • 步骤一 准备环境 请参考DevServer资源开通,购买DevServer资源,并确保机器已开通,密码已获取,能通过SSH登录,不同机器之间网络互通。 购买DevServer资源时如果无可选资源规格,需要联系华为云技术支持申请开通。 当容器需要提供服务给多个用户,或者多个用户共享使用该容器时,应限制容器访问Openstack的管理地址(169.254.169.254),以防止容器获取宿主机的元数据。具体操作请参见禁止容器获取宿主机元数据。 检查环境。 SSH登录机器后,检查NPU设备检查。运行如下命令,返回NPU设备信息。 npu-smi info 如出现错误,可能是机器上的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 获取基础镜像。建议使用官方提供的镜像部署推理服务。镜像地址{image_url}参见表1。 docker pull {image_url} 启动容器镜像。启动前请先按照参数说明修改${}中的参数。可以根据实际需要增加修改参数。 docker run -itd \ --name sdxl-diffusers \ -v /sys/fs/cgroup:/sys/fs/cgroup:ro \ -p 8443:8443 \ -v /etc/localtime:/etc/localtime \ -v /usr/local/Ascend/driver:/usr/local/Ascend/driver \ -v /usr/local/bin/npu-smi:/usr/local/bin/npu-smi \ --shm-size 60g \ --device=/dev/davinci_manager \ --device=/dev/hisi_hdc \ --device=/dev/devmm_svm \ --device=/dev/davinci3 \ --network=bridge \ ${image_name} bash 参数说明: --name ${conta iner_name} 容器名称,进入容器时会用到,此处可以自己定义一个容器名称,例如sdxl-diffusers。 --device=/dev/davinci3:挂载主机的/dev/davinci3到容器的/dev/davinci3。可以使用npu-smi info查看空闲卡号,修改davinci后数字可以更改挂载卡。 ${image_name} 代表 ${image_name}。 进入容器。需要将${container_name}替换为实际的容器名称,例如:sdxl-diffusers。 docker exec -it ${container_name} bash
  • 步骤二 安装依赖和模型包 安装Diffusers相关依赖。 pip install -i https://pypi.tuna.tsinghua.edu.cn/simple diffusers bottle invisible_watermark transformers accelerate safetensors 获取SDXL模型包到/home/ma-user目录下。 export HF_ENDPOINT=https://hf-mirror.com huggingface-cli download --resume-download stabilityai/stable-diffusion-xl-base-1.0 --local-dir stable-diffusion-xl-base-1.0 安装插件代码包。 将获取到的插件代码包AscendCloud-AIGC-6.3.908-xxx.zip文件上传到容器的/home/ma-user目录下,并解压。 cd /home/ma-user unzip AscendCloud-AIGC-6.3.908-xxx.zip #解压
  • 获取软件和镜像 表1 获取软件和镜像 分类 名称 获取路径 插件代码包 AscendCloud-6.3.908软件包中的AscendCloud-AIGC-6.3.908-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.2312-aarch64-snt9b-20240824153350-cebb080 从SWR拉取。
  • 步骤四 Diffusers使能多实例共享权重功能 进入AIGC插件解压路径,安装昇腾云torch插件。 pip install AscendCloud-Pytorch-Plugin/ascendcloud_torch_plugin-2.1-cp39-cp39-linux_aarch64.whl # 请根据python版本安装对应的whl包 启动两个终端,并在每个终端均设置下述环境变量。 export MASTER_ADDR=127.0.0.1 export MASTER_PORT=29001 export RANK=x # x等于终端的编号,如开启2个终端,x在两个终端中依次设置为0,1 export WORLD_SIZE=2 # WORLD_SIZE大小等于开启的实例个数 export ENABLE_SHARE_MEMORY=1 # 开启共享显存功能 在两个终端分别执行以下命令,该脚本可以确保diffusers框架能够按序加载模型。 cd aigc_inference/torch_npu/diffusers/0_21_2/ascend_diffusers/examples python modify_pipeline_to.py 在两个终端分别执行diffusers推理脚本,可参考如下脚本: # sdxl参考脚本 from diffusers import DiffusionPipeline, AutoencoderKL import torch import torch_npu from torch_npu.contrib import transfer_to_npu import torch.distributed as dist import ascendcloud_torch_plugin # 昇腾云torch插件,需要放在加载torch_npu后面 vae = AutoencoderKL.from_pretrained("madebyollin/sdxl-vae-fp16-fix", torch_dtype=torch.float16) # sdxl场景需要用支持fp16的vae模型,否则可能出现黑图现象 pipe = DiffusionPipeline.from_pretrained("stabilityai/stable-diffusion-xl-base-1.0", vae=vae, torch_dtype=torch.float16, use_safetensors=True, variant="fp16") pipe.to("cuda") pipe.vae.config.force_upcast = False # 共享权重不支持在推理过程中改变权重dtype prompt = "An astronaut riding a green horse" image = pipe(prompt=prompt).images[0] rank = dist.get_rank() image.save(f"astronaut_rides_horse_{rank}.png") 观察两个实例的显存占用情况,若其中一个实例相比另外一个实例占用更少的显存,且少占用的显存大小等于权重的大小,表明多实例共享权重功能成功开启。 若不需要使用共享显存功能时,请通过以下命令关闭共享显存功能,避免无法正常运行非共享显存的推理场景。 unset ENABLE_SHARE_MEMORY
  • 环境准备 本工具支持x86和ARM的系统环境,使用前需要安装以下软件。 表2 安装软件及步骤 软件 安装步骤 mindspore-lite 安装版本:2.2.10 下载地址:https://www.mindspore.cn/lite/docs/zh-CN/r2.2/use/downloads.html 需要下载的安装包与机器规格有关,请根据需要选择合适的安装包。 如果机器规格为Snt9B,则下载操作系统为Linux-aarch64的tag包:mindspore-lite-2.2.10-linux-aarch64.tar.gz。 如果机器规格为Snt3P,则下载操作系统为Linux-x86_64的tag包:mindspore-lite-2.2.10-linux-x64.tar.gz。 安装方式如下: MindSpore Lite云侧推理包解压缩后,设置`LITE_HOME`环境变量为解压缩的路径,例如: export LITE_HOME=$some_path/mindspore-lite-2.2.10-linux-aarch64 设置环境变量LD_LIBRARY_PATH: export LD_LIBRARY_PATH=$LITE_HOME/runtime/lib:$LITE_HOME/runtime/third_party/dnnl:$LITE_HOME/tools/converter/lib:$LD_LIBRARY_PATH 如果需要使用convert_lite或者benchmark工具,则需要设置环境变量PATH。 export PATH=$LITE_HOME/tools/converter/converter:$LITE_HOME/tools/benchmark:$PATH cann 安装版本:CANN 7.0.0 下载地址:https://support.huawei.com/enterprise/zh/ascend-computing/cann-pid-251168373/software/258923273?idAbsPath=fixnode01%7C23710424%7C251366513%7C22892968%7C251168373 请下载toolkit和对应机器的kernels包,以Snt9B为例则下载“Ascend-cann-toolkit_7.0.0_linux-aarch64.run”和“Ascend-cann-kernels-型号_7.0.0_linux.run”。 安装命令(以Snt9B的cann安装为例): ./Ascend-cann-toolkit_7.0.0_linux-aarch64.run --full ./Ascend-cann-kernels-型号_7.0.0_linux.run --install 请安装在默认路径下:/usr/local/Ascend,暂不支持安装在自定义路径下。 tailor 安装版本:0.3.4 下载地址: https://cneast3-modelarts-sdk.obs.cn-east-3.myhuaweicloud.com/tailor-0.3.4-py3-none-any.whl SHA-256: https://cneast3-modelarts-sdk.obs.cn-east-3.myhuaweicloud.com/tailor-0.3.4-py3-none-any.whl/1713929258832/tailor-0.3.4-py3-none-any.whl.sha256 安装命令: pip install tailor-0.3.4-py3-none-any.whl
  • 使用指导 tailor支持“命令行”和“Python API”两种方式使用。 命令行方式 命令行运行样例: tailor --model_path="./resnet50-v2-7.onnx"--config_path="./config.ini"--input_shape="data:1,3,224,224"--output_path="/home/"--accuracy="fp32"--aoe=True config.ini参考内容如下: [ascend_context] input_shape=data:[-1,3,224,224] dynamic_dims=[1],[2],[3] 表3 参数说明 参数名称 功能描述 参数类型 是否必填 默认值 备注 --model_path 指定onnx模型路径。 string 是 - - --config_path 指定模型配置文件路径。 string 否 - tailor支持动态分档转换功能,需要指定配置文件路径,需要注意即便有配置文件,只要是动态模型就需要指定--input_shape参数。 --input_shape 指定模型转换的shape。 string 否 - 固定shape模型转换可以不填,动态模型转换必填。 --output_path 指定结果输出路径。 string 否 默认为当前目录下。 - --aoe 是否在转换时进行AOE优化。 bool 否 False AOE优化可以提升模型性能,但不是一定有提升,需要注意开启AOE,会导致模型转换耗时极大延长。 --accuracy 指定模型精度,只支持fp16和fp32。 string 否 fp16 - Python API 导入包并创建tailor对象。 from tailor.tailor import Tailor onnx_model_path = "./resnet50-v2-7.onnx"    # 相对路径或者绝对路径均可以 t = Tailor(onnx_model_path) 查询onnx模型的输入信息。 # 查询onnx模型的输入信息 t.get_model_input_info() 图1 查询onnx模型的输入输出信息 查询onnx模型的输出信息。 # 查询模型的输出信息 t.get_model_output_info() 图2 查询onnx模型的输出信息 固定shape模型,可以直接运行。 t.run() 指定档位信息运行。 input_shape="data:1,3,224,224" t.run(input_shape=input_shape) 动态档位执行config_path运行。需要注意,只要是动态模型,就必须要传入input_shape,因为转换模型后的benchmark和profiling都依赖单个shape操作。 input_shape="data:1,3,224,224" config_path = "./resnet/config.ini" t.run(input_shape=input_shape, config_path=config_path) 指定精度为fp32。 input_shape="data:1,3,224,224" t.run(input_shape=input_shape, accuracy='fp32') 开启AOE优化。 input_shape="data:1,3,224,224" t.run(input_shape=input_shape, aoe=True) 指定输出位置。 input_shape="data:1,3,224,224" # 不指定输出路径,则默认在当前执行目录存储结果 t.run(input_shape=input_shape, output_path="/home/xxx") 运行结果将存储在output文件夹中,如果用户指定了output_path,会指定位置保存,如果不指定则在当前代码执行目录生成文件夹保存输出。整体运行的结果都存放在output文件夹中,每转一次模型就会根据模型名称以及相关参数生成结果文件,如下图所示。 图3 output文件 在每次运行的结果文件中,分为三部分:convert、benchmark、profiling,相关的文件及存储内容如下。 表4 输出文件介绍(以模型名称为resnet50-v2-7.onnx为例) 类别 文件名称 是否一定生成 文件存储内容 convert resnet50-v2-7.mindir 是 转换后的mindir模型。 resnet50-v2-7.om 否 转换过程中的om文件,不是必定生成。 onnx_to_mindspore.sh 是 模型转换命令,可以本地直接运行。 resnet50-v2-7_convert.log 是 模型转换过程的日志。 config.ini 否 配置文件,在指定fp32精度或者AOE打开时会生成。 onnx_to_mindspore_aoe.sh 否 在打开AOE功能时会生成。 benchmark run_benchmark.sh 是 运行benchmark的脚本,可本地直接运行。 run_benchmark_accuracy.sh 是 benchmark运行精度的脚本,可本地直接运行。 performance.txt 是 benchmark性能测试结果。 accuracy.txt 是 精度测试结果。 *.bin 是 自动构造的输入随机bin文件,可能存在多个。 resnet50-v2-7_output.txt 是 上述bin文件作为输入时onnx模型运行的结果。 profiling run_profiling.sh 是 运行profiling的脚本,可本地直接运行。 profiling.config 是 运行profiling的配置文件。 profiling.json 是 运行profiling的配置文件。 PROF_xxx开头的文件夹 是 运行profiling的结果文件夹。 run_aggregate.sh 是 运行数据聚合的脚本,可直接本地运行。 run_profiling.log 是 存储运行profiling的日志信息。
  • Step7 创建训练作业 创建训练作业,填下如下参数。 创建方式:选择自定义算法,启动方式选择自定义,然后选择上传到SWR的 自定义镜像 。 代码目录:选择上传到OBS的代码文件夹,例如/sdxl-train/code。若用户需要修改代码文件,可修改OBS桶中代码文件,创建训练作业时,会将OBS的code目录复制到训练容器的/home/ma-user/sdxl-train/user-job-dir/目录下,覆盖容器中原有的code目录。 启动命令:直接运行启动脚本文件diffusers_finetune_train.sh。 sh /home/ma-user/sdxl-train/user-job-dir/code/diffusers_finetune_train.sh 本地代码目录:保持默认即可。 工作目录:选择代码文件目录,例如/home/ma-user/sdxl-train/user-job-dir/code/。 输出:单击“增加训练输出”,将模型保存到OBS中。参数名称为output,数据存储位置选择OBS桶中制定文件夹,例如sdxl-train/checkpoint,获取方式选择环境变量,/home/ma-user/modelarts/outputs/output_0下的模型文件会保存到OBS中。 图4 选择镜像 资源池:选择专属资源池,规格选择Ascend: 8*ascend-snt9b。如果需要多机训练,增加计算节点个数即可,启动脚本文件diffusers_finetune_train.sh支持多机训练。 图5 选择资源池规格 作业日志路径:选择输出日志到OBS的指定目录。 图6 选择作业日志路径 填写参数完成后,提交创建训练任务,训练完成后,作业状态会显示为已完成。 图7 训练完成
  • Step4 下载模型依赖包 请在如下链接中下载好模型依赖包。 下载stable-diffusion-xl-base-1.0,官网下载地址:https://huggingface.co/stabilityai/stable-diffusion-xl-base-1.0/tree/main 下载vae-fp16-fix,官网下载地址:https://huggingface.co/madebyollin/sdxl-vae-fp16-fix/tree/main